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.in645
-rw-r--r--libraries/eina/src/examples/Makefile.am108
-rw-r--r--libraries/eina/src/examples/Makefile.in1080
-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.c198
-rw-r--r--libraries/eina/src/examples/eina_hash_02.c147
-rw-r--r--libraries/eina/src/examples/eina_hash_03.c198
-rw-r--r--libraries/eina/src/examples/eina_hash_04.c198
-rw-r--r--libraries/eina/src/examples/eina_hash_05.c201
-rw-r--r--libraries/eina/src/examples/eina_hash_06.c201
-rw-r--r--libraries/eina/src/examples/eina_hash_07.c222
-rw-r--r--libraries/eina/src/examples/eina_hash_08.c128
-rw-r--r--libraries/eina/src/examples/eina_inarray_01.c52
-rw-r--r--libraries/eina/src/examples/eina_inlist_01.c97
-rw-r--r--libraries/eina/src/examples/eina_inlist_02.c65
-rw-r--r--libraries/eina/src/examples/eina_inlist_03.c74
-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_model_01.c235
-rw-r--r--libraries/eina/src/examples/eina_model_02.c61
-rw-r--r--libraries/eina/src/examples/eina_model_03.c236
-rw-r--r--libraries/eina/src/examples/eina_model_04_animal.c76
-rw-r--r--libraries/eina/src/examples/eina_model_04_child.c81
-rw-r--r--libraries/eina/src/examples/eina_model_04_human.c157
-rw-r--r--libraries/eina/src/examples/eina_model_04_main.c110
-rw-r--r--libraries/eina/src/examples/eina_model_04_parrot.c95
-rw-r--r--libraries/eina/src/examples/eina_model_04_whistler.c59
-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/examples/eina_value_01.c53
-rw-r--r--libraries/eina/src/examples/eina_value_02.c100
-rw-r--r--libraries/eina/src/examples/eina_value_03.c178
-rw-r--r--libraries/eina/src/include/Eina.h233
-rw-r--r--libraries/eina/src/include/Makefile.am94
-rw-r--r--libraries/eina/src/include/Makefile.in570
-rw-r--r--libraries/eina/src/include/eina_accessor.h340
-rw-r--r--libraries/eina/src/include/eina_array.h450
-rw-r--r--libraries/eina/src/include/eina_benchmark.h453
-rw-r--r--libraries/eina/src/include/eina_binbuf.h235
-rw-r--r--libraries/eina/src/include/eina_binshare.h193
-rw-r--r--libraries/eina/src/include/eina_clist.h378
-rw-r--r--libraries/eina/src/include/eina_config.h86
-rw-r--r--libraries/eina/src/include/eina_config.h.in86
-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.h483
-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_inarray.h710
-rw-r--r--libraries/eina/src/include/eina_inline_array.x184
-rw-r--r--libraries/eina/src/include/eina_inline_clist.x135
-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.x556
-rw-r--r--libraries/eina/src/include/eina_inline_lock_void.x273
-rw-r--r--libraries/eina/src/include/eina_inline_lock_win32.x550
-rw-r--r--libraries/eina/src/include/eina_inline_lock_wince.x212
-rw-r--r--libraries/eina/src/include/eina_inline_log.x197
-rw-r--r--libraries/eina/src/include/eina_inline_mempool.x148
-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_inline_value.x1790
-rw-r--r--libraries/eina/src/include/eina_inlist.h814
-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.h129
-rw-r--r--libraries/eina/src/include/eina_log.h903
-rw-r--r--libraries/eina/src/include/eina_magic.h330
-rw-r--r--libraries/eina/src/include/eina_main.h165
-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_model.h3105
-rw-r--r--libraries/eina/src/include/eina_module.h350
-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.h390
-rw-r--r--libraries/eina/src/include/eina_str.h325
-rw-r--r--libraries/eina/src/include/eina_strbuf.h623
-rw-r--r--libraries/eina/src/include/eina_stringshare.h345
-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.h300
-rw-r--r--libraries/eina/src/include/eina_unicode.h186
-rw-r--r--libraries/eina/src/include/eina_ustrbuf.h464
-rw-r--r--libraries/eina/src/include/eina_ustringshare.h200
-rw-r--r--libraries/eina/src/include/eina_value.h3533
-rw-r--r--libraries/eina/src/include/eina_xattr.h215
-rw-r--r--libraries/eina/src/lib/Makefile.am178
-rw-r--r--libraries/eina/src/lib/Makefile.in1260
-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.x153
-rw-r--r--libraries/eina/src/lib/eina_binshare.c182
-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.c1359
-rw-r--r--libraries/eina/src/lib/eina_file_win32.c1214
-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.c1377
-rw-r--r--libraries/eina/src/lib/eina_inarray.c777
-rw-r--r--libraries/eina/src/lib/eina_inlist.c914
-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.c1491
-rw-r--r--libraries/eina/src/lib/eina_log.c1993
-rw-r--r--libraries/eina/src/lib/eina_magic.c322
-rw-r--r--libraries/eina/src/lib/eina_main.c440
-rw-r--r--libraries/eina/src/lib/eina_matrixsparse.c1423
-rw-r--r--libraries/eina/src/lib/eina_mempool.c387
-rw-r--r--libraries/eina/src/lib/eina_mmap.c190
-rw-r--r--libraries/eina/src/lib/eina_model.c5548
-rw-r--r--libraries/eina/src/lib/eina_module.c604
-rw-r--r--libraries/eina/src/lib/eina_prefix.c726
-rw-r--r--libraries/eina/src/lib/eina_private.h148
-rw-r--r--libraries/eina/src/lib/eina_quadtree.c935
-rw-r--r--libraries/eina/src/lib/eina_rbtree.c519
-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.c101
-rw-r--r--libraries/eina/src/lib/eina_share_common.c949
-rw-r--r--libraries/eina/src/lib/eina_share_common.h86
-rw-r--r--libraries/eina/src/lib/eina_simple_xml_parser.c1073
-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.c792
-rw-r--r--libraries/eina/src/lib/eina_tiler.c1276
-rw-r--r--libraries/eina/src/lib/eina_unicode.c450
-rw-r--r--libraries/eina/src/lib/eina_ustrbuf.c74
-rw-r--r--libraries/eina/src/lib/eina_ustringshare.c189
-rw-r--r--libraries/eina/src/lib/eina_value.c5309
-rw-r--r--libraries/eina/src/lib/eina_xattr.c483
-rw-r--r--libraries/eina/src/modules/Makefile.am4
-rw-r--r--libraries/eina/src/modules/Makefile.in639
-rw-r--r--libraries/eina/src/modules/mp/Makefile.am45
-rw-r--r--libraries/eina/src/modules/mp/Makefile.in647
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.am28
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.in650
-rw-r--r--libraries/eina/src/modules/mp/buddy/eina_buddy.c292
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.am29
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.in651
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c572
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am29
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in651
-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.am29
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in651
-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.am28
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in650
-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.am29
-rw-r--r--libraries/eina/src/modules/mp/one_big/Makefile.in651
-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.am28
-rw-r--r--libraries/eina/src/modules/mp/pass_through/Makefile.in650
-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.am143
-rw-r--r--libraries/eina/src/tests/Makefile.in1039
-rw-r--r--libraries/eina/src/tests/city.cc307
-rw-r--r--libraries/eina/src/tests/cxx_compile_test.cxx34
-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.c104
-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.c547
-rw-r--r--libraries/eina/src/tests/eina_bench_mempool.c188
-rw-r--r--libraries/eina/src/tests/eina_bench_quad.c320
-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.c185
-rw-r--r--libraries/eina/src/tests/eina_bench_stringshare_e17.c118
-rw-r--r--libraries/eina/src/tests/eina_suite.c182
-rw-r--r--libraries/eina/src/tests/eina_suite.h61
-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.c263
-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.c198
-rw-r--r--libraries/eina/src/tests/eina_test_error.c243
-rw-r--r--libraries/eina/src/tests/eina_test_file.c142
-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_inarray.c401
-rw-r--r--libraries/eina/src/tests/eina_test_inlist.c421
-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.c387
-rw-r--r--libraries/eina/src/tests/eina_test_log.c424
-rw-r--r--libraries/eina/src/tests/eina_test_magic.c206
-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_model.c1288
-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.c75
-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.c593
-rw-r--r--libraries/eina/src/tests/eina_test_ustringshare.c119
-rw-r--r--libraries/eina/src/tests/eina_test_value.c1874
-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
262 files changed, 0 insertions, 150699 deletions
diff --git a/libraries/eina/src/Makefile.am b/libraries/eina/src/Makefile.am
deleted file mode 100644
index 7ae5ce9..0000000
--- a/libraries/eina/src/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
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
deleted file mode 100644
index 9076215..0000000
--- a/libraries/eina/src/Makefile.in
+++ /dev/null
@@ -1,645 +0,0 @@
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/eina/eina_bench.m4 \
40 $(top_srcdir)/m4/eina/eina_check.m4 \
41 $(top_srcdir)/m4/common/efl_attribute.m4 \
42 $(top_srcdir)/m4/common/efl_benchmark.m4 \
43 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
44 $(top_srcdir)/m4/common/efl_coverage.m4 \
45 $(top_srcdir)/m4/common/efl_cpu.m4 \
46 $(top_srcdir)/m4/common/efl_doxygen.m4 \
47 $(top_srcdir)/m4/common/efl_examples.m4 \
48 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
49 $(top_srcdir)/m4/common/efl_path_max.m4 \
50 $(top_srcdir)/m4/common/efl_tests.m4 \
51 $(top_srcdir)/m4/common/efl_threads.m4 \
52 $(top_srcdir)/m4/common/efl_voltron.m4 \
53 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
54 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
55 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
56 $(top_srcdir)/configure.ac
57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
58 $(ACLOCAL_M4)
59mkinstalldirs = $(install_sh) -d
60CONFIG_HEADER = $(top_builddir)/config.h
61CONFIG_CLEAN_FILES =
62CONFIG_CLEAN_VPATH_FILES =
63AM_V_GEN = $(am__v_GEN_$(V))
64am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
65am__v_GEN_0 = @echo " GEN " $@;
66AM_V_at = $(am__v_at_$(V))
67am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
68am__v_at_0 = @
69SOURCES =
70DIST_SOURCES =
71RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
72 html-recursive info-recursive install-data-recursive \
73 install-dvi-recursive install-exec-recursive \
74 install-html-recursive install-info-recursive \
75 install-pdf-recursive install-ps-recursive install-recursive \
76 installcheck-recursive installdirs-recursive pdf-recursive \
77 ps-recursive uninstall-recursive
78RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
79 distclean-recursive maintainer-clean-recursive
80AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
81 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
82 distdir
83ETAGS = etags
84CTAGS = ctags
85DIST_SUBDIRS = $(SUBDIRS)
86DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
87am__relativize = \
88 dir0=`pwd`; \
89 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
90 sed_rest='s,^[^/]*/*,,'; \
91 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
92 sed_butlast='s,/*[^/]*$$,,'; \
93 while test -n "$$dir1"; do \
94 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
95 if test "$$first" != "."; then \
96 if test "$$first" = ".."; then \
97 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
98 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
99 else \
100 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
101 if test "$$first2" = "$$first"; then \
102 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
103 else \
104 dir2="../$$dir2"; \
105 fi; \
106 dir0="$$dir0"/"$$first"; \
107 fi; \
108 fi; \
109 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
110 done; \
111 reldir="$$dir2"
112ACLOCAL = @ACLOCAL@
113ALLOCA = @ALLOCA@
114AMTAR = @AMTAR@
115AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
116AR = @AR@
117AS = @AS@
118AUTOCONF = @AUTOCONF@
119AUTOHEADER = @AUTOHEADER@
120AUTOMAKE = @AUTOMAKE@
121AWK = @AWK@
122CC = @CC@
123CCDEPMODE = @CCDEPMODE@
124CFLAGS = @CFLAGS@
125CHECK_CFLAGS = @CHECK_CFLAGS@
126CHECK_LIBS = @CHECK_LIBS@
127CPP = @CPP@
128CPPFLAGS = @CPPFLAGS@
129CXX = @CXX@
130CXXCPP = @CXXCPP@
131CXXDEPMODE = @CXXDEPMODE@
132CXXFLAGS = @CXXFLAGS@
133CYGPATH_W = @CYGPATH_W@
134DEFS = @DEFS@
135DEPDIR = @DEPDIR@
136DLLTOOL = @DLLTOOL@
137DSYMUTIL = @DSYMUTIL@
138DUMPBIN = @DUMPBIN@
139ECHO_C = @ECHO_C@
140ECHO_N = @ECHO_N@
141ECHO_T = @ECHO_T@
142ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
143ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
144EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
145EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
146EFL_EINA_BUILD = @EFL_EINA_BUILD@
147EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
148EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
149EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
150EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
151EGREP = @EGREP@
152EINA_CFLAGS = @EINA_CFLAGS@
153EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
154EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
155EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
156EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
157EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
158EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
159EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
160EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
161EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
162EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
163EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
164EINA_LIBS = @EINA_LIBS@
165EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
166EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
167EMEMOA_LIBS = @EMEMOA_LIBS@
168ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
169ESCAPE_LIBS = @ESCAPE_LIBS@
170EVIL_CFLAGS = @EVIL_CFLAGS@
171EVIL_LIBS = @EVIL_LIBS@
172EXEEXT = @EXEEXT@
173EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
174EXOTIC_LIBS = @EXOTIC_LIBS@
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@
285SUBDIRS = lib include modules tests examples
286MAINTAINERCLEANFILES = Makefile.in
287all: all-recursive
288
289.SUFFIXES:
290$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
291 @for dep in $?; do \
292 case '$(am__configure_deps)' in \
293 *$$dep*) \
294 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
295 && { if test -f $@; then exit 0; else break; fi; }; \
296 exit 1;; \
297 esac; \
298 done; \
299 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
300 $(am__cd) $(top_srcdir) && \
301 $(AUTOMAKE) --gnu src/Makefile
302.PRECIOUS: Makefile
303Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
304 @case '$?' in \
305 *config.status*) \
306 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
307 *) \
308 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
309 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
310 esac;
311
312$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
313 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
314
315$(top_srcdir)/configure: $(am__configure_deps)
316 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
317$(ACLOCAL_M4): $(am__aclocal_m4_deps)
318 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
319$(am__aclocal_m4_deps):
320
321mostlyclean-libtool:
322 -rm -f *.lo
323
324clean-libtool:
325 -rm -rf .libs _libs
326
327# This directory's subdirectories are mostly independent; you can cd
328# into them and run `make' without going through this Makefile.
329# To change the values of `make' variables: instead of editing Makefiles,
330# (1) if the variable is set in `config.status', edit `config.status'
331# (which will cause the Makefiles to be regenerated when you run `make');
332# (2) otherwise, pass the desired values on the `make' command line.
333$(RECURSIVE_TARGETS):
334 @fail= failcom='exit 1'; \
335 for f in x $$MAKEFLAGS; do \
336 case $$f in \
337 *=* | --[!k]*);; \
338 *k*) failcom='fail=yes';; \
339 esac; \
340 done; \
341 dot_seen=no; \
342 target=`echo $@ | sed s/-recursive//`; \
343 list='$(SUBDIRS)'; for subdir in $$list; do \
344 echo "Making $$target in $$subdir"; \
345 if test "$$subdir" = "."; then \
346 dot_seen=yes; \
347 local_target="$$target-am"; \
348 else \
349 local_target="$$target"; \
350 fi; \
351 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
352 || eval $$failcom; \
353 done; \
354 if test "$$dot_seen" = "no"; then \
355 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
356 fi; test -z "$$fail"
357
358$(RECURSIVE_CLEAN_TARGETS):
359 @fail= failcom='exit 1'; \
360 for f in x $$MAKEFLAGS; do \
361 case $$f in \
362 *=* | --[!k]*);; \
363 *k*) failcom='fail=yes';; \
364 esac; \
365 done; \
366 dot_seen=no; \
367 case "$@" in \
368 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
369 *) list='$(SUBDIRS)' ;; \
370 esac; \
371 rev=''; for subdir in $$list; do \
372 if test "$$subdir" = "."; then :; else \
373 rev="$$subdir $$rev"; \
374 fi; \
375 done; \
376 rev="$$rev ."; \
377 target=`echo $@ | sed s/-recursive//`; \
378 for subdir in $$rev; do \
379 echo "Making $$target in $$subdir"; \
380 if test "$$subdir" = "."; then \
381 local_target="$$target-am"; \
382 else \
383 local_target="$$target"; \
384 fi; \
385 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
386 || eval $$failcom; \
387 done && test -z "$$fail"
388tags-recursive:
389 list='$(SUBDIRS)'; for subdir in $$list; do \
390 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
391 done
392ctags-recursive:
393 list='$(SUBDIRS)'; for subdir in $$list; do \
394 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
395 done
396
397ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
398 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
399 unique=`for i in $$list; do \
400 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
401 done | \
402 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
403 END { if (nonempty) { for (i in files) print i; }; }'`; \
404 mkid -fID $$unique
405tags: TAGS
406
407TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
408 $(TAGS_FILES) $(LISP)
409 set x; \
410 here=`pwd`; \
411 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
412 include_option=--etags-include; \
413 empty_fix=.; \
414 else \
415 include_option=--include; \
416 empty_fix=; \
417 fi; \
418 list='$(SUBDIRS)'; for subdir in $$list; do \
419 if test "$$subdir" = .; then :; else \
420 test ! -f $$subdir/TAGS || \
421 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
422 fi; \
423 done; \
424 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
425 unique=`for i in $$list; do \
426 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
427 done | \
428 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
429 END { if (nonempty) { for (i in files) print i; }; }'`; \
430 shift; \
431 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
432 test -n "$$unique" || unique=$$empty_fix; \
433 if test $$# -gt 0; then \
434 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
435 "$$@" $$unique; \
436 else \
437 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
438 $$unique; \
439 fi; \
440 fi
441ctags: CTAGS
442CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
443 $(TAGS_FILES) $(LISP)
444 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
445 unique=`for i in $$list; do \
446 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
447 done | \
448 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
449 END { if (nonempty) { for (i in files) print i; }; }'`; \
450 test -z "$(CTAGS_ARGS)$$unique" \
451 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
452 $$unique
453
454GTAGS:
455 here=`$(am__cd) $(top_builddir) && pwd` \
456 && $(am__cd) $(top_srcdir) \
457 && gtags -i $(GTAGS_ARGS) "$$here"
458
459distclean-tags:
460 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
461
462distdir: $(DISTFILES)
463 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
464 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
465 list='$(DISTFILES)'; \
466 dist_files=`for file in $$list; do echo $$file; done | \
467 sed -e "s|^$$srcdirstrip/||;t" \
468 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
469 case $$dist_files in \
470 */*) $(MKDIR_P) `echo "$$dist_files" | \
471 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
472 sort -u` ;; \
473 esac; \
474 for file in $$dist_files; do \
475 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
476 if test -d $$d/$$file; then \
477 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
478 if test -d "$(distdir)/$$file"; then \
479 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
480 fi; \
481 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
482 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
483 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
484 fi; \
485 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
486 else \
487 test -f "$(distdir)/$$file" \
488 || cp -p $$d/$$file "$(distdir)/$$file" \
489 || exit 1; \
490 fi; \
491 done
492 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
493 if test "$$subdir" = .; then :; else \
494 test -d "$(distdir)/$$subdir" \
495 || $(MKDIR_P) "$(distdir)/$$subdir" \
496 || exit 1; \
497 fi; \
498 done
499 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
500 if test "$$subdir" = .; then :; else \
501 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
502 $(am__relativize); \
503 new_distdir=$$reldir; \
504 dir1=$$subdir; dir2="$(top_distdir)"; \
505 $(am__relativize); \
506 new_top_distdir=$$reldir; \
507 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
508 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
509 ($(am__cd) $$subdir && \
510 $(MAKE) $(AM_MAKEFLAGS) \
511 top_distdir="$$new_top_distdir" \
512 distdir="$$new_distdir" \
513 am__remove_distdir=: \
514 am__skip_length_check=: \
515 am__skip_mode_fix=: \
516 distdir) \
517 || exit 1; \
518 fi; \
519 done
520check-am: all-am
521check: check-recursive
522all-am: Makefile
523installdirs: installdirs-recursive
524installdirs-am:
525install: install-recursive
526install-exec: install-exec-recursive
527install-data: install-data-recursive
528uninstall: uninstall-recursive
529
530install-am: all-am
531 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
532
533installcheck: installcheck-recursive
534install-strip:
535 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
536 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
537 `test -z '$(STRIP)' || \
538 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
539mostlyclean-generic:
540
541clean-generic:
542
543distclean-generic:
544 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
545 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
546
547maintainer-clean-generic:
548 @echo "This command is intended for maintainers to use"
549 @echo "it deletes files that may require special tools to rebuild."
550 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
551clean: clean-recursive
552
553clean-am: clean-generic clean-libtool mostlyclean-am
554
555distclean: distclean-recursive
556 -rm -f Makefile
557distclean-am: clean-am distclean-generic distclean-tags
558
559dvi: dvi-recursive
560
561dvi-am:
562
563html: html-recursive
564
565html-am:
566
567info: info-recursive
568
569info-am:
570
571install-data-am:
572
573install-dvi: install-dvi-recursive
574
575install-dvi-am:
576
577install-exec-am:
578
579install-html: install-html-recursive
580
581install-html-am:
582
583install-info: install-info-recursive
584
585install-info-am:
586
587install-man:
588
589install-pdf: install-pdf-recursive
590
591install-pdf-am:
592
593install-ps: install-ps-recursive
594
595install-ps-am:
596
597installcheck-am:
598
599maintainer-clean: maintainer-clean-recursive
600 -rm -f Makefile
601maintainer-clean-am: distclean-am maintainer-clean-generic
602
603mostlyclean: mostlyclean-recursive
604
605mostlyclean-am: mostlyclean-generic mostlyclean-libtool
606
607pdf: pdf-recursive
608
609pdf-am:
610
611ps: ps-recursive
612
613ps-am:
614
615uninstall-am:
616
617.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
618 install-am install-strip tags-recursive
619
620.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
621 all all-am check check-am clean clean-generic clean-libtool \
622 ctags ctags-recursive distclean distclean-generic \
623 distclean-libtool distclean-tags distdir dvi dvi-am html \
624 html-am info info-am install install-am install-data \
625 install-data-am install-dvi install-dvi-am install-exec \
626 install-exec-am install-html install-html-am install-info \
627 install-info-am install-man install-pdf install-pdf-am \
628 install-ps install-ps-am install-strip installcheck \
629 installcheck-am installdirs installdirs-am maintainer-clean \
630 maintainer-clean-generic mostlyclean mostlyclean-generic \
631 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
632 uninstall uninstall-am
633
634
635.PHONY: benchmark
636
637@EFL_ENABLE_BENCHMARK_TRUE@benchmark: all
638@EFL_ENABLE_BENCHMARK_TRUE@ cd tests && make eina_bench
639
640@EFL_ENABLE_BENCHMARK_FALSE@benchmark:
641@EFL_ENABLE_BENCHMARK_FALSE@ @echo "reconfigure with --enable-benchmark"
642
643# Tell versions [3.59,3.63) of GNU make to not export all variables.
644# Otherwise a system limit (for SysV at least) may be exceeded.
645.NOEXPORT:
diff --git a/libraries/eina/src/examples/Makefile.am b/libraries/eina/src/examples/Makefile.am
deleted file mode 100644
index c8d80f9..0000000
--- a/libraries/eina/src/examples/Makefile.am
+++ /dev/null
@@ -1,108 +0,0 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3examplesdir = $(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 eina_model_01.c \
42 eina_model_02.c \
43 eina_model_03.c \
44 eina_value_01.c \
45 eina_value_02.c \
46 eina_value_03.c \
47 eina_inarray_01.c
48
49examples_PROGRAMS =
50
51if EFL_INSTALL_EXAMPLES
52filesdir = $(datadir)/$(PACKAGE)/examples
53files_DATA = $(SRCS)
54endif
55
56if EFL_BUILD_EXAMPLES
57examples_PROGRAMS += \
58 eina_accessor_01 \
59 eina_array_01 \
60 eina_array_02 \
61 eina_error_01 \
62 eina_file_01 \
63 eina_hash_01 \
64 eina_hash_02 \
65 eina_hash_03 \
66 eina_hash_04 \
67 eina_hash_05 \
68 eina_hash_06 \
69 eina_hash_07 \
70 eina_hash_08 \
71 eina_iterator_01 \
72 eina_list_01 \
73 eina_list_02 \
74 eina_list_03 \
75 eina_list_04 \
76 eina_log_01 \
77 eina_log_02 \
78 eina_log_03 \
79 eina_inlist_01 \
80 eina_inlist_02 \
81 eina_inlist_03 \
82 eina_str_01 \
83 eina_strbuf_01 \
84 eina_model_01 \
85 eina_model_02 \
86 eina_model_03 \
87 eina_model_04 \
88 eina_value_01 \
89 eina_value_02 \
90 eina_value_03 \
91 eina_inarray_01
92
93eina_model_04_SOURCES = \
94 eina_model_04_animal.c \
95 eina_model_04_child.c \
96 eina_model_04_human.c \
97 eina_model_04_main.c \
98 eina_model_04_parrot.c \
99 eina_model_04_whistler.c
100
101
102if BUILD_TILER_EXAMPLE
103AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@
104examples_PROGRAMS += eina_tiler_01
105eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@
106endif
107
108endif
diff --git a/libraries/eina/src/examples/Makefile.in b/libraries/eina/src/examples/Makefile.in
deleted file mode 100644
index fba8439..0000000
--- a/libraries/eina/src/examples/Makefile.in
+++ /dev/null
@@ -1,1080 +0,0 @@
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@
38examples_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
39@EFL_BUILD_EXAMPLES_TRUE@am__append_1 = \
40@EFL_BUILD_EXAMPLES_TRUE@ eina_accessor_01 \
41@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01 \
42@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02 \
43@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01 \
44@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01 \
45@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01 \
46@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02 \
47@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03 \
48@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04 \
49@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05 \
50@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06 \
51@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07 \
52@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08 \
53@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01 \
54@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01 \
55@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02 \
56@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03 \
57@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04 \
58@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01 \
59@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02 \
60@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03 \
61@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01 \
62@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02 \
63@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03 \
64@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01 \
65@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01 \
66@EFL_BUILD_EXAMPLES_TRUE@ eina_model_01 \
67@EFL_BUILD_EXAMPLES_TRUE@ eina_model_02 \
68@EFL_BUILD_EXAMPLES_TRUE@ eina_model_03 \
69@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04 \
70@EFL_BUILD_EXAMPLES_TRUE@ eina_value_01 \
71@EFL_BUILD_EXAMPLES_TRUE@ eina_value_02 \
72@EFL_BUILD_EXAMPLES_TRUE@ eina_value_03 \
73@EFL_BUILD_EXAMPLES_TRUE@ eina_inarray_01
74
75@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_2 = @ECORE_EVAS_CFLAGS@
76@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_3 = eina_tiler_01
77subdir = src/examples
78DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
79ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
80am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \
81 $(top_srcdir)/m4/eina/eina_check.m4 \
82 $(top_srcdir)/m4/common/efl_attribute.m4 \
83 $(top_srcdir)/m4/common/efl_benchmark.m4 \
84 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
85 $(top_srcdir)/m4/common/efl_coverage.m4 \
86 $(top_srcdir)/m4/common/efl_cpu.m4 \
87 $(top_srcdir)/m4/common/efl_doxygen.m4 \
88 $(top_srcdir)/m4/common/efl_examples.m4 \
89 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
90 $(top_srcdir)/m4/common/efl_path_max.m4 \
91 $(top_srcdir)/m4/common/efl_tests.m4 \
92 $(top_srcdir)/m4/common/efl_threads.m4 \
93 $(top_srcdir)/m4/common/efl_voltron.m4 \
94 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
95 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
96 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
97 $(top_srcdir)/configure.ac
98am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
99 $(ACLOCAL_M4)
100mkinstalldirs = $(install_sh) -d
101CONFIG_HEADER = $(top_builddir)/config.h
102CONFIG_CLEAN_FILES =
103CONFIG_CLEAN_VPATH_FILES =
104@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_1 = eina_accessor_01$(EXEEXT) \
105@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01$(EXEEXT) \
106@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02$(EXEEXT) \
107@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01$(EXEEXT) \
108@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01$(EXEEXT) \
109@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01$(EXEEXT) \
110@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02$(EXEEXT) \
111@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03$(EXEEXT) \
112@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04$(EXEEXT) \
113@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05$(EXEEXT) \
114@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06$(EXEEXT) \
115@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07$(EXEEXT) \
116@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08$(EXEEXT) \
117@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01$(EXEEXT) \
118@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01$(EXEEXT) \
119@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02$(EXEEXT) \
120@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03$(EXEEXT) \
121@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04$(EXEEXT) \
122@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01$(EXEEXT) \
123@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02$(EXEEXT) \
124@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03$(EXEEXT) \
125@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01$(EXEEXT) \
126@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02$(EXEEXT) \
127@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03$(EXEEXT) \
128@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01$(EXEEXT) \
129@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01$(EXEEXT) \
130@EFL_BUILD_EXAMPLES_TRUE@ eina_model_01$(EXEEXT) \
131@EFL_BUILD_EXAMPLES_TRUE@ eina_model_02$(EXEEXT) \
132@EFL_BUILD_EXAMPLES_TRUE@ eina_model_03$(EXEEXT) \
133@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04$(EXEEXT) \
134@EFL_BUILD_EXAMPLES_TRUE@ eina_value_01$(EXEEXT) \
135@EFL_BUILD_EXAMPLES_TRUE@ eina_value_02$(EXEEXT) \
136@EFL_BUILD_EXAMPLES_TRUE@ eina_value_03$(EXEEXT) \
137@EFL_BUILD_EXAMPLES_TRUE@ eina_inarray_01$(EXEEXT)
138@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_2 = eina_tiler_01$(EXEEXT)
139am__installdirs = "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)"
140PROGRAMS = $(examples_PROGRAMS)
141eina_accessor_01_SOURCES = eina_accessor_01.c
142eina_accessor_01_OBJECTS = eina_accessor_01.$(OBJEXT)
143eina_accessor_01_LDADD = $(LDADD)
144eina_accessor_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
145AM_V_lt = $(am__v_lt_$(V))
146am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
147am__v_lt_0 = --silent
148eina_array_01_SOURCES = eina_array_01.c
149eina_array_01_OBJECTS = eina_array_01.$(OBJEXT)
150eina_array_01_LDADD = $(LDADD)
151eina_array_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
152eina_array_02_SOURCES = eina_array_02.c
153eina_array_02_OBJECTS = eina_array_02.$(OBJEXT)
154eina_array_02_LDADD = $(LDADD)
155eina_array_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
156eina_error_01_SOURCES = eina_error_01.c
157eina_error_01_OBJECTS = eina_error_01.$(OBJEXT)
158eina_error_01_LDADD = $(LDADD)
159eina_error_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
160eina_file_01_SOURCES = eina_file_01.c
161eina_file_01_OBJECTS = eina_file_01.$(OBJEXT)
162eina_file_01_LDADD = $(LDADD)
163eina_file_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
164eina_hash_01_SOURCES = eina_hash_01.c
165eina_hash_01_OBJECTS = eina_hash_01.$(OBJEXT)
166eina_hash_01_LDADD = $(LDADD)
167eina_hash_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
168eina_hash_02_SOURCES = eina_hash_02.c
169eina_hash_02_OBJECTS = eina_hash_02.$(OBJEXT)
170eina_hash_02_LDADD = $(LDADD)
171eina_hash_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
172eina_hash_03_SOURCES = eina_hash_03.c
173eina_hash_03_OBJECTS = eina_hash_03.$(OBJEXT)
174eina_hash_03_LDADD = $(LDADD)
175eina_hash_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
176eina_hash_04_SOURCES = eina_hash_04.c
177eina_hash_04_OBJECTS = eina_hash_04.$(OBJEXT)
178eina_hash_04_LDADD = $(LDADD)
179eina_hash_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
180eina_hash_05_SOURCES = eina_hash_05.c
181eina_hash_05_OBJECTS = eina_hash_05.$(OBJEXT)
182eina_hash_05_LDADD = $(LDADD)
183eina_hash_05_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
184eina_hash_06_SOURCES = eina_hash_06.c
185eina_hash_06_OBJECTS = eina_hash_06.$(OBJEXT)
186eina_hash_06_LDADD = $(LDADD)
187eina_hash_06_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
188eina_hash_07_SOURCES = eina_hash_07.c
189eina_hash_07_OBJECTS = eina_hash_07.$(OBJEXT)
190eina_hash_07_LDADD = $(LDADD)
191eina_hash_07_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
192eina_hash_08_SOURCES = eina_hash_08.c
193eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT)
194eina_hash_08_LDADD = $(LDADD)
195eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
196eina_inarray_01_SOURCES = eina_inarray_01.c
197eina_inarray_01_OBJECTS = eina_inarray_01.$(OBJEXT)
198eina_inarray_01_LDADD = $(LDADD)
199eina_inarray_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
200eina_inlist_01_SOURCES = eina_inlist_01.c
201eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT)
202eina_inlist_01_LDADD = $(LDADD)
203eina_inlist_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
204eina_inlist_02_SOURCES = eina_inlist_02.c
205eina_inlist_02_OBJECTS = eina_inlist_02.$(OBJEXT)
206eina_inlist_02_LDADD = $(LDADD)
207eina_inlist_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
208eina_inlist_03_SOURCES = eina_inlist_03.c
209eina_inlist_03_OBJECTS = eina_inlist_03.$(OBJEXT)
210eina_inlist_03_LDADD = $(LDADD)
211eina_inlist_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
212eina_iterator_01_SOURCES = eina_iterator_01.c
213eina_iterator_01_OBJECTS = eina_iterator_01.$(OBJEXT)
214eina_iterator_01_LDADD = $(LDADD)
215eina_iterator_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
216eina_list_01_SOURCES = eina_list_01.c
217eina_list_01_OBJECTS = eina_list_01.$(OBJEXT)
218eina_list_01_LDADD = $(LDADD)
219eina_list_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
220eina_list_02_SOURCES = eina_list_02.c
221eina_list_02_OBJECTS = eina_list_02.$(OBJEXT)
222eina_list_02_LDADD = $(LDADD)
223eina_list_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
224eina_list_03_SOURCES = eina_list_03.c
225eina_list_03_OBJECTS = eina_list_03.$(OBJEXT)
226eina_list_03_LDADD = $(LDADD)
227eina_list_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
228eina_list_04_SOURCES = eina_list_04.c
229eina_list_04_OBJECTS = eina_list_04.$(OBJEXT)
230eina_list_04_LDADD = $(LDADD)
231eina_list_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
232eina_log_01_SOURCES = eina_log_01.c
233eina_log_01_OBJECTS = eina_log_01.$(OBJEXT)
234eina_log_01_LDADD = $(LDADD)
235eina_log_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
236eina_log_02_SOURCES = eina_log_02.c
237eina_log_02_OBJECTS = eina_log_02.$(OBJEXT)
238eina_log_02_LDADD = $(LDADD)
239eina_log_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
240eina_log_03_SOURCES = eina_log_03.c
241eina_log_03_OBJECTS = eina_log_03.$(OBJEXT)
242eina_log_03_LDADD = $(LDADD)
243eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
244eina_model_01_SOURCES = eina_model_01.c
245eina_model_01_OBJECTS = eina_model_01.$(OBJEXT)
246eina_model_01_LDADD = $(LDADD)
247eina_model_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
248eina_model_02_SOURCES = eina_model_02.c
249eina_model_02_OBJECTS = eina_model_02.$(OBJEXT)
250eina_model_02_LDADD = $(LDADD)
251eina_model_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
252eina_model_03_SOURCES = eina_model_03.c
253eina_model_03_OBJECTS = eina_model_03.$(OBJEXT)
254eina_model_03_LDADD = $(LDADD)
255eina_model_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
256am__eina_model_04_SOURCES_DIST = eina_model_04_animal.c \
257 eina_model_04_child.c eina_model_04_human.c \
258 eina_model_04_main.c eina_model_04_parrot.c \
259 eina_model_04_whistler.c
260@EFL_BUILD_EXAMPLES_TRUE@am_eina_model_04_OBJECTS = \
261@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_animal.$(OBJEXT) \
262@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_child.$(OBJEXT) \
263@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_human.$(OBJEXT) \
264@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_main.$(OBJEXT) \
265@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_parrot.$(OBJEXT) \
266@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_whistler.$(OBJEXT)
267eina_model_04_OBJECTS = $(am_eina_model_04_OBJECTS)
268eina_model_04_LDADD = $(LDADD)
269eina_model_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
270eina_str_01_SOURCES = eina_str_01.c
271eina_str_01_OBJECTS = eina_str_01.$(OBJEXT)
272eina_str_01_LDADD = $(LDADD)
273eina_str_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
274eina_strbuf_01_SOURCES = eina_strbuf_01.c
275eina_strbuf_01_OBJECTS = eina_strbuf_01.$(OBJEXT)
276eina_strbuf_01_LDADD = $(LDADD)
277eina_strbuf_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
278eina_tiler_01_SOURCES = eina_tiler_01.c
279eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT)
280@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
281eina_value_01_SOURCES = eina_value_01.c
282eina_value_01_OBJECTS = eina_value_01.$(OBJEXT)
283eina_value_01_LDADD = $(LDADD)
284eina_value_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
285eina_value_02_SOURCES = eina_value_02.c
286eina_value_02_OBJECTS = eina_value_02.$(OBJEXT)
287eina_value_02_LDADD = $(LDADD)
288eina_value_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
289eina_value_03_SOURCES = eina_value_03.c
290eina_value_03_OBJECTS = eina_value_03.$(OBJEXT)
291eina_value_03_LDADD = $(LDADD)
292eina_value_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
293DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
294depcomp = $(SHELL) $(top_srcdir)/depcomp
295am__depfiles_maybe = depfiles
296am__mv = mv -f
297COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
298 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
299LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
300 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
301 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
302 $(AM_CFLAGS) $(CFLAGS)
303AM_V_CC = $(am__v_CC_$(V))
304am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
305am__v_CC_0 = @echo " CC " $@;
306AM_V_at = $(am__v_at_$(V))
307am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
308am__v_at_0 = @
309CCLD = $(CC)
310LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
311 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
312 $(AM_LDFLAGS) $(LDFLAGS) -o $@
313AM_V_CCLD = $(am__v_CCLD_$(V))
314am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
315am__v_CCLD_0 = @echo " CCLD " $@;
316AM_V_GEN = $(am__v_GEN_$(V))
317am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
318am__v_GEN_0 = @echo " GEN " $@;
319SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \
320 eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \
321 eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \
322 eina_hash_07.c eina_hash_08.c eina_inarray_01.c \
323 eina_inlist_01.c eina_inlist_02.c eina_inlist_03.c \
324 eina_iterator_01.c eina_list_01.c eina_list_02.c \
325 eina_list_03.c eina_list_04.c eina_log_01.c eina_log_02.c \
326 eina_log_03.c eina_model_01.c eina_model_02.c eina_model_03.c \
327 $(eina_model_04_SOURCES) eina_str_01.c eina_strbuf_01.c \
328 eina_tiler_01.c eina_value_01.c eina_value_02.c \
329 eina_value_03.c
330DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \
331 eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \
332 eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \
333 eina_hash_07.c eina_hash_08.c eina_inarray_01.c \
334 eina_inlist_01.c eina_inlist_02.c eina_inlist_03.c \
335 eina_iterator_01.c eina_list_01.c eina_list_02.c \
336 eina_list_03.c eina_list_04.c eina_log_01.c eina_log_02.c \
337 eina_log_03.c eina_model_01.c eina_model_02.c eina_model_03.c \
338 $(am__eina_model_04_SOURCES_DIST) eina_str_01.c \
339 eina_strbuf_01.c eina_tiler_01.c eina_value_01.c \
340 eina_value_02.c eina_value_03.c
341am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
342am__vpath_adj = case $$p in \
343 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
344 *) f=$$p;; \
345 esac;
346am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
347am__install_max = 40
348am__nobase_strip_setup = \
349 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
350am__nobase_strip = \
351 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
352am__nobase_list = $(am__nobase_strip_setup); \
353 for p in $$list; do echo "$$p $$p"; done | \
354 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
355 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
356 if (++n[$$2] == $(am__install_max)) \
357 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
358 END { for (dir in files) print dir, files[dir] }'
359am__base_list = \
360 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
361 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
362DATA = $(files_DATA)
363ETAGS = etags
364CTAGS = ctags
365DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
366ACLOCAL = @ACLOCAL@
367ALLOCA = @ALLOCA@
368AMTAR = @AMTAR@
369AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
370AR = @AR@
371AS = @AS@
372AUTOCONF = @AUTOCONF@
373AUTOHEADER = @AUTOHEADER@
374AUTOMAKE = @AUTOMAKE@
375AWK = @AWK@
376CC = @CC@
377CCDEPMODE = @CCDEPMODE@
378CFLAGS = @CFLAGS@
379CHECK_CFLAGS = @CHECK_CFLAGS@
380CHECK_LIBS = @CHECK_LIBS@
381CPP = @CPP@
382CPPFLAGS = @CPPFLAGS@
383CXX = @CXX@
384CXXCPP = @CXXCPP@
385CXXDEPMODE = @CXXDEPMODE@
386CXXFLAGS = @CXXFLAGS@
387CYGPATH_W = @CYGPATH_W@
388DEFS = @DEFS@
389DEPDIR = @DEPDIR@
390DLLTOOL = @DLLTOOL@
391DSYMUTIL = @DSYMUTIL@
392DUMPBIN = @DUMPBIN@
393ECHO_C = @ECHO_C@
394ECHO_N = @ECHO_N@
395ECHO_T = @ECHO_T@
396ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
397ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
398EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
399EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
400EFL_EINA_BUILD = @EFL_EINA_BUILD@
401EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
402EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
403EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
404EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
405EGREP = @EGREP@
406EINA_CFLAGS = @EINA_CFLAGS@
407EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
408EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
409EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
410EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
411EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
412EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
413EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
414EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
415EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
416EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
417EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
418EINA_LIBS = @EINA_LIBS@
419EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
420EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
421EMEMOA_LIBS = @EMEMOA_LIBS@
422ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
423ESCAPE_LIBS = @ESCAPE_LIBS@
424EVIL_CFLAGS = @EVIL_CFLAGS@
425EVIL_LIBS = @EVIL_LIBS@
426EXEEXT = @EXEEXT@
427EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
428EXOTIC_LIBS = @EXOTIC_LIBS@
429FGREP = @FGREP@
430GLIB_CFLAGS = @GLIB_CFLAGS@
431GLIB_LIBS = @GLIB_LIBS@
432GREP = @GREP@
433INSTALL = @INSTALL@
434INSTALL_DATA = @INSTALL_DATA@
435INSTALL_PROGRAM = @INSTALL_PROGRAM@
436INSTALL_SCRIPT = @INSTALL_SCRIPT@
437INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
438LD = @LD@
439LDFLAGS = @LDFLAGS@
440LIBOBJS = @LIBOBJS@
441LIBS = @LIBS@
442LIBTOOL = @LIBTOOL@
443LIPO = @LIPO@
444LN_S = @LN_S@
445LTLIBOBJS = @LTLIBOBJS@
446MAKEINFO = @MAKEINFO@
447MKDIR_P = @MKDIR_P@
448MODULE_ARCH = @MODULE_ARCH@
449NM = @NM@
450NMEDIT = @NMEDIT@
451OBJDUMP = @OBJDUMP@
452OBJEXT = @OBJEXT@
453OTOOL = @OTOOL@
454OTOOL64 = @OTOOL64@
455PACKAGE = @PACKAGE@
456PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
457PACKAGE_NAME = @PACKAGE_NAME@
458PACKAGE_STRING = @PACKAGE_STRING@
459PACKAGE_TARNAME = @PACKAGE_TARNAME@
460PACKAGE_URL = @PACKAGE_URL@
461PACKAGE_VERSION = @PACKAGE_VERSION@
462PATH_SEPARATOR = @PATH_SEPARATOR@
463PKG_CONFIG = @PKG_CONFIG@
464PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
465PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
466RANLIB = @RANLIB@
467SED = @SED@
468SET_MAKE = @SET_MAKE@
469SHELL = @SHELL@
470STRIP = @STRIP@
471VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
472VALGRIND_LIBS = @VALGRIND_LIBS@
473VERSION = @VERSION@
474VMAJ = @VMAJ@
475abs_builddir = @abs_builddir@
476abs_srcdir = @abs_srcdir@
477abs_top_builddir = @abs_top_builddir@
478abs_top_srcdir = @abs_top_srcdir@
479ac_ct_CC = @ac_ct_CC@
480ac_ct_CXX = @ac_ct_CXX@
481ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
482am__include = @am__include@
483am__leading_dot = @am__leading_dot@
484am__quote = @am__quote@
485am__tar = @am__tar@
486am__untar = @am__untar@
487bindir = @bindir@
488build = @build@
489build_alias = @build_alias@
490build_cpu = @build_cpu@
491build_os = @build_os@
492build_vendor = @build_vendor@
493builddir = @builddir@
494datadir = @datadir@
495datarootdir = @datarootdir@
496dlopen_libs = @dlopen_libs@
497docdir = @docdir@
498dvidir = @dvidir@
499efl_doxygen = @efl_doxygen@
500efl_have_doxygen = @efl_have_doxygen@
501exec_prefix = @exec_prefix@
502have_lcov = @have_lcov@
503host = @host@
504host_alias = @host_alias@
505host_cpu = @host_cpu@
506host_os = @host_os@
507host_vendor = @host_vendor@
508htmldir = @htmldir@
509iconv_libs = @iconv_libs@
510includedir = @includedir@
511infodir = @infodir@
512install_sh = @install_sh@
513libdir = @libdir@
514libexecdir = @libexecdir@
515localedir = @localedir@
516localstatedir = @localstatedir@
517lt_ECHO = @lt_ECHO@
518lt_enable_auto_import = @lt_enable_auto_import@
519mandir = @mandir@
520mkdir_p = @mkdir_p@
521oldincludedir = @oldincludedir@
522pdfdir = @pdfdir@
523pkgconfig_requires_private = @pkgconfig_requires_private@
524prefix = @prefix@
525program_transform_name = @program_transform_name@
526psdir = @psdir@
527release_info = @release_info@
528requirement_eina = @requirement_eina@
529rt_libs = @rt_libs@
530sbindir = @sbindir@
531sharedstatedir = @sharedstatedir@
532srcdir = @srcdir@
533sysconfdir = @sysconfdir@
534target_alias = @target_alias@
535top_build_prefix = @top_build_prefix@
536top_builddir = @top_builddir@
537top_srcdir = @top_srcdir@
538version_info = @version_info@
539MAINTAINERCLEANFILES = Makefile.in
540examplesdir = $(datadir)/$(PACKAGE)/examples
541AM_CPPFLAGS = -I. -I$(top_srcdir)/src/include \
542 -I$(top_builddir)/src/include $(am__append_2)
543LDADD = \
544 $(top_builddir)/src/lib/libeina.la
545
546SRCS = \
547 eina_accessor_01.c \
548 eina_array_01.c \
549 eina_array_02.c \
550 eina_error_01.c \
551 eina_file_01.c \
552 eina_hash_01.c \
553 eina_hash_02.c \
554 eina_hash_03.c \
555 eina_hash_04.c \
556 eina_hash_05.c \
557 eina_hash_06.c \
558 eina_hash_07.c \
559 eina_hash_08.c \
560 eina_iterator_01.c \
561 eina_list_01.c \
562 eina_list_02.c \
563 eina_list_03.c \
564 eina_list_04.c \
565 eina_log_01.c \
566 eina_log_02.c \
567 eina_log_03.c \
568 eina_inlist_01.c \
569 eina_inlist_02.c \
570 eina_inlist_03.c \
571 eina_str_01.c \
572 eina_strbuf_01.c \
573 eina_tiler_01.c \
574 eina_model_01.c \
575 eina_model_02.c \
576 eina_model_03.c \
577 eina_value_01.c \
578 eina_value_02.c \
579 eina_value_03.c \
580 eina_inarray_01.c
581
582@EFL_INSTALL_EXAMPLES_TRUE@filesdir = $(datadir)/$(PACKAGE)/examples
583@EFL_INSTALL_EXAMPLES_TRUE@files_DATA = $(SRCS)
584@EFL_BUILD_EXAMPLES_TRUE@eina_model_04_SOURCES = \
585@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_animal.c \
586@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_child.c \
587@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_human.c \
588@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_main.c \
589@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_parrot.c \
590@EFL_BUILD_EXAMPLES_TRUE@ eina_model_04_whistler.c
591
592@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@
593all: all-am
594
595.SUFFIXES:
596.SUFFIXES: .c .lo .o .obj
597$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
598 @for dep in $?; do \
599 case '$(am__configure_deps)' in \
600 *$$dep*) \
601 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
602 && { if test -f $@; then exit 0; else break; fi; }; \
603 exit 1;; \
604 esac; \
605 done; \
606 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
607 $(am__cd) $(top_srcdir) && \
608 $(AUTOMAKE) --gnu src/examples/Makefile
609.PRECIOUS: Makefile
610Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
611 @case '$?' in \
612 *config.status*) \
613 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
614 *) \
615 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
616 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
617 esac;
618
619$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
620 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
621
622$(top_srcdir)/configure: $(am__configure_deps)
623 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
624$(ACLOCAL_M4): $(am__aclocal_m4_deps)
625 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
626$(am__aclocal_m4_deps):
627install-examplesPROGRAMS: $(examples_PROGRAMS)
628 @$(NORMAL_INSTALL)
629 test -z "$(examplesdir)" || $(MKDIR_P) "$(DESTDIR)$(examplesdir)"
630 @list='$(examples_PROGRAMS)'; test -n "$(examplesdir)" || list=; \
631 for p in $$list; do echo "$$p $$p"; done | \
632 sed 's/$(EXEEXT)$$//' | \
633 while read p p1; do if test -f $$p || test -f $$p1; \
634 then echo "$$p"; echo "$$p"; else :; fi; \
635 done | \
636 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
637 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
638 sed 'N;N;N;s,\n, ,g' | \
639 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
640 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
641 if ($$2 == $$4) files[d] = files[d] " " $$1; \
642 else { print "f", $$3 "/" $$4, $$1; } } \
643 END { for (d in files) print "f", d, files[d] }' | \
644 while read type dir files; do \
645 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
646 test -z "$$files" || { \
647 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(examplesdir)$$dir'"; \
648 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(examplesdir)$$dir" || exit $$?; \
649 } \
650 ; done
651
652uninstall-examplesPROGRAMS:
653 @$(NORMAL_UNINSTALL)
654 @list='$(examples_PROGRAMS)'; test -n "$(examplesdir)" || list=; \
655 files=`for p in $$list; do echo "$$p"; done | \
656 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
657 -e 's/$$/$(EXEEXT)/' `; \
658 test -n "$$list" || exit 0; \
659 echo " ( cd '$(DESTDIR)$(examplesdir)' && rm -f" $$files ")"; \
660 cd "$(DESTDIR)$(examplesdir)" && rm -f $$files
661
662clean-examplesPROGRAMS:
663 @list='$(examples_PROGRAMS)'; test -n "$$list" || exit 0; \
664 echo " rm -f" $$list; \
665 rm -f $$list || exit $$?; \
666 test -n "$(EXEEXT)" || exit 0; \
667 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
668 echo " rm -f" $$list; \
669 rm -f $$list
670eina_accessor_01$(EXEEXT): $(eina_accessor_01_OBJECTS) $(eina_accessor_01_DEPENDENCIES)
671 @rm -f eina_accessor_01$(EXEEXT)
672 $(AM_V_CCLD)$(LINK) $(eina_accessor_01_OBJECTS) $(eina_accessor_01_LDADD) $(LIBS)
673eina_array_01$(EXEEXT): $(eina_array_01_OBJECTS) $(eina_array_01_DEPENDENCIES)
674 @rm -f eina_array_01$(EXEEXT)
675 $(AM_V_CCLD)$(LINK) $(eina_array_01_OBJECTS) $(eina_array_01_LDADD) $(LIBS)
676eina_array_02$(EXEEXT): $(eina_array_02_OBJECTS) $(eina_array_02_DEPENDENCIES)
677 @rm -f eina_array_02$(EXEEXT)
678 $(AM_V_CCLD)$(LINK) $(eina_array_02_OBJECTS) $(eina_array_02_LDADD) $(LIBS)
679eina_error_01$(EXEEXT): $(eina_error_01_OBJECTS) $(eina_error_01_DEPENDENCIES)
680 @rm -f eina_error_01$(EXEEXT)
681 $(AM_V_CCLD)$(LINK) $(eina_error_01_OBJECTS) $(eina_error_01_LDADD) $(LIBS)
682eina_file_01$(EXEEXT): $(eina_file_01_OBJECTS) $(eina_file_01_DEPENDENCIES)
683 @rm -f eina_file_01$(EXEEXT)
684 $(AM_V_CCLD)$(LINK) $(eina_file_01_OBJECTS) $(eina_file_01_LDADD) $(LIBS)
685eina_hash_01$(EXEEXT): $(eina_hash_01_OBJECTS) $(eina_hash_01_DEPENDENCIES)
686 @rm -f eina_hash_01$(EXEEXT)
687 $(AM_V_CCLD)$(LINK) $(eina_hash_01_OBJECTS) $(eina_hash_01_LDADD) $(LIBS)
688eina_hash_02$(EXEEXT): $(eina_hash_02_OBJECTS) $(eina_hash_02_DEPENDENCIES)
689 @rm -f eina_hash_02$(EXEEXT)
690 $(AM_V_CCLD)$(LINK) $(eina_hash_02_OBJECTS) $(eina_hash_02_LDADD) $(LIBS)
691eina_hash_03$(EXEEXT): $(eina_hash_03_OBJECTS) $(eina_hash_03_DEPENDENCIES)
692 @rm -f eina_hash_03$(EXEEXT)
693 $(AM_V_CCLD)$(LINK) $(eina_hash_03_OBJECTS) $(eina_hash_03_LDADD) $(LIBS)
694eina_hash_04$(EXEEXT): $(eina_hash_04_OBJECTS) $(eina_hash_04_DEPENDENCIES)
695 @rm -f eina_hash_04$(EXEEXT)
696 $(AM_V_CCLD)$(LINK) $(eina_hash_04_OBJECTS) $(eina_hash_04_LDADD) $(LIBS)
697eina_hash_05$(EXEEXT): $(eina_hash_05_OBJECTS) $(eina_hash_05_DEPENDENCIES)
698 @rm -f eina_hash_05$(EXEEXT)
699 $(AM_V_CCLD)$(LINK) $(eina_hash_05_OBJECTS) $(eina_hash_05_LDADD) $(LIBS)
700eina_hash_06$(EXEEXT): $(eina_hash_06_OBJECTS) $(eina_hash_06_DEPENDENCIES)
701 @rm -f eina_hash_06$(EXEEXT)
702 $(AM_V_CCLD)$(LINK) $(eina_hash_06_OBJECTS) $(eina_hash_06_LDADD) $(LIBS)
703eina_hash_07$(EXEEXT): $(eina_hash_07_OBJECTS) $(eina_hash_07_DEPENDENCIES)
704 @rm -f eina_hash_07$(EXEEXT)
705 $(AM_V_CCLD)$(LINK) $(eina_hash_07_OBJECTS) $(eina_hash_07_LDADD) $(LIBS)
706eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES)
707 @rm -f eina_hash_08$(EXEEXT)
708 $(AM_V_CCLD)$(LINK) $(eina_hash_08_OBJECTS) $(eina_hash_08_LDADD) $(LIBS)
709eina_inarray_01$(EXEEXT): $(eina_inarray_01_OBJECTS) $(eina_inarray_01_DEPENDENCIES)
710 @rm -f eina_inarray_01$(EXEEXT)
711 $(AM_V_CCLD)$(LINK) $(eina_inarray_01_OBJECTS) $(eina_inarray_01_LDADD) $(LIBS)
712eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES)
713 @rm -f eina_inlist_01$(EXEEXT)
714 $(AM_V_CCLD)$(LINK) $(eina_inlist_01_OBJECTS) $(eina_inlist_01_LDADD) $(LIBS)
715eina_inlist_02$(EXEEXT): $(eina_inlist_02_OBJECTS) $(eina_inlist_02_DEPENDENCIES)
716 @rm -f eina_inlist_02$(EXEEXT)
717 $(AM_V_CCLD)$(LINK) $(eina_inlist_02_OBJECTS) $(eina_inlist_02_LDADD) $(LIBS)
718eina_inlist_03$(EXEEXT): $(eina_inlist_03_OBJECTS) $(eina_inlist_03_DEPENDENCIES)
719 @rm -f eina_inlist_03$(EXEEXT)
720 $(AM_V_CCLD)$(LINK) $(eina_inlist_03_OBJECTS) $(eina_inlist_03_LDADD) $(LIBS)
721eina_iterator_01$(EXEEXT): $(eina_iterator_01_OBJECTS) $(eina_iterator_01_DEPENDENCIES)
722 @rm -f eina_iterator_01$(EXEEXT)
723 $(AM_V_CCLD)$(LINK) $(eina_iterator_01_OBJECTS) $(eina_iterator_01_LDADD) $(LIBS)
724eina_list_01$(EXEEXT): $(eina_list_01_OBJECTS) $(eina_list_01_DEPENDENCIES)
725 @rm -f eina_list_01$(EXEEXT)
726 $(AM_V_CCLD)$(LINK) $(eina_list_01_OBJECTS) $(eina_list_01_LDADD) $(LIBS)
727eina_list_02$(EXEEXT): $(eina_list_02_OBJECTS) $(eina_list_02_DEPENDENCIES)
728 @rm -f eina_list_02$(EXEEXT)
729 $(AM_V_CCLD)$(LINK) $(eina_list_02_OBJECTS) $(eina_list_02_LDADD) $(LIBS)
730eina_list_03$(EXEEXT): $(eina_list_03_OBJECTS) $(eina_list_03_DEPENDENCIES)
731 @rm -f eina_list_03$(EXEEXT)
732 $(AM_V_CCLD)$(LINK) $(eina_list_03_OBJECTS) $(eina_list_03_LDADD) $(LIBS)
733eina_list_04$(EXEEXT): $(eina_list_04_OBJECTS) $(eina_list_04_DEPENDENCIES)
734 @rm -f eina_list_04$(EXEEXT)
735 $(AM_V_CCLD)$(LINK) $(eina_list_04_OBJECTS) $(eina_list_04_LDADD) $(LIBS)
736eina_log_01$(EXEEXT): $(eina_log_01_OBJECTS) $(eina_log_01_DEPENDENCIES)
737 @rm -f eina_log_01$(EXEEXT)
738 $(AM_V_CCLD)$(LINK) $(eina_log_01_OBJECTS) $(eina_log_01_LDADD) $(LIBS)
739eina_log_02$(EXEEXT): $(eina_log_02_OBJECTS) $(eina_log_02_DEPENDENCIES)
740 @rm -f eina_log_02$(EXEEXT)
741 $(AM_V_CCLD)$(LINK) $(eina_log_02_OBJECTS) $(eina_log_02_LDADD) $(LIBS)
742eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES)
743 @rm -f eina_log_03$(EXEEXT)
744 $(AM_V_CCLD)$(LINK) $(eina_log_03_OBJECTS) $(eina_log_03_LDADD) $(LIBS)
745eina_model_01$(EXEEXT): $(eina_model_01_OBJECTS) $(eina_model_01_DEPENDENCIES)
746 @rm -f eina_model_01$(EXEEXT)
747 $(AM_V_CCLD)$(LINK) $(eina_model_01_OBJECTS) $(eina_model_01_LDADD) $(LIBS)
748eina_model_02$(EXEEXT): $(eina_model_02_OBJECTS) $(eina_model_02_DEPENDENCIES)
749 @rm -f eina_model_02$(EXEEXT)
750 $(AM_V_CCLD)$(LINK) $(eina_model_02_OBJECTS) $(eina_model_02_LDADD) $(LIBS)
751eina_model_03$(EXEEXT): $(eina_model_03_OBJECTS) $(eina_model_03_DEPENDENCIES)
752 @rm -f eina_model_03$(EXEEXT)
753 $(AM_V_CCLD)$(LINK) $(eina_model_03_OBJECTS) $(eina_model_03_LDADD) $(LIBS)
754eina_model_04$(EXEEXT): $(eina_model_04_OBJECTS) $(eina_model_04_DEPENDENCIES)
755 @rm -f eina_model_04$(EXEEXT)
756 $(AM_V_CCLD)$(LINK) $(eina_model_04_OBJECTS) $(eina_model_04_LDADD) $(LIBS)
757eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES)
758 @rm -f eina_str_01$(EXEEXT)
759 $(AM_V_CCLD)$(LINK) $(eina_str_01_OBJECTS) $(eina_str_01_LDADD) $(LIBS)
760eina_strbuf_01$(EXEEXT): $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_DEPENDENCIES)
761 @rm -f eina_strbuf_01$(EXEEXT)
762 $(AM_V_CCLD)$(LINK) $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_LDADD) $(LIBS)
763eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES)
764 @rm -f eina_tiler_01$(EXEEXT)
765 $(AM_V_CCLD)$(LINK) $(eina_tiler_01_OBJECTS) $(eina_tiler_01_LDADD) $(LIBS)
766eina_value_01$(EXEEXT): $(eina_value_01_OBJECTS) $(eina_value_01_DEPENDENCIES)
767 @rm -f eina_value_01$(EXEEXT)
768 $(AM_V_CCLD)$(LINK) $(eina_value_01_OBJECTS) $(eina_value_01_LDADD) $(LIBS)
769eina_value_02$(EXEEXT): $(eina_value_02_OBJECTS) $(eina_value_02_DEPENDENCIES)
770 @rm -f eina_value_02$(EXEEXT)
771 $(AM_V_CCLD)$(LINK) $(eina_value_02_OBJECTS) $(eina_value_02_LDADD) $(LIBS)
772eina_value_03$(EXEEXT): $(eina_value_03_OBJECTS) $(eina_value_03_DEPENDENCIES)
773 @rm -f eina_value_03$(EXEEXT)
774 $(AM_V_CCLD)$(LINK) $(eina_value_03_OBJECTS) $(eina_value_03_LDADD) $(LIBS)
775
776mostlyclean-compile:
777 -rm -f *.$(OBJEXT)
778
779distclean-compile:
780 -rm -f *.tab.c
781
782@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_accessor_01.Po@am__quote@
783@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_01.Po@am__quote@
784@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_02.Po@am__quote@
785@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_error_01.Po@am__quote@
786@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_file_01.Po@am__quote@
787@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_01.Po@am__quote@
788@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_02.Po@am__quote@
789@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_03.Po@am__quote@
790@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_04.Po@am__quote@
791@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_05.Po@am__quote@
792@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_06.Po@am__quote@
793@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_07.Po@am__quote@
794@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_08.Po@am__quote@
795@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inarray_01.Po@am__quote@
796@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_01.Po@am__quote@
797@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_02.Po@am__quote@
798@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_03.Po@am__quote@
799@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_iterator_01.Po@am__quote@
800@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_01.Po@am__quote@
801@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_02.Po@am__quote@
802@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_03.Po@am__quote@
803@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_04.Po@am__quote@
804@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_01.Po@am__quote@
805@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_02.Po@am__quote@
806@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_03.Po@am__quote@
807@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_01.Po@am__quote@
808@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_02.Po@am__quote@
809@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_03.Po@am__quote@
810@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_animal.Po@am__quote@
811@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_child.Po@am__quote@
812@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_human.Po@am__quote@
813@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_main.Po@am__quote@
814@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_parrot.Po@am__quote@
815@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_model_04_whistler.Po@am__quote@
816@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_str_01.Po@am__quote@
817@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_strbuf_01.Po@am__quote@
818@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_tiler_01.Po@am__quote@
819@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_01.Po@am__quote@
820@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_02.Po@am__quote@
821@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_value_03.Po@am__quote@
822
823.c.o:
824@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
825@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
826@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
827@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
828@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
829@am__fastdepCC_FALSE@ $(COMPILE) -c $<
830
831.c.obj:
832@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
833@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
834@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
835@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
836@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
837@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
838
839.c.lo:
840@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
841@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
842@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
843@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
844@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
845@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
846
847mostlyclean-libtool:
848 -rm -f *.lo
849
850clean-libtool:
851 -rm -rf .libs _libs
852install-filesDATA: $(files_DATA)
853 @$(NORMAL_INSTALL)
854 test -z "$(filesdir)" || $(MKDIR_P) "$(DESTDIR)$(filesdir)"
855 @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \
856 for p in $$list; do \
857 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
858 echo "$$d$$p"; \
859 done | $(am__base_list) | \
860 while read files; do \
861 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filesdir)'"; \
862 $(INSTALL_DATA) $$files "$(DESTDIR)$(filesdir)" || exit $$?; \
863 done
864
865uninstall-filesDATA:
866 @$(NORMAL_UNINSTALL)
867 @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \
868 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
869 test -n "$$files" || exit 0; \
870 echo " ( cd '$(DESTDIR)$(filesdir)' && rm -f" $$files ")"; \
871 cd "$(DESTDIR)$(filesdir)" && rm -f $$files
872
873ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
874 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
875 unique=`for i in $$list; do \
876 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
877 done | \
878 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
879 END { if (nonempty) { for (i in files) print i; }; }'`; \
880 mkid -fID $$unique
881tags: TAGS
882
883TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
884 $(TAGS_FILES) $(LISP)
885 set x; \
886 here=`pwd`; \
887 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
888 unique=`for i in $$list; do \
889 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
890 done | \
891 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
892 END { if (nonempty) { for (i in files) print i; }; }'`; \
893 shift; \
894 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
895 test -n "$$unique" || unique=$$empty_fix; \
896 if test $$# -gt 0; then \
897 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
898 "$$@" $$unique; \
899 else \
900 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
901 $$unique; \
902 fi; \
903 fi
904ctags: CTAGS
905CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
906 $(TAGS_FILES) $(LISP)
907 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
908 unique=`for i in $$list; do \
909 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
910 done | \
911 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
912 END { if (nonempty) { for (i in files) print i; }; }'`; \
913 test -z "$(CTAGS_ARGS)$$unique" \
914 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
915 $$unique
916
917GTAGS:
918 here=`$(am__cd) $(top_builddir) && pwd` \
919 && $(am__cd) $(top_srcdir) \
920 && gtags -i $(GTAGS_ARGS) "$$here"
921
922distclean-tags:
923 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
924
925distdir: $(DISTFILES)
926 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
927 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
928 list='$(DISTFILES)'; \
929 dist_files=`for file in $$list; do echo $$file; done | \
930 sed -e "s|^$$srcdirstrip/||;t" \
931 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
932 case $$dist_files in \
933 */*) $(MKDIR_P) `echo "$$dist_files" | \
934 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
935 sort -u` ;; \
936 esac; \
937 for file in $$dist_files; do \
938 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
939 if test -d $$d/$$file; then \
940 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
941 if test -d "$(distdir)/$$file"; then \
942 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
943 fi; \
944 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
945 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
946 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
947 fi; \
948 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
949 else \
950 test -f "$(distdir)/$$file" \
951 || cp -p $$d/$$file "$(distdir)/$$file" \
952 || exit 1; \
953 fi; \
954 done
955check-am: all-am
956check: check-am
957all-am: Makefile $(PROGRAMS) $(DATA)
958installdirs:
959 for dir in "$(DESTDIR)$(examplesdir)" "$(DESTDIR)$(filesdir)"; do \
960 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
961 done
962install: install-am
963install-exec: install-exec-am
964install-data: install-data-am
965uninstall: uninstall-am
966
967install-am: all-am
968 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
969
970installcheck: installcheck-am
971install-strip:
972 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
973 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
974 `test -z '$(STRIP)' || \
975 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
976mostlyclean-generic:
977
978clean-generic:
979
980distclean-generic:
981 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
982 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
983
984maintainer-clean-generic:
985 @echo "This command is intended for maintainers to use"
986 @echo "it deletes files that may require special tools to rebuild."
987 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
988clean: clean-am
989
990clean-am: clean-examplesPROGRAMS clean-generic clean-libtool \
991 mostlyclean-am
992
993distclean: distclean-am
994 -rm -rf ./$(DEPDIR)
995 -rm -f Makefile
996distclean-am: clean-am distclean-compile distclean-generic \
997 distclean-tags
998
999dvi: dvi-am
1000
1001dvi-am:
1002
1003html: html-am
1004
1005html-am:
1006
1007info: info-am
1008
1009info-am:
1010
1011install-data-am: install-examplesPROGRAMS install-filesDATA
1012
1013install-dvi: install-dvi-am
1014
1015install-dvi-am:
1016
1017install-exec-am:
1018
1019install-html: install-html-am
1020
1021install-html-am:
1022
1023install-info: install-info-am
1024
1025install-info-am:
1026
1027install-man:
1028
1029install-pdf: install-pdf-am
1030
1031install-pdf-am:
1032
1033install-ps: install-ps-am
1034
1035install-ps-am:
1036
1037installcheck-am:
1038
1039maintainer-clean: maintainer-clean-am
1040 -rm -rf ./$(DEPDIR)
1041 -rm -f Makefile
1042maintainer-clean-am: distclean-am maintainer-clean-generic
1043
1044mostlyclean: mostlyclean-am
1045
1046mostlyclean-am: mostlyclean-compile mostlyclean-generic \
1047 mostlyclean-libtool
1048
1049pdf: pdf-am
1050
1051pdf-am:
1052
1053ps: ps-am
1054
1055ps-am:
1056
1057uninstall-am: uninstall-examplesPROGRAMS uninstall-filesDATA
1058
1059.MAKE: install-am install-strip
1060
1061.PHONY: CTAGS GTAGS all all-am check check-am clean \
1062 clean-examplesPROGRAMS clean-generic clean-libtool ctags \
1063 distclean distclean-compile distclean-generic \
1064 distclean-libtool distclean-tags distdir dvi dvi-am html \
1065 html-am info info-am install install-am install-data \
1066 install-data-am install-dvi install-dvi-am \
1067 install-examplesPROGRAMS install-exec install-exec-am \
1068 install-filesDATA install-html install-html-am install-info \
1069 install-info-am install-man install-pdf install-pdf-am \
1070 install-ps install-ps-am install-strip installcheck \
1071 installcheck-am installdirs maintainer-clean \
1072 maintainer-clean-generic mostlyclean mostlyclean-compile \
1073 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1074 tags uninstall uninstall-am uninstall-examplesPROGRAMS \
1075 uninstall-filesDATA
1076
1077
1078# Tell versions [3.59,3.63) of GNU make to not export all variables.
1079# Otherwise a system limit (for SysV at least) may be exceeded.
1080.NOEXPORT:
diff --git a/libraries/eina/src/examples/eina_accessor_01.c b/libraries/eina/src/examples/eina_accessor_01.c
deleted file mode 100644
index da413c6..0000000
--- a/libraries/eina/src/examples/eina_accessor_01.c
+++ /dev/null
@@ -1,55 +0,0 @@
1//Compile with:
2//gcc -g eina_accessor_01.c -o eina_accessor_01 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index 1bae809..0000000
--- a/libraries/eina/src/examples/eina_array_01.c
+++ /dev/null
@@ -1,51 +0,0 @@
1//Compile with:
2//gcc -g eina_array_01.c -o eina_array_01 `pkg-config --cflags --libs eina`
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(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(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
deleted file mode 100644
index 6b2903b..0000000
--- a/libraries/eina/src/examples/eina_array_02.c
+++ /dev/null
@@ -1,57 +0,0 @@
1//Compile with:
2//gcc -g eina_array_02.c -o eina_array_02 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index e264aee..0000000
--- a/libraries/eina/src/examples/eina_error_01.c
+++ /dev/null
@@ -1,80 +0,0 @@
1//Compile with:
2//gcc -g eina_error_01.c -o eina_error_01 `pkg-config --cflags --libs eina`
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}
diff --git a/libraries/eina/src/examples/eina_file_01.c b/libraries/eina/src/examples/eina_file_01.c
deleted file mode 100644
index 2c945b3..0000000
--- a/libraries/eina/src/examples/eina_file_01.c
+++ /dev/null
@@ -1,45 +0,0 @@
1//Compile with:
2//gcc -g eina_file_01.c -o eina_file_01 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index 16418fe..0000000
--- a/libraries/eina/src/examples/eina_hash_01.c
+++ /dev/null
@@ -1,198 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_01.c -o eina_hash_01 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const char *name = key;
44 const char *number = data;
45 printf("%s: %s\n", name, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 const char *entry_name = "Heitor Villa-Lobos";
57 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 // Look for a specific entry and get its phone number
74 phone = eina_hash_find(phone_book, entry_name);
75 if (phone)
76 {
77 printf("Printing entry.\n");
78 printf("Name: %s\n", entry_name);
79 printf("Number: %s\n\n", phone);
80 }
81
82 // Delete this entry
83 r = eina_hash_del(phone_book, entry_name, NULL);
84 printf("Hash entry successfully deleted? %d\n\n", r);
85
86 // Modify the pointer data of an entry and free the old one
87 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
88 strdup("+23 45 111-11111"));
89 free(phone);
90
91 // Modify or add an entry to the hash with eina_hash_set
92 // Let's first add a new entry
93 eina_error_set(0);
94 phone = eina_hash_set(phone_book, "Raul Seixas",
95 strdup("+55 01 234-56789"));
96 if (!phone)
97 {
98 Eina_Error err = eina_error_get();
99 if (!err)
100 {
101 printf("No previous phone found for Raul Seixas. ");
102 printf("Creating new entry.\n");
103 }
104 else
105 printf("Error when setting phone for Raul Seixas\n");
106 }
107 else
108 {
109 printf("Old phone for Raul Seixas was %s\n", phone);
110 free(phone);
111 }
112
113 printf("\n");
114
115 // Now change the phone number
116 eina_error_set(0);
117 phone = eina_hash_set(phone_book, "Raul Seixas",
118 strdup("+55 02 222-22222"));
119 if (phone)
120 {
121 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
122 printf("Old phone was %s\n", phone);
123 free(phone);
124 }
125 else
126 {
127 Eina_Error err = eina_error_get();
128 if (err)
129 printf("Error when changing phone for Raul Seixas\n");
130 else
131 {
132 printf("No previous phone found for Raul Seixas. ");
133 printf("Creating new entry.\n");
134 }
135 }
136
137 // There are many ways to iterate over our Phone book.
138 // First, iterate showing the names and associated numbers.
139 printf("List of phones:\n");
140 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
141 printf("\n");
142
143 // Now iterate using an iterator
144 printf("List of phones:\n");
145 it = eina_hash_iterator_tuple_new(phone_book);
146 while (eina_iterator_next(it, &data))
147 {
148 Eina_Hash_Tuple *t = data;
149 const char *name = t->key;
150 const char *number = t->data;
151 printf("%s: %s\n", name, number);
152 }
153 eina_iterator_free(it); // Always free the iterator after its use
154 printf("\n");
155
156 // Just iterate over the keys (names)
157 printf("List of names in the phone book:\n");
158 it = eina_hash_iterator_key_new(phone_book);
159 while (eina_iterator_next(it, &data))
160 {
161 const char *name = data;
162 printf("%s\n", name);
163 }
164 eina_iterator_free(it);
165 printf("\n");
166
167 // Just iterate over the data (numbers)
168 printf("List of numbers in the phone book:\n");
169 it = eina_hash_iterator_data_new(phone_book);
170 while (eina_iterator_next(it, &data))
171 {
172 const char *number = data;
173 printf("%s\n", number);
174 }
175 eina_iterator_free(it);
176 printf("\n");
177
178 // Check how many items are in the phone book
179 printf("There are %d items in the hash.\n\n",
180 eina_hash_population(phone_book));
181
182 // Change the name (key) on an entry
183 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
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_02.c b/libraries/eina/src/examples/eina_hash_02.c
deleted file mode 100644
index 7baec93..0000000
--- a/libraries/eina/src/examples/eina_hash_02.c
+++ /dev/null
@@ -1,147 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_02.c -o eina_hash_02 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - Two more types of hash
10 *
11 * This example demonstrate two other types of hash in action - using
12 * eina_hash_stringshared_new and eina_hash_new.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with string
15 * keys, exactly the same as the other example.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31};
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static void
40_phone_book_stringshared_free_cb(void *data)
41{
42 Phone_Entry *e = data;
43 eina_stringshare_del(e->name);
44 eina_stringshare_del(e->number);
45 free(e);
46}
47
48static Eina_Bool
49_phone_book_stringshared_foreach_cb(const Eina_Hash *phone_book,
50 const void *key, void *data, void *fdata)
51{
52 Phone_Entry *e = data;
53 const char *name = e->name; // e->name == key
54 const char *number = e->number;
55 printf("%s: %s\n", name, number);
56
57 return EINA_TRUE;
58}
59
60static void
61example_hash_stringshared(void)
62{
63 Eina_Hash *phone_book = NULL;
64 int i;
65
66 // Create the hash as before
67 phone_book = eina_hash_stringshared_new(_phone_book_stringshared_free_cb);
68
69 // Add initial entries to our hash, using direct_add
70 for (i = 0; _start_entries[i].name != NULL; i++)
71 {
72 Phone_Entry *e = malloc(sizeof(Phone_Entry));
73 e->name = eina_stringshare_add(_start_entries[i].name);
74 e->number = eina_stringshare_add(_start_entries[i].number);
75 // Since we are storing the key (name) in our struct, we can use
76 // eina_hash_direct_add. It could be used in the previous example
77 // too, since each key is already stored in the _start_entries
78 // static array, but we started it with the default add function.
79 eina_hash_direct_add(phone_book, e->name, e);
80 }
81
82 // Iterate over the elements
83 printf("List of phones:\n");
84 eina_hash_foreach(phone_book, _phone_book_stringshared_foreach_cb, NULL);
85 printf("\n");
86
87 eina_hash_free(phone_book);
88}
89
90static unsigned int
91_phone_book_string_key_length(const char *key)
92{
93 if (!key)
94 return 0;
95
96 return (int)strlen(key) + 1;
97}
98
99static int
100_phone_book_string_key_cmp(const char *key1, int key1_length,
101 const char *key2, int key2_length)
102{
103 return strcmp(key1, key2);
104}
105
106static void
107example_hash_big(void)
108{
109 Eina_Hash *phone_book = NULL;
110 int i;
111 const char *phone;
112
113 // Create the same hash as used in eina_hash_01.c, but
114 // use 1024 (2 ^ 10) buckets.
115 phone_book = eina_hash_new(EINA_KEY_LENGTH(_phone_book_string_key_length),
116 EINA_KEY_CMP(_phone_book_string_key_cmp),
117 EINA_KEY_HASH(eina_hash_superfast),
118 _phone_entry_free_cb,
119 10);
120 for (i = 0; _start_entries[i].name != NULL; i++)
121 {
122 eina_hash_add(phone_book, _start_entries[i].name,
123 strdup(_start_entries[i].number));
124 }
125
126 // Look for a specific entry and get its phone number
127 phone = eina_hash_find(phone_book, "Heitor Villa-Lobos");
128 if (phone)
129 {
130 printf("Printing entry.\n");
131 printf("Name: Heitor Villa-Lobos\n");
132 printf("Number: %s\n\n", phone);
133 }
134
135 eina_hash_free(phone_book);
136}
137
138int
139main(int argc, const char *argv[])
140{
141 eina_init();
142
143 example_hash_stringshared();
144 example_hash_big();
145
146 eina_shutdown();
147}
diff --git a/libraries/eina/src/examples/eina_hash_03.c b/libraries/eina/src/examples/eina_hash_03.c
deleted file mode 100644
index ba543d4..0000000
--- a/libraries/eina/src/examples/eina_hash_03.c
+++ /dev/null
@@ -1,198 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_03.c -o eina_hash_03 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const char *name = key;
44 const char *number = data;
45 printf("%s: %s\n", name, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 const char *entry_name = "Heitor Villa-Lobos";
57 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_small_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 // Look for a specific entry and get its phone number
74 phone = eina_hash_find(phone_book, entry_name);
75 if (phone)
76 {
77 printf("Printing entry.\n");
78 printf("Name: %s\n", entry_name);
79 printf("Number: %s\n\n", phone);
80 }
81
82 // Delete this entry
83 r = eina_hash_del(phone_book, entry_name, NULL);
84 printf("Hash entry successfully deleted? %d\n\n", r);
85
86 // Modify the pointer data of an entry and free the old one
87 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
88 strdup("+23 45 111-11111"));
89 free(phone);
90
91 // Modify or add an entry to the hash with eina_hash_set
92 // Let's first add a new entry
93 eina_error_set(0);
94 phone = eina_hash_set(phone_book, "Raul Seixas",
95 strdup("+55 01 234-56789"));
96 if (!phone)
97 {
98 Eina_Error err = eina_error_get();
99 if (!err)
100 {
101 printf("No previous phone found for Raul Seixas. ");
102 printf("Creating new entry.\n");
103 }
104 else
105 printf("Error when setting phone for Raul Seixas\n");
106 }
107 else
108 {
109 printf("Old phone for Raul Seixas was %s\n", phone);
110 free(phone);
111 }
112
113 printf("\n");
114
115 // Now change the phone number
116 eina_error_set(0);
117 phone = eina_hash_set(phone_book, "Raul Seixas",
118 strdup("+55 02 222-22222"));
119 if (phone)
120 {
121 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
122 printf("Old phone was %s\n", phone);
123 free(phone);
124 }
125 else
126 {
127 Eina_Error err = eina_error_get();
128 if (err)
129 printf("Error when changing phone for Raul Seixas\n");
130 else
131 {
132 printf("No previous phone found for Raul Seixas. ");
133 printf("Creating new entry.\n");
134 }
135 }
136
137 // There are many ways to iterate over our Phone book.
138 // First, iterate showing the names and associated numbers.
139 printf("List of phones:\n");
140 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
141 printf("\n");
142
143 // Now iterate using an iterator
144 printf("List of phones:\n");
145 it = eina_hash_iterator_tuple_new(phone_book);
146 while (eina_iterator_next(it, &data))
147 {
148 Eina_Hash_Tuple *t = data;
149 const char *name = t->key;
150 const char *number = t->data;
151 printf("%s: %s\n", name, number);
152 }
153 eina_iterator_free(it); // Always free the iterator after its use
154 printf("\n");
155
156 // Just iterate over the keys (names)
157 printf("List of names in the phone book:\n");
158 it = eina_hash_iterator_key_new(phone_book);
159 while (eina_iterator_next(it, &data))
160 {
161 const char *name = data;
162 printf("%s\n", name);
163 }
164 eina_iterator_free(it);
165 printf("\n");
166
167 // Just iterate over the data (numbers)
168 printf("List of numbers in the phone book:\n");
169 it = eina_hash_iterator_data_new(phone_book);
170 while (eina_iterator_next(it, &data))
171 {
172 const char *number = data;
173 printf("%s\n", number);
174 }
175 eina_iterator_free(it);
176 printf("\n");
177
178 // Check how many items are in the phone book
179 printf("There are %d items in the hash.\n\n",
180 eina_hash_population(phone_book));
181
182 // Change the name (key) on an entry
183 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
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_04.c b/libraries/eina/src/examples/eina_hash_04.c
deleted file mode 100644
index da73e04..0000000
--- a/libraries/eina/src/examples/eina_hash_04.c
+++ /dev/null
@@ -1,198 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_04.c -o eina_hash_04 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const char *name = key;
44 const char *number = data;
45 printf("%s: %s\n", name, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 const char *entry_name = "Heitor Villa-Lobos";
57 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_djb2_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 // Look for a specific entry and get its phone number
74 phone = eina_hash_find(phone_book, entry_name);
75 if (phone)
76 {
77 printf("Printing entry.\n");
78 printf("Name: %s\n", entry_name);
79 printf("Number: %s\n\n", phone);
80 }
81
82 // Delete this entry
83 r = eina_hash_del(phone_book, entry_name, NULL);
84 printf("Hash entry successfully deleted? %d\n\n", r);
85
86 // Modify the pointer data of an entry and free the old one
87 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
88 strdup("+23 45 111-11111"));
89 free(phone);
90
91 // Modify or add an entry to the hash with eina_hash_set
92 // Let's first add a new entry
93 eina_error_set(0);
94 phone = eina_hash_set(phone_book, "Raul Seixas",
95 strdup("+55 01 234-56789"));
96 if (!phone)
97 {
98 Eina_Error err = eina_error_get();
99 if (!err)
100 {
101 printf("No previous phone found for Raul Seixas. ");
102 printf("Creating new entry.\n");
103 }
104 else
105 printf("Error when setting phone for Raul Seixas\n");
106 }
107 else
108 {
109 printf("Old phone for Raul Seixas was %s\n", phone);
110 free(phone);
111 }
112
113 printf("\n");
114
115 // Now change the phone number
116 eina_error_set(0);
117 phone = eina_hash_set(phone_book, "Raul Seixas",
118 strdup("+55 02 222-22222"));
119 if (phone)
120 {
121 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
122 printf("Old phone was %s\n", phone);
123 free(phone);
124 }
125 else
126 {
127 Eina_Error err = eina_error_get();
128 if (err)
129 printf("Error when changing phone for Raul Seixas\n");
130 else
131 {
132 printf("No previous phone found for Raul Seixas. ");
133 printf("Creating new entry.\n");
134 }
135 }
136
137 // There are many ways to iterate over our Phone book.
138 // First, iterate showing the names and associated numbers.
139 printf("List of phones:\n");
140 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
141 printf("\n");
142
143 // Now iterate using an iterator
144 printf("List of phones:\n");
145 it = eina_hash_iterator_tuple_new(phone_book);
146 while (eina_iterator_next(it, &data))
147 {
148 Eina_Hash_Tuple *t = data;
149 const char *name = t->key;
150 const char *number = t->data;
151 printf("%s: %s\n", name, number);
152 }
153 eina_iterator_free(it); // Always free the iterator after its use
154 printf("\n");
155
156 // Just iterate over the keys (names)
157 printf("List of names in the phone book:\n");
158 it = eina_hash_iterator_key_new(phone_book);
159 while (eina_iterator_next(it, &data))
160 {
161 const char *name = data;
162 printf("%s\n", name);
163 }
164 eina_iterator_free(it);
165 printf("\n");
166
167 // Just iterate over the data (numbers)
168 printf("List of numbers in the phone book:\n");
169 it = eina_hash_iterator_data_new(phone_book);
170 while (eina_iterator_next(it, &data))
171 {
172 const char *number = data;
173 printf("%s\n", number);
174 }
175 eina_iterator_free(it);
176 printf("\n");
177
178 // Check how many items are in the phone book
179 printf("There are %d items in the hash.\n\n",
180 eina_hash_population(phone_book));
181
182 // Change the name (key) on an entry
183 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
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_05.c b/libraries/eina/src/examples/eina_hash_05.c
deleted file mode 100644
index 6666ce2..0000000
--- a/libraries/eina/src/examples/eina_hash_05.c
+++ /dev/null
@@ -1,201 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_05.c -o eina_hash_05 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 int32_t id; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { 1, "+01 23 456-78910" },
27 { 2, "+12 34 567-89101" },
28 { 3, "+23 45 678-91012" },
29 { 4, "+34 56 789-10123" },
30 { -1, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const int32_t *id = key;
44 const char *number = data;
45 printf("%d: %s\n", *id, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 int32_t entry_id = 4;
57 char *phone = NULL;
58 Eina_Bool r;
59 Eina_Iterator *it;
60 void *data;
61
62 eina_init();
63
64 phone_book = eina_hash_int32_new(_phone_entry_free_cb);
65
66 // Add initial entries to our hash
67 for (i = 0; _start_entries[i].id != -1; i++)
68 {
69 eina_hash_add(phone_book, &_start_entries[i].id,
70 strdup(_start_entries[i].number));
71 }
72
73 // Look for a specific entry and get its phone number
74 phone = eina_hash_find(phone_book, &entry_id);
75 if (phone)
76 {
77 printf("Printing entry.\n");
78 printf("Id: %d\n", entry_id);
79 printf("Number: %s\n\n", phone);
80 }
81
82 // Delete this entry
83 r = eina_hash_del(phone_book, &entry_id, NULL);
84 printf("Hash entry successfully deleted? %d\n\n", r);
85
86 // Modify the pointer data of an entry and free the old one
87 int32_t id3 = 3;
88 phone = eina_hash_modify(phone_book, &id3,
89 strdup("+23 45 111-11111"));
90 free(phone);
91
92 // Modify or add an entry to the hash with eina_hash_set
93 // Let's first add a new entry
94 int32_t id5 = 5;
95 eina_error_set(0);
96 phone = eina_hash_set(phone_book, &id5,
97 strdup("+55 01 234-56789"));
98 if (!phone)
99 {
100 Eina_Error err = eina_error_get();
101 if (!err)
102 {
103 printf("No previous phone found for id5. ");
104 printf("Creating new entry.\n");
105 }
106 else
107 printf("Error when setting phone for Raul Seixas\n");
108 }
109 else
110 {
111 printf("Old phone for id5 was %s\n", phone);
112 free(phone);
113 }
114
115 printf("\n");
116
117 // Now change the phone number
118 eina_error_set(0);
119 phone = eina_hash_set(phone_book, &id5,
120 strdup("+55 02 222-22222"));
121 if (phone)
122 {
123 printf("Changing phone for id5 to +55 02 222-22222. ");
124 printf("Old phone was %s\n", phone);
125 free(phone);
126 }
127 else
128 {
129 Eina_Error err = eina_error_get();
130 if (err)
131 printf("Error when changing phone for id5\n");
132 else
133 {
134 printf("No previous phone found for id5. ");
135 printf("Creating new entry.\n");
136 }
137 }
138
139 // There are many ways to iterate over our Phone book.
140 // First, iterate showing the names and associated numbers.
141 printf("List of phones:\n");
142 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
143 printf("\n");
144
145 // Now iterate using an iterator
146 printf("List of phones:\n");
147 it = eina_hash_iterator_tuple_new(phone_book);
148 while (eina_iterator_next(it, &data))
149 {
150 Eina_Hash_Tuple *t = data;
151 const int32_t *id = t->key;
152 const char *number = t->data;
153 printf("%d: %s\n", *id, number);
154 }
155 eina_iterator_free(it); // Always free the iterator after its use
156 printf("\n");
157
158 // Just iterate over the keys (names)
159 printf("List of ids in the phone book:\n");
160 it = eina_hash_iterator_key_new(phone_book);
161 while (eina_iterator_next(it, &data))
162 {
163 const int32_t *id = data;
164 printf("%d\n", *id);
165 }
166 eina_iterator_free(it);
167 printf("\n");
168
169 // Just iterate over the data (numbers)
170 printf("List of numbers in the phone book:\n");
171 it = eina_hash_iterator_data_new(phone_book);
172 while (eina_iterator_next(it, &data))
173 {
174 const char *number = data;
175 printf("%s\n", number);
176 }
177 eina_iterator_free(it);
178 printf("\n");
179
180 // Check how many items are in the phone book
181 printf("There are %d items in the hash.\n\n",
182 eina_hash_population(phone_book));
183
184 // Change the name (key) on an entry
185 int32_t id6 = 6;
186 eina_hash_move(phone_book, &id5, &id6);
187 printf("List of phones after change:\n");
188 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
189 printf("\n");
190
191 // Empty the phone book, but don't destroy it
192 eina_hash_free_buckets(phone_book);
193 printf("There are %d items in the hash.\n\n",
194 eina_hash_population(phone_book));
195
196 // Phone book could still be used, but we are freeing it since we are
197 // done for now
198 eina_hash_free(phone_book);
199
200 eina_shutdown();
201}
diff --git a/libraries/eina/src/examples/eina_hash_06.c b/libraries/eina/src/examples/eina_hash_06.c
deleted file mode 100644
index 6e3c451..0000000
--- a/libraries/eina/src/examples/eina_hash_06.c
+++ /dev/null
@@ -1,201 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_06.c -o eina_hash_06 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 int64_t id; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { 1, "+01 23 456-78910" },
27 { 2, "+12 34 567-89101" },
28 { 3, "+23 45 678-91012" },
29 { 4, "+34 56 789-10123" },
30 { -1, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const int64_t *id = key;
44 const char *number = data;
45 printf("%ld: %s\n", *id, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 int64_t entry_id = 4;
57 char *phone = NULL;
58 Eina_Bool r;
59 Eina_Iterator *it;
60 void *data;
61
62 eina_init();
63
64 phone_book = eina_hash_int64_new(_phone_entry_free_cb);
65
66 // Add initial entries to our hash
67 for (i = 0; _start_entries[i].id != -1; i++)
68 {
69 eina_hash_add(phone_book, &_start_entries[i].id,
70 strdup(_start_entries[i].number));
71 }
72
73 // Look for a specific entry and get its phone number
74 phone = eina_hash_find(phone_book, &entry_id);
75 if (phone)
76 {
77 printf("Printing entry.\n");
78 printf("Id: %ld\n", entry_id);
79 printf("Number: %s\n\n", phone);
80 }
81
82 // Delete this entry
83 r = eina_hash_del(phone_book, &entry_id, NULL);
84 printf("Hash entry successfully deleted? %d\n\n", r);
85
86 // Modify the pointer data of an entry and free the old one
87 int64_t id3 = 3;
88 phone = eina_hash_modify(phone_book, &id3,
89 strdup("+23 45 111-11111"));
90 free(phone);
91
92 // Modify or add an entry to the hash with eina_hash_set
93 // Let's first add a new entry
94 int64_t id5 = 5;
95 eina_error_set(0);
96 phone = eina_hash_set(phone_book, &id5,
97 strdup("+55 01 234-56789"));
98 if (!phone)
99 {
100 Eina_Error err = eina_error_get();
101 if (!err)
102 {
103 printf("No previous phone found for id5. ");
104 printf("Creating new entry.\n");
105 }
106 else
107 printf("Error when setting phone for Raul Seixas\n");
108 }
109 else
110 {
111 printf("Old phone for id5 was %s\n", phone);
112 free(phone);
113 }
114
115 printf("\n");
116
117 // Now change the phone number
118 eina_error_set(0);
119 phone = eina_hash_set(phone_book, &id5,
120 strdup("+55 02 222-22222"));
121 if (phone)
122 {
123 printf("Changing phone for id5 to +55 02 222-22222. ");
124 printf("Old phone was %s\n", phone);
125 free(phone);
126 }
127 else
128 {
129 Eina_Error err = eina_error_get();
130 if (err)
131 printf("Error when changing phone for id5\n");
132 else
133 {
134 printf("No previous phone found for id5. ");
135 printf("Creating new entry.\n");
136 }
137 }
138
139 // There are many ways to iterate over our Phone book.
140 // First, iterate showing the names and associated numbers.
141 printf("List of phones:\n");
142 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
143 printf("\n");
144
145 // Now iterate using an iterator
146 printf("List of phones:\n");
147 it = eina_hash_iterator_tuple_new(phone_book);
148 while (eina_iterator_next(it, &data))
149 {
150 Eina_Hash_Tuple *t = data;
151 const int64_t *id = t->key;
152 const char *number = t->data;
153 printf("%ld: %s\n", *id, number);
154 }
155 eina_iterator_free(it); // Always free the iterator after its use
156 printf("\n");
157
158 // Just iterate over the keys (names)
159 printf("List of ids in the phone book:\n");
160 it = eina_hash_iterator_key_new(phone_book);
161 while (eina_iterator_next(it, &data))
162 {
163 const int64_t *id = data;
164 printf("%ld\n", *id);
165 }
166 eina_iterator_free(it);
167 printf("\n");
168
169 // Just iterate over the data (numbers)
170 printf("List of numbers in the phone book:\n");
171 it = eina_hash_iterator_data_new(phone_book);
172 while (eina_iterator_next(it, &data))
173 {
174 const char *number = data;
175 printf("%s\n", number);
176 }
177 eina_iterator_free(it);
178 printf("\n");
179
180 // Check how many items are in the phone book
181 printf("There are %d items in the hash.\n\n",
182 eina_hash_population(phone_book));
183
184 // Change the name (key) on an entry
185 int64_t id6 = 6;
186 eina_hash_move(phone_book, &id5, &id6);
187 printf("List of phones after change:\n");
188 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
189 printf("\n");
190
191 // Empty the phone book, but don't destroy it
192 eina_hash_free_buckets(phone_book);
193 printf("There are %d items in the hash.\n\n",
194 eina_hash_population(phone_book));
195
196 // Phone book could still be used, but we are freeing it since we are
197 // done for now
198 eina_hash_free(phone_book);
199
200 eina_shutdown();
201}
diff --git a/libraries/eina/src/examples/eina_hash_07.c b/libraries/eina/src/examples/eina_hash_07.c
deleted file mode 100644
index 1464e6b..0000000
--- a/libraries/eina/src/examples/eina_hash_07.c
+++ /dev/null
@@ -1,222 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_07.c -o eina_hash_07 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31}; // _start_entries
32
33static const char *_nicknames[] = {
34 "mozzart",
35 "betho",
36 "george",
37 "hector",
38 NULL
39};
40
41static void
42_phone_entry_free_cb(void *data)
43{
44 free(data);
45}
46
47static Eina_Bool
48_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
49 void *data, void *fdata)
50{
51 Phone_Entry **pe = (Phone_Entry **)key;
52 const char *nick = data;
53 printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick);
54
55 // Return EINA_FALSE to stop this callback from being called
56 return EINA_TRUE;
57}
58
59int
60main(int argc, const char *argv[])
61{
62 Eina_Hash *phone_book = NULL;
63 int i;
64 Phone_Entry *entry_vl = &_start_entries[3];
65 Phone_Entry *p = NULL;
66 char *nick = NULL;
67 Eina_Bool r;
68 Eina_Iterator *it;
69 void *data;
70
71 eina_init();
72
73 phone_book = eina_hash_pointer_new(_phone_entry_free_cb);
74
75 // Add initial entries to our hash
76 for (i = 0; _start_entries[i].name != NULL; i++)
77 {
78 p = &_start_entries[i];
79 eina_hash_add(phone_book, &p,
80 strdup(_nicknames[i]));
81 }
82 printf("Phonebook:\n");
83 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
84 printf("\n");
85
86 // Look for a specific entry and get its nickname
87 nick = eina_hash_find(phone_book, &entry_vl);
88 if (nick)
89 {
90 printf("Printing entry.\n");
91 printf("Name: %s\n", entry_vl->name);
92 printf("Number: %s\n", entry_vl->number);
93 printf("Nick: %s\n\n", nick);
94 }
95
96 // Delete this entry
97 r = eina_hash_del(phone_book, &entry_vl, NULL);
98 printf("Hash entry successfully deleted? %d\n\n", r);
99
100 // Modify the pointer data of an entry and free the old one
101 p = &_start_entries[2];
102 nick = eina_hash_modify(phone_book, &p,
103 strdup("el jorge"));
104 free(nick);
105
106 // Modify or add an entry to the hash with eina_hash_set
107 // Let's first add a new entry
108 eina_error_set(0);
109 Phone_Entry *p1 = malloc(sizeof(*p1));
110 p1->name = "Raul Seixas";
111 p1->number = "+55 01 234-56789";
112 nick = eina_hash_set(phone_book, &p1,
113 strdup("raulzito"));
114 if (!nick)
115 {
116 Eina_Error err = eina_error_get();
117 if (!err)
118 {
119 printf("No previous nick found for Raul Seixas. ");
120 printf("Creating new entry.\n");
121 }
122 else
123 printf("Error when setting nick for Raul Seixas\n");
124 }
125 else
126 {
127 printf("Old nick for Raul Seixas was %s\n", nick);
128 free(nick);
129 }
130
131 printf("\n");
132
133 // Now change the nick
134 eina_error_set(0);
135 nick = eina_hash_set(phone_book, &p1,
136 strdup("raulzao"));
137 if (nick)
138 {
139 printf("Changing nick for Raul Seixas to raulzao. ");
140 printf("Old nick was %s\n", nick);
141 free(nick);
142 }
143 else
144 {
145 Eina_Error err = eina_error_get();
146 if (err)
147 printf("Error when changing nick for Raul Seixas\n");
148 else
149 {
150 printf("No previous nick found for Raul Seixas. ");
151 printf("Creating new entry.\n");
152 }
153 }
154
155 // There are many ways to iterate over our Phone book.
156 // First, iterate showing the names, phones and associated nicks.
157 printf("Phonebook:\n");
158 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
159 printf("\n");
160
161 // Now iterate using an iterator
162 printf("Phonebook:\n");
163 it = eina_hash_iterator_tuple_new(phone_book);
164 while (eina_iterator_next(it, &data))
165 {
166 Eina_Hash_Tuple *t = data;
167 Phone_Entry **pe = (Phone_Entry **)t->key;
168 nick = t->data;
169 printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick);
170 }
171 eina_iterator_free(it); // Always free the iterator after its use
172 printf("\n");
173
174 // Just iterate over the keys (names)
175 printf("List of names/numbers in the phone book:\n");
176 it = eina_hash_iterator_key_new(phone_book);
177 while (eina_iterator_next(it, &data))
178 {
179 Phone_Entry **pe = (Phone_Entry **)data;
180 printf("%s: %s\n", (*pe)->name, (*pe)->number);
181 }
182 eina_iterator_free(it);
183 printf("\n");
184
185 // Just iterate over the data (nicks)
186 printf("List of nicks in the phone book:\n");
187 it = eina_hash_iterator_data_new(phone_book);
188 while (eina_iterator_next(it, &data))
189 {
190 nick = data;
191 printf("%s\n", nick);
192 }
193 eina_iterator_free(it);
194 printf("\n");
195
196 // Check how many items are in the phone book
197 printf("There are %d items in the hash.\n\n",
198 eina_hash_population(phone_book));
199
200 // Change the name (key) on an entry
201 Phone_Entry *p2 = malloc(sizeof(*p2));
202 p2->name = "Alceu Valenca";
203 p2->number = "000000000000";
204 eina_hash_move(phone_book, p1, p2);
205 printf("List of phones after change:\n");
206 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
207 printf("\n");
208
209 // Empty the phone book, but don't destroy it
210 eina_hash_free_buckets(phone_book);
211 printf("There are %d items in the hash.\n\n",
212 eina_hash_population(phone_book));
213
214 // Phone book could still be used, but we are freeing it since we are
215 // done for now
216 eina_hash_free(phone_book);
217
218 free(p1);
219 free(p2);
220
221 eina_shutdown();
222}
diff --git a/libraries/eina/src/examples/eina_hash_08.c b/libraries/eina/src/examples/eina_hash_08.c
deleted file mode 100644
index ed45f7f..0000000
--- a/libraries/eina/src/examples/eina_hash_08.c
+++ /dev/null
@@ -1,128 +0,0 @@
1//Compile with:
2//gcc -g eina_hash_08.c -o eina_hash_08 `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8/*
9 * Eina Hash - phonebook
10 *
11 * This example demonstrate the use of Eina Hash by implementing a phonebook
12 * that stores its contact data into the hash.
13 *
14 * It indexes the phone numbers by Contact Full Name, so it's a hash with
15 * string keys.
16 */
17
18struct _Phone_Entry {
19 const char *name; // Full name.
20 const char *number; // Phone number.
21};
22
23typedef struct _Phone_Entry Phone_Entry;
24
25static Phone_Entry _start_entries[] = {
26 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
27 { "Ludwig van Beethoven", "+12 34 567-89101" },
28 { "Richard Georg Strauss", "+23 45 678-91012" },
29 { "Heitor Villa-Lobos", "+34 56 789-10123" },
30 { NULL, NULL }
31}; // _start_entries
32
33static void
34_phone_entry_free_cb(void *data)
35{
36 free(data);
37}
38
39static Eina_Bool
40_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
41 void *data, void *fdata)
42{
43 const char *name = key;
44 const char *number = data;
45 printf("%s: %s\n", name, number);
46
47 // Return EINA_FALSE to stop this callback from being called
48 return EINA_TRUE;
49}
50
51int
52main(int argc, const char *argv[])
53{
54 Eina_Hash *phone_book = NULL;
55 int i;
56 const char *entry_name = "Heitor Villa-Lobos";
57 int entry_size;
58 const char *saved_entry_name = "Alceu Valenca";
59 int saved_entry_size = sizeof("Alceu Valenca");
60 const char *phone = NULL;
61 Eina_Bool r;
62 Eina_Iterator *it;
63 void *data;
64
65 eina_init();
66
67 phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb);
68
69 // Add initial entries to our hash
70 for (i = 0; _start_entries[i].name != NULL; i++)
71 {
72 eina_hash_add(phone_book, _start_entries[i].name,
73 strdup(_start_entries[i].number));
74 }
75
76 // Delete entries
77 r = eina_hash_del(phone_book, entry_name, NULL);
78 printf("Hash entry successfully deleted? %d\n\n", r);
79
80 int hash = eina_hash_superfast("Ludwig van Beethoven",
81 sizeof("Ludwig van Beethoven"));
82
83 r = eina_hash_del_by_key_hash(phone_book, "Ludwig van Beethoven",
84 sizeof("Ludwig van Beethoven"), hash);
85 printf("Hash entry successfully deleted? %d\n\n", r);
86
87 r = eina_hash_del_by_key(phone_book, "Richard Georg Strauss");
88 printf("Hash entry successfully deleted? %d\n\n", r);
89
90 // add entry by hash
91 entry_name = "Raul_Seixas";
92 entry_size = sizeof("Raul Seixas");
93 phone = strdup("+33 33 333-33333");
94 hash = eina_hash_superfast(entry_name, entry_size);
95 eina_hash_add_by_hash(phone_book, entry_name, entry_size, hash, phone);
96
97 // don't need to free 'phone' after the next del:
98 r = eina_hash_del_by_data(phone_book, phone);
99 printf("Hash entry successfully deleted? %d\n\n", r);
100
101 // add entry by hash directly - no copy of the key will be done
102 hash = eina_hash_superfast(saved_entry_name, saved_entry_size);
103 phone = strdup("+44 44 444-44444");
104 eina_hash_direct_add_by_hash(phone_book, saved_entry_name,
105 saved_entry_size, hash, phone);
106
107 // find the added entry by its hash:
108 phone = eina_hash_find_by_hash(phone_book, saved_entry_name,
109 saved_entry_size, hash);
110 if (phone)
111 {
112 char *newphone = strdup("+55 55 555-55555");
113 phone = eina_hash_modify_by_hash(phone_book, saved_entry_name,
114 saved_entry_size, hash, newphone);
115 if (phone)
116 printf("changing phone to %s, old one was %s\n", newphone, phone);
117 else
118 printf("couldn't modify entry identified by %d\n", hash);
119 }
120 else
121 {
122 printf("couldn't find entry identified by %d\n", hash);
123 }
124
125 eina_hash_free(phone_book);
126
127 eina_shutdown();
128}
diff --git a/libraries/eina/src/examples/eina_inarray_01.c b/libraries/eina/src/examples/eina_inarray_01.c
deleted file mode 100644
index b9ab4e7..0000000
--- a/libraries/eina/src/examples/eina_inarray_01.c
+++ /dev/null
@@ -1,52 +0,0 @@
1//Compile with:
2//gcc -g eina_inarray_01.c -o eina_inarray_01 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5
6int
7cmp(const void *a, const void *b)
8{
9 return *(int*)a > *(int*)b;
10}
11
12int main(int argc, char **argv)
13{
14 Eina_Inarray *iarr;
15 char ch, *ch2;
16 int a, *b;
17
18 eina_init();
19 iarr = eina_inarray_new(sizeof(char), 0);
20
21 ch = 'a';
22 eina_inarray_append(iarr, &ch);
23 ch = 'b';
24 eina_inarray_append(iarr, &ch);
25 ch = 'c';
26 eina_inarray_append(iarr, &ch);
27 ch = 'd';
28 eina_inarray_append(iarr, &ch);
29
30 printf("Inline array of chars:\n");
31 EINA_INARRAY_FOREACH(iarr, ch2)
32 printf("char: %c(pointer: %p)\n", *ch2, ch2);
33
34 eina_inarray_flush(iarr);
35 eina_inarray_setup(iarr, sizeof(int), 4);
36
37 a = 97;
38 eina_inarray_append(iarr, &a);
39 a = 98;
40 eina_inarray_append(iarr, &a);
41 a = 100;
42 eina_inarray_append(iarr, &a);
43 a = 99;
44 eina_inarray_insert_sorted(iarr, &a, cmp);
45
46 printf("Inline array of integers with %d elements:\n", eina_inarray_count(iarr));
47 EINA_INARRAY_FOREACH(iarr, b)
48 printf("int: %d(pointer: %p)\n", *b, b);
49
50 eina_inarray_free(iarr);
51 eina_shutdown();
52}
diff --git a/libraries/eina/src/examples/eina_inlist_01.c b/libraries/eina/src/examples/eina_inlist_01.c
deleted file mode 100644
index 6c6c794..0000000
--- a/libraries/eina/src/examples/eina_inlist_01.c
+++ /dev/null
@@ -1,97 +0,0 @@
1// Compile with:
2// gcc -g eina_inlist_01.c -o eina_inlist_01 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5#include <stdio.h>
6
7struct my_struct {
8 EINA_INLIST;
9 int a, b;
10};
11
12int
13sort_cb(const void *d1, const void *d2)
14{
15 const Eina_Inlist *l1, *l2;
16 const struct my_struct *x1, *x2;
17
18 l1 = d1;
19 l2 = d2;
20
21 x1 = EINA_INLIST_CONTAINER_GET(l1, struct my_struct);
22 x2 = EINA_INLIST_CONTAINER_GET(l2, struct my_struct);
23
24 return x1->a - x2->a;
25}
26
27int
28main(void)
29{
30 struct my_struct *d, *cur;
31 Eina_Inlist *list, *itr, *tmp;
32
33 eina_init();
34
35 d = malloc(sizeof(*d));
36 d->a = 1;
37 d->b = 10;
38 list = eina_inlist_append(NULL, EINA_INLIST_GET(d));
39
40 d = malloc(sizeof(*d));
41 d->a = 2;
42 d->b = 20;
43 list = eina_inlist_append(list, EINA_INLIST_GET(d));
44
45 d = malloc(sizeof(*d));
46 d->a = 3;
47 d->b = 30;
48 list = eina_inlist_prepend(list, EINA_INLIST_GET(d));
49
50 printf("list=%p\n", list);
51 EINA_INLIST_FOREACH(list, cur)
52 printf("\ta=%d, b=%d\n", cur->a, cur->b);
53
54 list = eina_inlist_promote(list, EINA_INLIST_GET(d));
55
56 d = malloc(sizeof(*d));
57 d->a = 4;
58 d->b = 40;
59 list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list);
60
61 list = eina_inlist_demote(list, EINA_INLIST_GET(d));
62
63 list = eina_inlist_sort(list, sort_cb);
64
65 printf("list after sort=%p\n", list);
66 EINA_INLIST_FOREACH(list, cur)
67 printf("\ta=%d, b=%d\n", cur->a, cur->b);
68
69 tmp = eina_inlist_find(list, EINA_INLIST_GET(d));
70 if (tmp)
71 cur = EINA_INLIST_CONTAINER_GET(tmp, struct my_struct);
72 else
73 cur = NULL;
74
75 if (d != cur)
76 printf("wrong node! cur=%p\n", cur);
77
78 list = eina_inlist_remove(list, EINA_INLIST_GET(d));
79 free(d);
80 printf("list=%p\n", list);
81 for (itr = list; itr != NULL; itr = itr->next)
82 {
83 cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct);
84 printf("\ta=%d, b=%d\n", cur->a, cur->b);
85 }
86
87 while (list)
88 {
89 Eina_Inlist *aux = list;
90 list = eina_inlist_remove(list, list);
91 free(aux);
92 }
93
94 eina_shutdown();
95
96 return 0;
97}
diff --git a/libraries/eina/src/examples/eina_inlist_02.c b/libraries/eina/src/examples/eina_inlist_02.c
deleted file mode 100644
index 4c16ec6..0000000
--- a/libraries/eina/src/examples/eina_inlist_02.c
+++ /dev/null
@@ -1,65 +0,0 @@
1// Compile with:
2// gcc -g eina_inlist_02.c -o eina_inlist_02 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5#include <stdio.h>
6
7struct my_struct {
8 EINA_INLIST;
9 int a, b;
10};
11
12int
13main(void)
14{
15 struct my_struct *d, *cur;
16 int i;
17
18 Eina_Inlist *inlist = NULL;
19 Eina_List *list = NULL, *l_itr, *l_next;
20
21 eina_init();
22
23 for (i = 0; i < 100; i++)
24 {
25 d = malloc(sizeof(*d));
26 d->a = i;
27 d->b = i * 10;
28 inlist = eina_inlist_append(inlist, EINA_INLIST_GET(d));
29 if ((i % 2) == 0)
30 list = eina_list_prepend(list, d);
31 }
32
33 printf("inlist=%p\n", inlist);
34 EINA_INLIST_FOREACH(inlist, cur)
35 printf("\ta=%d, b=%d\n", cur->a, cur->b);
36
37 printf("list=%p\n", list);
38 EINA_LIST_FOREACH(list, l_itr, cur)
39 printf("\ta=%d, b=%d\n", cur->a, cur->b);
40
41 printf("inlist count=%d\n", eina_inlist_count(inlist));
42 printf("list count=%d\n\n", eina_list_count(list));
43
44 EINA_LIST_FOREACH_SAFE(list, l_itr, l_next, cur)
45 {
46 if ((cur->a % 3) == 0)
47 list = eina_list_remove_list(list, l_itr);
48 }
49
50 printf("inlist count=%d\n", eina_inlist_count(inlist));
51 printf("list count=%d\n\n", eina_list_count(list));
52
53 eina_list_free(list);
54
55 while (inlist)
56 {
57 Eina_Inlist *aux = inlist;
58 inlist = eina_inlist_remove(inlist, inlist);
59 free(aux);
60 }
61
62 eina_shutdown();
63
64 return 0;
65}
diff --git a/libraries/eina/src/examples/eina_inlist_03.c b/libraries/eina/src/examples/eina_inlist_03.c
deleted file mode 100644
index 28706d5..0000000
--- a/libraries/eina/src/examples/eina_inlist_03.c
+++ /dev/null
@@ -1,74 +0,0 @@
1// Compile with:
2// gcc -g eina_inlist_03.c -o eina_inlist_03 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5#include <stdio.h>
6
7struct my_struct {
8 EINA_INLIST;
9 Eina_Inlist even;
10 int a, b;
11};
12
13#define EVEN_INLIST_GET(Inlist) (& ((Inlist)->even))
14
15#define EVEN_INLIST_CONTAINER_GET(ptr, type) \
16 ((type *)((char *)ptr - offsetof(type, even)))
17
18int
19main(void)
20{
21 struct my_struct *d, *cur;
22 int i;
23
24 Eina_Inlist *list = NULL, *list_even = NULL, *itr;
25
26 eina_init();
27
28 for (i = 0; i < 100; i++)
29 {
30 d = malloc(sizeof(*d));
31 d->a = i;
32 d->b = i * 10;
33 list = eina_inlist_append(list, EINA_INLIST_GET(d));
34 if ((i % 2) == 0)
35 list_even = eina_inlist_prepend(list_even, EVEN_INLIST_GET(d));
36 }
37
38 printf("list=%p\n", list);
39 EINA_INLIST_FOREACH(list, cur)
40 printf("\ta=%d, b=%d\n", cur->a, cur->b);
41
42 printf("list_even=%p\n", list_even);
43 for (itr = list_even; itr != NULL; itr = itr->next)
44 {
45 cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct);
46 printf("\ta=%d, b=%d\n", cur->a, cur->b);
47 }
48
49 printf("list count=%d\n", eina_inlist_count(list));
50 printf("list_even count=%d\n\n", eina_inlist_count(list_even));
51
52 itr = list_even;
53 while (itr)
54 {
55 Eina_Inlist *next = itr->next;
56 cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct);
57 if ((cur->a % 3) == 0)
58 list_even = eina_inlist_remove(list_even, itr);
59 itr = next;
60 }
61 printf("list count=%d\n", eina_inlist_count(list));
62 printf("list_even count=%d\n\n", eina_inlist_count(list_even));
63
64 while (list)
65 {
66 Eina_Inlist *aux = list;
67 list = eina_inlist_remove(list, list);
68 free(aux);
69 }
70
71 eina_shutdown();
72
73 return 0;
74}
diff --git a/libraries/eina/src/examples/eina_iterator_01.c b/libraries/eina/src/examples/eina_iterator_01.c
deleted file mode 100644
index 88c40cc..0000000
--- a/libraries/eina/src/examples/eina_iterator_01.c
+++ /dev/null
@@ -1,66 +0,0 @@
1//Compile with:
2//gcc -g eina_iterator_01.c -o eina_iterator_01 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index 4fcb020..0000000
--- a/libraries/eina/src/examples/eina_list_01.c
+++ /dev/null
@@ -1,44 +0,0 @@
1//Compile with:
2//gcc -g eina_list_01.c -o eina_list_01 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index 5fe31e8..0000000
--- a/libraries/eina/src/examples/eina_list_02.c
+++ /dev/null
@@ -1,55 +0,0 @@
1//Compile with:
2//gcc -g eina_list_02.c -o eina_list_02 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index db53148..0000000
--- a/libraries/eina/src/examples/eina_list_03.c
+++ /dev/null
@@ -1,45 +0,0 @@
1//Compile with:
2//gcc -g eina_list_03.c -o eina_list_03 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index d92a607..0000000
--- a/libraries/eina/src/examples/eina_list_04.c
+++ /dev/null
@@ -1,36 +0,0 @@
1//Compile with:
2//gcc -g eina_list_04.c -o eina_list_04 `pkg-config --cflags --libs eina`
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
deleted file mode 100644
index 7a20ca9..0000000
--- a/libraries/eina/src/examples/eina_log_01.c
+++ /dev/null
@@ -1,27 +0,0 @@
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
deleted file mode 100644
index a056729..0000000
--- a/libraries/eina/src/examples/eina_log_02.c
+++ /dev/null
@@ -1,38 +0,0 @@
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
deleted file mode 100644
index 8dbe19e..0000000
--- a/libraries/eina/src/examples/eina_log_03.c
+++ /dev/null
@@ -1,78 +0,0 @@
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_model_01.c b/libraries/eina/src/examples/eina_model_01.c
deleted file mode 100644
index 28895aa..0000000
--- a/libraries/eina/src/examples/eina_model_01.c
+++ /dev/null
@@ -1,235 +0,0 @@
1/*
2 * Compile with:
3 * gcc -o eina_model_01 eina_model_01.c `pkg-config --cflags --libs eina`
4 */
5
6/*
7 * This example demonstrates the usage of Eina Model by implementing
8 * Bank Account Class, which is inherited from Base Class;
9 * and Credit Card Class, which is inherited from Bank Account Class.
10 *
11 * Base Class(Eina_Model_Type) --> Bank Account Class --> Credit Card Class
12 *
13 * Bank Account Class implements "bank_account_data_set()" and "print()" methods;
14 * Credit Card Class inherits these two and implements "credit_card_data_set()"
15 *
16 *
17 * Bank Account Class::print() calls for "_bank_account_data_print"
18 * Credit Card Class ::print() is reloaded with "_credit_card_data_print()"
19 * which calls for parent function "_bank_account_data_print"
20 *
21 */
22
23
24#include <Eina.h>
25#include <eina_safety_checks.h>
26
27/*
28 * Defining type for new model type
29 * Model will have two methods
30 */
31typedef struct _Bank_Account_Type
32{
33 Eina_Model_Type parent_class;
34 void (*bank_account_data_set)(Eina_Model *, const char *name, const char *number);
35 void (*print)(Eina_Model *);
36} Bank_Account_Type;
37
38/*
39 * Defining type for Bank Account private data
40 */
41typedef struct _Bank_Account_Data
42{
43 char name[30];
44 char number[30];
45} Bank_Account_Data;
46
47/*
48 * Defining type for Credit Card model type, which will be inherited from Bank Account model type
49 * Model will have two parent's methods and additional one
50 */
51typedef struct _Credit_Card_Type
52{
53 Bank_Account_Type parent_class;
54 void (*credit_card_data_set)(Eina_Model *, const char *, const char *, int) ;
55} Credit_Card_Type;
56
57/*
58 * Defining type for Credit Card private data
59 */
60typedef struct _Credit_Card_Data
61{
62 char number[30];
63 char expiry_date[30];
64 int pin;
65} Credit_Card_Data;
66
67static Bank_Account_Type _BANK_ACCOUNT_TYPE;
68static Credit_Card_Type _CREDIT_CARD_TYPE;
69static Eina_Model_Type *BANK_ACCOUNT_TYPE = (Eina_Model_Type *) &_BANK_ACCOUNT_TYPE;
70static Eina_Model_Type *CREDIT_CARD_TYPE = (Eina_Model_Type *) &_CREDIT_CARD_TYPE;
71
72
73/*
74 * Defining method for for Bank Account data
75 */
76static void
77_bank_account_data_set(Eina_Model *mdl, const char *name, const char *number)
78{
79 Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE);
80
81 if (!bdata)
82 printf("ERROR\n");
83
84 if (name != NULL)
85 {
86 strncpy(bdata->name, name, sizeof(bdata->name));
87 bdata->name[sizeof(bdata->number) - 1] = '\0';
88 }
89
90 if (number != NULL)
91 {
92 strncpy(bdata->number, number, sizeof(bdata->number));
93 bdata->number[sizeof(bdata->number) - 1] = '\0';
94 }
95
96 printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl);
97}
98
99
100static void
101_credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin)
102{
103 Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE);
104
105 if (!cdata)
106 printf("ERROR\n");
107
108 if (number != NULL)
109 {
110 strncpy(cdata->number, number, sizeof(cdata->number));
111 cdata->number[sizeof(cdata->number) - 1] = '\0';
112 }
113
114 if (expiry_date != NULL)
115 {
116 strncpy(cdata->expiry_date, expiry_date, sizeof(cdata->expiry_date));
117 cdata->expiry_date[sizeof(cdata->expiry_date) - 1] = '\0';
118 }
119
120 cdata->pin = pin;
121 printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl);
122}
123
124static void
125_bank_account_data_print(Eina_Model *mdl)
126{
127 const Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE);
128
129 printf("\n%s :: %s %p \n\tName: %s(%p)\n\tAccount: %s(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl
130 , bdata->name, bdata->name, bdata->number, bdata->number);
131}
132
133static void
134_credit_card_data_print(Eina_Model *mdl)
135{
136 void (*pf)(Eina_Model *);
137 const Eina_Model_Type *ptype = eina_model_type_parent_get(eina_model_type_get(mdl));
138 //const Eina_Model_Type *ptype = eina_model_type_get(mdl);
139
140 pf = eina_model_type_method_resolve(ptype, mdl, Bank_Account_Type, print);
141 if (pf)
142 pf(mdl);
143 else
144 printf("ERROR: %d", __LINE__);
145 const Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE);
146 printf("%s :: %s %p \n\tNumber: %s(%p)\n\tCC Expiry Date: %s(%p)\n\tCC PIN: %d(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl
147 , cdata->number, cdata->number, cdata->expiry_date, cdata->expiry_date, cdata->pin, &cdata->pin);
148}
149
150#define BANK_ACCOUNT(x) ((Bank_Account_Type *) x)
151#define CREDIT_CARD(x) ((Credit_Card_Type *) x)
152
153void
154bank_account_data_set(Eina_Model *mdl, const char *name, char *number)
155{
156
157 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE));
158
159 void (*pf)(Eina_Model *, const char *, const char *);
160 pf = eina_model_method_resolve(mdl, Bank_Account_Type, bank_account_data_set);
161 if (pf)
162 pf(mdl, name, number);
163 else
164 printf("ERROR %d\n", __LINE__);
165}
166
167void
168data_print(Eina_Model *mdl)
169{
170 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE));
171
172 void (*pf)(Eina_Model *);
173 pf = eina_model_method_resolve(mdl, Bank_Account_Type, print);
174 if (pf)
175 pf(mdl);
176 else
177 printf("ERROR %d\n", __LINE__);
178}
179
180void
181credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin)
182{
183 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, CREDIT_CARD_TYPE));
184
185 void (*pf)(Eina_Model *, const char *, const char *, int);
186 pf = eina_model_method_resolve(mdl, Credit_Card_Type, credit_card_data_set);
187 if (pf)
188 pf(mdl, number, expiry_date, pin);
189 else
190 printf("ERROR %d\n", __LINE__);
191}
192
193int main(void)
194{
195 Eina_Model *b, *cc;
196
197 eina_init();
198
199 memset(&_BANK_ACCOUNT_TYPE, 0, sizeof(_BANK_ACCOUNT_TYPE));
200 memset(&_CREDIT_CARD_TYPE, 0, sizeof(_CREDIT_CARD_TYPE));
201
202 BANK_ACCOUNT_TYPE->version = EINA_MODEL_TYPE_VERSION;
203 BANK_ACCOUNT_TYPE->type_size = sizeof(Bank_Account_Type);
204 BANK_ACCOUNT_TYPE->private_size = sizeof(Bank_Account_Data);
205 BANK_ACCOUNT_TYPE->name = "Bank_Account_Model";
206 BANK_ACCOUNT_TYPE->parent = EINA_MODEL_TYPE_GENERIC;
207 BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->bank_account_data_set = _bank_account_data_set;
208 BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->print = _bank_account_data_print;
209
210 CREDIT_CARD_TYPE->version = EINA_MODEL_TYPE_VERSION;
211 CREDIT_CARD_TYPE->type_size = sizeof(Credit_Card_Type);
212 CREDIT_CARD_TYPE->private_size = sizeof(Credit_Card_Data);
213 CREDIT_CARD_TYPE->name = "Credit_Card_Model";
214 CREDIT_CARD_TYPE->parent = BANK_ACCOUNT_TYPE;
215 CREDIT_CARD(CREDIT_CARD_TYPE)->credit_card_data_set = _credit_card_data_set;
216 BANK_ACCOUNT(CREDIT_CARD_TYPE)->print = _credit_card_data_print;
217
218 b = eina_model_new(BANK_ACCOUNT_TYPE); //creating object of bank class
219 cc = eina_model_new(CREDIT_CARD_TYPE); //creating object of credit card class
220
221 bank_account_data_set(b, "Bill Clark", "8569214756");
222 bank_account_data_set(cc, "John Smith", "3154789");
223
224 credit_card_data_set(cc, "5803 6589 4786 3279 9173", "01/01/2015", 1234);
225
226 data_print(b);
227 data_print(cc);
228
229 eina_model_unref(b);
230 eina_model_unref(cc);
231
232 eina_shutdown();
233
234 return 0;
235}
diff --git a/libraries/eina/src/examples/eina_model_02.c b/libraries/eina/src/examples/eina_model_02.c
deleted file mode 100644
index a2cb693..0000000
--- a/libraries/eina/src/examples/eina_model_02.c
+++ /dev/null
@@ -1,61 +0,0 @@
1//Compile with:
2//gcc -g eina_model_02.c -o eina_model_02 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5
6static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info);
7
8int main(void)
9{
10 Eina_Model *m;
11 char *s;
12 int i;
13
14 eina_init();
15
16 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
17
18 eina_model_event_callback_add(m, "deleted", _cb_on_deleted, NULL);
19
20 //Adding properties to model
21 for (i = 0; i < 5; i++)
22 {
23 Eina_Value val;
24 char name[2] = {'a'+ i, 0};
25 eina_value_setup(&val, EINA_VALUE_TYPE_INT);
26 eina_value_set(&val, i);
27 eina_model_property_set(m, name, &val);
28 eina_value_flush(&val);
29 }
30
31 //Adding children to model
32 for (i = 0; i < 5; i++)
33 {
34 Eina_Value val;
35 Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
36 eina_value_setup(&val, EINA_VALUE_TYPE_INT);
37 eina_value_set(&val, i);
38 eina_model_property_set(c, "x", &val);
39
40 eina_model_event_callback_add(c, "deleted", _cb_on_deleted, NULL);
41
42 eina_model_child_append(m, c);
43 //Now that the child has been appended to a model, it's parent will manage it's lifecycle
44 eina_model_unref(c);
45 eina_value_flush(&val);
46 }
47
48 s = eina_model_to_string(m);
49 printf("model as string:\n%s\n", s);
50
51 free(s);
52 eina_model_unref(m);
53 eina_shutdown();
54
55 return 0;
56}
57
58static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info)
59{
60 printf("deleted %p\n", model);
61}
diff --git a/libraries/eina/src/examples/eina_model_03.c b/libraries/eina/src/examples/eina_model_03.c
deleted file mode 100644
index a5e2562..0000000
--- a/libraries/eina/src/examples/eina_model_03.c
+++ /dev/null
@@ -1,236 +0,0 @@
1//Compile with:
2//gcc -g eina_model_03.c -o eina_model_03 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5#include <string.h>
6#include <stdio.h>
7#include <errno.h>
8
9static Eina_Model_Type *ADDRESS_BOOK_TYPE;
10static Eina_Model_Type *PERSON_TYPE;
11
12static void address_book_init(void);
13
14int main(void)
15{
16 Eina_Model *address_book;
17 Eina_Value val;
18 int i, count;
19 char *s;
20
21 eina_init();
22
23 address_book_init();
24
25 address_book = eina_model_new(ADDRESS_BOOK_TYPE);
26
27 eina_value_setup(&val, EINA_VALUE_TYPE_STRING);
28 eina_value_set(&val, "addr_book.txt");
29 eina_model_property_set(address_book, "filename", &val);
30 eina_value_flush(&val);
31
32 eina_model_load(address_book);
33 s = eina_model_to_string(address_book);
34 printf("model as string:\n%s\n\n", s);
35 free(s);
36
37 count = eina_model_child_count(address_book);
38 printf("Address Book with %d entries:\n", count);
39 for (i = 0; i < count; i++)
40 {
41 Eina_Model *person = eina_model_child_get(address_book, i);
42 Eina_Value nameval, emailval;
43 const char *name, *email;
44
45 eina_model_property_get(person, "name", &nameval);
46 eina_model_property_get(person, "email", &emailval);
47
48 eina_value_get(&nameval, &name);
49 eina_value_get(&emailval, &email);
50
51 printf("%02d \"%s\" <%s>\n", i, name, email);
52
53 // We don't need property values anymore
54 eina_value_flush(&nameval);
55 eina_value_flush(&emailval);
56
57 // We don't need our reference to person anymore
58 eina_model_unref(person);
59 }
60
61 eina_model_unref(address_book);
62 eina_shutdown();
63
64 return 0;
65}
66
67// Structure Descriptions are just used internally in the type constructors:
68static Eina_Value_Struct_Desc *ADDRESS_BOOK_DESC;
69static Eina_Value_Struct_Desc *PERSON_DESC;
70
71static Eina_Bool
72_person_constructor(Eina_Model *model)
73{
74 // call parent type constructor, like "super" in other languages:
75 if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model))
76 return EINA_FALSE;
77
78 // Do specific setup of our internal structure, letting it know about
79 // our description
80 return eina_model_struct_set(model, PERSON_DESC, NULL);
81}
82
83static Eina_Bool
84_address_book_constructor(Eina_Model *model)
85{
86 // call parent type constructor, like "super" in other languages:
87 if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model))
88 return EINA_FALSE;
89
90 // Do specific setup of our internal structure, letting it know about
91 // our description
92 return eina_model_struct_set(model, ADDRESS_BOOK_DESC, NULL);
93}
94
95static Eina_Bool
96_address_book_load(Eina_Model *model)
97{
98 const char *filename;
99 Eina_Value val;
100 char buf[256];
101 FILE *f;
102
103 // We retrieve filename from property of same name:
104 eina_model_property_get(model, "filename", &val);
105 eina_value_get(&val, &filename);
106
107 EINA_SAFETY_ON_NULL_RETURN_VAL(filename, EINA_FALSE);
108
109 f = fopen(filename, "r");
110
111 // Now that we have used filename, we must free its memory holder:
112 eina_value_flush(&val);
113
114 EINA_SAFETY_ON_NULL_RETURN_VAL(f, EINA_FALSE);
115
116 while (fgets(buf, sizeof(buf), f))
117 {
118 Eina_Model *person;
119 char *name, *email;
120
121 if (strlen(buf) <= 1)
122 continue;
123
124 name = strtok(buf, "\t");
125 email = strtok(NULL, "\n");
126
127 if ((!name) || (!email)) continue;
128
129 // Create person
130 person = eina_model_new(PERSON_TYPE);
131
132 // Setup value type as string, as our properties are strings:
133 eina_value_setup(&val, EINA_VALUE_TYPE_STRING);
134
135 // Set string properties:
136 eina_value_set(&val, name);
137 eina_model_property_set(person, "name", &val);
138
139 eina_value_set(&val, email);
140 eina_model_property_set(person, "email", &val);
141
142 // Flush value, free string
143 eina_value_flush(&val);
144
145 // Add person to the end of model children
146 eina_model_child_append(model, person);
147
148 // Model already holds its reference to person, we release ours
149 eina_model_unref(person);
150 }
151
152 fclose(f);
153 return EINA_TRUE;
154}
155
156static void
157address_book_init(void)
158{
159 // Declare type for internal struct, this is just used to easily
160 // create Eina_Value_Struct_Member array for Eina_Value_Struct_Desc.
161 //
162 // We don't need this structure outside address_book_init()
163 // as it is managed automatically by Eina_Value_Struct, used by
164 // Eina_Model_Struct! Handy! :-)
165 typedef struct _Person Person;
166 struct _Person
167 {
168 const char *name;
169 const char *email;
170 };
171 static Eina_Value_Struct_Member person_members[] = {
172 // no eina_value_type as they are not constant initializers, see below.
173 EINA_VALUE_STRUCT_MEMBER(NULL, Person, name),
174 EINA_VALUE_STRUCT_MEMBER(NULL, Person, email)
175 };
176 // Values that cannot be set on static declarations since they are not
177 // constant initializers. It is a nitpick from C that we need to deal with
178 // here and on all our other declarations.
179 person_members[0].type = EINA_VALUE_TYPE_STRING;
180 person_members[1].type = EINA_VALUE_TYPE_STRING;
181
182 static Eina_Value_Struct_Desc person_desc = {
183 EINA_VALUE_STRUCT_DESC_VERSION,
184 NULL, // no special operations
185 person_members,
186 EINA_C_ARRAY_LENGTH(person_members),
187 sizeof(Person)
188 };
189 static Eina_Model_Type person_type = EINA_MODEL_TYPE_INIT_NOPRIVATE
190 ("Person_Type",
191 Eina_Model_Type,
192 NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer!
193 NULL, // no extra interfaces
194 NULL // no extra events);
195 );
196 person_type.parent = EINA_MODEL_TYPE_STRUCT;
197 // Set our overloaded methods:
198 person_type.constructor = _person_constructor;
199
200 typedef struct _Address_Book Address_Book;
201 struct _Address_Book
202 {
203 const char *filename;
204 };
205 static Eina_Value_Struct_Member address_book_members[] = {
206 // no eina_value_type as they are not constant initializers, see below.
207 EINA_VALUE_STRUCT_MEMBER(NULL, Address_Book, filename)
208 };
209 address_book_members[0].type = EINA_VALUE_TYPE_STRING;
210 static Eina_Value_Struct_Desc address_book_desc = {
211 EINA_VALUE_STRUCT_DESC_VERSION,
212 NULL, // no special operations
213 address_book_members,
214 EINA_C_ARRAY_LENGTH(address_book_members),
215 sizeof(Address_Book)
216 };
217 static Eina_Model_Type address_book_type = EINA_MODEL_TYPE_INIT_NOPRIVATE
218 ("Address_Book_Type",
219 Eina_Model_Type,
220 NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer!
221 NULL, // no extra interfaces
222 NULL // no extra events);
223 );
224 address_book_type.parent = EINA_MODEL_TYPE_STRUCT;
225 // Set our overloaded methods:
226 address_book_type.constructor = _address_book_constructor;
227 address_book_type.load = _address_book_load;
228
229 // Expose the configured pointers to public usage:
230 // NOTE: they are static, so they live after this function returns!
231 PERSON_TYPE = &person_type;
232 PERSON_DESC = &person_desc;
233
234 ADDRESS_BOOK_TYPE = &address_book_type;
235 ADDRESS_BOOK_DESC = &address_book_desc;
236}
diff --git a/libraries/eina/src/examples/eina_model_04_animal.c b/libraries/eina/src/examples/eina_model_04_animal.c
deleted file mode 100644
index bc9f06b..0000000
--- a/libraries/eina/src/examples/eina_model_04_animal.c
+++ /dev/null
@@ -1,76 +0,0 @@
1/*
2 * animal.c
3 */
4
5#include "eina_model_04_animal.h"
6
7static Eina_Bool initialized = EINA_FALSE;
8
9static void
10_animal_eat(Eina_Model *m)
11{
12 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
13 __func__);
14 printf("\t\t Eat Animal\n");
15}
16
17static void
18_animal_breathe(Eina_Model *m)
19{
20 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
21 __func__);
22 printf("\t\t Breathe Animal\n");
23}
24
25const char *ANIMAL_MODEL_TYPE_NAME = NULL;
26static Animal_Type _ANIMAL_TYPE;
27
28const Eina_Model_Type * const ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE;
29
30void
31animal_init(void)
32{
33 Eina_Model_Type *type;
34
35 if (initialized) return;
36 initialized = EINA_TRUE;
37
38 ANIMAL_MODEL_TYPE_NAME = "Animal_Model_Type";
39
40 type = (Eina_Model_Type *)&_ANIMAL_TYPE;
41 type->version = EINA_MODEL_TYPE_VERSION;
42 type->name = ANIMAL_MODEL_TYPE_NAME;
43 type->private_size = 0;
44
45 eina_model_type_subclass_setup(type, EINA_MODEL_TYPE_GENERIC);
46
47 /* define extra methods */
48
49 type->type_size = sizeof(Animal_Type);
50 ANIMAL_TYPE(type)->breathe = _animal_breathe;
51 ANIMAL_TYPE(type)->eat = _animal_eat;
52}
53
54void
55animal_breathe(Eina_Model *m)
56{
57 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE));
58
59 void (*pf)(Eina_Model *m);
60 pf = eina_model_method_resolve(m, Animal_Type, breathe);
61 EINA_SAFETY_ON_NULL_RETURN(pf);
62 printf("%s() \t", __func__);
63 pf(m);
64}
65
66void
67animal_eat(Eina_Model *m)
68{
69 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE));
70
71 void (*pf)(Eina_Model *m);
72 pf = eina_model_method_resolve(m, Animal_Type, eat);
73 EINA_SAFETY_ON_NULL_RETURN(pf);
74 printf("%s() \t", __func__);
75 pf(m);
76}
diff --git a/libraries/eina/src/examples/eina_model_04_child.c b/libraries/eina/src/examples/eina_model_04_child.c
deleted file mode 100644
index 59b8aa5..0000000
--- a/libraries/eina/src/examples/eina_model_04_child.c
+++ /dev/null
@@ -1,81 +0,0 @@
1/*
2 * child.c
3 */
4
5#include "eina_model_04_child.h"
6#include "eina_model_04_whistler.h"
7
8static Eina_Bool initialized = EINA_FALSE;
9
10static void
11_child_cry(Eina_Model *m)
12{
13 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
14 __func__);
15 printf("\t\t Cry Child\n");
16}
17
18static void
19_child_dive(Eina_Model *m)
20{
21 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
22 __func__);
23 printf("\t\t Dive Child\n");
24}
25
26const char *CHILD_MODEL_TYPE_NAME = NULL;
27
28static Child_Type _CHILD_TYPE;
29const Eina_Model_Type * const CHILD_TYPE = (Eina_Model_Type *) &_CHILD_TYPE;
30
31static const Diver_Interface _DIVER_INTERFACE;
32static const Eina_Model_Interface * const DIVER_INTERFACE =
33 (Eina_Model_Interface *) &_DIVER_INTERFACE;
34
35static const Eina_Model_Interface * CLASS_INTERFACE_ARRAY[] =
36 { &_DIVER_INTERFACE.base_interface, NULL }; //this array is for model
37
38void
39child_init()
40{
41 Eina_Model_Type *type;
42
43 if (initialized) return;
44 initialized = EINA_TRUE;
45
46 human_init();
47
48 //overriding Diver Interface
49 Eina_Model_Interface * iface = (Eina_Model_Interface *) &_DIVER_INTERFACE;
50 iface->version = EINA_MODEL_INTERFACE_VERSION;
51 iface->interface_size = sizeof(Diver_Interface);
52 iface->name = DIVER_INTERFACE_NAME;
53 DIVER_INTERFACE(iface)->dive = _child_dive;
54
55 //creating instance of Child type
56 CHILD_MODEL_TYPE_NAME = "Child_Model_Type";
57
58 type = (Eina_Model_Type *) &_CHILD_TYPE;
59 type->version = EINA_MODEL_TYPE_VERSION;
60 type->name = CHILD_MODEL_TYPE_NAME;
61
62 eina_model_type_subclass_setup(type, HUMAN_TYPE);
63
64 type->type_size = sizeof(Child_Type);
65 type->interfaces = CLASS_INTERFACE_ARRAY;
66
67 CHILD_TYPE(type)->cry = _child_cry;
68}
69
70//call for implemented Child Class function
71void
72child_cry(Eina_Model *m)
73{
74 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, CHILD_TYPE));
75
76 void (*pf)(Eina_Model *m);
77 pf = eina_model_method_resolve(m, Child_Type, cry);
78 EINA_SAFETY_ON_NULL_RETURN(pf);
79 printf("%s() \t\t", __func__);
80 pf(m);
81}
diff --git a/libraries/eina/src/examples/eina_model_04_human.c b/libraries/eina/src/examples/eina_model_04_human.c
deleted file mode 100644
index d9a10ab..0000000
--- a/libraries/eina/src/examples/eina_model_04_human.c
+++ /dev/null
@@ -1,157 +0,0 @@
1/*
2 * human.c
3 *
4 */
5
6#include "eina_model_04_human.h"
7#include "eina_model_04_whistler.h"
8
9static Eina_Bool initialized = EINA_FALSE;
10
11static void
12_human_eat(Eina_Model *m)
13{
14 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
15 __func__);
16 printf("\t\t Salad\n");
17}
18
19static void
20_human_walk(Eina_Model *m)
21{
22 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
23 __func__);
24 printf("\t\t Walk\n");
25}
26
27static void
28_human_whistle(Eina_Model *m)
29{
30 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
31 __func__);
32 printf("\t\t Whistle Human\n");
33}
34
35static void
36_human_swim(Eina_Model *m)
37{
38 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
39 __func__);
40 printf("\t\t Swim Human\n");
41}
42
43static void
44_human_dive(Eina_Model *m)
45{
46 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
47 __func__);
48 printf("\t\t Dive Human\n");
49}
50/*
51 * defining Human Model Instance
52 * defining Whistler Interface instance
53 * defining Swimmer Interface instance
54 * defining Diver Interface instance
55 */
56
57const char *HUMAN_MODEL_TYPE_NAME = NULL;
58
59static Human_Type _HUMAN_TYPE;
60const Eina_Model_Type * const HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE;
61
62static const Whistler_Interface _WHISTLER_INTERFACE;
63static const Eina_Model_Interface * const WHISTLER_INTERFACE =
64 (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
65
66static const Swimmer_Interface _SWIMMER_INTERFACE;
67static const Eina_Model_Interface * const SWIMMER_INTERFACE =
68 (Eina_Model_Interface *) &_SWIMMER_INTERFACE;
69
70static const Diver_Interface _DIVER_INTERFACE;
71static const Eina_Model_Interface * const DIVER_INTERFACE =
72 (Eina_Model_Interface *) &_DIVER_INTERFACE;
73
74/*
75 * defining parent interfaces for Diver Interface instance
76 * defining Interfaces for Human Model instance
77 */
78static const Eina_Model_Interface * PARENT_INTERFACES_ARRAY[] =
79 { &_SWIMMER_INTERFACE.base_interface, NULL }; //this array is for model
80static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] =
81 { &_WHISTLER_INTERFACE.base_interface, &_DIVER_INTERFACE.base_interface,
82 NULL }; //this array is for model
83
84void
85human_init()
86{
87 Eina_Model_Type *type;
88
89 if (initialized) return;
90 initialized = EINA_TRUE;
91
92 animal_init();
93
94 /*
95 * Initializing Whistler Interface Instance
96 */
97 Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
98 iface->version = EINA_MODEL_INTERFACE_VERSION;
99 iface->interface_size = sizeof(Whistler_Interface);
100 iface->name = WHISTLER_INTERFACE_NAME;
101 WHISTLER_INTERFACE(iface)->whistle = _human_whistle;
102
103 /*
104 * Initializing Swimmer Interface Instance
105 */
106 iface = (Eina_Model_Interface *) &_SWIMMER_INTERFACE;
107 iface->version = EINA_MODEL_INTERFACE_VERSION;
108 iface->interface_size = sizeof(Swimmer_Interface);
109 iface->name = SWIMMER_INTERFACE_NAME;
110 SWIMMER_INTERFACE(iface)->swim = _human_swim;
111
112 /*
113 * Initializing Diver Interface Instance
114 * Diver_Interface is inherited from Swimmer
115 */
116 iface = (Eina_Model_Interface *) &_DIVER_INTERFACE;
117 iface->version = EINA_MODEL_INTERFACE_VERSION;
118 iface->interface_size = sizeof(Diver_Interface);
119 iface->name = DIVER_INTERFACE_NAME;
120 iface->interfaces = PARENT_INTERFACES_ARRAY;
121 DIVER_INTERFACE(iface)->dive = _human_dive;
122
123 /*
124 * Initializing instance of Human Model
125 */
126
127 HUMAN_MODEL_TYPE_NAME = "Human_Model_Type";
128
129 type = (Eina_Model_Type *) &_HUMAN_TYPE;
130 type->version = EINA_MODEL_TYPE_VERSION;
131 type->name = HUMAN_MODEL_TYPE_NAME;
132 type->private_size = 0;
133
134 eina_model_type_subclass_setup(type, ANIMAL_TYPE);
135
136 type->type_size = sizeof(Human_Type);
137 type->interfaces = MODEL_INTERFACES_ARRAY;
138
139 ANIMAL_TYPE(type)->eat = _human_eat;
140 HUMAN_TYPE(type)->walk =_human_walk;
141}
142
143
144/*
145 * call for implemented Human Class function
146 */
147void
148human_walk(Eina_Model *m)
149{
150 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, HUMAN_TYPE));
151
152 void (*pf)(Eina_Model *m);
153 pf = eina_model_method_resolve(m, Human_Type, walk);
154 EINA_SAFETY_ON_NULL_RETURN(pf);
155 printf("%s() \t", __func__);
156 pf(m);
157}
diff --git a/libraries/eina/src/examples/eina_model_04_main.c b/libraries/eina/src/examples/eina_model_04_main.c
deleted file mode 100644
index 0e419ec..0000000
--- a/libraries/eina/src/examples/eina_model_04_main.c
+++ /dev/null
@@ -1,110 +0,0 @@
1/*
2 * main_animal.c
3 * compile with: gcc eina_model_04_*.c -o eina_model_04 `pkg-config --cflags --libs eina`
4 */
5
6/*
7 * This example demonstrates the extended usage of Eina Model.
8 * Class inheritance and interface implementation
9 *
10 * Animal Class is inherited from BaseClass and implements
11 * "_breathe_animal()" and "_eat_animal()" methods.
12 *
13 * Human Class is inherited from Animal class.
14 * Parrot Class is inherited from Animal class.
15 *
16 * Child Class is inherited from Human class.
17 *
18 * Human Class and Parrot Class implement Whistler Interface.
19 * Human Class implements Diver Interface. Diver Interface inherited from Swimmer Interface
20 *
21 *
22 * Animal Class (inherited from Base Class)
23 * + _breathe_animal()
24 * + _eat_animal()
25 * / -------/ \-------------\
26 * / \
27 * Human Class Parrot Class
28 * inherits inherits
29 * + animal_breathe() + animal_breathe()
30 * overrides overrides
31 * + animal_eat(); + animal_eat();
32 * implements implements
33 * + human_walk(); + parrot_fly();
34 *
35 * implements Whistler, Swimmer, implements Whistler,
36 * Diver Interfaces: + whistler_whistle()
37 * + whistler_whistle()
38 * + swimmer_swim()
39 * + diver_dive()
40 *
41 * ----------------------------------------------------------
42 * | Swim_Interface |
43 * | + swim() |
44 * | | |
45 * | | |
46 * | Dive Intarface (inherited from Swim Interface) |
47 * | + dive() |
48 * ---------------------------------------------------------
49 * |
50 * |
51 * Child Class
52 * + inherits all parent's methods
53 * + implements cry_child()
54 * + overrides dive() interface method
55 */
56
57#include <Eina.h>
58#include "eina_model_04_human.h"
59#include "eina_model_04_parrot.h"
60#include "eina_model_04_child.h"
61#include "eina_model_04_whistler.h"
62
63int
64main()
65{
66 Eina_Model *h, *p, *c;
67
68 eina_init();
69
70 human_init();
71 parrot_init();
72 child_init();
73
74 h = eina_model_new(HUMAN_TYPE);
75 p = eina_model_new(PARROT_TYPE);
76 c = eina_model_new(CHILD_TYPE);
77
78 animal_breathe(p);
79 animal_eat(p);
80 parrot_fly(p);
81 whistler_whistle(p);
82
83 printf("\n");
84 animal_breathe(h);
85 animal_eat(h);
86 human_walk(h);
87 whistler_whistle(h);
88 swimmer_swim(h);
89 diver_dive(h);
90
91 printf("\n");
92 animal_breathe(c);
93 animal_eat(c);
94 human_walk(c);
95 whistler_whistle(c);
96 swimmer_swim(c);
97 diver_dive(c);
98 child_cry(c);
99
100 eina_model_unref(c);
101 eina_model_unref(h);
102 eina_model_unref(p);
103
104 eina_shutdown();
105
106 return 0;
107}
108
109
110
diff --git a/libraries/eina/src/examples/eina_model_04_parrot.c b/libraries/eina/src/examples/eina_model_04_parrot.c
deleted file mode 100644
index ac619ee..0000000
--- a/libraries/eina/src/examples/eina_model_04_parrot.c
+++ /dev/null
@@ -1,95 +0,0 @@
1/*
2 * parrot.c
3 */
4
5#include "eina_model_04_parrot.h"
6#include "eina_model_04_whistler.h"
7
8static Eina_Bool initialized = EINA_FALSE;
9
10static void
11_parrot_fly(Eina_Model *m)
12{
13 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
14 __func__);
15 printf("\t\t Fly Parrot\n");
16}
17
18static void
19_parrot_eat(Eina_Model *m)
20{
21 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
22 __func__);
23 printf("\t\t Grain \n");
24}
25
26static void
27_parrot_whistle(Eina_Model *m)
28{
29 printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)),
30 __func__);
31 printf("\t\t Whistle Parrot\n");
32}
33
34/*
35 * defining Parrot Model Instance
36 * defining Whistler Interface instance
37 */
38const char *PARROT_MODEL_TYPE_NAME = NULL;
39
40static Parrot_Type _PARROT_TYPE;
41const Eina_Model_Type * const PARROT_TYPE = (Eina_Model_Type *) &_PARROT_TYPE;
42
43static const Whistler_Interface _WHISTLER_INTERFACE;
44static const Eina_Model_Interface * const WHISTLER_INTERFACE =
45 (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
46
47static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] =
48 { &_WHISTLER_INTERFACE.base_interface, NULL }; //this array is for model
49
50void
51parrot_init()
52{
53 Eina_Model_Type *type;
54 if (initialized) return;
55 initialized = EINA_TRUE;
56
57 animal_init();
58 /*
59 *overriding Whistler Interface (creating instance of Whistler Interface)
60 */
61 Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE;
62 iface->version = EINA_MODEL_INTERFACE_VERSION;
63 iface->interface_size = sizeof(Whistler_Interface);
64 iface->name = WHISTLER_INTERFACE_NAME;
65 WHISTLER_INTERFACE(iface)->whistle = _parrot_whistle;
66
67 PARROT_MODEL_TYPE_NAME = "Parrot_Model_Type";
68
69 type = (Eina_Model_Type *)&_PARROT_TYPE;
70 type->version = EINA_MODEL_TYPE_VERSION;
71 type->name = PARROT_MODEL_TYPE_NAME;
72 type->private_size = 0;
73
74 eina_model_type_subclass_setup(type, ANIMAL_TYPE);
75
76 type->type_size = sizeof(Parrot_Type);
77 type->interfaces = MODEL_INTERFACES_ARRAY;
78
79 ANIMAL_TYPE(type)->eat = _parrot_eat;
80 PARROT_TYPE(type)->fly = _parrot_fly;
81}
82
83
84void
85parrot_fly(Eina_Model *m)
86{
87 EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, PARROT_TYPE));
88
89 void (*pf)(Eina_Model *m);
90 pf = eina_model_method_resolve(m, Parrot_Type, fly);
91 EINA_SAFETY_ON_NULL_RETURN(pf);
92 printf("%s() \t", __func__);
93 pf(m);
94}
95
diff --git a/libraries/eina/src/examples/eina_model_04_whistler.c b/libraries/eina/src/examples/eina_model_04_whistler.c
deleted file mode 100644
index ed9832f..0000000
--- a/libraries/eina/src/examples/eina_model_04_whistler.c
+++ /dev/null
@@ -1,59 +0,0 @@
1/*
2 * whistler.c
3 *
4 */
5
6#include "eina_model_04_whistler.h"
7
8void
9whistler_whistle(Eina_Model *m)
10{
11 const Eina_Model_Interface *iface = NULL;
12 iface = eina_model_interface_get(m, WHISTLER_INTERFACE_NAME);
13
14 EINA_SAFETY_ON_NULL_RETURN(iface);
15
16 void (*pf)(Eina_Model *);
17
18 pf = eina_model_interface_method_resolve(iface, m, Whistler_Interface, whistle);
19 EINA_SAFETY_ON_NULL_RETURN(pf);
20 printf("%s() \t", __func__);
21 pf(m);
22}
23/*
24 * call for overridden Swimmer Interface function
25 */
26void
27swimmer_swim(Eina_Model *m)
28{
29 const Eina_Model_Interface *iface = NULL;
30 iface = eina_model_interface_get(m, SWIMMER_INTERFACE_NAME);
31
32 EINA_SAFETY_ON_NULL_RETURN(iface);
33
34 void (*pf)(Eina_Model *);
35
36 pf = eina_model_interface_method_resolve(iface, m, Swimmer_Interface, swim);
37 EINA_SAFETY_ON_NULL_RETURN(pf);
38 printf("%s() \t", __func__);
39 pf(m);
40}
41
42/*
43 * call for overridden Diver Interface function
44 */
45void
46diver_dive(Eina_Model *m)
47{
48 const Eina_Model_Interface *iface = NULL;
49 iface = eina_model_interface_get(m, DIVER_INTERFACE_NAME);
50
51 EINA_SAFETY_ON_NULL_RETURN(iface);
52
53 void (*pf)(Eina_Model *);
54
55 pf = eina_model_interface_method_resolve(iface, m, Diver_Interface, dive);
56 EINA_SAFETY_ON_NULL_RETURN(pf);
57 printf("%s() \t", __func__);
58 pf(m);
59}
diff --git a/libraries/eina/src/examples/eina_str_01.c b/libraries/eina/src/examples/eina_str_01.c
deleted file mode 100644
index 089a766..0000000
--- a/libraries/eina/src/examples/eina_str_01.c
+++ /dev/null
@@ -1,65 +0,0 @@
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
deleted file mode 100644
index eddfccf..0000000
--- a/libraries/eina/src/examples/eina_strbuf_01.c
+++ /dev/null
@@ -1,41 +0,0 @@
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
deleted file mode 100644
index 6202a88..0000000
--- a/libraries/eina/src/examples/eina_tiler_01.c
+++ /dev/null
@@ -1,316 +0,0 @@
1//Compile with:
2//gcc eina_tiler_01.c -o eina_tiler_01 `pkg-config --cflags --libs ecore-evas ecore evas eina`
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/examples/eina_value_01.c b/libraries/eina/src/examples/eina_value_01.c
deleted file mode 100644
index 8a20828..0000000
--- a/libraries/eina/src/examples/eina_value_01.c
+++ /dev/null
@@ -1,53 +0,0 @@
1//Compile with:
2//gcc eina_value_01.c -o eina_value_01 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5
6int main(int argc, char **argv)
7{
8 Eina_Value v;
9 int i;
10 char *newstr;
11
12 eina_init();
13
14 eina_value_setup(&v, EINA_VALUE_TYPE_INT);
15 eina_value_set(&v, 123);
16 eina_value_get(&v, &i);
17 printf("v=%d\n", i);
18
19 newstr = eina_value_to_string(&v);
20 printf("v as string: %s\n", newstr);
21 free(newstr); // it was allocated by eina_value_to_string()
22 eina_value_flush(&v); // destroy v contents, will not use anymore
23
24 const char *s;
25 eina_value_setup(&v, EINA_VALUE_TYPE_STRING);
26 eina_value_set(&v, "My string");
27 eina_value_get(&v, &s);
28 printf("v=%s (pointer: %p)\n", s, s);
29
30 newstr = eina_value_to_string(&v);
31 printf("v as string: %s (pointer: %p)\n", newstr, newstr);
32 free(newstr); // it was allocated by eina_value_to_string()
33 eina_value_flush(&v); // destroy v contents, string 's' is not valid anymore!
34
35 Eina_Value otherv;
36 eina_value_setup(&otherv, EINA_VALUE_TYPE_STRING);
37 eina_value_setup(&v, EINA_VALUE_TYPE_INT);
38
39 // convert from int to string:
40 eina_value_set(&v, 123);
41 eina_value_convert(&v, &otherv);
42 eina_value_get(&otherv, &s);
43 printf("otherv=%s\n", s);
44
45 // and the other way around!
46 eina_value_set(&otherv, "33");
47 eina_value_convert(&otherv, &v);
48 eina_value_get(&v, &i);
49 printf("v=%d\n", i);
50
51 eina_value_flush(&otherv);
52 eina_value_flush(&v);
53}
diff --git a/libraries/eina/src/examples/eina_value_02.c b/libraries/eina/src/examples/eina_value_02.c
deleted file mode 100644
index 9c659ec..0000000
--- a/libraries/eina/src/examples/eina_value_02.c
+++ /dev/null
@@ -1,100 +0,0 @@
1//Compile with:
2//gcc eina_value_02.c -o eina_value_02 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5
6static Eina_Value_Struct_Desc *V1_DESC = NULL;
7static Eina_Value_Struct_Desc *V2_DESC = NULL;
8
9void value_init(void)
10{
11 typedef struct _My_Struct_V1 {
12 int param1;
13 char param2;
14 } My_Struct_V1;
15
16
17 static Eina_Value_Struct_Member v1_members[] = {
18 // no eina_value_type as they are not constant initializers, see below.
19 EINA_VALUE_STRUCT_MEMBER(NULL, My_Struct_V1, param1),
20 EINA_VALUE_STRUCT_MEMBER(NULL, My_Struct_V1, param2)
21 };
22 v1_members[0].type = EINA_VALUE_TYPE_INT;
23 v1_members[1].type = EINA_VALUE_TYPE_CHAR;
24 static Eina_Value_Struct_Desc v1_desc = {
25 EINA_VALUE_STRUCT_DESC_VERSION,
26 NULL, // no special operations
27 v1_members,
28 EINA_C_ARRAY_LENGTH(v1_members),
29 sizeof(My_Struct_V1)
30 };
31 V1_DESC = &v1_desc;
32
33 typedef struct _My_Struct_V2 {
34 int param1;
35 char param2;
36 int param3;
37 } My_Struct_V2;
38 static Eina_Value_Struct_Member v2_members[] = {
39 // no eina_value_type as they are not constant initializers, see below.
40 EINA_VALUE_STRUCT_MEMBER(NULL, My_Struct_V2, param1),
41 EINA_VALUE_STRUCT_MEMBER(NULL, My_Struct_V2, param2),
42 EINA_VALUE_STRUCT_MEMBER(NULL, My_Struct_V2, param3)
43 };
44 v2_members[0].type = EINA_VALUE_TYPE_INT;
45 v2_members[1].type = EINA_VALUE_TYPE_CHAR;
46 v2_members[2].type = EINA_VALUE_TYPE_INT;
47 static Eina_Value_Struct_Desc v2_desc = {
48 EINA_VALUE_STRUCT_DESC_VERSION,
49 NULL, // no special operations
50 v2_members,
51 EINA_C_ARRAY_LENGTH(v2_members),
52 sizeof(My_Struct_V2)
53 };
54 V2_DESC = &v2_desc;
55}
56
57void rand_init(Eina_Value *v)
58{
59 if (v->type != EINA_VALUE_TYPE_STRUCT)
60 return;
61
62 eina_value_struct_set(v, "param1", rand());
63 eina_value_struct_set(v, "param2", rand() % 256);
64 eina_value_struct_set(v, "param3", rand());
65}
66
67void my_struct_use(Eina_Value *params)
68{
69 int p1, p3;
70 char p2;
71
72 eina_value_struct_get(params, "param1", &p1);
73 eina_value_struct_get(params, "param2", &p2);
74 printf("param1: %d\nparam2: %c\n", p1, p2);
75
76 if (eina_value_struct_get(params, "param3", &p3))
77 printf("param3: %d\n", p3);
78}
79
80int main(int argc, char **argv)
81{
82 Eina_Value *v1, *v2;
83
84 eina_init();
85 value_init();
86 srand(time(NULL));
87
88 v1 = eina_value_struct_new(V1_DESC);
89 v2 = eina_value_struct_new(V2_DESC);
90
91 rand_init(v1);
92 my_struct_use(v1);
93
94 rand_init(v2);
95 my_struct_use(v2);
96
97 eina_value_free(v1);
98 eina_value_free(v2);
99 eina_shutdown();
100}
diff --git a/libraries/eina/src/examples/eina_value_03.c b/libraries/eina/src/examples/eina_value_03.c
deleted file mode 100644
index 85f42b3..0000000
--- a/libraries/eina/src/examples/eina_value_03.c
+++ /dev/null
@@ -1,178 +0,0 @@
1//Compile with:
2//gcc eina_value_03.c -o eina_value_03 `pkg-config --cflags --libs eina`
3
4#include <Eina.h>
5#include <sys/time.h>
6
7static Eina_Bool
8_tz_setup(const Eina_Value_Type *type, void *mem)
9{
10 memset(mem, 0, type->value_size);
11 return EINA_TRUE;
12}
13
14static Eina_Bool
15_tz_flush(const Eina_Value_Type *type, void *mem)
16{
17 return EINA_TRUE;
18}
19
20static Eina_Bool
21_tz_copy(const Eina_Value_Type *type, const void *src, void * dst)
22{
23 struct timezone *tzsrc = src;
24 struct timezone *tzdst = dst;
25 *tzdst = *tzsrc;
26 return EINA_TRUE;
27}
28
29static Eina_Bool
30_tz_compare(const Eina_Value_Type *type, const void *a, const void *b)
31{
32 struct timezone tza = *(struct timezone*)a;
33 struct timezone tzb = *(struct timezone*)b;
34
35 if (tza.tz_minuteswest < tzb.tz_minuteswest)
36 return -1;
37 else if (tza.tz_minuteswest > tzb.tz_minuteswest)
38 return 1;
39 return 0;
40}
41
42static Eina_Bool
43_tz_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
44{
45 *(struct timezone*)mem = *(struct timezone*)ptr;
46 return EINA_TRUE;
47}
48
49static Eina_Bool
50_tz_vset(const Eina_Value_Type *type, void *mem, va_list args)
51{
52 const struct timezone tz = va_arg(args, struct timezone);
53 return _tz_pset(type, mem, &tz);
54}
55
56static Eina_Bool
57_tz_pget(const Eina_Value_Type *type, const void *mem, void *ptr)
58{
59 memcpy(ptr, mem, type->value_size);
60 return EINA_TRUE;
61}
62
63static Eina_Bool
64_tz_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
65{
66 struct timezone v = *(struct timezone*)type_mem;
67
68 eina_error_set(0);
69
70 if (convert == EINA_VALUE_TYPE_UCHAR)
71 {
72 unsigned char other_mem = v.tz_minuteswest;
73 return eina_value_type_pset(convert, convert_mem, &other_mem);
74 }
75 else if (convert == EINA_VALUE_TYPE_USHORT)
76 {
77 unsigned short other_mem = v.tz_minuteswest;
78 return eina_value_type_pset(convert, convert_mem, &other_mem);
79 }
80 else if (convert == EINA_VALUE_TYPE_UINT)
81 {
82 unsigned int other_mem = v.tz_minuteswest;
83 return eina_value_type_pset(convert, convert_mem, &other_mem);
84 }
85 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
86 {
87 unsigned long other_mem = v.tz_minuteswest;
88 return eina_value_type_pset(convert, convert_mem, &other_mem);
89 }
90 else if (convert == EINA_VALUE_TYPE_UINT64)
91 {
92 uint64_t other_mem = v.tz_minuteswest;
93 return eina_value_type_pset(convert, convert_mem, &other_mem);
94 }
95 else if (convert == EINA_VALUE_TYPE_CHAR)
96 {
97 char other_mem = v.tz_minuteswest;
98 return eina_value_type_pset(convert, convert_mem, &other_mem);
99 }
100 else if (convert == EINA_VALUE_TYPE_SHORT)
101 {
102 short other_mem = v.tz_minuteswest;
103 return eina_value_type_pset(convert, convert_mem, &other_mem);
104 }
105 else if (convert == EINA_VALUE_TYPE_INT)
106 {
107 int other_mem = v.tz_minuteswest;
108 return eina_value_type_pset(convert, convert_mem, &other_mem);
109 }
110 else if (convert == EINA_VALUE_TYPE_LONG)
111 {
112 long other_mem = v.tz_minuteswest;
113 return eina_value_type_pset(convert, convert_mem, &other_mem);
114 }
115 else if (convert == EINA_VALUE_TYPE_INT64)
116 {
117 int64_t other_mem = v.tz_minuteswest;
118 return eina_value_type_pset(convert, convert_mem, &other_mem);
119 }
120 else if (convert == EINA_VALUE_TYPE_FLOAT)
121 return eina_value_type_pset(convert, convert_mem, &v.tz_minuteswest);
122 else if (convert == EINA_VALUE_TYPE_DOUBLE)
123 return eina_value_type_pset(convert, convert_mem, &v.tz_minuteswest);
124 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
125 convert == EINA_VALUE_TYPE_STRING)
126 {
127 const char *other_mem;
128 char buf[64];
129 snprintf(buf, sizeof(buf), "%d", v.tz_minuteswest);
130 other_mem = buf; /* required due &buf == buf */
131 return eina_value_type_pset(convert, convert_mem, &other_mem);
132 }
133
134 eina_error_set(EINA_ERROR_VALUE_FAILED);
135 return EINA_FALSE;
136}
137
138static Eina_Value_Type TZ_TYPE = {
139 EINA_VALUE_TYPE_VERSION,
140 sizeof(struct timezone),
141 "struct timezone",
142 _tz_setup,
143 _tz_flush,
144 _tz_copy,
145 _tz_compare,
146 _tz_convert_to,
147 NULL, //No convert from
148 _tz_vset,
149 _tz_pset,
150 _tz_pget
151};
152
153int main(int argc, char **argv)
154{
155 Eina_Value vtv, vtz;
156 struct timeval tv;
157 struct timezone tz;
158 char *s;
159
160 eina_init();
161
162 eina_value_setup(&vtv, EINA_VALUE_TYPE_TIMEVAL);
163 eina_value_setup(&vtz, &TZ_TYPE);
164
165 gettimeofday(&tv, &tz);
166 eina_value_set(&vtv, tv);
167 eina_value_set(&vtz, tz);
168
169 s = eina_value_to_string(&vtv);
170 printf("time: %s\n", s);
171 free(s);
172 s = eina_value_to_string(&vtz);
173 printf("timezone: %s\n", s);
174 free(s);
175
176 eina_value_flush(&vtz);
177 eina_value_flush(&vtv);
178}
diff --git a/libraries/eina/src/include/Eina.h b/libraries/eina/src/include/Eina.h
deleted file mode 100644
index d99b129..0000000
--- a/libraries/eina/src/include/Eina.h
+++ /dev/null
@@ -1,233 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008-2012 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 * Jonas M. Gastal <jgastal@profusion.mobi>
20 *
21 * This library is free software; you can redistribute it and/or
22 * modify it under the terms of the GNU Lesser General Public
23 * License as published by the Free Software Foundation; either
24 * version 2.1 of the License, or (at your option) any later version.
25 *
26 * This library is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29 * Lesser General Public License for more details.
30 *
31 * You should have received a copy of the GNU Lesser General Public
32 * License along with this library;
33 * if not, see <http://www.gnu.org/licenses/>.
34 */
35
36#ifndef EINA_H_
37#define EINA_H_
38
39/**
40 * @file
41 * @brief Eina Utility library
42 *
43 * These routines are used for Eina.
44 */
45
46/**
47 * @mainpage Eina
48 *
49 * @version 1.1
50 * @date 2008-2012
51 *
52 * @section eina_intro_sec Introduction
53 *
54 * The Eina library is a library that implements an API for data types
55 * in an efficient way. It also provides some useful tools like
56 * opening shared libraries, errors management, type conversion,
57 * time accounting and memory pool.
58 *
59 * This library is cross-platform and can be compiled and used on
60 * Linux, BSD, Opensolaris and Windows (XP and CE).
61 *
62 * The data types that are available are (see @ref Eina_Data_Types_Group):
63 * @li @ref Eina_Inline_Array_Group standard array of inlined members.
64 * @li @ref Eina_Array_Group standard array of @c void* data.
65 * @li @ref Eina_Hash_Group standard hash of @c void* data.
66 * @li @ref Eina_Inline_List_Group list with nodes inlined into user type.
67 * @li @ref Eina_CList_Group Compact List.
68 * @li @ref Eina_List_Group standard list of @c void* data.
69 * @li @ref Eina_Iterator_Group Iterator functions.
70 * @li @ref Eina_Matrixsparse_Group sparse matrix of @c void* data.
71 * @li @ref Eina_Rbtree_Group red-black tree with nodes inlined into user type.
72 * @li @ref Eina_String_Buffer_Group mutable string to prepend, insert or append strings to a buffer.
73 * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references.
74 * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions.
75 * @li @ref Eina_Trash_Group container of unused but allocated data.
76 * @li @ref Eina_Value_Group container for generic value storage and access.
77 * @li @ref Eina_Model_Group container for data with user defined hierarchy/structure.
78 *
79 * The tools that are available are (see @ref Eina_Tools_Group):
80 * @li @ref Eina_Benchmark_Group helper to write benchmarks.
81 * @li @ref Eina_Convert_Group faster conversion from strings to integers, double, etc.
82 * @li @ref Eina_Counter_Group measures number of calls and their time.
83 * @li @ref Eina_Error_Group error identifiers.
84 * @li @ref Eina_File_Group simple file list and path split.
85 * @li @ref Eina_Lalloc_Group simple lazy allocator.
86 * @li @ref Eina_Log_Group full-featured logging system.
87 * @li @ref Eina_Magic_Group provides runtime type checking.
88 * @li @ref Eina_Memory_Pool_Group abstraction for various memory allocators.
89 * @li @ref Eina_Module_Group lists, loads and share modules using Eina_Module standard.
90 * @li @ref Eina_Rectangle_Group rectangle structure and standard manipulation methods.
91 * @li @ref Eina_Safety_Checks_Group extra checks that will report unexpected conditions and can be disabled at compile time.
92 * @li @ref Eina_String_Group a set of functions that manages C strings.
93 *
94 * Please see the @ref authors page for contact details.
95 *
96 * @defgroup Eina_Data_Types_Group Data Types
97 *
98 * Eina provide easy to use and optimized data types and structures.
99 *
100 *
101 * @defgroup Eina_Containers_Group Containers
102 *
103 * Containers are data types that hold data and allow iteration over
104 * their elements with an @ref Eina_Iterator_Group, or eventually an
105 * @ref Eina_Accessor_Group.
106 *
107 * The containers in eina are designed with performance in mind, one consequence
108 * of this is that they @b don't check the validity of data structures given to
109 * them(@ref Eina_Magic_Group).
110 *
111 * The choice of which container to use in each situation is very important in
112 * achieving good performance and readable code. The most common container types
113 * to be used are:
114 * @li List
115 * @li Inline list
116 * @li Array
117 * @li Inline array
118 * @li Hash
119 *
120 * All types have virtues and vices. The following considerations are good
121 * starting point in deciding which container to use:
122 * @li Hashes are appropriate for datasets which will be searched often;
123 * @li arrays are good when accessing members by position;
124 * @li lists provide good versatility for adding elements in any position with
125 * minimal overhead;
126 * @li inline arrays use very little memory and don't cause fragmentation and
127 * therefore are a good option in memory constrained systems;
128 * @li inline lists are the appropriate type to use when the flexibility of a
129 * list is required but the overhead of pointer indirection is not acceptable.
130 * @warning These are general considerations, every situation is different,
131 * don't follow these recommendations blindly.
132 *
133 * @defgroup Eina_Tools_Group Tools
134 *
135 * Eina tools aims to help application development, providing ways to
136 * make it safer, log errors, manage memory more efficiently and more.
137 *
138 */
139
140/**
141 *
142 * @page authors Authors
143 *
144 * @author Albin "Lutin" Tonnerre <albin.tonnerre@@gmail.com>
145 * @author Alexandre "diaxen" Becoulet <diaxen@@free.fr>
146 * @author Andre Dieb <andre.dieb@@gmail.com>
147 * @author Arnaud de Turckheim "quarium" <quarium@@gmail.com>
148 * @author Carsten Haitzler <raster@@rasterman.com>
149 * @author Cedric Bail <cedric.bail@@free.fr>
150 * @author Corey "atmos" Donohoe <atmos@@atmos.org>
151 * @author Vincent "caro" Torri <vtorri at univ-evry dot fr>
152 * @author Fabiano Fidêncio <fidencio@@profusion.mobi>
153 * @author Gustavo Chaves <glima@@profusion.mobi>
154 * @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi>
155 * @author Jorge Luis "turran" Zapata <jorgeluis.zapata@@gmail.com>
156 * @author Tilman Sauerbeck <tilman@@code-monkey.de>
157 * @author Peter "pfritz" Wehrfritz <peter.wehrfritz@@web.de>
158 * @author Raphael Kubo da Costa <kubo@@profusion.mobi>
159 * @author Tom Hacohen <tom@@stosb.com>
160 * @author Brett Nash <nash@@nash.id.au>
161 * @author Sebastian Dransfeld <sd@@tango.flipp.net>
162 * @author Myungjae Lee <mjae.lee@@samsung.com>
163 * @author Youness Alaoui <kakaroto@@kakaroto.homelinux.net>
164 * @author Boris "billiob" Faure <billiob@@gmail.com>
165 * @author Sung W. Park <sungwoo@@gmail.com>
166 * @author Guillaume Friloux <guillaume.friloux@@asp64.com>
167 *
168 * Please contact <enlightenment-devel@lists.sourceforge.net> to get in
169 * contact with the developers and maintainers.
170 *
171 */
172
173#ifdef _WIN32
174# include <Evil.h>
175#endif
176
177#ifdef __cplusplus
178extern "C" {
179#endif
180
181#include "eina_config.h"
182#include "eina_types.h"
183#include "eina_main.h"
184#include "eina_fp.h"
185#include "eina_rectangle.h"
186#include "eina_clist.h"
187#include "eina_inlist.h"
188#include "eina_file.h"
189#include "eina_list.h"
190#include "eina_hash.h"
191#include "eina_trash.h"
192#include "eina_lalloc.h"
193#include "eina_module.h"
194#include "eina_mempool.h"
195#include "eina_error.h"
196#include "eina_log.h"
197#include "eina_inarray.h"
198#include "eina_array.h"
199#include "eina_binshare.h"
200#include "eina_stringshare.h"
201#include "eina_ustringshare.h"
202#include "eina_magic.h"
203#include "eina_counter.h"
204#include "eina_rbtree.h"
205#include "eina_accessor.h"
206#include "eina_iterator.h"
207#include "eina_benchmark.h"
208#include "eina_convert.h"
209#include "eina_cpu.h"
210#include "eina_sched.h"
211#include "eina_tiler.h"
212#include "eina_hamster.h"
213#include "eina_matrixsparse.h"
214#include "eina_str.h"
215#include "eina_strbuf.h"
216#include "eina_binbuf.h"
217#include "eina_ustrbuf.h"
218#include "eina_unicode.h"
219#include "eina_quadtree.h"
220#include "eina_simple_xml_parser.h"
221#include "eina_lock.h"
222#include "eina_prefix.h"
223#include "eina_refcount.h"
224#include "eina_mmap.h"
225#include "eina_xattr.h"
226#include "eina_value.h"
227#include "eina_model.h"
228
229#ifdef __cplusplus
230}
231#endif
232
233#endif /* EINA_H */
diff --git a/libraries/eina/src/include/Makefile.am b/libraries/eina/src/include/Makefile.am
deleted file mode 100644
index 31ef71e..0000000
--- a/libraries/eina/src/include/Makefile.am
+++ /dev/null
@@ -1,94 +0,0 @@
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_inline_clist.x \
18eina_inarray.h \
19eina_inlist.h \
20eina_list.h \
21eina_file.h \
22eina_mempool.h \
23eina_module.h \
24eina_rectangle.h \
25eina_types.h \
26eina_array.h \
27eina_counter.h \
28eina_inline_array.x \
29eina_magic.h \
30eina_stringshare.h \
31eina_binshare.h \
32eina_binbuf.h \
33eina_ustringshare.h \
34eina_inline_stringshare.x \
35eina_inline_ustringshare.x \
36eina_inline_list.x \
37eina_accessor.h \
38eina_convert.h \
39eina_rbtree.h \
40eina_benchmark.h \
41eina_inline_rbtree.x \
42eina_inline_mempool.x \
43eina_inline_rectangle.x \
44eina_inline_trash.x \
45eina_trash.h \
46eina_iterator.h \
47eina_main.h \
48eina_cpu.h \
49eina_sched.h \
50eina_tiler.h \
51eina_hamster.h \
52eina_matrixsparse.h \
53eina_inline_tiler.x \
54eina_str.h \
55eina_inline_str.x \
56eina_strbuf.h \
57eina_ustrbuf.h \
58eina_unicode.h \
59eina_quadtree.h \
60eina_simple_xml_parser.h \
61eina_lock.h \
62eina_prefix.h \
63eina_refcount.h \
64eina_mmap.h \
65eina_xattr.h \
66eina_value.h \
67eina_inline_value.x \
68eina_model.h
69
70# Will be back for developper after 1.1.
71# eina_object.h
72
73if EINA_HAVE_THREADS
74if EINA_HAVE_WINCE
75EINAHEADERS += eina_inline_lock_wince.x
76else
77if EINA_HAVE_WIN32
78EINAHEADERS += eina_inline_lock_win32.x
79else
80EINAHEADERS += eina_inline_lock_posix.x
81endif
82endif
83else
84EINAHEADERS += eina_inline_lock_void.x
85endif
86
87installed_mainheaderdir = $(includedir)/eina-@VMAJ@
88dist_installed_mainheader_DATA = Eina.h eina_config.h
89
90installed_headersdir = $(includedir)/eina-@VMAJ@/eina
91dist_installed_headers_DATA = $(EINAHEADERS)
92
93EXTRA_DIST = \
94eina_config.h.in
diff --git a/libraries/eina/src/include/Makefile.in b/libraries/eina/src/include/Makefile.in
deleted file mode 100644
index 7e819b8..0000000
--- a/libraries/eina/src/include/Makefile.in
+++ /dev/null
@@ -1,570 +0,0 @@
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/eina/eina_bench.m4 \
50 $(top_srcdir)/m4/eina/eina_check.m4 \
51 $(top_srcdir)/m4/common/efl_attribute.m4 \
52 $(top_srcdir)/m4/common/efl_benchmark.m4 \
53 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
54 $(top_srcdir)/m4/common/efl_coverage.m4 \
55 $(top_srcdir)/m4/common/efl_cpu.m4 \
56 $(top_srcdir)/m4/common/efl_doxygen.m4 \
57 $(top_srcdir)/m4/common/efl_examples.m4 \
58 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
59 $(top_srcdir)/m4/common/efl_path_max.m4 \
60 $(top_srcdir)/m4/common/efl_tests.m4 \
61 $(top_srcdir)/m4/common/efl_threads.m4 \
62 $(top_srcdir)/m4/common/efl_voltron.m4 \
63 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
64 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
65 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
66 $(top_srcdir)/configure.ac
67am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
68 $(ACLOCAL_M4)
69mkinstalldirs = $(install_sh) -d
70CONFIG_HEADER = $(top_builddir)/config.h
71CONFIG_CLEAN_FILES = eina_config.h
72CONFIG_CLEAN_VPATH_FILES =
73AM_V_GEN = $(am__v_GEN_$(V))
74am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
75am__v_GEN_0 = @echo " GEN " $@;
76AM_V_at = $(am__v_at_$(V))
77am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
78am__v_at_0 = @
79SOURCES =
80DIST_SOURCES =
81am__dist_installed_headers_DATA_DIST = eina_safety_checks.h \
82 eina_error.h eina_log.h eina_inline_log.x eina_fp.h \
83 eina_inline_f32p32.x eina_inline_f16p16.x eina_inline_f8p24.x \
84 eina_inline_fp.x eina_hash.h eina_inline_hash.x eina_lalloc.h \
85 eina_clist.h eina_inline_clist.x eina_inarray.h eina_inlist.h \
86 eina_list.h eina_file.h eina_mempool.h eina_module.h \
87 eina_rectangle.h eina_types.h eina_array.h eina_counter.h \
88 eina_inline_array.x eina_magic.h eina_stringshare.h \
89 eina_binshare.h eina_binbuf.h eina_ustringshare.h \
90 eina_inline_stringshare.x eina_inline_ustringshare.x \
91 eina_inline_list.x eina_accessor.h eina_convert.h \
92 eina_rbtree.h eina_benchmark.h eina_inline_rbtree.x \
93 eina_inline_mempool.x eina_inline_rectangle.x \
94 eina_inline_trash.x eina_trash.h eina_iterator.h eina_main.h \
95 eina_cpu.h eina_sched.h eina_tiler.h eina_hamster.h \
96 eina_matrixsparse.h eina_inline_tiler.x eina_str.h \
97 eina_inline_str.x eina_strbuf.h eina_ustrbuf.h eina_unicode.h \
98 eina_quadtree.h eina_simple_xml_parser.h eina_lock.h \
99 eina_prefix.h eina_refcount.h eina_mmap.h eina_xattr.h \
100 eina_value.h eina_inline_value.x eina_model.h \
101 eina_inline_lock_wince.x eina_inline_lock_win32.x \
102 eina_inline_lock_posix.x eina_inline_lock_void.x
103am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
104am__vpath_adj = case $$p in \
105 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
106 *) f=$$p;; \
107 esac;
108am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
109am__install_max = 40
110am__nobase_strip_setup = \
111 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
112am__nobase_strip = \
113 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
114am__nobase_list = $(am__nobase_strip_setup); \
115 for p in $$list; do echo "$$p $$p"; done | \
116 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
117 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
118 if (++n[$$2] == $(am__install_max)) \
119 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
120 END { for (dir in files) print dir, files[dir] }'
121am__base_list = \
122 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
123 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
124am__installdirs = "$(DESTDIR)$(installed_headersdir)" \
125 "$(DESTDIR)$(installed_mainheaderdir)"
126DATA = $(dist_installed_headers_DATA) \
127 $(dist_installed_mainheader_DATA)
128DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
129ACLOCAL = @ACLOCAL@
130ALLOCA = @ALLOCA@
131AMTAR = @AMTAR@
132AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
133AR = @AR@
134AS = @AS@
135AUTOCONF = @AUTOCONF@
136AUTOHEADER = @AUTOHEADER@
137AUTOMAKE = @AUTOMAKE@
138AWK = @AWK@
139CC = @CC@
140CCDEPMODE = @CCDEPMODE@
141CFLAGS = @CFLAGS@
142CHECK_CFLAGS = @CHECK_CFLAGS@
143CHECK_LIBS = @CHECK_LIBS@
144CPP = @CPP@
145CPPFLAGS = @CPPFLAGS@
146CXX = @CXX@
147CXXCPP = @CXXCPP@
148CXXDEPMODE = @CXXDEPMODE@
149CXXFLAGS = @CXXFLAGS@
150CYGPATH_W = @CYGPATH_W@
151DEFS = @DEFS@
152DEPDIR = @DEPDIR@
153DLLTOOL = @DLLTOOL@
154DSYMUTIL = @DSYMUTIL@
155DUMPBIN = @DUMPBIN@
156ECHO_C = @ECHO_C@
157ECHO_N = @ECHO_N@
158ECHO_T = @ECHO_T@
159ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
160ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
161EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
162EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
163EFL_EINA_BUILD = @EFL_EINA_BUILD@
164EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
165EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
166EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
167EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
168EGREP = @EGREP@
169EINA_CFLAGS = @EINA_CFLAGS@
170EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
171EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
172EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
173EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
174EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
175EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
176EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
177EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
178EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
179EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
180EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
181EINA_LIBS = @EINA_LIBS@
182EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
183EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
184EMEMOA_LIBS = @EMEMOA_LIBS@
185ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
186ESCAPE_LIBS = @ESCAPE_LIBS@
187EVIL_CFLAGS = @EVIL_CFLAGS@
188EVIL_LIBS = @EVIL_LIBS@
189EXEEXT = @EXEEXT@
190EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
191EXOTIC_LIBS = @EXOTIC_LIBS@
192FGREP = @FGREP@
193GLIB_CFLAGS = @GLIB_CFLAGS@
194GLIB_LIBS = @GLIB_LIBS@
195GREP = @GREP@
196INSTALL = @INSTALL@
197INSTALL_DATA = @INSTALL_DATA@
198INSTALL_PROGRAM = @INSTALL_PROGRAM@
199INSTALL_SCRIPT = @INSTALL_SCRIPT@
200INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
201LD = @LD@
202LDFLAGS = @LDFLAGS@
203LIBOBJS = @LIBOBJS@
204LIBS = @LIBS@
205LIBTOOL = @LIBTOOL@
206LIPO = @LIPO@
207LN_S = @LN_S@
208LTLIBOBJS = @LTLIBOBJS@
209MAKEINFO = @MAKEINFO@
210MKDIR_P = @MKDIR_P@
211MODULE_ARCH = @MODULE_ARCH@
212NM = @NM@
213NMEDIT = @NMEDIT@
214OBJDUMP = @OBJDUMP@
215OBJEXT = @OBJEXT@
216OTOOL = @OTOOL@
217OTOOL64 = @OTOOL64@
218PACKAGE = @PACKAGE@
219PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
220PACKAGE_NAME = @PACKAGE_NAME@
221PACKAGE_STRING = @PACKAGE_STRING@
222PACKAGE_TARNAME = @PACKAGE_TARNAME@
223PACKAGE_URL = @PACKAGE_URL@
224PACKAGE_VERSION = @PACKAGE_VERSION@
225PATH_SEPARATOR = @PATH_SEPARATOR@
226PKG_CONFIG = @PKG_CONFIG@
227PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
228PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
229RANLIB = @RANLIB@
230SED = @SED@
231SET_MAKE = @SET_MAKE@
232SHELL = @SHELL@
233STRIP = @STRIP@
234VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
235VALGRIND_LIBS = @VALGRIND_LIBS@
236VERSION = @VERSION@
237VMAJ = @VMAJ@
238abs_builddir = @abs_builddir@
239abs_srcdir = @abs_srcdir@
240abs_top_builddir = @abs_top_builddir@
241abs_top_srcdir = @abs_top_srcdir@
242ac_ct_CC = @ac_ct_CC@
243ac_ct_CXX = @ac_ct_CXX@
244ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
245am__include = @am__include@
246am__leading_dot = @am__leading_dot@
247am__quote = @am__quote@
248am__tar = @am__tar@
249am__untar = @am__untar@
250bindir = @bindir@
251build = @build@
252build_alias = @build_alias@
253build_cpu = @build_cpu@
254build_os = @build_os@
255build_vendor = @build_vendor@
256builddir = @builddir@
257datadir = @datadir@
258datarootdir = @datarootdir@
259dlopen_libs = @dlopen_libs@
260docdir = @docdir@
261dvidir = @dvidir@
262efl_doxygen = @efl_doxygen@
263efl_have_doxygen = @efl_have_doxygen@
264exec_prefix = @exec_prefix@
265have_lcov = @have_lcov@
266host = @host@
267host_alias = @host_alias@
268host_cpu = @host_cpu@
269host_os = @host_os@
270host_vendor = @host_vendor@
271htmldir = @htmldir@
272iconv_libs = @iconv_libs@
273includedir = @includedir@
274infodir = @infodir@
275install_sh = @install_sh@
276libdir = @libdir@
277libexecdir = @libexecdir@
278localedir = @localedir@
279localstatedir = @localstatedir@
280lt_ECHO = @lt_ECHO@
281lt_enable_auto_import = @lt_enable_auto_import@
282mandir = @mandir@
283mkdir_p = @mkdir_p@
284oldincludedir = @oldincludedir@
285pdfdir = @pdfdir@
286pkgconfig_requires_private = @pkgconfig_requires_private@
287prefix = @prefix@
288program_transform_name = @program_transform_name@
289psdir = @psdir@
290release_info = @release_info@
291requirement_eina = @requirement_eina@
292rt_libs = @rt_libs@
293sbindir = @sbindir@
294sharedstatedir = @sharedstatedir@
295srcdir = @srcdir@
296sysconfdir = @sysconfdir@
297target_alias = @target_alias@
298top_build_prefix = @top_build_prefix@
299top_builddir = @top_builddir@
300top_srcdir = @top_srcdir@
301version_info = @version_info@
302MAINTAINERCLEANFILES = Makefile.in
303EINAHEADERS = eina_safety_checks.h eina_error.h eina_log.h \
304 eina_inline_log.x eina_fp.h eina_inline_f32p32.x \
305 eina_inline_f16p16.x eina_inline_f8p24.x eina_inline_fp.x \
306 eina_hash.h eina_inline_hash.x eina_lalloc.h eina_clist.h \
307 eina_inline_clist.x eina_inarray.h eina_inlist.h eina_list.h \
308 eina_file.h eina_mempool.h eina_module.h eina_rectangle.h \
309 eina_types.h eina_array.h eina_counter.h eina_inline_array.x \
310 eina_magic.h eina_stringshare.h eina_binshare.h eina_binbuf.h \
311 eina_ustringshare.h eina_inline_stringshare.x \
312 eina_inline_ustringshare.x eina_inline_list.x eina_accessor.h \
313 eina_convert.h eina_rbtree.h eina_benchmark.h \
314 eina_inline_rbtree.x eina_inline_mempool.x \
315 eina_inline_rectangle.x eina_inline_trash.x eina_trash.h \
316 eina_iterator.h eina_main.h eina_cpu.h eina_sched.h \
317 eina_tiler.h eina_hamster.h eina_matrixsparse.h \
318 eina_inline_tiler.x eina_str.h eina_inline_str.x eina_strbuf.h \
319 eina_ustrbuf.h eina_unicode.h eina_quadtree.h \
320 eina_simple_xml_parser.h eina_lock.h eina_prefix.h \
321 eina_refcount.h eina_mmap.h eina_xattr.h eina_value.h \
322 eina_inline_value.x eina_model.h $(am__append_1) \
323 $(am__append_2) $(am__append_3) $(am__append_4)
324installed_mainheaderdir = $(includedir)/eina-@VMAJ@
325dist_installed_mainheader_DATA = Eina.h eina_config.h
326installed_headersdir = $(includedir)/eina-@VMAJ@/eina
327dist_installed_headers_DATA = $(EINAHEADERS)
328EXTRA_DIST = \
329eina_config.h.in
330
331all: all-am
332
333.SUFFIXES:
334$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
335 @for dep in $?; do \
336 case '$(am__configure_deps)' in \
337 *$$dep*) \
338 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
339 && { if test -f $@; then exit 0; else break; fi; }; \
340 exit 1;; \
341 esac; \
342 done; \
343 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \
344 $(am__cd) $(top_srcdir) && \
345 $(AUTOMAKE) --gnu src/include/Makefile
346.PRECIOUS: Makefile
347Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
348 @case '$?' in \
349 *config.status*) \
350 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
351 *) \
352 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
353 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
354 esac;
355
356$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
357 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
358
359$(top_srcdir)/configure: $(am__configure_deps)
360 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
361$(ACLOCAL_M4): $(am__aclocal_m4_deps)
362 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
363$(am__aclocal_m4_deps):
364eina_config.h: $(top_builddir)/config.status $(srcdir)/eina_config.h.in
365 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
366
367mostlyclean-libtool:
368 -rm -f *.lo
369
370clean-libtool:
371 -rm -rf .libs _libs
372install-dist_installed_headersDATA: $(dist_installed_headers_DATA)
373 @$(NORMAL_INSTALL)
374 test -z "$(installed_headersdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_headersdir)"
375 @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \
376 for p in $$list; do \
377 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
378 echo "$$d$$p"; \
379 done | $(am__base_list) | \
380 while read files; do \
381 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_headersdir)'"; \
382 $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_headersdir)" || exit $$?; \
383 done
384
385uninstall-dist_installed_headersDATA:
386 @$(NORMAL_UNINSTALL)
387 @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \
388 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
389 test -n "$$files" || exit 0; \
390 echo " ( cd '$(DESTDIR)$(installed_headersdir)' && rm -f" $$files ")"; \
391 cd "$(DESTDIR)$(installed_headersdir)" && rm -f $$files
392install-dist_installed_mainheaderDATA: $(dist_installed_mainheader_DATA)
393 @$(NORMAL_INSTALL)
394 test -z "$(installed_mainheaderdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_mainheaderdir)"
395 @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \
396 for p in $$list; do \
397 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
398 echo "$$d$$p"; \
399 done | $(am__base_list) | \
400 while read files; do \
401 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_mainheaderdir)'"; \
402 $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_mainheaderdir)" || exit $$?; \
403 done
404
405uninstall-dist_installed_mainheaderDATA:
406 @$(NORMAL_UNINSTALL)
407 @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \
408 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
409 test -n "$$files" || exit 0; \
410 echo " ( cd '$(DESTDIR)$(installed_mainheaderdir)' && rm -f" $$files ")"; \
411 cd "$(DESTDIR)$(installed_mainheaderdir)" && rm -f $$files
412tags: TAGS
413TAGS:
414
415ctags: CTAGS
416CTAGS:
417
418
419distdir: $(DISTFILES)
420 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
421 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
422 list='$(DISTFILES)'; \
423 dist_files=`for file in $$list; do echo $$file; done | \
424 sed -e "s|^$$srcdirstrip/||;t" \
425 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
426 case $$dist_files in \
427 */*) $(MKDIR_P) `echo "$$dist_files" | \
428 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
429 sort -u` ;; \
430 esac; \
431 for file in $$dist_files; do \
432 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
433 if test -d $$d/$$file; then \
434 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
435 if test -d "$(distdir)/$$file"; then \
436 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
437 fi; \
438 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
439 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
440 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
441 fi; \
442 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
443 else \
444 test -f "$(distdir)/$$file" \
445 || cp -p $$d/$$file "$(distdir)/$$file" \
446 || exit 1; \
447 fi; \
448 done
449check-am: all-am
450check: check-am
451all-am: Makefile $(DATA)
452installdirs:
453 for dir in "$(DESTDIR)$(installed_headersdir)" "$(DESTDIR)$(installed_mainheaderdir)"; do \
454 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
455 done
456install: install-am
457install-exec: install-exec-am
458install-data: install-data-am
459uninstall: uninstall-am
460
461install-am: all-am
462 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
463
464installcheck: installcheck-am
465install-strip:
466 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
467 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
468 `test -z '$(STRIP)' || \
469 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
470mostlyclean-generic:
471
472clean-generic:
473
474distclean-generic:
475 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
476 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
477
478maintainer-clean-generic:
479 @echo "This command is intended for maintainers to use"
480 @echo "it deletes files that may require special tools to rebuild."
481 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
482clean: clean-am
483
484clean-am: clean-generic clean-libtool mostlyclean-am
485
486distclean: distclean-am
487 -rm -f Makefile
488distclean-am: clean-am distclean-generic
489
490dvi: dvi-am
491
492dvi-am:
493
494html: html-am
495
496html-am:
497
498info: info-am
499
500info-am:
501
502install-data-am: install-dist_installed_headersDATA \
503 install-dist_installed_mainheaderDATA
504
505install-dvi: install-dvi-am
506
507install-dvi-am:
508
509install-exec-am:
510
511install-html: install-html-am
512
513install-html-am:
514
515install-info: install-info-am
516
517install-info-am:
518
519install-man:
520
521install-pdf: install-pdf-am
522
523install-pdf-am:
524
525install-ps: install-ps-am
526
527install-ps-am:
528
529installcheck-am:
530
531maintainer-clean: maintainer-clean-am
532 -rm -f Makefile
533maintainer-clean-am: distclean-am maintainer-clean-generic
534
535mostlyclean: mostlyclean-am
536
537mostlyclean-am: mostlyclean-generic mostlyclean-libtool
538
539pdf: pdf-am
540
541pdf-am:
542
543ps: ps-am
544
545ps-am:
546
547uninstall-am: uninstall-dist_installed_headersDATA \
548 uninstall-dist_installed_mainheaderDATA
549
550.MAKE: install-am install-strip
551
552.PHONY: all all-am check check-am clean clean-generic clean-libtool \
553 distclean distclean-generic distclean-libtool distdir dvi \
554 dvi-am html html-am info info-am install install-am \
555 install-data install-data-am \
556 install-dist_installed_headersDATA \
557 install-dist_installed_mainheaderDATA install-dvi \
558 install-dvi-am install-exec install-exec-am install-html \
559 install-html-am install-info install-info-am install-man \
560 install-pdf install-pdf-am install-ps install-ps-am \
561 install-strip installcheck installcheck-am installdirs \
562 maintainer-clean maintainer-clean-generic mostlyclean \
563 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
564 uninstall uninstall-am uninstall-dist_installed_headersDATA \
565 uninstall-dist_installed_mainheaderDATA
566
567
568# Tell versions [3.59,3.63) of GNU make to not export all variables.
569# Otherwise a system limit (for SysV at least) may be exceeded.
570.NOEXPORT:
diff --git a/libraries/eina/src/include/eina_accessor.h b/libraries/eina/src/include/eina_accessor.h
deleted file mode 100644
index cae7a5c..0000000
--- a/libraries/eina/src/include/eina_accessor.h
+++ /dev/null
@@ -1,340 +0,0 @@
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
deleted file mode 100644
index 4ab3b50..0000000
--- a/libraries/eina/src/include/eina_array.h
+++ /dev/null
@@ -1,450 +0,0 @@
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 eina_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 eina_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().
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 eina_array_01_example_page
195 * @li @ref eina_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) EINA_WARN_UNUSED_RESULT;
355static inline unsigned int eina_array_count(const Eina_Array *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
356
357/**
358 * @brief Returned a new iterator associated to an array.
359 *
360 * @param array The array.
361 * @return A new iterator.
362 *
363 * This function returns a newly allocated iterator associated to
364 * @p array. If @p array is @c NULL or the count member of @p array is
365 * less or equal than 0, this function returns NULL. If the memory can
366 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
367 * set. Otherwise, a valid iterator is returned.
368 */
369EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
370
371/**
372 * @brief Returned a new accessor associated to an array.
373 *
374 * @param array The array.
375 * @return A new accessor.
376 *
377 * This function returns a newly allocated accessor associated to
378 * @p array. If @p array is @c NULL or the count member of @p array is
379 * less or equal than 0, this function returns NULL. If the memory can
380 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
381 * set. Otherwise, a valid accessor is returned.
382 */
383EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
384/**
385 * @brief Provide a safe way to iterate over an array
386 *
387 * @param array The array to iterate over.
388 * @param cb The callback to call for each item.
389 * @param fdata The user data to pass to the callback.
390 * @return EINA_TRUE if it successfully iterate all items of the array.
391 *
392 * This function provide a safe way to iterate over an array. @p cb should
393 * return EINA_TRUE as long as you want the function to continue iterating,
394 * by returning EINA_FALSE it will stop and return EINA_FALSE as a result.
395 */
396static inline Eina_Bool eina_array_foreach(Eina_Array *array,
397 Eina_Each_Cb cb,
398 void *fdata);
399/**
400 * @def EINA_ARRAY_ITER_NEXT
401 * @brief Macro to iterate over an array easily.
402 *
403 * @param array The array to iterate over.
404 * @param index The integer number that is increased while itareting.
405 * @param item The data
406 * @param iterator The iterator
407 *
408 * This macro allows the iteration over @p array in an easy way. It
409 * iterates from the first element to the last one. @p index is an
410 * integer that increases from 0 to the number of elements. @p item is
411 * the data of each element of @p array, so it is a pointer to a type
412 * chosen by the user. @p iterator is of type #Eina_Array_Iterator.
413 *
414 * This macro can be used for freeing the data of an array, like in
415 * the following example:
416 *
417 * @code
418 * Eina_Array *array;
419 * char *item;
420 * Eina_Array_Iterator iterator;
421 * unsigned int i;
422 *
423 * // array is already filled,
424 * // its elements are just duplicated strings,
425 * // EINA_ARRAY_ITER_NEXT will be used to free those strings
426 *
427 * EINA_ARRAY_ITER_NEXT(array, i, item, iterator)
428 * free(item);
429 * @endcode
430 */
431#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator) \
432 for (index = 0, iterator = (array)->data; \
433 (index < eina_array_count(array)) && ((item = *((iterator)++))); \
434 ++(index))
435
436#include "eina_inline_array.x"
437
438/**
439 * @}
440 */
441
442/**
443 * @}
444 */
445
446/**
447 * @}
448 */
449
450#endif
diff --git a/libraries/eina/src/include/eina_benchmark.h b/libraries/eina/src/include/eina_benchmark.h
deleted file mode 100644
index 9e96d64..0000000
--- a/libraries/eina/src/include/eina_benchmark.h
+++ /dev/null
@@ -1,453 +0,0 @@
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 count_start, @p count_end and
402 * @p count_step define a loop with a step increment. The integer that is
403 * increasing by @p count_step from @p count_start to @p count_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_step);
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
deleted file mode 100644
index 7c3524b..0000000
--- a/libraries/eina/src/include/eina_binbuf.h
+++ /dev/null
@@ -1,235 +0,0 @@
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 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_binbuf_string_steal . The passed string must be malloced.
55 *
56 * @param str the string to manage
57 * @param length the length of the string.
58 * @return Newly allocated string buffer instance.
59 *
60 * This function creates a new string buffer. On error, @c NULL is
61 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
62 * free the resources, use eina_binbuf_free().
63 *
64 * @see eina_binbuf_manage_new()
65 * @since 1.2.0
66 */
67EAPI Eina_Binbuf *eina_binbuf_manage_new_length(unsigned char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
68
69/**
70 * @brief Free a string buffer.
71 *
72 * @param buf The string buffer to free.
73 *
74 * This function frees the memory of @p buf. @p buf must have been
75 * created by eina_binbuf_new().
76 */
77EAPI void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
78
79/**
80 * @brief Reset a string buffer.
81 *
82 * @param buf The string buffer to reset.
83 *
84 * This function reset @p buf: the buffer len is set to 0, and the
85 * string is set to '\\0'. No memory is free'd.
86 */
87EAPI void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
88
89/**
90 * @brief Append a string of exact length to a buffer, reallocating as necessary.
91 *
92 * @param buf The string buffer to append to.
93 * @param str The string to append.
94 * @param length The exact length to use.
95 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
96 *
97 * This function appends @p str to @p buf. @p str must be of size at
98 * most @p length. It is slightly faster than eina_binbuf_append() as
99 * it does not compute the size of @p str. It is useful when dealing
100 * with strings of known size, such as eina_strngshare. If @p buf
101 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
102 * returned.
103 *
104 * @see eina_stringshare_length()
105 * @see eina_binbuf_append()
106 * @see eina_binbuf_append_n()
107 */
108EAPI Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *str, size_t length) EINA_ARG_NONNULL(1, 2);
109
110/**
111 * @brief Append a character to a string buffer, reallocating as
112 * necessary.
113 *
114 * @param buf The string buffer to append to.
115 * @param c The char to append.
116 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
117 *
118 * This function inserts @p c to @p buf. If it can not insert it,
119 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
120 */
121EAPI Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_ARG_NONNULL(1);
122
123/**
124 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
125 *
126 * @param buf The string buffer to insert to.
127 * @param str The string to insert.
128 * @param length The exact length to use.
129 * @param pos The position to insert the string.
130 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
131 *
132 * This function inserts @p str to @p buf. @p str must be of size at
133 * most @p length. It is slightly faster than eina_binbuf_insert() as
134 * it does not compute the size of @p str. It is useful when dealing
135 * with strings of known size, such as eina_strngshare. If @p buf
136 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
137 * returned.
138 *
139 * @see eina_stringshare_length()
140 * @see eina_binbuf_insert()
141 * @see eina_binbuf_insert_n()
142 */
143EAPI Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
144
145/**
146 * @brief Insert a character to a string buffer, reallocating as
147 * necessary.
148 *
149 * @param buf The string buffer to insert to.
150 * @param c The char to insert.
151 * @param pos The position to insert the char.
152 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
153 *
154 * This function inserts @p c to @p buf at position @p pos. If @p buf
155 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
156 * returned.
157 */
158EAPI Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t pos) EINA_ARG_NONNULL(1);
159
160/**
161 * @brief Remove a slice of the given string buffer.
162 *
163 * @param buf The string buffer to remove a slice.
164 * @param start The initial (inclusive) slice position to start
165 * removing, in bytes.
166 * @param end The final (non-inclusive) slice position to finish
167 * removing, in bytes.
168 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
169 *
170 * This function removes a slice of @p buf, starting at @p start
171 * (inclusive) and ending at @p end (non-inclusive). Both values are
172 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
173 */
174
175EAPI Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
176
177/**
178 * @brief Retrieve a pointer to the contents of a string buffer
179 *
180 * @param buf The string buffer.
181 * @return The current string in the string buffer.
182 *
183 * This function returns the string contained in @p buf. The returned
184 * value must not be modified and will no longer be valid if @p buf is
185 * modified. In other words, any eina_binbuf_append() or similar will
186 * make that pointer invalid.
187 *
188 * @see eina_binbuf_string_steal()
189 */
190EAPI const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
191
192/**
193 * @brief Steal the contents of a string buffer.
194 *
195 * @param buf The string buffer to steal.
196 * @return The current string in the string buffer.
197 *
198 * This function returns the string contained in @p buf. @p buf is
199 * then initialized and does not own the returned string anymore. The
200 * caller must release the memory of the returned string by calling
201 * free().
202 *
203 * @see eina_binbuf_string_get()
204 */
205EAPI unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
206
207/**
208 * @brief Free the contents of a string buffer but not the buffer.
209 *
210 * @param buf The string buffer to free the string of.
211 *
212 * This function frees the string contained in @p buf without freeing
213 * @p buf.
214 */
215EAPI void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
216
217/**
218 * @brief Retrieve the length of the string buffer content.
219 *
220 * @param buf The string buffer.
221 * @return The current length of the string, in bytes.
222 *
223 * This function returns the length of @p buf.
224 */
225EAPI size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
226
227/**
228 * @}
229 */
230
231/**
232 * @}
233 */
234
235#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_binshare.h b/libraries/eina/src/include/eina_binshare.h
deleted file mode 100644
index 55b17a6..0000000
--- a/libraries/eina/src/include/eina_binshare.h
+++ /dev/null
@@ -1,193 +0,0 @@
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
deleted file mode 100644
index 096a4b7..0000000
--- a/libraries/eina/src/include/eina_clist.h
+++ /dev/null
@@ -1,378 +0,0 @@
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_Data_Types_Group Data Types
27 *
28 * @{
29 */
30
31/**
32 * @addtogroup Eina_Containers_Group Containers
33 *
34 * @{
35 */
36
37/**
38 * @defgroup Eina_CList_Group Compact List
39 *
40 * @{
41 *
42 * @brief Eina_Clist is a compact (inline) list implementation
43 *
44 * Elements of this list are members of the structs stored in the list
45 *
46 * Advantages over @ref Eina_List and @ref Eina_Inlist:
47 * - uses less memory (two machine words per item)
48 * - allows removing items without knowing which list they're in using O(1) time
49 * - no need to keep updating the head pointer as the list is changed
50 *
51 * Disadvantages:
52 * - O(N) time to calculate list length
53 * - requires one list entry in a struct per list (i.e. it's an inlist)
54 * - requires a head/tail pointer
55 * - need to know the list head when moving to next or previous pointer
56 *
57 * @note There's no NULL at the end of the list, the last item points to the head.
58 *
59 * @note List heads must be initialized with EINA_CLIST_INIT or by calling eina_clist_element_init
60 *
61 * Define a list like so:
62 *
63 * @code
64 * struct gadget
65 * {
66 * struct Eina_Clist entry; <-- doesn't have to be the first item in the struct
67 * int a, b;
68 * };
69 *
70 * static Eina_Clist global_gadgets = EINA_CLIST_INIT( global_gadgets );
71 * @endcode
72 *
73 * or
74 *
75 * @code
76 * struct some_global_thing
77 * {
78 * Eina_Clist gadgets;
79 * };
80 *
81 * eina_clist_init( &some_global_thing->gadgets );
82 * @endcode
83 *
84 * Manipulate it like this:
85 *
86 * @code
87 * eina_clist_add_head( &global_gadgets, &new_gadget->entry );
88 * eina_clist_remove( &new_gadget->entry );
89 * eina_clist_add_after( &some_random_gadget->entry, &new_gadget->entry );
90 * @endcode
91 *
92 * And to iterate over it:
93 *
94 * @code
95 * struct gadget *gadget;
96 * EINA_CLIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
97 * {
98 * ...
99 * }
100 * @endcode
101 *
102 */
103
104/**
105 * @typedef Eina_Clist
106 * This is the list head and the list entry.
107 * @since 1.1.0
108 */
109typedef struct _Eina_Clist Eina_Clist;
110
111/**
112 * @struct _Eina_Clist
113 * Compact list type
114 * @note This structure is used as both the list head and the list entry.
115 * @since 1.1.0
116 */
117struct _Eina_Clist
118{
119 Eina_Clist *next;
120 Eina_Clist *prev;
121};
122
123/**
124 * Add an element after the specified one.
125 *
126 * @param elem An element in the list
127 * @param to_add The element to add to the list
128 * @pre The list head must be initialized once before adding anything.
129 * @pre The element is not in any list.
130 *
131 * @note There's no need to initialize an element before adding it to the list.
132 * @since 1.1.0
133 */
134static inline void eina_clist_add_after(Eina_Clist *elem, Eina_Clist *to_add);
135
136/**
137 * Add an element before the specified one.
138 *
139 * @param elem An element in the list
140 * @param to_add The element to add to the list
141 * @pre The list head must be initialized once before adding anything.
142 * @pre The element is not in any list.
143 *
144 * @note There's no need to initialize an element before adding it to the list.
145 * @since 1.1.0
146 */
147static inline void eina_clist_add_before(Eina_Clist *elem, Eina_Clist *to_add);
148
149/**
150 * Add element at the head of the list.
151 *
152 * @param list The list
153 * @param elem An element
154 * @pre The list head must be initialized once before adding anything.
155 * @pre The element is not in any list.
156 *
157 * @note There's no need to initialize an element before adding it to the list.
158 * @since 1.1.0
159 */
160static inline void eina_clist_add_head(Eina_Clist *list, Eina_Clist *elem);
161
162/**
163 * Add element at the tail of the list.
164 *
165 * @param list The list
166 * @param elem An element
167 * @pre The list head must be initialized once before adding anything.
168 * @pre The element is not in any list.
169 *
170 * @note There's no need to initialize an element before adding it to the list.
171 * @since 1.1.0
172 */
173static inline void eina_clist_add_tail(Eina_Clist *list, Eina_Clist *elem);
174
175/**
176 * Init an (unlinked) element.
177 *
178 * Call this function on elements that have not been added to the list
179 * if you want eina_clist_element_init() to work correctly
180 *
181 * @param elem An element
182 * @pre The element is not in any list.
183 * @post The element is marked as not being in any list
184 *
185 * @note It is not necessary to call this before adding an element to this list.
186 * @since 1.1.0
187 */
188static inline void eina_clist_element_init(Eina_Clist *elem);
189
190/**
191 * Check if an element is in a list or not.
192 *
193 * @param elem An element
194 *
195 * @pre Either eina_clist_element_init() has been called on @a elem,
196 * it has been added to a list or remove from a list.
197 * @since 1.1.0
198 */
199static inline int eina_clist_element_is_linked(Eina_Clist *elem);
200
201/**
202 * Remove an element from its list.
203 *
204 * @param elem An element
205 * @pre The element is in a list already
206 * @post The element is marked as not being in any list
207 * @since 1.1.0
208 */
209static inline void eina_clist_remove(Eina_Clist *elem);
210
211/**
212 * Get the next element.
213 *
214 * @param list The list
215 * @param elem An element
216 * @pre @a elem is in @a list
217 * @return The element after @a elem in @a list or @c NULL if @a elem is last in @a list
218 * @since 1.1.0
219 */
220static inline Eina_Clist *eina_clist_next(const Eina_Clist *list, const Eina_Clist *elem);
221
222/**
223 * Get the previous element.
224 *
225 * @param list The list
226 * @param elem An element
227 *
228 * @return The element before @a elem or NULL if @a elem is the first in the list
229 * @since 1.1.0
230 */
231static inline Eina_Clist *eina_clist_prev(const Eina_Clist *list, const Eina_Clist *elem);
232
233/**
234 * Get the first element.
235 *
236 * @param list The list
237 * @returns The first element in @a list or NULL if @a list is empty
238 * @since 1.1.0
239 */
240static inline Eina_Clist *eina_clist_head(const Eina_Clist *list);
241
242/**
243 * Get the last element.
244 *
245 * @param list The list
246 * @returns The last element in @a list or NULL if @a list is empty
247 * @since 1.1.0
248 */
249static inline Eina_Clist *eina_clist_tail(const Eina_Clist *list);
250
251/**
252 * Check if a list is empty.
253 *
254 * @param list The list
255 * @returns non-zero if @a list is empty, zero if it is not
256 * @since 1.1.0
257 */
258static inline int eina_clist_empty(const Eina_Clist *list);
259
260/**
261 * Initialize a list
262 *
263 * @param list The list
264 * @pre The list is uninitialized
265 * @post The list contains no items
266 *
267 * @note Don't call this function on a list with items
268 * @note This function must be called. Don't try do
269 * initialize the list by zero'ing out the list head.
270 * @since 1.1.0
271 */
272static inline void eina_clist_init(Eina_Clist *list);
273
274/**
275 * Count the elements of a list
276 *
277 * @param list The list
278 * @returns The number of items in the list
279 * @since 1.1.0
280 */
281static inline unsigned int eina_clist_count(const Eina_Clist *list);
282
283/**
284 * Move all elements from src to the tail of dst
285 *
286 * @param dst List to be appended to
287 * @param src List to append
288 *
289 * @post @a src is initialized but empty after this operation
290 * @since 1.1.0
291 */
292static inline void eina_clist_move_tail(Eina_Clist *dst, Eina_Clist *src);
293
294/**
295 * move all elements from src to the head of dst
296 *
297 * @param dst List to be prepended to
298 * @param src List to prepend
299 *
300 * @post @a src is initialized but empty after this operation
301 * @since 1.1.0
302 */
303static inline void eina_clist_move_head(Eina_Clist *dst, Eina_Clist *src);
304
305/**
306 * iterate through the list
307 */
308#define EINA_CLIST_FOR_EACH(cursor,list) \
309 for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
310
311/* iterate through the list, with safety against removal */
312#define EINA_CLIST_FOR_EACH_SAFE(cursor, cursor2, list) \
313 for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
314 (cursor) != (list); \
315 (cursor) = (cursor2), (cursor2) = (cursor)->next)
316
317/* iterate through the list using a list entry */
318#define EINA_CLIST_FOR_EACH_ENTRY(elem, list, type, field) \
319 for ((elem) = EINA_CLIST_ENTRY((list)->next, type, field); \
320 &(elem)->field != (list); \
321 (elem) = EINA_CLIST_ENTRY((elem)->field.next, type, field))
322
323/* iterate through the list using a list entry, with safety against removal */
324#define EINA_CLIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
325 for ((cursor) = EINA_CLIST_ENTRY((list)->next, type, field), \
326 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field); \
327 &(cursor)->field != (list); \
328 (cursor) = (cursor2), \
329 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field))
330
331/* iterate through the list in reverse order */
332#define EINA_CLIST_FOR_EACH_REV(cursor,list) \
333 for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
334
335/* iterate through the list in reverse order, with safety against removal */
336#define EINA_CLIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
337 for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
338 (cursor) != (list); \
339 (cursor) = (cursor2), (cursor2) = (cursor)->prev)
340
341/* iterate through the list in reverse order using a list entry */
342#define EINA_CLIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
343 for ((elem) = EINA_CLIST_ENTRY((list)->prev, type, field); \
344 &(elem)->field != (list); \
345 (elem) = EINA_CLIST_ENTRY((elem)->field.prev, type, field))
346
347/* iterate through the list in reverse order using a list entry, with safety against removal */
348#define EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
349 for ((cursor) = EINA_CLIST_ENTRY((list)->prev, type, field), \
350 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field); \
351 &(cursor)->field != (list); \
352 (cursor) = (cursor2), \
353 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field))
354
355/* macros for statically initialized lists */
356#undef EINA_CLIST_INIT
357#define EINA_CLIST_INIT(list) { &(list), &(list) }
358
359/* get pointer to object containing list element */
360#undef EINA_CLIST_ENTRY
361#define EINA_CLIST_ENTRY(elem, type, field) \
362 ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field)))
363
364#include "eina_inline_clist.x"
365
366/**
367 * @}
368 */
369
370/**
371 * @}
372 */
373
374/**
375 * @}
376 */
377
378#endif /* __EINA_CLIST_H__ */
diff --git a/libraries/eina/src/include/eina_config.h b/libraries/eina/src/include/eina_config.h
deleted file mode 100644
index b1108b6..0000000
--- a/libraries/eina/src/include/eina_config.h
+++ /dev/null
@@ -1,86 +0,0 @@
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_HAVE_EXOTIC_H
23# undef EINA_HAVE_EXOTIC_H
24#endif
25
26
27#ifdef EINA_HAVE_EXOTIC
28# include <Exotic.h>
29#endif
30
31#ifdef EINA_MAGIC_DEBUG
32# undef EINA_MAGIC_DEBUG
33#endif
34#define EINA_MAGIC_DEBUG
35
36#ifdef EINA_DEFAULT_MEMPOOL
37# undef EINA_DEFAULT_MEMPOOL
38#endif
39
40
41#ifdef EINA_SAFETY_CHECKS
42# undef EINA_SAFETY_CHECKS
43#endif
44#define EINA_SAFETY_CHECKS
45
46#ifdef EINA_HAVE_INTTYPES_H
47# undef EINA_HAVE_INTTYPES_H
48#endif
49#define EINA_HAVE_INTTYPES_H
50
51#ifdef EINA_HAVE_STDINT_H
52# undef EINA_HAVE_STDINT_H
53#endif
54#define EINA_HAVE_STDINT_H
55
56#ifdef EINA_HAVE_THREADS
57# undef EINA_HAVE_THREADS
58#endif
59#define EINA_HAVE_THREADS
60
61#ifdef EINA_HAVE_DEBUG_THREADS
62# undef EINA_HAVE_DEBUG_THREADS
63#endif
64
65
66#ifdef EINA_SIZEOF_WCHAR_T
67# undef EINA_SIZEOF_WCHAR_T
68#endif
69#define EINA_SIZEOF_WCHAR_T 4
70
71#ifdef EINA_HAVE_ON_OFF_THREADS
72# undef EINA_HAVE_ON_OFF_THREADS
73#endif
74
75
76#ifdef EINA_CONFIGURE_HAVE_DIRENT_H
77# undef EINA_CONFIGURE_HAVE_DIRENT_H
78#endif
79#define EINA_HAVE_DIRENT_H
80
81#ifdef EINA_CONFIGURE_ENABLE_LOG
82# undef EINA_CONFIGURE_ENABLE_LOG
83#endif
84#define EINA_ENABLE_LOG
85
86#endif /* EINA_CONFIG_H_ */
diff --git a/libraries/eina/src/include/eina_config.h.in b/libraries/eina/src/include/eina_config.h.in
deleted file mode 100644
index 937d208..0000000
--- a/libraries/eina/src/include/eina_config.h.in
+++ /dev/null
@@ -1,86 +0,0 @@
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_HAVE_EXOTIC_H
23# undef EINA_HAVE_EXOTIC_H
24#endif
25@EINA_CONFIGURE_HAVE_EXOTIC@
26
27#ifdef EINA_HAVE_EXOTIC
28# include <Exotic.h>
29#endif
30
31#ifdef EINA_MAGIC_DEBUG
32# undef EINA_MAGIC_DEBUG
33#endif
34@EINA_CONFIGURE_MAGIC_DEBUG@
35
36#ifdef EINA_DEFAULT_MEMPOOL
37# undef EINA_DEFAULT_MEMPOOL
38#endif
39@EINA_CONFIGURE_DEFAULT_MEMPOOL@
40
41#ifdef EINA_SAFETY_CHECKS
42# undef EINA_SAFETY_CHECKS
43#endif
44@EINA_CONFIGURE_SAFETY_CHECKS@
45
46#ifdef EINA_HAVE_INTTYPES_H
47# undef EINA_HAVE_INTTYPES_H
48#endif
49@EINA_CONFIGURE_HAVE_INTTYPES_H@
50
51#ifdef EINA_HAVE_STDINT_H
52# undef EINA_HAVE_STDINT_H
53#endif
54@EINA_CONFIGURE_HAVE_STDINT_H@
55
56#ifdef EINA_HAVE_THREADS
57# undef EINA_HAVE_THREADS
58#endif
59@EINA_CONFIGURE_HAVE_THREADS@
60
61#ifdef EINA_HAVE_DEBUG_THREADS
62# undef EINA_HAVE_DEBUG_THREADS
63#endif
64@EINA_CONFIGURE_HAVE_DEBUG_THREADS@
65
66#ifdef EINA_SIZEOF_WCHAR_T
67# undef EINA_SIZEOF_WCHAR_T
68#endif
69#define EINA_SIZEOF_WCHAR_T @EINA_SIZEOF_WCHAR_T@
70
71#ifdef EINA_HAVE_ON_OFF_THREADS
72# undef EINA_HAVE_ON_OFF_THREADS
73#endif
74@EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
75
76#ifdef EINA_CONFIGURE_HAVE_DIRENT_H
77# undef EINA_CONFIGURE_HAVE_DIRENT_H
78#endif
79@EINA_CONFIGURE_HAVE_DIRENT_H@
80
81#ifdef EINA_CONFIGURE_ENABLE_LOG
82# undef EINA_CONFIGURE_ENABLE_LOG
83#endif
84@EINA_CONFIGURE_ENABLE_LOG@
85
86#endif /* EINA_CONFIG_H_ */
diff --git a/libraries/eina/src/include/eina_convert.h b/libraries/eina/src/include/eina_convert.h
deleted file mode 100644
index af839e2..0000000
--- a/libraries/eina/src/include/eina_convert.h
+++ /dev/null
@@ -1,374 +0,0 @@
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
deleted file mode 100644
index 26bee06..0000000
--- a/libraries/eina/src/include/eina_counter.h
+++ /dev/null
@@ -1,213 +0,0 @@
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
deleted file mode 100644
index ac32e1d..0000000
--- a/libraries/eina/src/include/eina_cpu.h
+++ /dev/null
@@ -1,39 +0,0 @@
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
deleted file mode 100644
index dd87edf..0000000
--- a/libraries/eina/src/include/eina_error.h
+++ /dev/null
@@ -1,198 +0,0 @@
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 @c 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
deleted file mode 100644
index 1af22af..0000000
--- a/libraries/eina/src/include/eina_file.h
+++ /dev/null
@@ -1,483 +0,0 @@
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#include <sys/stat.h>
26
27#include "eina_types.h"
28#include "eina_array.h"
29#include "eina_iterator.h"
30
31
32/**
33 * @page eina_file_example_01_page
34 * @dontinclude eina_file_01.c
35 *
36 * For brevity includes, variable declarations and initialization was omitted
37 * from this page, however the full source code can be seen @ref
38 * eina_file_example_01 "here".
39 *
40 * Here we have a simple callback to print the name of a file and the path that
41 * contains it:
42 * @skip static
43 * @until }
44 *
45 * We can use this callback in the following call:
46 * @skipline eina_file_dir_list
47 *
48 * The above was a way to print the files in a directory, but it is not the only
49 * one:
50 * @until iterator_free
51 *
52 * And now two ways to get more information than just file names:
53 * @until iterator_free
54 * @until iterator_free
55 *
56 * The above ways of getting files on a list may produce the same output, but
57 * they have an important difference, eina_file_direct_ls() will @b not call
58 * stat, this means that on some systems it might not have file type
59 * information. On the other hand it might be faster than eina_file_stat_ls().
60 */
61/**
62 * @page eina_file_example_01
63 * @include eina_file_01.c
64 * @example eina_file_01.c
65 */
66/**
67 * @addtogroup Eina_Tools_Group Tools
68 *
69 * @{
70 */
71/**
72 * @addtogroup Eina_File_Group File
73 *
74 * @brief Functions to handle files and directories.
75 *
76 * This functions make it easier to do a number o file and directory operations
77 * such as getting the list of files in a directory, spliting paths and finding
78 * out file size and type.
79 *
80 * @warning All functions in this group are @b blocking which means they make
81 * take a long time to return, use them carefully.
82 *
83 * See an example @ref eina_file_example_01_page "here".
84 *
85 * @{
86 */
87
88/**
89 * @typedef Eina_File_Direct_Info
90 * A typedef to #_Eina_File_Direct_Info.
91 */
92typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info;
93
94/**
95 * @typedef Eina_Stat
96 * A typedef to #_Eina_Stat.
97 * @since 1.2
98 */
99typedef struct _Eina_Stat Eina_Stat;
100
101/**
102 * @typedef Eina_File_Dir_List_Cb
103 * Type for a callback to be called when iterating over the files of a
104 * directory.
105 * @param The file name EXCLUDING the path
106 * @param path The path passed to eina_file_dir_list()
107 * @param data The data passed to eina_file_dir_list()
108 */
109typedef void (*Eina_File_Dir_List_Cb)(const char *name, const char *path, void *data);
110
111/**
112 * @typedef Eina_File_Type
113 * file type in Eina_File_Direct_Info.
114 */
115typedef enum {
116 EINA_FILE_UNKNOWN, /**< Unknown file type. */
117 EINA_FILE_FIFO, /**< Named pipe (FIFO) type (unused on Windows). */
118 EINA_FILE_CHR, /**< Character device type (unused on Windows). */
119 EINA_FILE_DIR, /**< Directory type. */
120 EINA_FILE_BLK, /**< Block device type (unused on Windows). */
121 EINA_FILE_REG, /**< Regular file type. */
122 EINA_FILE_LNK, /**< Symbolic link type. */
123 EINA_FILE_SOCK, /**< UNIX domain socket type (unused on Windows). */
124 EINA_FILE_WHT /**< Whiteout file type (unused on Windows). */
125} Eina_File_Type;
126
127typedef struct _Eina_File Eina_File;
128
129typedef enum {
130 EINA_FILE_RANDOM, /**< Advise random memory access to the mapped memory. */
131 EINA_FILE_SEQUENTIAL, /**< Advise sequential memory access to the mapped memory. */
132 EINA_FILE_WILLNEED, /**< Advise need for all the mapped memory. */
133 EINA_FILE_POPULATE /**< Request all the mapped memory. */
134} Eina_File_Populate;
135
136/* Why do this? Well PATH_MAX may vary from when eina itself is compiled
137 * to when the app using eina is compiled. exposing the path buffer below
138 * can't safely and portably vary based on how/when you compile. it should
139 * always be the same for both eina inside AND for apps outside that use eina
140 * so define this to 8192 - most PATH_MAX values are like 4096 or 1024 (with
141 * windows i think being 260), so 8192 should cover almost all cases. there
142 * is a possibility that PATH_MAX could be more than 8192. if anyone spots
143 * a path_max that is bigger - let us know, but, for now we will assume
144 * it never happens */
145#define EINA_PATH_MAX 8192
146/**
147 * @struct _Eina_File_Direct_Info
148 * A structure to store informations of a path.
149 */
150struct _Eina_File_Direct_Info
151{
152 size_t path_length; /**< size of the whole path */
153 size_t name_length; /**< size of the filename/basename component */
154 size_t name_start; /**< where the filename/basename component starts */
155 Eina_File_Type type; /**< file type */
156 char path[EINA_PATH_MAX]; /**< the path */
157};
158
159/**
160 * @struct _Eina_Stat
161 * A structure to store informations of a path.
162 * @since 1.2
163 */
164struct _Eina_Stat
165{
166 unsigned long int dev;
167 unsigned long int ino;
168 unsigned int mode;
169 unsigned int nlink;
170 unsigned int uid;
171 unsigned int gid;
172 unsigned long int rdev;
173 unsigned long int size;
174 unsigned long int blksize;
175 unsigned long int blocks;
176 unsigned long int atime;
177 unsigned long int atimensec;
178 unsigned long int mtime;
179 unsigned long int mtimensec;
180 unsigned long int ctime;
181 unsigned long int ctimensec;
182};
183
184/**
185 * @def EINA_FILE_DIR_LIST_CB
186 * @brief cast to an #Eina_File_Dir_List_Cb.
187 *
188 * @param function The function to cast.
189 *
190 * This macro casts @p function to Eina_File_Dir_List_Cb.
191 */
192#define EINA_FILE_DIR_LIST_CB(function) ((Eina_File_Dir_List_Cb)function)
193
194
195/**
196 * @brief List all files on the directory calling the function for every file found.
197 *
198 * @param dir The directory name.
199 * @param recursive Iterate recursively in the directory.
200 * @param cb The callback to be called.
201 * @param data The data to pass to the callback.
202 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
203 *
204 * This function calls @p cb for each file that is in @p dir. To have @p cb
205 * called on files that are in subdirectories of @p dir @p recursive should be
206 * EINA_TRUE. In other words if @p recursive is EINA_FALSE, only direct children
207 * of @p dir will be operated on, if @p recursive is EINA_TRUE the entire tree
208 * of files that is below @p dir will be operated on.
209 *
210 * If @p cb or @p dir are @c NULL, or if @p dir is a string of size 0,
211 * or if @p dir can not be opened, this function returns #EINA_FALSE
212 * immediately. otherwise, it returns #EINA_TRUE.
213 */
214EAPI Eina_Bool eina_file_dir_list(const char *dir,
215 Eina_Bool recursive,
216 Eina_File_Dir_List_Cb cb,
217 void *data) EINA_ARG_NONNULL(1, 3);
218
219/**
220 * @brief Split a path according to the delimiter of the filesystem.
221 *
222 * @param path The path to split.
223 * @return An array of the parts of the path to split.
224 *
225 * This function splits @p path according to the delimiter of the used
226 * filesystem. If @p path is @c NULL or if the array can not be
227 * created, @c NULL is returned, otherwise, an array with each part of @p path
228 * is returned.
229 */
230EAPI Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
231
232/**
233 * @brief Get an iterator to list the content of a directory.
234 *
235 * @param dir The name of the directory to list
236 * @return Return an Eina_Iterator that will walk over the files and directories
237 * in @p dir. On failure it will return NULL.
238 *
239 * Returns an iterator for shared strings, the name of each file in @p dir will
240 * only be fetched when advancing the iterator, which means there is very little
241 * cost associated with creating the list and stopping halfway through it.
242 *
243 * @warning The iterator will hand the user a stringshared value with the full
244 * path. The user must free the string using eina_stringshare_del() on it.
245 *
246 * @note The container for the iterator is of type DIR*.
247 * @note The iterator will walk over '.' and '..' without returning them.
248 *
249 * @see eina_file_direct_ls()
250 */
251EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
252
253/**
254 * @brief Get an iterator to list the content of a directory, with direct
255 * information.
256 *
257 * @param dir The name of the directory to list
258 *
259 * @return Return an Eina_Iterator that will walk over the files and
260 * directory in the pointed directory. On failure it will
261 * return NULL.
262 *
263 * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p
264 * dir will only be fetched when advancing the iterator, which means there is
265 * cost associated with creating the list and stopping halfway through it.
266 *
267 * @warning The Eina_File_Direct_Info returned by the iterator <b>must not</b>
268 * be modified in any way.
269 * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info
270 * returned is no longer valid.
271 *
272 * @note The container for the iterator is of type DIR*.
273 * @note The iterator will walk over '.' and '..' without returning them.
274 * @note The difference between this function ahd eina_file_direct_ls() is that
275 * it guarantees the file type information will be correct incurring a
276 * possible performance penalty.
277 *
278 * @see eina_file_direct_ls()
279 */
280EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
281
282/**
283 * @brief Use information provided by Eina_Iterator of eina_file_stat_ls or eina_file_direct_ls
284 * to call stat in the most efficient way on your system.
285 *
286 * @param container The container returned by the Eina_Iterator using eina_iterator_container_get().
287 * @param info The content of the current Eina_File_Direct_Info provided by the Eina_Iterator
288 * @param buf Where to put the result of the stat
289 * @return On success 0 is returned, On error -1 is returned and errno is set appropriately.
290 *
291 * This function calls fstatat or stat depending on what your system supports. This makes it efficient and simple
292 * to use on your side without complex detection already done inside Eina on what the system can do.
293 *
294 * @see eina_file_direct_ls()
295 * @see eina_file_stat_ls()
296 * @since 1.2
297 */
298EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3);
299
300/**
301 * @brief Get an iterator to list the content of a directory, with direct
302 * information.
303 *
304 * @param dir The name of the directory to list
305 *
306 * @return Return an Eina_Iterator that will walk over the files and
307 * directory in the pointed directory. On failure it will
308 * return NULL.
309 *
310 * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p
311 * dir will only be fetched when advancing the iterator, which means there is
312 * cost associated with creating the list and stopping halfway through it.
313 *
314 * @warning If readdir_r doesn't contain file type information file type will
315 * be DT_UNKNOW.
316 * @warning The Eina_File_Direct_Info returned by the iterator <b>must not</b>
317 * be modified in any way.
318 * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info
319 * returned is no longer valid.
320 *
321 * @note The container for the iterator is of type DIR*.
322 * @note The iterator will walk over '.' and '..' without returning them.
323 * @note The difference between this function ahd eina_file_stat_ls() is that
324 * it may not get the file type information however it is likely to be
325 * faster.
326 *
327 * @see eina_file_ls()
328 */
329EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
330
331/**
332 * @brief Sanitize file path.
333 *
334 * @param path The path to sanitize
335 *
336 * @return an allocated string with the sanitized path.
337 *
338 * This function take care of adding the current working directory if it's a
339 * relative path and also remove all '..' and '//' reference in the original
340 * path.
341 *
342 * @since 1.1
343 */
344EAPI char *eina_file_path_sanitize(const char *path);
345
346/**
347 * @brief Get a read-only handler to a file.
348 *
349 * @param name Filename to open
350 * @param shared Requested a shm
351 *
352 * Opens a file in read-only mode. @p name should be an absolute path. An
353 * Eina_File handle can be shared among multiple instances if @p shared is
354 * EINA_TRUE.
355 *
356 * @since 1.1
357 */
358EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
359
360/**
361 * @brief Unref file handler.
362 *
363 * @param file File handler to unref.
364 *
365 * Decremente file's refcount and if it reaches zero close it.
366 *
367 * @since 1.1
368 */
369EAPI void eina_file_close(Eina_File *file);
370
371/**
372 * @brief Get file size at open time.
373 *
374 * @param file The file handler to request the size from.
375 * @return The length of the file.
376 *
377 * @since 1.1
378 */
379EAPI size_t eina_file_size_get(Eina_File *file);
380
381/**
382 * @brief Get the last modification time of an open file.
383 *
384 * @param file The file handler to request the modification time from.
385 * @return The last modification time.
386 *
387 * @since 1.1
388 */
389EAPI time_t eina_file_mtime_get(Eina_File *file);
390
391/**
392 * @brief Get the filename of an open file.
393 *
394 * @param file The file handler to request the name from.
395 * @return Stringshared filename of the file.
396 *
397 * @since 1.1
398 */
399EAPI const char *eina_file_filename_get(Eina_File *file);
400
401/**
402 * @brief Get the eXtended attribute of an open file.
403 *
404 * @param file The file handler to request the eXtended attribute from.
405 * @return an iterator.
406 *
407 * The iterator will list all eXtended attribute name without allocating
408 * them, so you need to copy them yourself if needed.
409 *
410 * @since 1.2
411 */
412EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file);
413
414/**
415 * @brief Get the eXtended attribute of an open file.
416 *
417 * @param file The file handler to request the eXtended attribute from.
418 * @return an iterator.
419 *
420 * The iterator will list all eXtended attribute without allocating
421 * them, so you need to copy them yourself if needed. It is returning
422 * Eina_Xattr structure.
423 *
424 * @since 1.2
425 */
426EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file);
427
428/**
429 * @brief Map all the file to a buffer.
430 *
431 * @param file The file handler to map in memory
432 * @param rule The rule to apply to the mapped memory
433 * @return A pointer to a buffer that map all the file content. @c NULL if it fail.
434 *
435 * @since 1.1
436 */
437EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule);
438
439/**
440 * @brief Map a part of the file.
441 *
442 * @param file The file handler to map in memory
443 * @param rule The rule to apply to the mapped memory
444 * @param offset The offset inside the file
445 * @param length The length of the memory to map
446 * @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.
447 *
448 * This does handle refcounting so it will share map that target the same memory area.
449 *
450 * @since 1.1
451 */
452EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
453 unsigned long int offset, unsigned long int length);
454
455/**
456 * @brief Unref and unmap memory if possible.
457 *
458 * @param file The file handler to unmap memory from.
459 * @param map Memory map to unref and unmap.
460 *
461 * @since 1.1
462 */
463EAPI void eina_file_map_free(Eina_File *file, void *map);
464
465/**
466 * @brief Tell if their was an IO error during the life of a mmaped file
467 *
468 * @param file The file handler to the mmaped file.
469 * @param map Memory map to check if an error occured on it.
470 *
471 * @since 1.2
472 */
473EAPI Eina_Bool eina_file_map_faulted(Eina_File *file, void *map);
474
475/**
476 * @}
477 */
478
479/**
480 * @}
481 */
482
483#endif /* EINA_FILE_H_ */
diff --git a/libraries/eina/src/include/eina_fp.h b/libraries/eina/src/include/eina_fp.h
deleted file mode 100644
index c73dc16..0000000
--- a/libraries/eina/src/include/eina_fp.h
+++ /dev/null
@@ -1,111 +0,0 @@
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
deleted file mode 100644
index bea759d..0000000
--- a/libraries/eina/src/include/eina_hamster.h
+++ /dev/null
@@ -1,58 +0,0 @@
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
deleted file mode 100644
index 57316b2..0000000
--- a/libraries/eina/src/include/eina_hash.h
+++ /dev/null
@@ -1,1040 +0,0 @@
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(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 func,
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_inarray.h b/libraries/eina/src/include/eina_inarray.h
deleted file mode 100644
index 079f1e3..0000000
--- a/libraries/eina/src/include/eina_inarray.h
+++ /dev/null
@@ -1,710 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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_INARRAY_H_
20#define EINA_INARRAY_H_
21
22#include "eina_types.h"
23#include "eina_iterator.h"
24#include "eina_accessor.h"
25
26/**
27 * @page eina_inarray_example_01 Eina inline array usage
28 * @dontinclude eina_inarray_01.c
29 *
30 * This example will create an inline array of chars, add some elements, print
31 * it, re-purpose the array to store ints, add some elements and print that.
32 *
33 * We'll start with a function to compare ints we need this because the '>'
34 * operator is not a function and can't be used where Eina_Compare_Cb is needed.
35 * @skip int
36 * @until }
37 *
38 * And then move on to the code we actually care about, starting with variable
39 * declarations and eina initialization:
40 * @until eina_init
41 *
42 * Creating an inline array is very simple, we just need to know what type we
43 * want to store:
44 * @until inarray_new
45 * @note The second parameter(the step) is left at zero which means that eina
46 * will choose an appropriate value, this should @b only be changed if it's
47 * known, beforehand, how many elements the array will have.
48 *
49 * Once we have an array we can start adding elements to it. Because the
50 * insertion function expect a memory address we have to put the value we want
51 * to store in a variable(this should be no problem since in real world usage
52 * that's usually where the value will be anyways):
53 * @until append
54 * @note Because the inline array copies the value given to it we can later
55 * change @c ch, which we do, without affecting the contents of the array.
56 *
57 * So let's add some more elements:
58 * @until append
59 * @until append
60 * @until append
61 *
62 * We will then iterate over our array and print every position of it. The thing
63 * to note here is not so much the values which will be the expected 'a', 'b',
64 * 'c' and 'd', but rather the memory address of these values, they are
65 * sequential:
66 * @until printf
67 * @until printf
68 *
69 * We'll now use our array to store ints, so we need to first erase every member
70 * currently on the array:
71 * @until _flush
72 *
73 * And then to be able to store a different type on the same array we use the
74 * eina_array_setup() function, which is just like the eina_inarray_new()
75 * function except it receives already allocated memory. This time we're going
76 * to ask eina to use a step of size 4 because that's how many elements we'll be
77 * putting on the array:
78 * @until _setup
79 * @note Strictly speaking the reason to call eina_inarray_setup() is not
80 * because we're storing different type, but rather because our types have
81 * different sizes. Eina inline arrays don't actually know anything about types,
82 * they only deal in blocks of memory of a given size.
83 * @note Since eina_array_setup() receives already allocated memory you can(and
84 * it is in fact good practice) use inline arrays not declared as pointers:
85 * @code
86 * Eina_Inarray arr;
87 * eina_inarray_setup(&arr, sizeof(int), 4);
88 * @endcode
89 *
90 * And now to add our integer values to the array:
91 * @until append
92 * @until append
93 * @until append
94 *
95 * Just to change things up a bit we've left out the 99 value, but will still
96 * add it in such a way to keep the array ordered. There are many ways to do
97 * this, we could use eina_inarray_insert_at(), or we could change the value
98 * of the last member using eina_inarray_replace_at() and then append the values
99 * in the right order, but for no particular reason we're going to use
100 * eina_inarray_insert_sorted() instead:
101 * @until insert_sorted
102 *
103 * We then print the size of our array, and the array itself, much like last
104 * time the values are not surprising, and neither should it be that the memory
105 * addresses are contiguous:
106 * @until printf
107 * @until printf
108 *
109 * Once done we free our array and shutdown eina:
110 * @until }
111 *
112 * The source for this example: @ref eina_inarray_01_c
113 */
114
115/**
116 * @page eina_inarray_01_c eina_inarray_01.c
117 * @include eina_inarray_01.c
118 * @example eina_inarray_01.c
119 */
120
121/**
122 * @page eina_inarray_example_02 Eina inline array of strings
123 * @dontinclude eina_inarray_02.c
124 *
125 * This example will create an inline array of strings, add some elements and
126 * then print them. This example is based on @ref eina_array_01_example_page and
127 * @ref eina_inarray_example_01.
128 *
129 * We start with some variable declarations and eina initialization:
130 * @skip int
131 * @until eina_init
132 *
133 * We then create the array much like we did on @ref eina_inarray_example_01:
134 * @until inarray_new
135 *
136 * The point were this example significantly differs from the first eina inline
137 * array example. We'll not be adding the strings themselves to the array since
138 * their size varies, we'll store pointer to the strings instead. We therefore
139 * use @c char** to populate our inline array:
140 * @until }
141 *
142 * The source for this example: @ref eina_inarray_02_c
143 */
144
145/**
146 * @page eina_inarray_02_c eina_inarray_02.c
147 * @include eina_inarray_02.c
148 * @example eina_inarray_02.c
149 */
150
151/**
152 * @addtogroup Eina_Data_Types_Group Data Types
153 *
154 * @since 1.2
155 *
156 * @{
157 */
158
159/**
160 * @addtogroup Eina_Containers_Group Containers
161 *
162 * @{
163 */
164
165/**
166 * @defgroup Eina_Inline_Array_Group Inline Array
167 *
168 * Inline array is a container that stores the data itself not pointers to data,
169 * this means there is no memory fragmentation, also for small data types(such
170 * as char, short, int, etc.) it's more memory efficient.
171 *
172 * Usage of the inline array is very similar to that of other
173 * @ref Eina_Containers_Group, like all arrays adding elements to the beginning
174 * of the array is a lot more costly than appending, so those operations should
175 * be minimized.
176 *
177 * Examples:
178 * @li @ref eina_inarray_example_01
179 * @li @ref eina_inarray_example_02
180 *
181 * @{
182 */
183
184
185/**
186 * @typedef Eina_Inarray
187 * Inlined array type.
188 *
189 * @since 1.2
190 */
191typedef struct _Eina_Inarray Eina_Inarray;
192
193/**
194 * Inline array structure, use #Eina_Inarray typedef instead.
195 *
196 * Do not modify these fields directly, use eina_inarray_setup() or
197 * eina_inarray_new() instead.
198 *
199 * @since 1.2
200 */
201struct _Eina_Inarray
202{
203 unsigned int member_size; /**< byte size of each entry in members */
204 unsigned int len; /**< number of elements used in members */
205 unsigned int max; /**< number of elements allocated in members */
206 unsigned int step; /**< amount to grow number of members allocated */
207 void *members; /**< actual array of elements */
208 EINA_MAGIC
209};
210
211/**
212 * @brief Create new inline array.
213 *
214 * @param member_size size of each member in the array.
215 * @param step when resizing the array, do this using the following
216 * extra amount.
217 * @return The new inline array table or @c NULL on failure.
218 *
219 * Create a new array where members are inlined in a sequence. Each
220 * member has @a member_size bytes.
221 *
222 * If the @a step is 0, then a safe default is chosen.
223 *
224 * On failure, @c NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
225 * set. If @a member_size is zero, then @c NULL is returned.
226 *
227 * @see eina_inarray_free()
228 *
229 * @since 1.2
230 */
231EAPI Eina_Inarray *eina_inarray_new(unsigned int member_size,
232 unsigned int step) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
233
234/**
235 * @brief Free array and its members.
236 * @param array array object
237 *
238 * @see eina_inarray_flush()
239 *
240 * @since 1.2
241 */
242EAPI void eina_inarray_free(Eina_Inarray *array) EINA_ARG_NONNULL(1);
243
244/**
245 * @brief Initialize inline array.
246 * @param array array object to initialize.
247 * @param member_size size of each member in the array.
248 * @param step when resizing the array, do this using the following
249 * extra amount.
250 *
251 * Initialize array. If the @a step is 0, then a safe default is
252 * chosen.
253 *
254 * This is useful for arrays inlined into other structures or
255 * allocated at stack.
256 *
257 * @see eina_inarray_flush()
258 *
259 * @since 1.2
260 */
261EAPI void eina_inarray_setup(Eina_Inarray *array,
262 unsigned int member_size,
263 unsigned int step) EINA_ARG_NONNULL(1);
264
265/**
266 * @brief Remove every member from array.
267 * @param array array object
268 *
269 * @since 1.2
270 */
271EAPI void eina_inarray_flush(Eina_Inarray *array) EINA_ARG_NONNULL(1);
272
273/**
274 * @brief Copy the data as the last member of the array.
275 * @param array array object
276 * @param data data to be copied at the end
277 * @return the index of the new member or -1 on errors.
278 *
279 * Copies the given pointer contents at the end of the array. The
280 * pointer is not referenced, instead it's contents is copied to the
281 * members array using the previously defined @c member_size.
282 *
283 * @see eina_inarray_insert_at().
284 *
285 * @since 1.2
286 */
287EAPI int eina_inarray_append(Eina_Inarray *array,
288 const void *data) EINA_ARG_NONNULL(1, 2);
289
290/**
291 * @brief Copy the data to array at position found by comparison function
292 * @param array array object
293 * @param data data to be copied
294 * @param compare compare function
295 * @return the index of the new member or -1 on errors.
296 *
297 * Copies the given pointer contents at the array position defined by
298 * given @a compare function. The pointer is not referenced, instead
299 * it's contents is copied to the members array using the previously
300 * defined @c member_size.
301 *
302 * The data given to @a compare function are the pointer to member
303 * memory itself, do no change it.
304 *
305 * @see eina_inarray_insert_sorted()
306 * @see eina_inarray_insert_at()
307 * @see eina_inarray_append()
308 *
309 * @since 1.2
310 */
311EAPI int eina_inarray_insert(Eina_Inarray *array,
312 const void *data,
313 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
314
315/**
316 * @brief Copy the data to array at position found by comparison function
317 * @param array array object
318 * @param data data to be copied
319 * @param compare compare function
320 * @return the index of the new member or -1 on errors.
321 *
322 * Copies the given pointer contents at the array position defined by
323 * given @a compare function. The pointer is not referenced, instead
324 * it's contents is copied to the members array using the previously
325 * defined @c member_size.
326 *
327 * The data given to @a compare function are the pointer to member
328 * memory itself, do no change it.
329 *
330 * This variation will optimize insertion position assuming the array
331 * is already sorted by doing binary search.
332 *
333 * @see eina_inarray_sort()
334 *
335 * @since 1.2
336 */
337EAPI int eina_inarray_insert_sorted(Eina_Inarray *array,
338 const void *data,
339 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
340
341/**
342 * @brief Find data and remove matching member
343 * @param array array object
344 * @param data data to be found and removed
345 * @return the index of the removed member or -1 on errors.
346 *
347 * Find data in the array and remove it. Data may be an existing
348 * member of array (then optimized) or the contents will be matched
349 * using memcmp().
350 *
351 * @see eina_inarray_pop()
352 * @see eina_inarray_remove_at()
353 *
354 * @since 1.2
355 */
356EAPI int eina_inarray_remove(Eina_Inarray *array,
357 const void *data) EINA_ARG_NONNULL(1, 2);
358
359/**
360 * @brief Removes the last member of the array
361 * @param array array object
362 * @return the index of the removed member or -1 on errors.
363 *
364 * @since 1.2
365 */
366EAPI int eina_inarray_pop(Eina_Inarray *array) EINA_ARG_NONNULL(1);
367
368/**
369 * @brief Get the member at given position
370 * @param array array object
371 * @param position member position
372 * @return pointer to current member memory.
373 *
374 * Gets the member given its position in the array. It is a pointer to
375 * its current memory, then it can be invalidated with functions that
376 * changes the array such as eina_inarray_append(),
377 * eina_inarray_insert_at() or eina_inarray_remove_at() or variants.
378 *
379 * See also eina_inarray_lookup() and eina_inarray_lookup_sorted().
380 *
381 * @since 1.2
382 */
383EAPI void *eina_inarray_nth(const Eina_Inarray *array,
384 unsigned int position) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
385
386/**
387 * @brief Copy the data at given position in the array
388 * @param array array object
389 * @param position where to insert the member
390 * @param data data to be copied at position
391 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
392 *
393 * Copies the given pointer contents at the given @a position in the
394 * array. The pointer is not referenced, instead it's contents is
395 * copied to the members array using the previously defined
396 * @c member_size.
397 *
398 * All the members from @a position to the end of the array are
399 * shifted to the end.
400 *
401 * If @a position is equal to the end of the array (equals to
402 * eina_inarray_count()), then the member is appended.
403 *
404 * If @a position is bigger than the array length, it will fail.
405 *
406 * @since 1.2
407 */
408EAPI Eina_Bool eina_inarray_insert_at(Eina_Inarray *array,
409 unsigned int position,
410 const void *data) EINA_ARG_NONNULL(1, 3);
411
412/**
413 * @brief Opens a space at given position, returning its pointer.
414 * @param array array object
415 * @param position where to insert first member (open/allocate space)
416 * @param member_count how many times member_size bytes will be allocated.
417 * @return pointer to first member memory allocated or @c NULL on errors.
418 *
419 * This is similar to eina_inarray_insert_at(), but useful if the
420 * members contents are still unknown or unallocated. It will make
421 * room for the required number of items and return the pointer to the
422 * first item, similar to malloc(member_count * member_size), with the
423 * guarantee all memory is within members array.
424 *
425 * The new member memory is undefined, it's not automatically zeroed.
426 *
427 * All the members from @a position to the end of the array are
428 * shifted to the end.
429 *
430 * If @a position is equal to the end of the array (equals to
431 * eina_inarray_count()), then the member is appended.
432 *
433 * If @a position is bigger than the array length, it will fail.
434 *
435 * @since 1.2
436 */
437EAPI void *eina_inarray_alloc_at(Eina_Inarray *array,
438 unsigned int position,
439 unsigned int member_count) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
440
441/**
442 * @brief Copy the data over the given position.
443 * @param array array object
444 * @param position where to replace the member
445 * @param data data to be copied at position
446 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
447 *
448 * Copies the given pointer contents at the given @a position in the
449 * array. The pointer is not referenced, instead it's contents is
450 * copied to the members array using the previously defined
451 * @c member_size.
452 *
453 * If @a position does not exist, it will fail.
454 *
455 * @since 1.2
456 */
457EAPI Eina_Bool eina_inarray_replace_at(Eina_Inarray *array,
458 unsigned int position,
459 const void *data) EINA_ARG_NONNULL(1, 3);
460
461/**
462 * @brief Remove member at given position
463 * @param array array object
464 * @param position position to be removed
465 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
466 *
467 * The member is removed from array and any members after it are moved
468 * towards the array head.
469 *
470 * See also eina_inarray_pop() and eina_inarray_remove().
471 *
472 * @since 1.2
473 */
474EAPI Eina_Bool eina_inarray_remove_at(Eina_Inarray *array,
475 unsigned int position) EINA_ARG_NONNULL(1);
476
477/**
478 * @brief Reverse members in the array.
479 * @param array array object
480 *
481 * If you do not want to change the array, just walk its elements
482 * backwards, then use EINA_INARRAY_REVERSE_FOREACH() macro.
483 *
484 * @see EINA_INARRAY_REVERSE_FOREACH()
485 *
486 * @since 1.2
487 */
488EAPI void eina_inarray_reverse(Eina_Inarray *array) EINA_ARG_NONNULL(1);
489
490/**
491 * @brief Applies quick sort to array
492 * @param array array object
493 * @param compare compare function
494 *
495 * Applies quick sort to the @a array.
496 *
497 * The data given to @a compare function are the pointer to member
498 * memory itself, do no change it.
499 *
500 * @see eina_inarray_insert_sorted()
501 *
502 * @since 1.2
503 */
504EAPI void eina_inarray_sort(Eina_Inarray *array,
505 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2);
506
507/**
508 * @brief Search member (linear walk)
509 * @param array array object
510 * @param data member to search using @a compare function.
511 * @param compare compare function
512 * @return the member index or -1 if not found.
513 *
514 * Walks array linearly looking for given data as compared by
515 * @a compare function.
516 *
517 * The data given to @a compare function are the pointer to member
518 * memory itself, do no change it.
519 *
520 * See also eina_inarray_lookup_sorted().
521 *
522 * @since 1.2
523 */
524EAPI int eina_inarray_search(const Eina_Inarray *array,
525 const void *data,
526 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
527
528/**
529 * @brief Search member (binary search walk)
530 * @param array array object
531 * @param data member to search using @a compare function.
532 * @param compare compare function
533 * @return the member index or -1 if not found.
534 *
535 * Uses binary search for given data as compared by @a compare function.
536 *
537 * The data given to @a compare function are the pointer to member
538 * memory itself, do no change it.
539 *
540 * @since 1.2
541 */
542EAPI int eina_inarray_search_sorted(const Eina_Inarray *array,
543 const void *data,
544 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
545
546/**
547 * @brief Call function for each array member
548 * @param array array object
549 * @param function callback function
550 * @param user_data user data given to callback @a function
551 * @return #EINA_TRUE if it successfully iterate all items of the array.
552 *
553 * Call @a function for every given data in @a array.
554 *
555 * Safe way to iterate over an array. @p function should return
556 * #EINA_TRUE as long as you want the function to continue iterating,
557 * by returning #EINA_FALSE it will stop and return #EINA_FALSE as a
558 * result.
559 *
560 * The data given to @a function are the pointer to member memory
561 * itself.
562 *
563 * @see EINA_INARRAY_FOREACH()
564 *
565 * @since 1.2
566 */
567EAPI Eina_Bool eina_inarray_foreach(const Eina_Inarray *array,
568 Eina_Each_Cb function,
569 const void *user_data) EINA_ARG_NONNULL(1, 2);
570
571/**
572 * @brief Remove all members that matched.
573 * @param array array object
574 * @param match match function
575 * @param user_data user data given to callback @a match.
576 * @return number of removed entries or -1 on error.
577 *
578 * Remove all entries in the @a array where @a match function
579 * returns #EINA_TRUE.
580 *
581 * @since 1.2
582 */
583EAPI int eina_inarray_foreach_remove(Eina_Inarray *array,
584 Eina_Each_Cb match,
585 const void *user_data) EINA_ARG_NONNULL(1, 2);
586
587/**
588 * @brief number of members in array.
589 * @param array array object
590 * @return number of members in array.
591 *
592 * @since 1.2
593 */
594EAPI unsigned int eina_inarray_count(const Eina_Inarray *array) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
595
596/**
597 * @brief Returned a new iterator associated to an array.
598 * @param array array object
599 * @return A new iterator.
600 *
601 * This function returns a newly allocated iterator associated to
602 * @p array.
603 *
604 * If the memory can not be allocated, NULL is returned and
605 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
606 * returned.
607 *
608 * @warning if the array structure changes then the iterator becomes
609 * invalid! That is, if you add or remove members this
610 * iterator behavior is undefined and your program may crash!
611 *
612 * @since 1.2
613 */
614EAPI Eina_Iterator *eina_inarray_iterator_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
615
616/**
617 * @brief Returned a new reversed iterator associated to an array.
618 * @param array array object
619 * @return A new iterator.
620 *
621 * This function returns a newly allocated iterator associated to
622 * @p array.
623 *
624 * Unlike eina_inarray_iterator_new(), this will walk the array backwards.
625 *
626 * If the memory can not be allocated, NULL is returned and
627 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
628 * returned.
629 *
630 * @warning if the array structure changes then the iterator becomes
631 * invalid! That is, if you add or remove nodes this iterator
632 * behavior is undefined and your program may crash!
633 *
634 * @since 1.2
635 */
636EAPI Eina_Iterator *eina_inarray_iterator_reversed_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
637
638/**
639 * @brief Returned a new accessor associated to an array.
640 * @param array array object
641 * @return A new accessor.
642 *
643 * This function returns a newly allocated accessor associated to
644 * @p array.
645 *
646 * If the memory can not be allocated, NULL is returned and
647 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid accessor is
648 * returned.
649 *
650 * @since 1.2
651 */
652EAPI Eina_Accessor *eina_inarray_accessor_new(const Eina_Inarray *array) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
653
654/**
655 * @def EINA_INARRAY_FOREACH
656 * @brief walks array linearly from head to tail
657 * @param array array object
658 * @param itr the iterator pointer
659 *
660 * @a itr must be a pointer with sizeof(itr*) == array->member_size.
661 *
662 * @warning This is fast as it does direct pointer access, but it will
663 * not check for @c NULL pointers or invalid array object!
664 * See eina_inarray_foreach() to do that.
665 *
666 * @warning Do not modify array as you walk it! If that is desired,
667 * then use eina_inarray_foreach_remove()
668 *
669 * @since 1.2
670 */
671#define EINA_INARRAY_FOREACH(array, itr) \
672 for ((itr) = (array)->members; \
673 (itr) < (((typeof(*itr)*)(array)->members) + (array)->len); \
674 (itr)++)
675
676/**
677 * @def EINA_INARRAY_REVERSE_FOREACH
678 * @brief walks array linearly from tail to head
679 * @param array array object
680 * @param itr the iterator pointer
681 *
682 * @a itr must be a pointer with sizeof(itr*) == array->member_size.
683 *
684 * @warning This is fast as it does direct pointer access, but it will
685 * not check for @c NULL pointers or invalid array object!
686 *
687 * @warning Do not modify array as you walk it! If that is desired,
688 * then use eina_inarray_foreach_remove()
689 *
690 * @since 1.2
691 */
692#define EINA_INARRAY_REVERSE_FOREACH(array, itr) \
693 for ((itr) = ((((typeof(*(itr))*)(array)->members) + (array)->len) - 1); \
694 (((itr) >= (typeof(*(itr))*)(array)->members) \
695 && ((array)->members != NULL)); \
696 (itr)--)
697
698/**
699 * @}
700 */
701
702/**
703 * @}
704 */
705
706/**
707 * @}
708 */
709
710#endif /*EINA_INARRAY_H_*/
diff --git a/libraries/eina/src/include/eina_inline_array.x b/libraries/eina/src/include/eina_inline_array.x
deleted file mode 100644
index a635ee2..0000000
--- a/libraries/eina/src/include/eina_inline_array.x
+++ /dev/null
@@ -1,184 +0,0 @@
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 <stddef.h>
23
24#include <stdio.h>
25
26/**
27 * @cond LOCAL
28 */
29
30EAPI Eina_Bool eina_array_grow(Eina_Array *array);
31
32/**
33 * @endcond
34 */
35
36/**
37 * @addtogroup Eina_Array_Group Array
38 *
39 * @brief These functions provide array management.
40 *
41 * @{
42 */
43
44/**
45 * @brief Append a data to an array.
46 *
47 * @param array The array.
48 * @param data The data to add.
49 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
50 *
51 * This function appends @p data to @p array. For performance
52 * reasons, there is no check of @p array. If it is @c NULL or
53 * invalid, the program may crash. If @p data is @c NULL, or if an
54 * allocation is necessary and fails, #EINA_FALSE is returned and
55 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, #EINA_TRUE is
56 * returned.
57 */
58
59static inline Eina_Bool
60eina_array_push(Eina_Array *array, const void *data)
61{
62 if (!data) return EINA_FALSE;
63
64 if (EINA_UNLIKELY((array->count + 1) > array->total))
65 if (!eina_array_grow(array))
66 return EINA_FALSE;
67
68 array->data[array->count++] = (void*) data;
69
70 return EINA_TRUE;
71}
72
73/**
74 * @brief Remove the last data of an array.
75 *
76 * @param array The array.
77 * @return The retrieved data.
78 *
79 * This function removes the last data of @p array, decreases the count
80 * of @p array and returns the data. For performance reasons, there
81 * is no check of @p array. If it is @c NULL or invalid, the program
82 * may crash. If the count member is less or equal than 0, @c NULL is
83 * returned.
84 */
85static inline void *
86eina_array_pop(Eina_Array *array)
87{
88 void *ret = NULL;
89
90 if (array->count <= 0)
91 goto on_empty;
92
93 ret = array->data[--array->count];
94
95 on_empty:
96 return ret;
97}
98
99/**
100 * @brief Return the data at a given position in an array.
101 *
102 * @param array The array.
103 * @param idx The potition of the data to retrieve.
104 * @return The retrieved data.
105 *
106 * This function returns the data at the position @p idx in @p
107 * array. For performance reasons, there is no check of @p array or @p
108 * idx. If it is @c NULL or invalid, the program may crash.
109 */
110static inline void *
111eina_array_data_get(const Eina_Array *array, unsigned int idx)
112{
113 return array->data[idx];
114}
115
116static inline void
117eina_array_data_set(const Eina_Array *array, unsigned int idx, const void *data)
118{
119 array->data[idx] = (void*) data;
120}
121
122/**
123 * @brief Return the number of elements in an array.
124 *
125 * @param array The array.
126 * @return The number of elements.
127 *
128 * This function returns the number of elements in @p array. For
129 * performance reasons, there is no check of @p array. If it is
130 * @c NULL or invalid, the program may crash.
131 *
132 * @deprecated use eina_array_count()
133 */
134static inline unsigned int
135eina_array_count_get(const Eina_Array *array)
136{
137 return array->count;
138}
139
140/**
141 * @brief Return the number of elements in an array.
142 *
143 * @param array The array.
144 * @return The number of elements.
145 *
146 * This function returns the number of elements in @p array. For
147 * performance reasons, there is no check of @p array. If it is
148 * @c NULL or invalid, the program may crash.
149 */
150static inline unsigned int
151eina_array_count(const Eina_Array *array)
152{
153 return array->count;
154}
155
156static inline Eina_Bool
157eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata)
158{
159 void *data;
160 Eina_Array_Iterator iterator;
161 unsigned int i;
162 Eina_Bool ret = EINA_TRUE;
163
164 EINA_ARRAY_ITER_NEXT(array, i, data, iterator)
165 if (cb(array, data, fdata) != EINA_TRUE)
166 {
167 ret = EINA_FALSE;
168 break;
169 }
170
171 return ret;
172}
173
174static inline void
175eina_array_clean(Eina_Array *array)
176{
177 array->count = 0;
178}
179
180/**
181 * @}
182 */
183
184#endif
diff --git a/libraries/eina/src/include/eina_inline_clist.x b/libraries/eina/src/include/eina_inline_clist.x
deleted file mode 100644
index 66223fe..0000000
--- a/libraries/eina/src/include/eina_inline_clist.x
+++ /dev/null
@@ -1,135 +0,0 @@
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_INLINE_H__
23#define __EINA_CLIST_INLINE_H__
24
25#include <stddef.h>
26
27static inline void eina_clist_add_after(Eina_Clist *elem, Eina_Clist *to_add)
28{
29 to_add->next = elem->next;
30 to_add->prev = elem;
31 elem->next->prev = to_add;
32 elem->next = to_add;
33}
34
35static inline void eina_clist_add_before(Eina_Clist *elem, Eina_Clist *to_add)
36{
37 to_add->next = elem;
38 to_add->prev = elem->prev;
39 elem->prev->next = to_add;
40 elem->prev = to_add;
41}
42
43static inline void eina_clist_add_head(Eina_Clist *list, Eina_Clist *elem)
44{
45 eina_clist_add_after(list, elem);
46}
47
48static inline void eina_clist_add_tail(Eina_Clist *list, Eina_Clist *elem)
49{
50 eina_clist_add_before(list, elem);
51}
52
53static inline void eina_clist_element_init(Eina_Clist *elem)
54{
55 elem->next = NULL;
56 elem->prev = NULL;
57}
58
59static inline int eina_clist_element_is_linked(Eina_Clist *elem)
60{
61 return (elem->next != NULL && elem->prev != NULL);
62}
63
64static inline void eina_clist_remove(Eina_Clist *elem)
65{
66 elem->next->prev = elem->prev;
67 elem->prev->next = elem->next;
68 eina_clist_element_init(elem);
69}
70
71static inline Eina_Clist *eina_clist_next(const Eina_Clist *list, const Eina_Clist *elem)
72{
73 Eina_Clist *ret = elem->next;
74 if (elem->next == list) ret = NULL;
75 return ret;
76}
77
78static inline Eina_Clist *eina_clist_prev(const Eina_Clist *list, const Eina_Clist *elem)
79{
80 Eina_Clist *ret = elem->prev;
81 if (elem->prev == list) ret = NULL;
82 return ret;
83}
84
85static inline Eina_Clist *eina_clist_head(const Eina_Clist *list)
86{
87 return eina_clist_next(list, list);
88}
89
90static inline Eina_Clist *eina_clist_tail(const Eina_Clist *list)
91{
92 return eina_clist_prev(list, list);
93}
94
95static inline int eina_clist_empty(const Eina_Clist *list)
96{
97 return list->next == list;
98}
99
100static inline void eina_clist_init(Eina_Clist *list)
101{
102 list->next = list->prev = list;
103}
104
105static inline unsigned int eina_clist_count(const Eina_Clist *list)
106{
107 unsigned count = 0;
108 const Eina_Clist *ptr;
109 for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
110 return count;
111}
112
113static inline void eina_clist_move_tail(Eina_Clist *dst, Eina_Clist *src)
114{
115 if (eina_clist_empty(src)) return;
116
117 dst->prev->next = src->next;
118 src->next->prev = dst->prev;
119 dst->prev = src->prev;
120 src->prev->next = dst;
121 eina_clist_init(src);
122}
123
124static inline void eina_clist_move_head(Eina_Clist *dst, Eina_Clist *src)
125{
126 if (eina_clist_empty(src)) return;
127
128 dst->next->prev = src->prev;
129 src->prev->next = dst->next;
130 dst->next = src->next;
131 src->next->prev = dst;
132 eina_clist_init(src);
133}
134
135#endif
diff --git a/libraries/eina/src/include/eina_inline_f16p16.x b/libraries/eina/src/include/eina_inline_f16p16.x
deleted file mode 100644
index e16d188..0000000
--- a/libraries/eina/src/include/eina_inline_f16p16.x
+++ /dev/null
@@ -1,83 +0,0 @@
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
deleted file mode 100644
index 73480de..0000000
--- a/libraries/eina/src/include/eina_inline_f32p32.x
+++ /dev/null
@@ -1,110 +0,0 @@
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
deleted file mode 100644
index f80bf61..0000000
--- a/libraries/eina/src/include/eina_inline_f8p24.x
+++ /dev/null
@@ -1,82 +0,0 @@
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
deleted file mode 100644
index de44123..0000000
--- a/libraries/eina/src/include/eina_inline_fp.x
+++ /dev/null
@@ -1,153 +0,0 @@
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
deleted file mode 100644
index be20e8f..0000000
--- a/libraries/eina/src/include/eina_inline_hash.x
+++ /dev/null
@@ -1,151 +0,0 @@
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
104static inline int
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
deleted file mode 100644
index 3397a1b..0000000
--- a/libraries/eina/src/include/eina_inline_list.x
+++ /dev/null
@@ -1,67 +0,0 @@
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
deleted file mode 100644
index 64e049a..0000000
--- a/libraries/eina/src/include/eina_inline_lock_posix.x
+++ /dev/null
@@ -1,556 +0,0 @@
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#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#include <errno.h>
32#ifndef __USE_UNIX98
33# define __USE_UNIX98
34# include <pthread.h>
35# undef __USE_UNIX98
36#else
37# include <pthread.h>
38#endif
39
40#include <semaphore.h>
41
42#include <sys/time.h>
43#include <stdio.h>
44
45#ifdef EINA_HAVE_DEBUG_THREADS
46#include <stdlib.h>
47#include <string.h>
48#include <assert.h>
49#include <execinfo.h>
50#define EINA_LOCK_DEBUG_BT_NUM 64
51typedef void (*Eina_Lock_Bt_Func) ();
52
53#include "eina_inlist.h"
54#endif
55
56typedef struct _Eina_Lock Eina_Lock;
57typedef struct _Eina_RWLock Eina_RWLock;
58typedef struct _Eina_Condition Eina_Condition;
59typedef pthread_key_t Eina_TLS;
60typedef sem_t Eina_Semaphore;
61
62struct _Eina_Lock
63{
64#ifdef EINA_HAVE_DEBUG_THREADS
65 EINA_INLIST;
66#endif
67 pthread_mutex_t mutex;
68#ifdef EINA_HAVE_DEBUG_THREADS
69 pthread_t lock_thread_id;
70 Eina_Lock_Bt_Func lock_bt[EINA_LOCK_DEBUG_BT_NUM];
71 int lock_bt_num;
72 Eina_Bool locked : 1;
73#endif
74};
75
76struct _Eina_Condition
77{
78 Eina_Lock *lock;
79 pthread_cond_t condition;
80};
81
82struct _Eina_RWLock
83{
84 pthread_rwlock_t mutex;
85#ifdef EINA_HAVE_DEBUG_THREADS
86 pthread_t lock_thread_wid;
87#endif
88};
89
90EAPI extern Eina_Bool _eina_threads_activated;
91
92#ifdef EINA_HAVE_DEBUG_THREADS
93EAPI extern int _eina_threads_debug;
94EAPI extern pthread_t _eina_main_loop;
95EAPI extern pthread_mutex_t _eina_tracking_lock;
96EAPI extern Eina_Inlist *_eina_tracking;
97#endif
98
99static inline void
100eina_lock_debug(const Eina_Lock *mutex)
101{
102#ifdef EINA_HAVE_DEBUG_THREADS
103 printf("lock %p, locked: %i, by %i\n",
104 mutex, (int)mutex->locked, (int)mutex->lock_thread_id);
105 backtrace_symbols_fd((void **)mutex->lock_bt, mutex->lock_bt_num, 1);
106#else
107 (void) mutex;
108#endif
109}
110
111static inline Eina_Bool
112eina_lock_new(Eina_Lock *mutex)
113{
114 pthread_mutexattr_t attr;
115
116#ifdef EINA_HAVE_DEBUG_THREADS
117 if (!_eina_threads_activated)
118 assert(pthread_equal(_eina_main_loop, pthread_self()));
119#endif
120
121 if (pthread_mutexattr_init(&attr) != 0)
122 return EINA_FALSE;
123 /* NOTE: PTHREAD_MUTEX_RECURSIVE is not allowed at all, you will break on/off
124 feature for sure with that change. */
125#ifdef EINA_HAVE_DEBUG_THREADS
126 if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0)
127 return EINA_FALSE;
128 memset(mutex, 0, sizeof(Eina_Lock));
129#endif
130 if (pthread_mutex_init(&(mutex->mutex), &attr) != 0)
131 return EINA_FALSE;
132
133 pthread_mutexattr_destroy(&attr);
134
135 return EINA_TRUE;
136}
137
138static inline void
139eina_lock_free(Eina_Lock *mutex)
140{
141#ifdef EINA_HAVE_DEBUG_THREADS
142 if (!_eina_threads_activated)
143 assert(pthread_equal(_eina_main_loop, pthread_self()));
144#endif
145
146 pthread_mutex_destroy(&(mutex->mutex));
147#ifdef EINA_HAVE_DEBUG_THREADS
148 memset(mutex, 0, sizeof(Eina_Lock));
149#endif
150}
151
152static inline Eina_Lock_Result
153eina_lock_take(Eina_Lock *mutex)
154{
155 Eina_Lock_Result ret = EINA_LOCK_FAIL;
156 int ok;
157
158#ifdef EINA_HAVE_ON_OFF_THREADS
159 if (!_eina_threads_activated)
160 {
161#ifdef EINA_HAVE_DEBUG_THREADS
162 assert(pthread_equal(_eina_main_loop, pthread_self()));
163#endif
164 return EINA_LOCK_SUCCEED;
165 }
166#endif
167
168#ifdef EINA_HAVE_DEBUG_THREADS
169 if (_eina_threads_debug)
170 {
171 struct timeval t0, t1;
172 int dt;
173
174 gettimeofday(&t0, NULL);
175 ok = pthread_mutex_lock(&(mutex->mutex));
176 gettimeofday(&t1, NULL);
177
178 dt = (t1.tv_sec - t0.tv_sec) * 1000000;
179 if (t1.tv_usec > t0.tv_usec)
180 dt += (t1.tv_usec - t0.tv_usec);
181 else
182 dt -= t0.tv_usec - t1.tv_usec;
183 dt /= 1000;
184
185 if (dt > _eina_threads_debug) abort();
186 }
187 else
188 {
189#endif
190 ok = pthread_mutex_lock(&(mutex->mutex));
191#ifdef EINA_HAVE_DEBUG_THREADS
192 }
193#endif
194
195 if (ok == 0) ret = EINA_LOCK_SUCCEED;
196 else if (ok == EDEADLK)
197 {
198 printf("ERROR ERROR: DEADLOCK on lock %p\n", mutex);
199 eina_lock_debug(mutex);
200 ret = EINA_LOCK_DEADLOCK; // magic
201#ifdef EINA_HAVE_DEBUG_THREADS
202 if (_eina_threads_debug) abort();
203#endif
204 }
205
206#ifdef EINA_HAVE_DEBUG_THREADS
207 mutex->locked = 1;
208 mutex->lock_thread_id = pthread_self();
209 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
210
211 pthread_mutex_lock(&_eina_tracking_lock);
212 _eina_tracking = eina_inlist_append(_eina_tracking,
213 EINA_INLIST_GET(mutex));
214 pthread_mutex_unlock(&_eina_tracking_lock);
215#endif
216
217 return ret;
218}
219
220static inline Eina_Lock_Result
221eina_lock_take_try(Eina_Lock *mutex)
222{
223 Eina_Lock_Result ret = EINA_LOCK_FAIL;
224 int ok;
225
226#ifdef EINA_HAVE_ON_OFF_THREADS
227 if (!_eina_threads_activated)
228 {
229#ifdef EINA_HAVE_DEBUG_THREADS
230 assert(pthread_equal(_eina_main_loop, pthread_self()));
231#endif
232 return EINA_LOCK_SUCCEED;
233 }
234#endif
235
236#ifdef EINA_HAVE_DEBUG_THREADS
237 if (!_eina_threads_activated)
238 assert(pthread_equal(_eina_main_loop, pthread_self()));
239#endif
240
241 ok = pthread_mutex_trylock(&(mutex->mutex));
242 if (ok == 0) ret = EINA_LOCK_SUCCEED;
243 else if (ok == EDEADLK)
244 {
245 printf("ERROR ERROR: DEADLOCK on trylock %p\n", mutex);
246 ret = EINA_LOCK_DEADLOCK; // magic
247 }
248#ifdef EINA_HAVE_DEBUG_THREADS
249 if (ret == EINA_LOCK_SUCCEED)
250 {
251 mutex->locked = 1;
252 mutex->lock_thread_id = pthread_self();
253 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
254
255 pthread_mutex_lock(&_eina_tracking_lock);
256 _eina_tracking = eina_inlist_append(_eina_tracking,
257 EINA_INLIST_GET(mutex));
258 pthread_mutex_unlock(&_eina_tracking_lock);
259 }
260#endif
261 return ret;
262}
263
264static inline Eina_Lock_Result
265eina_lock_release(Eina_Lock *mutex)
266{
267 Eina_Lock_Result ret;
268
269#ifdef EINA_HAVE_ON_OFF_THREADS
270 if (!_eina_threads_activated)
271 {
272#ifdef EINA_HAVE_DEBUG_THREADS
273 assert(pthread_equal(_eina_main_loop, pthread_self()));
274#endif
275 return EINA_LOCK_SUCCEED;
276 }
277#endif
278
279#ifdef EINA_HAVE_DEBUG_THREADS
280 pthread_mutex_lock(&_eina_tracking_lock);
281 _eina_tracking = eina_inlist_remove(_eina_tracking,
282 EINA_INLIST_GET(mutex));
283 pthread_mutex_unlock(&_eina_tracking_lock);
284
285 mutex->locked = 0;
286 mutex->lock_thread_id = 0;
287 memset(mutex->lock_bt, 0, EINA_LOCK_DEBUG_BT_NUM * sizeof(Eina_Lock_Bt_Func));
288 mutex->lock_bt_num = 0;
289#endif
290 ret = (pthread_mutex_unlock(&(mutex->mutex)) == 0) ?
291 EINA_LOCK_SUCCEED : EINA_LOCK_FAIL;
292 return ret;
293}
294
295static inline Eina_Bool
296eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
297{
298#ifdef EINA_HAVE_DEBUG_THREADS
299 assert(mutex != NULL);
300 if (!_eina_threads_activated)
301 assert(pthread_equal(_eina_main_loop, pthread_self()));
302 memset(cond, 0, sizeof (Eina_Condition));
303#endif
304
305 cond->lock = mutex;
306 if (pthread_cond_init(&cond->condition, NULL) != 0)
307 {
308#ifdef EINA_HAVE_DEBUG_THREADS
309 if (errno == EBUSY)
310 printf("eina_condition_new on already initialized Eina_Condition\n");
311#endif
312 return EINA_FALSE;
313 }
314
315 return EINA_TRUE;
316}
317
318static inline void
319eina_condition_free(Eina_Condition *cond)
320{
321#ifdef EINA_HAVE_DEBUG_THREADS
322 if (!_eina_threads_activated)
323 assert(pthread_equal(_eina_main_loop, pthread_self()));
324#endif
325
326 pthread_cond_destroy(&(cond->condition));
327#ifdef EINA_HAVE_DEBUG_THREADS
328 memset(cond, 0, sizeof (Eina_Condition));
329#endif
330}
331
332static inline Eina_Bool
333eina_condition_wait(Eina_Condition *cond)
334{
335 Eina_Bool r;
336
337#ifdef EINA_HAVE_DEBUG_THREADS
338 assert(_eina_threads_activated);
339 assert(cond->lock != NULL);
340
341 pthread_mutex_lock(&_eina_tracking_lock);
342 _eina_tracking = eina_inlist_remove(_eina_tracking,
343 EINA_INLIST_GET(cond->lock));
344 pthread_mutex_unlock(&_eina_tracking_lock);
345#endif
346
347 r = pthread_cond_wait(&(cond->condition),
348 &(cond->lock->mutex)) == 0 ? EINA_TRUE : EINA_FALSE;
349
350#ifdef EINA_HAVE_DEBUG_THREADS
351 pthread_mutex_lock(&_eina_tracking_lock);
352 _eina_tracking = eina_inlist_append(_eina_tracking,
353 EINA_INLIST_GET(cond->lock));
354 pthread_mutex_unlock(&_eina_tracking_lock);
355#endif
356
357 return r;
358}
359
360static inline Eina_Bool
361eina_condition_timedwait(Eina_Condition *cond, double t)
362{
363 struct timespec tv;
364 Eina_Bool r;
365
366#ifdef EINA_HAVE_DEBUG_THREADS
367 assert(_eina_threads_activated);
368 assert(cond->lock != NULL);
369
370 pthread_mutex_lock(&_eina_tracking_lock);
371 _eina_tracking = eina_inlist_remove(_eina_tracking,
372 EINA_INLIST_GET(cond->lock));
373 pthread_mutex_unlock(&_eina_tracking_lock);
374#endif
375
376 tv.tv_sec = t;
377 tv.tv_nsec = (t - (double) tv.tv_sec) * 1000000000;
378
379 r = pthread_cond_timedwait(&(cond->condition),
380 &(cond->lock->mutex),
381 &tv) == 0 ?
382 EINA_TRUE : EINA_FALSE;
383
384#ifdef EINA_HAVE_DEBUG_THREADS
385 pthread_mutex_lock(&_eina_tracking_lock);
386 _eina_tracking = eina_inlist_append(_eina_tracking,
387 EINA_INLIST_GET(cond->lock));
388 pthread_mutex_unlock(&_eina_tracking_lock);
389#endif
390
391 return r;
392}
393
394static inline Eina_Bool
395eina_condition_broadcast(Eina_Condition *cond)
396{
397#ifdef EINA_HAVE_DEBUG_THREADS
398 assert(cond->lock != NULL);
399#endif
400
401 return pthread_cond_broadcast(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE;
402}
403
404static inline Eina_Bool
405eina_condition_signal(Eina_Condition *cond)
406{
407#ifdef EINA_HAVE_DEBUG_THREADS
408 assert(cond->lock != NULL);
409#endif
410
411 return pthread_cond_signal(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE;
412}
413
414static inline Eina_Bool
415eina_rwlock_new(Eina_RWLock *mutex)
416{
417#ifdef EINA_HAVE_DEBUG_THREADS
418 if (!_eina_threads_activated)
419 assert(pthread_equal(_eina_main_loop, pthread_self()));
420#endif
421
422 if (pthread_rwlock_init(&(mutex->mutex), NULL) != 0)
423 return EINA_FALSE;
424 return EINA_TRUE;
425}
426
427static inline void
428eina_rwlock_free(Eina_RWLock *mutex)
429{
430#ifdef EINA_HAVE_DEBUG_THREADS
431 if (!_eina_threads_activated)
432 assert(pthread_equal(_eina_main_loop, pthread_self()));
433#endif
434
435 pthread_rwlock_destroy(&(mutex->mutex));
436}
437
438static inline Eina_Lock_Result
439eina_rwlock_take_read(Eina_RWLock *mutex)
440{
441#ifdef EINA_HAVE_ON_OFF_THREADS
442 if (!_eina_threads_activated)
443 {
444#ifdef EINA_HAVE_DEBUG_THREADS
445 assert(pthread_equal(_eina_main_loop, pthread_self()));
446#endif
447 return EINA_LOCK_SUCCEED;
448 }
449#endif
450
451 if (pthread_rwlock_rdlock(&(mutex->mutex)) != 0)
452 return EINA_LOCK_FAIL;
453 return EINA_LOCK_SUCCEED;
454}
455
456static inline Eina_Lock_Result
457eina_rwlock_take_write(Eina_RWLock *mutex)
458{
459#ifdef EINA_HAVE_ON_OFF_THREADS
460 if (!_eina_threads_activated)
461 {
462#ifdef EINA_HAVE_DEBUG_THREADS
463 assert(pthread_equal(_eina_main_loop, pthread_self()));
464#endif
465 return EINA_LOCK_SUCCEED;
466 }
467#endif
468
469 if (pthread_rwlock_wrlock(&(mutex->mutex)) != 0)
470 return EINA_LOCK_FAIL;
471 return EINA_LOCK_SUCCEED;
472}
473
474static inline Eina_Lock_Result
475eina_rwlock_release(Eina_RWLock *mutex)
476{
477#ifdef EINA_HAVE_ON_OFF_THREADS
478 if (!_eina_threads_activated)
479 {
480#ifdef EINA_HAVE_DEBUG_THREADS
481 assert(pthread_equal(_eina_main_loop, pthread_self()));
482#endif
483 return EINA_LOCK_SUCCEED;
484 }
485#endif
486
487 if (pthread_rwlock_unlock(&(mutex->mutex)) != 0)
488 return EINA_LOCK_FAIL;
489 return EINA_LOCK_SUCCEED;
490}
491
492static inline Eina_Bool
493eina_tls_new(Eina_TLS *key)
494{
495 if (pthread_key_create(key, NULL) != 0)
496 return EINA_FALSE;
497 return EINA_TRUE;
498}
499
500static inline void
501eina_tls_free(Eina_TLS key)
502{
503 pthread_key_delete(key);
504}
505
506static inline void *
507eina_tls_get(Eina_TLS key)
508{
509 return pthread_getspecific(key);
510}
511
512static inline Eina_Bool
513eina_tls_set(Eina_TLS key, const void *data)
514{
515 if (pthread_setspecific(key, data) != 0)
516 return EINA_FALSE;
517 return EINA_TRUE;
518}
519
520static inline Eina_Bool
521eina_semaphore_new(Eina_Semaphore *sem, int count_init)
522{
523 if (!sem || (count_init <= 0))
524 return EINA_FALSE;
525
526 return (sem_init(sem, count_init, 1) == 0) ? EINA_TRUE : EINA_FALSE;
527}
528
529static inline Eina_Bool
530eina_semaphore_free(Eina_Semaphore *sem)
531{
532 if (!sem)
533 return EINA_FALSE;
534
535 return (sem_destroy(sem) == 0) ? EINA_TRUE : EINA_FALSE;
536}
537
538static inline Eina_Bool
539eina_semaphore_lock(Eina_Semaphore *sem)
540{
541 if (!sem)
542 return EINA_FALSE;
543
544 return (sem_wait(sem) == 0) ? EINA_TRUE : EINA_FALSE;
545}
546
547static inline Eina_Bool
548eina_semaphore_release(Eina_Semaphore *sem, int count_release EINA_UNUSED)
549{
550 if (!sem)
551 return EINA_FALSE;
552
553 return (sem_post(sem) == 0) ? EINA_TRUE : EINA_FALSE;
554}
555
556#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_void.x b/libraries/eina/src/include/eina_inline_lock_void.x
deleted file mode 100644
index 2f5209f..0000000
--- a/libraries/eina/src/include/eina_inline_lock_void.x
+++ /dev/null
@@ -1,273 +0,0 @@
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;
50typedef void *Eina_Semaphore;
51
52/**
53 * @brief Create a new #Eina_Lock.
54 *
55 * @param mutex A pointer to the lock object.
56 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
57 *
58 * This function creates a new #Eina_Lock object and stores it in the
59 * @p mutex buffer. On success, this function returns #EINA_TRUE and
60 * #EINA_FALSE otherwise. To free the resources allocated by this
61 * function, use eina_lock_free(). For performance reasons, no check
62 * is done on @p mutex.
63 */
64static inline Eina_Bool
65eina_lock_new(Eina_Lock *mutex EINA_UNUSED)
66{
67 return EINA_TRUE;
68}
69
70/**
71 * @brief Free the ressources of the given lock object.
72 *
73 * @param mutex The lock object to free.
74 *
75 * This function frees the resources of @p mutex allocated by
76 * eina_lock_new(). For performance reasons, no check is done on
77 * @p mutex.
78 */
79static inline void
80eina_lock_free(Eina_Lock *mutex EINA_UNUSED)
81{
82}
83
84/**
85 * @brief Lock the given mutual exclusion object.
86 *
87 * @param mutex The lock object to lock.
88 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
89 *
90 * This function locks @p mutex. @p mutex must have been created by
91 * eina_lock_new(). On success, this function returns #EINA_TRUE and
92 * #EINA_FALSE otherwise. For performance reasons, no check is done on
93 * @p mutex.
94 */
95static inline Eina_Lock_Result
96eina_lock_take(Eina_Lock *mutex EINA_UNUSED)
97{
98 return EINA_LOCK_SUCCEED;
99}
100
101/**
102 * @brief Try to lock the given mutual exclusion object.
103 *
104 * @param mutex The lock object to try to lock.
105 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
106 *
107 * This function tries to lock @p mutex. @p mutex must have been created by
108 * eina_lock_new(). If @p mutex can be locked, this function returns
109 * #EINA_TRUE; if @p mutex can not be locked, or is already locked, it
110 * returns #EINA_FALSE. This function does not block and returns
111 * immediately. For performance reasons, no check is done on
112 * @p mutex.
113 *
114 * @note On Windows CE, this function is actually eina_lock_take().
115 */
116static inline Eina_Lock_Result
117eina_lock_take_try(Eina_Lock *mutex EINA_UNUSED)
118{
119 return EINA_LOCK_SUCCEED;
120}
121
122/**
123 * @brief Unlock the given mutual exclusion object.
124 *
125 * @param mutex The lock object to unlock.
126 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
127 *
128 * This function unlocks @p mutex. @p mutex must have been created by
129 * eina_lock_new(). On success, this function returns #EINA_TRUE and
130 * #EINA_FALSE otherwise. For performance reasons, no check is done on
131 * @p mutex.
132 */
133static inline Eina_Lock_Result
134eina_lock_release(Eina_Lock *mutex EINA_UNUSED)
135{
136 return EINA_LOCK_SUCCEED;
137}
138
139static inline void
140eina_lock_debug(const Eina_Lock *mutex EINA_UNUSED)
141{
142}
143
144static inline Eina_Bool
145eina_condition_new(Eina_Condition *cond EINA_UNUSED, Eina_Lock *mutex EINA_UNUSED)
146{
147 return EINA_TRUE;
148}
149
150static inline void
151eina_condition_free(Eina_Condition *cond EINA_UNUSED)
152{
153}
154
155static inline Eina_Bool
156eina_condition_wait(Eina_Condition *cond EINA_UNUSED)
157{
158 return EINA_TRUE;
159}
160
161static inline Eina_Bool
162eina_condition_timedwait(Eina_Condition *cond EINA_UNUSED, double val EINA_UNUSED)
163{
164 return EINA_TRUE;
165}
166
167static inline Eina_Bool
168eina_condition_broadcast(Eina_Condition *cond EINA_UNUSED)
169{
170 return EINA_TRUE;
171}
172
173static inline Eina_Bool
174eina_condition_signal(Eina_Condition *cond EINA_UNUSED)
175{
176 return EINA_TRUE;
177}
178
179static inline Eina_Bool
180eina_rwlock_new(Eina_RWLock *mutex EINA_UNUSED)
181{
182 return EINA_TRUE;
183}
184
185static inline void
186eina_rwlock_free(Eina_RWLock *mutex EINA_UNUSED)
187{
188}
189
190static inline Eina_Lock_Result
191eina_rwlock_read_take(Eina_RWLock *mutex EINA_UNUSED)
192{
193 return EINA_LOCK_SUCCEED;
194}
195
196static inline Eina_Lock_Result
197eina_rwlock_write_take(Eina_RWLock *mutex EINA_UNUSED)
198{
199 return EINA_LOCK_SUCCEED;
200}
201
202static inline Eina_Lock_Result
203eina_rwlock_release(Eina_RWLock *mutex EINA_UNUSED)
204{
205 return EINA_LOCK_SUCCEED;
206}
207
208static inline Eina_Lock_Result
209eina_rwlock_take_read(Eina_RWLock *mutex EINA_UNUSED)
210{
211 return EINA_LOCK_SUCCEED;
212}
213
214static inline Eina_Lock_Result
215eina_rwlock_take_write(Eina_RWLock *mutex EINA_UNUSED)
216{
217 return EINA_LOCK_SUCCEED;
218}
219
220static inline Eina_Bool
221eina_tls_new(Eina_TLS *key EINA_UNUSED)
222{
223 return EINA_TRUE;
224}
225
226static inline void
227eina_tls_free(Eina_TLS key EINA_UNUSED)
228{
229}
230
231static inline void *
232eina_tls_get(Eina_TLS key EINA_UNUSED)
233{
234 return NULL;
235}
236
237static inline Eina_Bool
238eina_tls_set(Eina_TLS key EINA_UNUSED, const void *data EINA_UNUSED)
239{
240 return EINA_TRUE;
241}
242
243static inline Eina_Bool
244eina_semaphore_new(Eina_Semaphore *sem EINA_UNUSED,
245 int count_init EINA_UNUSED)
246{
247 return EINA_TRUE;
248}
249
250static inline Eina_Bool
251eina_semaphore_free(Eina_Semaphore *sem EINA_UNUSED)
252{
253 return EINA_TRUE;
254}
255
256static inline Eina_Bool
257eina_semaphore_lock(Eina_Semaphore *sem EINA_UNUSED)
258{
259 return EINA_TRUE;
260}
261
262static inline Eina_Bool
263eina_semaphore_release(Eina_Semaphore *sem EINA_UNUSED,
264 int count_release EINA_UNUSED)
265{
266 return EINA_TRUE;
267}
268
269/**
270 * @}
271 */
272
273#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_win32.x b/libraries/eina/src/include/eina_inline_lock_win32.x
deleted file mode 100644
index 1988724..0000000
--- a/libraries/eina/src/include/eina_inline_lock_win32.x
+++ /dev/null
@@ -1,550 +0,0 @@
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;
26typedef struct _Eina_RWLock Eina_RWLock;
27typedef DWORD Eina_TLS;
28typedef HANDLE Eina_Semaphore;
29
30#if _WIN32_WINNT >= 0x0600
31struct _Eina_Condition
32{
33 CRITICAL_SECTION *mutex;
34 CONDITION_VARIABLE condition;
35};
36
37struct _Eina_RWLock
38{
39 SRWLOCK mutex;
40
41 Eina_Bool is_read_mode : 1;
42};
43#else
44struct _Eina_Condition
45{
46 int waiters_count;
47 CRITICAL_SECTION waiters_count_lock;
48 CRITICAL_SECTION *mutex;
49 HANDLE semaphore;
50 HANDLE waiters_done;
51 Eina_Bool was_broadcast;
52};
53
54struct _Eina_RWLock
55{
56 LONG readers_count;
57 LONG writers_count;
58 int readers;
59 int writers;
60
61 Eina_Lock mutex;
62 Eina_Condition cond_read;
63 Eina_Condition cond_write;
64};
65#endif
66
67
68EAPI extern Eina_Bool _eina_threads_activated;
69
70
71static inline Eina_Bool
72eina_lock_new(Eina_Lock *mutex)
73{
74 InitializeCriticalSection(mutex);
75
76 return EINA_TRUE;
77}
78
79static inline void
80eina_lock_free(Eina_Lock *mutex)
81{
82 DeleteCriticalSection(mutex);
83}
84
85static inline Eina_Lock_Result
86eina_lock_take(Eina_Lock *mutex)
87{
88#ifdef EINA_HAVE_ON_OFF_THREADS
89 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
90#endif
91
92 EnterCriticalSection(mutex);
93
94 return EINA_LOCK_SUCCEED;
95}
96
97static inline Eina_Lock_Result
98eina_lock_take_try(Eina_Lock *mutex)
99{
100#ifdef EINA_HAVE_ON_OFF_THREADS
101 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
102#endif
103
104 return TryEnterCriticalSection(mutex) == 0 ? EINA_LOCK_FAIL : EINA_LOCK_SUCCEED;
105}
106
107static inline Eina_Lock_Result
108eina_lock_release(Eina_Lock *mutex)
109{
110#ifdef EINA_HAVE_ON_OFF_THREADS
111 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
112#endif
113
114 LeaveCriticalSection(mutex);
115
116 return EINA_LOCK_SUCCEED;
117}
118
119static inline void
120eina_lock_debug(const Eina_Lock *mutex)
121{
122 (void)mutex;
123}
124
125static inline Eina_Bool
126eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
127{
128 cond->mutex = mutex;
129#if _WIN32_WINNT >= 0x0600
130 InitializeConditionVariable(&cond->condition);
131#else
132 cond->waiters_count = 0;
133 cond->was_broadcast = EINA_FALSE;
134 cond->semaphore = CreateSemaphore(NULL, // no security
135 0, // initially 0
136 0x7fffffff, // max count
137 NULL); // unnamed
138 if (!cond->semaphore)
139 return EINA_FALSE;
140
141 InitializeCriticalSection(&cond->waiters_count_lock);
142
143 cond->waiters_done = CreateEvent(NULL, // no security
144 FALSE, // auto-reset
145 FALSE, // non-signaled initially
146 NULL); // unnamed
147 if (!cond->waiters_done)
148 {
149 CloseHandle(cond->semaphore);
150 return EINA_FALSE;
151 }
152#endif
153
154 return EINA_TRUE;
155}
156
157static inline void
158eina_condition_free(Eina_Condition *cond)
159{
160#if _WIN32_WINNT >= 0x0600
161 /* Nothing to do */
162 (void)cond;
163#else
164 CloseHandle(cond->waiters_done);
165 DeleteCriticalSection(&cond->waiters_count_lock);
166 CloseHandle(cond->semaphore);
167#endif
168}
169
170static inline Eina_Bool
171_eina_condition_internal_timedwait(Eina_Condition *cond, DWORD t)
172{
173#if _WIN32_WINNT >= 0x0600
174 SleepConditionVariableCS(&cond->condition, cond->mutex, t);
175#else
176 DWORD ret;
177 Eina_Bool last_waiter;
178
179 /* Avoid race conditions. */
180 EnterCriticalSection(&cond->waiters_count_lock);
181 cond->waiters_count++;
182 LeaveCriticalSection(&cond->waiters_count_lock);
183
184 /*
185 * This call atomically releases the mutex and waits on the
186 * semaphore until <pthread_cond_signal> or <pthread_cond_broadcast>
187 * are called by another thread.
188 */
189 ret = SignalObjectAndWait(cond->mutex, cond->semaphore, t, FALSE);
190 if (ret == WAIT_FAILED)
191 return EINA_FALSE;
192
193 /* Reacquire lock to avoid race conditions. */
194 EnterCriticalSection(&cond->waiters_count_lock);
195
196 /* We're no longer waiting... */
197 cond->waiters_count--;
198
199 /* Check to see if we're the last waiter after <pthread_cond_broadcast>. */
200 last_waiter = (cond->was_broadcast) && (cond->waiters_count == 0);
201
202 LeaveCriticalSection(&cond->waiters_count_lock);
203
204 /*
205 * If we're the last waiter thread during this particular broadcast
206 * then let all the other threads proceed.
207 */
208 if (last_waiter)
209 {
210 /*
211 * This call atomically signals the <waiters_done_> event and waits until
212 * it can acquire the <external_mutex>. This is required to ensure fairness.
213 */
214 ret = SignalObjectAndWait(cond->waiters_done, cond->mutex, t, FALSE);
215 if (ret == WAIT_FAILED)
216 return EINA_FALSE;
217 }
218 else
219 {
220 /*
221 * Always regain the external mutex since that's the guarantee we
222 * give to our callers.
223 */
224 ret = WaitForSingleObject(cond->mutex, t);
225 if (ret == WAIT_FAILED)
226 return EINA_FALSE;
227 }
228#endif
229
230 return EINA_TRUE;
231}
232
233static inline Eina_Bool
234eina_condition_timedwait(Eina_Condition *cond, double val)
235{
236 return _eina_condition_internal_timedwait(cond, (DWORD)(val * 1000));
237}
238
239static inline Eina_Bool
240eina_condition_wait(Eina_Condition *cond)
241{
242 return _eina_condition_internal_timedwait(cond, INFINITE);
243}
244
245static inline Eina_Bool
246eina_condition_broadcast(Eina_Condition *cond)
247{
248#if _WIN32_WINNT >= 0x0600
249 WakeAllConditionVariable(&cond->condition);
250 return EINA_TRUE;
251#else
252 Eina_Bool have_waiters;
253
254 /*
255 * This is needed to ensure that <waiters_count_> and <was_broadcast_> are
256 * consistent relative to each other.
257 */
258 EnterCriticalSection(&cond->waiters_count_lock);
259 have_waiters = EINA_FALSE;
260
261 if (cond->waiters_count > 0)
262 {
263 /*
264 * We are broadcasting, even if there is just one waiter...
265 * Record that we are broadcasting, which helps optimize
266 * <pthread_cond_wait> for the non-broadcast case.
267 */
268 cond->was_broadcast = EINA_TRUE;
269 have_waiters = EINA_TRUE;
270 }
271
272 if (have_waiters)
273 {
274 DWORD ret;
275
276 /* Wake up all the waiters atomically. */
277 ret = ReleaseSemaphore(cond->semaphore, cond->waiters_count, 0);
278 LeaveCriticalSection(&cond->waiters_count_lock);
279 if (!ret) return EINA_FALSE;
280
281 /*
282 * Wait for all the awakened threads to acquire the counting
283 * semaphore.
284 */
285 ret = WaitForSingleObject(cond->waiters_done, INFINITE);
286 if (ret == WAIT_FAILED)
287 return EINA_FALSE;
288 /*
289 * This assignment is okay, even without the <waiters_count_lock_> held
290 * because no other waiter threads can wake up to access it.
291 */
292 cond->was_broadcast = EINA_FALSE;
293 }
294 else
295 LeaveCriticalSection(&cond->waiters_count_lock);
296
297 return EINA_TRUE;
298#endif
299}
300
301static inline Eina_Bool
302eina_condition_signal(Eina_Condition *cond)
303{
304#if _WIN32_WINNT >= 0x0600
305 WakeConditionVariable(&cond->condition);
306#else
307 Eina_Bool have_waiters;
308
309 EnterCriticalSection(&cond->waiters_count_lock);
310 have_waiters = (cond->waiters_count > 0);
311 LeaveCriticalSection(&cond->waiters_count_lock);
312
313 /* If there aren't any waiters, then this is a no-op. */
314 if (have_waiters)
315 {
316 if (!ReleaseSemaphore(cond->semaphore, 1, 0))
317 return EINA_FALSE;
318 }
319#endif
320
321 return EINA_TRUE;
322}
323
324static inline Eina_Bool
325eina_rwlock_new(Eina_RWLock *mutex)
326{
327#if _WIN32_WINNT >= 0x0600
328 InitializeSRWLock(&mutex->mutex);
329 return EINA_TRUE;
330#else
331 if (!eina_lock_new(&(mutex->mutex))) return EINA_FALSE;
332 if (!eina_condition_new(&(mutex->cond_read), &(mutex->mutex)))
333 goto on_error1;
334 if (!eina_condition_new(&(mutex->cond_write), &(mutex->mutex)))
335 goto on_error2;
336
337 mutex->readers_count = 0;
338 mutex->writers_count = 0;
339 mutex->readers = 0;
340 mutex->writers = 0;
341
342 return EINA_TRUE;
343
344 on_error2:
345 eina_condition_free(&(mutex->cond_read));
346 on_error1:
347 eina_lock_free(&(mutex->mutex));
348 return EINA_FALSE;
349#endif
350}
351
352static inline void
353eina_rwlock_free(Eina_RWLock *mutex)
354{
355#if _WIN32_WINNT >= 0x0600
356 (void)mutex;
357#else
358 eina_condition_free(&(mutex->cond_read));
359 eina_condition_free(&(mutex->cond_write));
360 eina_lock_free(&(mutex->mutex));
361#endif
362}
363
364static inline Eina_Lock_Result
365eina_rwlock_take_read(Eina_RWLock *mutex)
366{
367#if _WIN32_WINNT >= 0x0600
368 AcquireSRWLockShared(&mutex->mutex);
369 mutex->is_read_mode = EINA_TRUE;
370#else
371 DWORD res = 0;
372
373 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
374 return EINA_LOCK_FAIL;
375
376 if (mutex->writers)
377 {
378 mutex->readers_count++;
379 while (mutex->writers)
380 {
381 EnterCriticalSection(&mutex->cond_write.waiters_count_lock);
382 mutex->cond_read.waiters_count++;
383 LeaveCriticalSection(&mutex->cond_write.waiters_count_lock);
384 res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE);
385 if (res != WAIT_OBJECT_0) break;
386 }
387 mutex->readers_count--;
388 }
389 if (res == 0)
390 mutex->readers++;
391 eina_lock_release(&(mutex->mutex));
392#endif
393
394 return EINA_LOCK_SUCCEED;
395}
396
397static inline Eina_Lock_Result
398eina_rwlock_take_write(Eina_RWLock *mutex)
399{
400#if _WIN32_WINNT >= 0x0600
401 AcquireSRWLockExclusive(&mutex->mutex);
402 mutex->is_read_mode = EINA_FALSE;
403#else
404 DWORD res = 0;
405
406 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
407 return EINA_LOCK_FAIL;
408
409 if (mutex->writers || mutex->readers > 0)
410 {
411 mutex->writers_count++;
412 while (mutex->writers || mutex->readers > 0)
413 {
414 EnterCriticalSection(&mutex->cond_write.waiters_count_lock);
415 mutex->cond_read.waiters_count++;
416 LeaveCriticalSection(&mutex->cond_write.waiters_count_lock);
417 res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE);
418 if (res != WAIT_OBJECT_0) break;
419 }
420 mutex->writers_count--;
421 }
422 if (res == 0) mutex->writers = 1;
423 eina_lock_release(&(mutex->mutex));
424#endif
425
426 return EINA_LOCK_SUCCEED;
427}
428
429static inline Eina_Lock_Result
430eina_rwlock_release(Eina_RWLock *mutex)
431{
432#if _WIN32_WINNT >= 0x0600
433 if (mutex->is_read_mode)
434 ReleaseSRWLockShared(&mutex->mutex);
435 else
436 ReleaseSRWLockExclusive(&mutex->mutex);
437#else
438 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
439 return EINA_LOCK_FAIL;
440
441 if (mutex->writers)
442 {
443 mutex->writers = 0;
444 if (mutex->readers_count == 1)
445 {
446 EnterCriticalSection(&mutex->cond_read.waiters_count_lock);
447 if (mutex->cond_read.waiters_count > 0)
448 ReleaseSemaphore(mutex->cond_read.semaphore, 1, 0);
449 LeaveCriticalSection(&mutex->cond_read.waiters_count_lock);
450 }
451 else if (mutex->readers_count > 0)
452 eina_condition_broadcast(&(mutex->cond_read));
453 else if (mutex->writers_count > 0)
454 {
455 EnterCriticalSection (&mutex->cond_write.waiters_count_lock);
456 if (mutex->cond_write.waiters_count > 0)
457 ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0);
458 LeaveCriticalSection (&mutex->cond_write.waiters_count_lock);
459 }
460 }
461 else if (mutex->readers > 0)
462 {
463 mutex->readers--;
464 if (mutex->readers == 0 && mutex->writers_count > 0)
465 {
466 EnterCriticalSection (&mutex->cond_write.waiters_count_lock);
467 if (mutex->cond_write.waiters_count > 0)
468 ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0);
469 LeaveCriticalSection (&mutex->cond_write.waiters_count_lock);
470 }
471 }
472 eina_lock_release(&(mutex->mutex));
473#endif
474
475 return EINA_LOCK_SUCCEED;
476}
477
478static inline Eina_Bool
479eina_tls_new(Eina_TLS *key)
480{
481 if ((*key = TlsAlloc()) == TLS_OUT_OF_INDEXES)
482 return EINA_FALSE;
483 return EINA_TRUE;
484}
485
486static inline void
487eina_tls_free(Eina_TLS key)
488{
489 TlsFree(key);
490}
491
492static inline void *
493eina_tls_get(Eina_TLS key)
494{
495 return (void*)TlsGetValue(key);
496}
497
498static inline Eina_Bool
499eina_tls_set(Eina_TLS key, const void *data)
500{
501 if (TlsSetValue(key, (LPVOID)data) == 0)
502 return EINA_FALSE;
503 return EINA_TRUE;
504}
505
506static inline Eina_Bool
507eina_semaphore_new(Eina_Semaphore *sem, int count_init)
508{
509 if (!sem || (count_init <= 0))
510 return EINA_FALSE;
511
512 *sem = CreateSemaphore(NULL, count_init, 32767, NULL);
513 if (!*sem)
514 return EINA_FALSE;
515}
516
517static inline Eina_Bool
518eina_semaphore_free(Eina_Semaphore *sem)
519{
520 if (!sem)
521 return EINA_FALSE;
522
523 CloseHandle(*sem);
524}
525
526static inline Eina_Bool
527eina_semaphore_lock(Eina_Semaphore *sem)
528{
529 DWORD res;
530
531 if (!sem)
532 return EINA_FALSE;
533
534 res = WaitForSingleObject(*sem, 0L);
535 if (res == WAIT_OBJECT_0)
536 return EINA_TRUE;
537
538 return EINA_FALSE;
539}
540
541static inline Eina_Bool
542eina_semaphore_release(Eina_Semaphore *sem, int count_release)
543{
544 if (!sem)
545 return EINA_FALSE;
546
547 return ReleaseSemaphore(*sem, count_release, NULL) ? EINA_TRUE : EINA_FALSE;
548}
549
550#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_wince.x b/libraries/eina/src/include/eina_inline_lock_wince.x
deleted file mode 100644
index 1af1aac..0000000
--- a/libraries/eina/src/include/eina_inline_lock_wince.x
+++ /dev/null
@@ -1,212 +0,0 @@
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#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#include <windows.h>
32
33EAPI extern Eina_Bool _threads_activated;
34
35typedef HANDLE Eina_Lock;
36typedef Eina_Lock Eina_RWLock;
37typedef DWORD Eina_TLS;
38typedef void * Eina_Semaphore;
39
40static inline Eina_Bool
41eina_lock_new(Eina_Lock *mutex)
42{
43 Eina_Lock m;
44
45 m = CreateMutex(NULL, FALSE, NULL);
46 if (m) *mutex = m;
47 return (m != NULL);
48}
49
50static inline void
51eina_lock_free(Eina_Lock *mutex)
52{
53 CloseHandle(*mutex);
54}
55
56static inline Eina_Lock_Result
57eina_lock_take(Eina_Lock *mutex)
58{
59 DWORD res;
60
61#ifdef EINA_HAVE_ON_OFF_THREADS
62 if (!_eina_threads_activated) return EINA_LOCK_FAIL;
63#endif
64
65 res = WaitForSingleObject(*mutex, INFINITE);
66 if ((res == WAIT_ABANDONED) || (res == WAIT_FAILED))
67 return EINA_LOCK_FAIL;
68
69 return EINA_LOCK_SUCCEED;
70}
71
72static inline Eina_Lock_Result
73eina_lock_take_try(Eina_Lock *mutex)
74{
75 return eina_lock_take(*mutex);
76}
77
78static inline Eina_Lock_Result
79eina_lock_release(Eina_Lock *mutex)
80{
81#ifdef EINA_HAVE_ON_OFF_THREADS
82 if (!_eina_threads_activated) return ;
83#endif
84
85 return ReleaseMutex(*mutex) ? EINA_LOCK_SUCCEED : EINA_LOCK_FAIL;
86}
87
88static inline void
89eina_lock_debug(const Eina_Lock *mutex)
90{
91}
92
93static inline Eina_Bool
94eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
95{
96 return EINA_FALSE;
97}
98
99static inline void
100eina_condition_free(Eina_Condition *cond)
101{
102}
103
104static inline Eina_Bool
105eina_condition_wait(Eina_Condition *cond)
106{
107 return EINA_FALSE;
108}
109
110static inline Eina_Bool
111eina_condition_timedwait(Eina_Condition *cond, double t)
112{
113 return EINA_FALSE;
114}
115
116static inline Eina_Bool
117eina_condition_broadcast(Eina_Condition *cond)
118{
119 return EINA_FALSE;
120}
121
122static inline Eina_Bool
123eina_condition_signal(Eina_Condition *cond)
124{
125 return EINA_FALSE;
126}
127
128static inline Eina_Bool
129eina_rwlock_new(Eina_RWLock *mutex)
130{
131 return eina_lock_new(mutex);
132}
133
134static inline void
135eina_rwlock_free(Eina_RWLock *mutex)
136{
137 return eina_lock_free(mutex);
138}
139
140static inline Eina_Lock_Result
141eina_rwlock_take_read(Eina_RWLock *mutex)
142{
143 return eina_lock_take(mutex);
144}
145
146static inline Eina_Lock_Result
147eina_rwlock_take_write(Eina_RWLock *mutex)
148{
149 return eina_lock_take(mutex);
150}
151
152static inline Eina_Lock_Result
153eina_rwlock_release(Eina_RWLock *mutex)
154{
155 return eina_lock_release(mutex);
156}
157
158static inline Eina_Bool
159eina_tls_new(Eina_TLS *key)
160{
161 if (TlsAlloc() == TLS_OUT_OF_INDEXES)
162 return EINA_FALSE;
163 return EINA_TRUE;
164}
165
166static inline void
167eina_tls_free(Eina_TLS key)
168{
169 TlsFree(key);
170}
171
172static inline void *
173eina_tls_get(Eina_TLS key)
174{
175 return (void*)TlsGetValue(key);
176}
177
178static inline Eina_Bool
179eina_tls_set(Eina_TLS key, const void *data)
180{
181 if (TlsSetValue(key, (LPVOID)data) == 0)
182 return EINA_FALSE;
183 return EINA_TRUE;
184}
185
186static inline Eina_Bool
187eina_semaphore_new(Eina_Semaphore *sem EINA_UNUSED,
188 int count_init EINA_UNUSED)
189{
190 return EINA_FALSE;
191}
192
193static inline Eina_Bool
194eina_semaphore_free(Eina_Semaphore *sem EINA_UNUSED)
195{
196 return EINA_FALSE;
197}
198
199static inline Eina_Bool
200eina_semaphore_lock(Eina_Semaphore *sem EINA_UNUSED)
201{
202 return EINA_FALSE;
203}
204
205static inline Eina_Bool
206eina_semaphore_release(Eina_Semaphore *sem EINA_UNUSED,
207 int count_release EINA_UNUSED)
208{
209 return EINA_FALSE;
210}
211
212#endif
diff --git a/libraries/eina/src/include/eina_inline_log.x b/libraries/eina/src/include/eina_inline_log.x
deleted file mode 100644
index 53d8afb..0000000
--- a/libraries/eina/src/include/eina_inline_log.x
+++ /dev/null
@@ -1,197 +0,0 @@
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
deleted file mode 100644
index 729a669..0000000
--- a/libraries/eina/src/include/eina_inline_mempool.x
+++ /dev/null
@@ -1,148 +0,0 @@
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#include <string.h>
23
24/**
25 * @addtogroup Eina_Memory_Pool_Group Memory Pool
26 *
27 * @{
28 */
29
30/* Memory Pool */
31typedef struct _Eina_Mempool_Backend_ABI1 Eina_Mempool_Backend_ABI1;
32typedef struct _Eina_Mempool_Backend_ABI2 Eina_Mempool_Backend_ABI2;
33
34struct _Eina_Mempool_Backend
35{
36 const char *name;
37 void *(*init)(const char *context, const char *options, va_list args);
38 void (*free)(void *data, void *element);
39 void *(*alloc)(void *data, unsigned int size);
40 void *(*realloc)(void *data, void *element, unsigned int size);
41 void (*garbage_collect)(void *data);
42 void (*statistics)(void *data);
43 void (*shutdown)(void *data);
44 void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
45};
46
47struct _Eina_Mempool_Backend_ABI1
48{
49 const char *name;
50 void *(*init)(const char *context, const char *options, va_list args);
51 void (*free)(void *data, void *element);
52 void *(*alloc)(void *data, unsigned int size);
53 void *(*realloc)(void *data, void *element, unsigned int size);
54 void (*garbage_collect)(void *data);
55 void (*statistics)(void *data);
56 void (*shutdown)(void *data);
57};
58
59struct _Eina_Mempool_Backend_ABI2
60{
61 void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
62};
63
64struct _Eina_Mempool
65{
66 Eina_Mempool_Backend_ABI1 backend;
67 void *backend_data;
68 Eina_Mempool_Backend_ABI2 *backend2;
69};
70
71/**
72 * @brief Re-allocate an amount memory by the given mempool.
73 *
74 * @param mp The mempool.
75 * @param element The element to re-allocate.
76 * @param size The size in bytes to re-allocate.
77 * @return The newly re-allocated data.
78 *
79 * This function re-allocates and returns @p element with @p size bytes using the
80 * mempool @p mp. If not used anymore, the data must be freed with eina_mempool_free().
81 * @warning No checks are done for @p mp.
82 */
83static inline void *
84eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size)
85{
86 return mp->backend.realloc(mp->backend_data, element, size);
87}
88
89/**
90 * @brief Allocate memory using the given mempool.
91 *
92 * @param mp The mempool.
93 * @param size The size in bytes to allocate.
94 * @return The newly allocated data.
95 *
96 * This function allocates and returns @p size bytes using the mempool @p mp.
97 * If not used anymore, the data must be freed with eina_mempool_free().
98 * @warning No checks are done for @p mp.
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 Allocate and zero memory using the given mempool.
108 *
109 * @param mp The mempool.
110 * @param size The size in bytes to allocate.
111 * @return The newly allocated data.
112 *
113 * This function allocates, zeroes, and returns @p size bytes using the mempool @p mp.
114 * If not used anymore, the data must be freed with eina_mempool_free().
115 * @warning No checks are done for @p mp.
116 * @since 1.2
117 */
118static inline void *
119eina_mempool_calloc(Eina_Mempool *mp, unsigned int size)
120{
121 void *r = mp->backend.alloc(mp->backend_data, size);
122 if (!r) return NULL;
123 memset(r, 0, size);
124 return r;
125}
126
127/**
128 * @brief Free resources previously allocated by the given mempool.
129 *
130 * @param mp The mempool.
131 * @param element The data to free.
132 *
133 * This function frees @p element allocated by @p mp. @p element must
134 * have been obtained from eina_mempool_malloc(), eina_mempool_calloc(), or
135 * eina_mempool_realloc().
136 * @warning No checks are done for @p mp.
137 */
138static inline void
139eina_mempool_free(Eina_Mempool *mp, void *element)
140{
141 mp->backend.free(mp->backend_data, element);
142}
143
144/**
145 * @}
146 */
147
148#endif
diff --git a/libraries/eina/src/include/eina_inline_rbtree.x b/libraries/eina/src/include/eina_inline_rbtree.x
deleted file mode 100644
index 954774b..0000000
--- a/libraries/eina/src/include/eina_inline_rbtree.x
+++ /dev/null
@@ -1,50 +0,0 @@
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
deleted file mode 100644
index 29ad24b..0000000
--- a/libraries/eina/src/include/eina_inline_rectangle.x
+++ /dev/null
@@ -1,254 +0,0 @@
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
deleted file mode 100644
index 2daeb85..0000000
--- a/libraries/eina/src/include/eina_inline_str.x
+++ /dev/null
@@ -1,76 +0,0 @@
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
deleted file mode 100644
index 19827c5..0000000
--- a/libraries/eina/src/include/eina_inline_stringshare.x
+++ /dev/null
@@ -1,91 +0,0 @@
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(Eina_Stringshare **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(Eina_Stringshare **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
deleted file mode 100644
index 2a8b205..0000000
--- a/libraries/eina/src/include/eina_inline_tiler.x
+++ /dev/null
@@ -1,151 +0,0 @@
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
deleted file mode 100644
index 4a50611..0000000
--- a/libraries/eina/src/include/eina_inline_trash.x
+++ /dev/null
@@ -1,90 +0,0 @@
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
deleted file mode 100644
index ace6fdc..0000000
--- a/libraries/eina/src/include/eina_inline_ustringshare.x
+++ /dev/null
@@ -1,93 +0,0 @@
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_inline_value.x b/libraries/eina/src/include/eina_inline_value.x
deleted file mode 100644
index 33c83f5..0000000
--- a/libraries/eina/src/include/eina_inline_value.x
+++ /dev/null
@@ -1,1790 +0,0 @@
1/* Eina - EFL data type library
2 * Copyright (C) 2012 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_INLINE_VALUE_X_
20#define EINA_INLINE_VALUE_X_
21
22#include <stdlib.h>
23#include <string.h>
24
25#include "eina_stringshare.h"
26
27/* NOTE: most of value is implemented here for performance reasons */
28
29//#define EINA_VALUE_NO_OPTIMIZE 1
30#ifdef EINA_VALUE_NO_OPTIMIZE
31#define EINA_VALUE_TYPE_DEFAULT(type) (0)
32#else
33
34/**
35 * @var _EINA_VALUE_TYPE_BASICS_START
36 * pointer to the first basic type.
37 * @since 1.2
38 * @private
39 */
40EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START;
41
42/**
43 * @var _EINA_VALUE_TYPE_BASICS_END
44 * pointer to the last (inclusive) basic type.
45 * @since 1.2
46 * @private
47 */
48EAPI extern const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END;
49#define EINA_VALUE_TYPE_DEFAULT(type) \
50 ((_EINA_VALUE_TYPE_BASICS_START <= type) && \
51 (type <= _EINA_VALUE_TYPE_BASICS_END))
52#endif
53
54#define EINA_VALUE_TYPE_CHECK_RETURN(value) \
55 EINA_SAFETY_ON_NULL_RETURN(value); \
56 EINA_SAFETY_ON_FALSE_RETURN(eina_value_type_check(value->type))
57
58#define EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, retval) \
59 EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
60 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), retval)
61
62#define EINA_VALUE_TYPE_DISPATCH(type, method, no_method_err, ...) \
63 do \
64 { \
65 if (type->method) \
66 type->method(type, ##__VA_ARGS__); \
67 else \
68 eina_error_set(no_method_err); \
69 } \
70 while (0)
71
72#define EINA_VALUE_TYPE_DISPATCH_RETURN(value, method, no_method_err, def_ret, ...) \
73 do \
74 { \
75 if (type->method) \
76 return type->method(type, ##__VA_ARGS__); \
77 eina_error_set(no_method_err); \
78 return def_ret; \
79 } \
80 while (0)
81
82/**
83 * @brief Get memory for given value (inline or allocated buffer).
84 * @since 1.2
85 * @private
86 */
87static inline void *
88eina_value_memory_get(const Eina_Value *value)
89{
90 if (value->type->value_size <= 8)
91 return (void *)value->value.buf;
92 return value->value.ptr;
93}
94
95/**
96 * @brief Allocate memory for internal value types.
97 * @since 1.2
98 * @private
99 */
100EAPI void *eina_value_inner_alloc(size_t size);
101/**
102 * @brief Releases memory for internal value types.
103 * @since 1.2
104 * @private
105 */
106EAPI void eina_value_inner_free(size_t size, void *mem);
107
108static inline Eina_Bool
109eina_value_setup(Eina_Value *value, const Eina_Value_Type *type)
110{
111 void *mem;
112
113 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
114 EINA_SAFETY_ON_FALSE_RETURN_VAL(type->value_size > 0, EINA_FALSE);
115
116 value->type = type;
117
118 if (type->value_size <= 8) mem = &value->value;
119 else
120 {
121 mem = value->value.ptr = eina_value_inner_alloc(type->value_size);
122 EINA_SAFETY_ON_NULL_RETURN_VAL(mem, EINA_FALSE);
123 }
124
125 memset(mem, 0, type->value_size);
126
127 if (EINA_VALUE_TYPE_DEFAULT(type))
128 {
129 eina_error_set(0);
130 return EINA_TRUE;
131 }
132
133 EINA_VALUE_TYPE_DISPATCH_RETURN(type, setup,
134 EINA_ERROR_VALUE_FAILED, EINA_FALSE, mem);
135}
136
137static inline void
138eina_value_flush(Eina_Value *value)
139{
140 const Eina_Value_Type *type;
141 void *mem;
142
143 EINA_VALUE_TYPE_CHECK_RETURN(value);
144
145 type = value->type;
146 mem = eina_value_memory_get(value);
147
148 if (EINA_VALUE_TYPE_DEFAULT(type))
149 {
150 if (type == EINA_VALUE_TYPE_STRINGSHARE)
151 {
152 if (value->value.ptr) eina_stringshare_del((const char*) value->value.ptr);
153 }
154 else if (type == EINA_VALUE_TYPE_STRING)
155 {
156 if (value->value.ptr) free(value->value.ptr);
157 }
158 else if (type->value_size > 8)
159 eina_value_inner_free(type->value_size, mem);
160 eina_error_set(0);
161 return;
162 }
163
164 EINA_VALUE_TYPE_DISPATCH(type, flush, EINA_ERROR_VALUE_FAILED, mem);
165 if (type->value_size > 8)
166 eina_value_inner_free(type->value_size, mem);
167 value->type = NULL;
168}
169
170static inline int
171eina_value_compare(const Eina_Value *a, const Eina_Value *b)
172{
173 const Eina_Value_Type *type;
174 void *pa, *pb;
175
176 EINA_VALUE_TYPE_CHECK_RETURN_VAL(a, -1);
177 EINA_SAFETY_ON_NULL_RETURN_VAL(b, -1);
178 EINA_SAFETY_ON_FALSE_RETURN_VAL(a->type == b->type, -1);
179
180 eina_error_set(0);
181 type = a->type;
182 pa = eina_value_memory_get(a);
183 pb = eina_value_memory_get(b);
184
185#ifndef EINA_VALUE_NO_OPTIMIZE
186 if (type == EINA_VALUE_TYPE_UCHAR)
187 {
188 unsigned char *ta = (unsigned char *) pa, *tb = (unsigned char *) pb;
189 if (*ta < *tb)
190 return -1;
191 else if (*ta > *tb)
192 return 1;
193 return 0;
194 }
195 else if (type == EINA_VALUE_TYPE_USHORT)
196 {
197 unsigned short *ta = (unsigned short *) pa, *tb = (unsigned short *) pb;
198 if (*ta < *tb)
199 return -1;
200 else if (*ta > *tb)
201 return 1;
202 return 0;
203 }
204 else if (type == EINA_VALUE_TYPE_UINT)
205 {
206 unsigned int *ta = (unsigned int *) pa, *tb = (unsigned int *) pb;
207 if (*ta < *tb)
208 return -1;
209 else if (*ta > *tb)
210 return 1;
211 return 0;
212 }
213 else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP))
214 {
215 unsigned long *ta = (unsigned long *) pa, *tb = (unsigned long *) pb;
216 if (*ta < *tb)
217 return -1;
218 else if (*ta > *tb)
219 return 1;
220 return 0;
221 }
222 else if (type == EINA_VALUE_TYPE_UINT64)
223 {
224 uint64_t *ta = (uint64_t *) pa, *tb = (uint64_t *) pb;
225 if (*ta < *tb)
226 return -1;
227 else if (*ta > *tb)
228 return 1;
229 return 0;
230 }
231 else if (type == EINA_VALUE_TYPE_CHAR)
232 {
233 char *ta = (char *) pa, *tb = (char *) pb;
234 if (*ta < *tb)
235 return -1;
236 else if (*ta > *tb)
237 return 1;
238 return 0;
239 }
240 else if (type == EINA_VALUE_TYPE_SHORT)
241 {
242 short *ta = (short *) pa, *tb = (short *) pb;
243 if (*ta < *tb)
244 return -1;
245 else if (*ta > *tb)
246 return 1;
247 return 0;
248 }
249 else if (type == EINA_VALUE_TYPE_INT)
250 {
251 int *ta = (int *) pa, *tb = (int *) pb;
252 if (*ta < *tb)
253 return -1;
254 else if (*ta > *tb)
255 return 1;
256 return 0;
257 }
258 else if (type == EINA_VALUE_TYPE_LONG)
259 {
260 long *ta = (long *) pa, *tb = (long *) pb;
261 if (*ta < *tb)
262 return -1;
263 else if (*ta > *tb)
264 return 1;
265 return 0;
266 }
267 else if (type == EINA_VALUE_TYPE_INT64)
268 {
269 int64_t *ta = (int64_t *) pa, *tb = (int64_t *) pb;
270 if (*ta < *tb)
271 return -1;
272 else if (*ta > *tb)
273 return 1;
274 return 0;
275 }
276 else if (type == EINA_VALUE_TYPE_FLOAT)
277 {
278 float *ta = (float *) pa, *tb = (float *) pb;
279 if (*ta < *tb)
280 return -1;
281 else if (*ta > *tb)
282 return 1;
283 return 0;
284 }
285 else if (type == EINA_VALUE_TYPE_DOUBLE)
286 {
287 double *ta = (double *) pa, *tb = (double *) pb;
288 if (*ta < *tb)
289 return -1;
290 else if (*ta > *tb)
291 return 1;
292 return 0;
293 }
294 else if (type == EINA_VALUE_TYPE_STRINGSHARE ||
295 type == EINA_VALUE_TYPE_STRING)
296 {
297 const char *sa = *(const char **)pa;
298 const char *sb = *(const char **)pb;
299 if (sa == sb)
300 return 0;
301 if (sa == NULL)
302 return -1;
303 if (sb == NULL)
304 return 1;
305 return strcmp(sa, sb);
306 }
307#endif
308
309 EINA_VALUE_TYPE_DISPATCH_RETURN(type, compare, EINA_ERROR_VALUE_FAILED,
310 EINA_FALSE, pa, pb);
311}
312
313static inline Eina_Bool
314eina_value_set(Eina_Value *value, ...)
315{
316 va_list args;
317 Eina_Bool ret;
318 va_start(args, value);
319 ret = eina_value_vset(value, args);
320 va_end(args);
321 return ret;
322}
323
324static inline Eina_Bool
325eina_value_get(const Eina_Value *value, ...)
326{
327 va_list args;
328 Eina_Bool ret;
329 va_start(args, value);
330 ret = eina_value_vget(value, args);
331 va_end(args);
332 return ret;
333}
334
335static inline Eina_Bool
336eina_value_vset(Eina_Value *value, va_list args)
337{
338 const Eina_Value_Type *type;
339 void *mem;
340
341 EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
342
343 type = value->type;
344 mem = eina_value_memory_get(value);
345 eina_error_set(0);
346#ifndef EINA_VALUE_NO_OPTIMIZE
347 if (type == EINA_VALUE_TYPE_UCHAR)
348 {
349 unsigned char *tmem = (unsigned char *) mem;
350 *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
351 return EINA_TRUE;
352 }
353 else if (type == EINA_VALUE_TYPE_USHORT)
354 {
355 unsigned short *tmem = (unsigned short *) mem;
356 *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
357 return EINA_TRUE;
358 }
359 else if (type == EINA_VALUE_TYPE_UINT)
360 {
361 unsigned int *tmem = (unsigned int *) mem;
362 *tmem = va_arg(args, unsigned int);
363 return EINA_TRUE;
364 }
365 else if ((type == EINA_VALUE_TYPE_ULONG) || (type == EINA_VALUE_TYPE_TIMESTAMP))
366 {
367 unsigned long *tmem = (unsigned long *) mem;
368 *tmem = va_arg(args, unsigned long);
369 return EINA_TRUE;
370 }
371 else if (type == EINA_VALUE_TYPE_UINT64)
372 {
373 uint64_t *tmem = (uint64_t *) mem;
374 *tmem = va_arg(args, uint64_t);
375 return EINA_TRUE;
376 }
377 else if (type == EINA_VALUE_TYPE_CHAR)
378 {
379 char *tmem = (char *) mem;
380 *tmem = va_arg(args, int); /* promoted by va_arg */
381 return EINA_TRUE;
382 }
383 else if (type == EINA_VALUE_TYPE_SHORT)
384 {
385 short *tmem = (short *) mem;
386 *tmem = va_arg(args, int); /* promoted by va_arg */
387 return EINA_TRUE;
388 }
389 else if (type == EINA_VALUE_TYPE_INT)
390 {
391 int *tmem = (int *) mem;
392 *tmem = va_arg(args, int);
393 return EINA_TRUE;
394 }
395 else if (type == EINA_VALUE_TYPE_LONG)
396 {
397 long *tmem = (long *) mem;
398 *tmem = va_arg(args, long);
399 return EINA_TRUE;
400 }
401 else if (type == EINA_VALUE_TYPE_INT64)
402 {
403 int64_t *tmem = (int64_t *) mem;
404 *tmem = va_arg(args, int64_t);
405 return EINA_TRUE;
406 }
407 else if (type == EINA_VALUE_TYPE_FLOAT)
408 {
409 float *tmem = (float *) mem;
410 *tmem = va_arg(args, double); /* promoted by va_arg */
411 return EINA_TRUE;
412 }
413 else if (type == EINA_VALUE_TYPE_DOUBLE)
414 {
415 double *tmem = (double *) mem;
416 *tmem = va_arg(args, double);
417 return EINA_TRUE;
418 }
419 else if (type == EINA_VALUE_TYPE_STRINGSHARE)
420 {
421 const char *str = (const char *) va_arg(args, const char *);
422 return eina_stringshare_replace((const char **)&value->value.ptr, str);
423 }
424 else if (type == EINA_VALUE_TYPE_STRING)
425 {
426 const char *str = (const char *) va_arg(args, const char *);
427 if (value->value.ptr == str) return EINA_TRUE;
428 if (!str)
429 {
430 free(value->value.ptr);
431 value->value.ptr = NULL;
432 }
433 else
434 {
435 char *tmp = strdup(str);
436 if (!tmp)
437 {
438 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
439 return EINA_FALSE;
440 }
441 free(value->value.ptr);
442 value->value.ptr = tmp;
443 }
444 return EINA_TRUE;
445 }
446#endif
447
448 EINA_VALUE_TYPE_DISPATCH_RETURN(value, vset, EINA_ERROR_VALUE_FAILED,
449 EINA_FALSE, mem, args);
450}
451
452static inline Eina_Bool
453eina_value_vget(const Eina_Value *value, va_list args)
454{
455 const Eina_Value_Type *type;
456 const void *mem;
457 void *ptr;
458
459 EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
460
461 type = value->type;
462 mem = eina_value_memory_get(value);
463 ptr = va_arg(args, void *);
464 eina_error_set(0);
465 if (EINA_VALUE_TYPE_DEFAULT(type))
466 {
467 memcpy(ptr, mem, type->value_size);
468 return EINA_TRUE;
469 }
470
471 EINA_VALUE_TYPE_DISPATCH_RETURN(value, pget, EINA_ERROR_VALUE_FAILED,
472 EINA_FALSE, mem, ptr);
473}
474
475static inline Eina_Bool
476eina_value_pset(Eina_Value *value, const void *ptr)
477{
478 const Eina_Value_Type *type;
479 void *mem;
480
481 EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
482 EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
483
484 type = value->type;
485 mem = eina_value_memory_get(value);
486 eina_error_set(0);
487
488 if (EINA_VALUE_TYPE_DEFAULT(type))
489 {
490 if (type == EINA_VALUE_TYPE_STRINGSHARE)
491 {
492 const char * const *pstr = (const char * const *) ptr;
493 const char *str = *pstr;
494
495 return eina_stringshare_replace((const char **)&value->value.ptr,
496 str);
497 }
498 else if (type == EINA_VALUE_TYPE_STRING)
499 {
500 const char * const * pstr = (const char * const *) ptr;
501 const char *str = *pstr;
502 if (value->value.ptr == str) return EINA_TRUE;
503 if (!str)
504 {
505 free(value->value.ptr);
506 value->value.ptr = NULL;
507 }
508 else
509 {
510 char *tmp = strdup(str);
511 if (!tmp)
512 {
513 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
514 return EINA_FALSE;
515 }
516 free(value->value.ptr);
517 value->value.ptr = tmp;
518 }
519 return EINA_TRUE;
520 }
521 else
522 memcpy(mem, ptr, type->value_size);
523 return EINA_TRUE;
524 }
525
526 EINA_VALUE_TYPE_DISPATCH_RETURN(value, pset, EINA_ERROR_VALUE_FAILED,
527 EINA_FALSE, mem, ptr);
528}
529
530static inline Eina_Bool
531eina_value_pget(const Eina_Value *value, void *ptr)
532{
533 const Eina_Value_Type *type;
534 const void *mem;
535
536 EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, EINA_FALSE);
537 EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
538
539 type = value->type;
540 mem = eina_value_memory_get(value);
541 eina_error_set(0);
542 if (EINA_VALUE_TYPE_DEFAULT(type))
543 {
544 memcpy(ptr, mem, type->value_size);
545 return EINA_TRUE;
546 }
547
548 EINA_VALUE_TYPE_DISPATCH_RETURN(value, pget, EINA_ERROR_VALUE_FAILED,
549 EINA_FALSE, mem, ptr);
550}
551
552static inline const Eina_Value_Type *
553eina_value_type_get(const Eina_Value *value)
554{
555 EINA_VALUE_TYPE_CHECK_RETURN_VAL(value, NULL);
556 return value->type;
557}
558
559#define EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, retval) \
560 EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
561 EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_ARRAY, retval)
562
563static inline Eina_Bool
564eina_value_array_setup(Eina_Value *value, const Eina_Value_Type *subtype, unsigned int step)
565{
566 Eina_Value_Array desc = { subtype, step, NULL };
567 if (!eina_value_setup(value, EINA_VALUE_TYPE_ARRAY))
568 return EINA_FALSE;
569 if (!eina_value_pset(value, &desc))
570 {
571 eina_value_flush(value);
572 return EINA_FALSE;
573 }
574 return EINA_TRUE;
575}
576
577static inline unsigned int
578eina_value_array_count(const Eina_Value *value)
579{
580 Eina_Value_Array desc;
581 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
582 if (!eina_value_pget(value, &desc))
583 return 0;
584 return eina_inarray_count(desc.array);
585}
586
587static inline Eina_Bool
588eina_value_array_remove(Eina_Value *value, unsigned int position)
589{
590 Eina_Value_Array desc;
591 void *mem;
592
593 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
594 if (!eina_value_pget(value, &desc))
595 return EINA_FALSE;
596
597 mem = eina_inarray_nth(desc.array, position);
598 if (!mem)
599 return EINA_FALSE;
600
601 eina_value_type_flush(desc.subtype, mem);
602 return eina_inarray_remove_at(desc.array, position);
603}
604
605static inline Eina_Bool
606eina_value_array_vset(Eina_Value *value, unsigned int position, va_list args)
607{
608 Eina_Value_Array desc;
609 void *mem;
610
611 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
612 if (!eina_value_pget(value, &desc))
613 return EINA_FALSE;
614
615 mem = eina_inarray_nth(desc.array, position);
616 if (!mem)
617 return EINA_FALSE;
618
619 return eina_value_type_vset(desc.subtype, mem, args);
620}
621
622static inline Eina_Bool
623eina_value_array_vget(const Eina_Value *value, unsigned int position, va_list args)
624{
625 Eina_Value_Array desc;
626 const void *mem;
627 void *ptr;
628 Eina_Bool ret;
629
630 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
631 if (!eina_value_pget(value, &desc))
632 return EINA_FALSE;
633
634 mem = eina_inarray_nth(desc.array, position);
635 if (!mem)
636 return EINA_FALSE;
637
638 ptr = va_arg(args, void *);
639 ret = eina_value_type_pget(desc.subtype, mem, ptr);
640 return ret;
641}
642
643static inline Eina_Bool
644eina_value_array_vinsert(Eina_Value *value, unsigned int position, va_list args)
645{
646 Eina_Value_Array desc;
647 void *mem;
648
649 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
650 if (!eina_value_pget(value, &desc))
651 return EINA_FALSE;
652
653 mem = eina_inarray_alloc_at(desc.array, position, 1);
654 if (!mem)
655 return EINA_FALSE;
656
657 if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
658 if (!eina_value_type_vset(desc.subtype, mem, args)) goto error_set;
659 return EINA_TRUE;
660
661 error_set:
662 eina_value_type_flush(desc.subtype, mem);
663 error_setup:
664 eina_inarray_remove_at(desc.array, position);
665 return EINA_FALSE;
666}
667
668static inline Eina_Bool
669eina_value_array_vappend(Eina_Value *value, va_list args)
670{
671 Eina_Value_Array desc;
672 void *mem;
673 int position;
674
675 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
676 if (!eina_value_pget(value, &desc))
677 return EINA_FALSE;
678
679 position = eina_inarray_count(desc.array);
680 mem = eina_inarray_alloc_at(desc.array, position, 1);
681 if (!mem)
682 return EINA_FALSE;
683
684 if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
685 if (!eina_value_type_vset(desc.subtype, mem, args)) goto error_set;
686 return EINA_TRUE;
687
688 error_set:
689 eina_value_type_flush(desc.subtype, mem);
690 error_setup:
691 eina_inarray_remove_at(desc.array, position);
692 return EINA_FALSE;
693}
694
695static inline Eina_Bool
696eina_value_array_set(Eina_Value *value, unsigned int position, ...)
697{
698 va_list args;
699 Eina_Bool ret;
700 va_start(args, position);
701 ret = eina_value_array_vset(value, position, args);
702 va_end(args);
703 return ret;
704}
705
706static inline Eina_Bool
707eina_value_array_get(const Eina_Value *value, unsigned int position, ...)
708{
709 va_list args;
710 Eina_Bool ret;
711 va_start(args, position);
712 ret = eina_value_array_vget(value, position, args);
713 va_end(args);
714 return ret;
715}
716
717static inline Eina_Bool
718eina_value_array_insert(Eina_Value *value, unsigned int position, ...)
719{
720 va_list args;
721 Eina_Bool ret;
722 va_start(args, position);
723 ret = eina_value_array_vinsert(value, position, args);
724 va_end(args);
725 return ret;
726}
727
728static inline Eina_Bool eina_value_array_append(Eina_Value *value, ...)
729{
730 va_list args;
731 Eina_Bool ret;
732 va_start(args, value);
733 ret = eina_value_array_vappend(value, args);
734 va_end(args);
735 return ret;
736}
737
738static inline Eina_Bool
739eina_value_array_pset(Eina_Value *value, unsigned int position, const void *ptr)
740{
741 Eina_Value_Array desc;
742 void *mem;
743
744 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
745 if (!eina_value_pget(value, &desc))
746 return EINA_FALSE;
747
748 mem = eina_inarray_nth(desc.array, position);
749 if (!mem)
750 return EINA_FALSE;
751
752 return eina_value_type_pset(desc.subtype, mem, ptr);
753}
754
755static inline Eina_Bool
756eina_value_array_pget(const Eina_Value *value, unsigned int position, void *ptr)
757{
758 Eina_Value_Array desc;
759 const void *mem;
760 Eina_Bool ret;
761
762 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
763 if (!eina_value_pget(value, &desc))
764 return EINA_FALSE;
765
766 mem = eina_inarray_nth(desc.array, position);
767 if (!mem)
768 return EINA_FALSE;
769
770 ret = eina_value_type_pget(desc.subtype, mem, ptr);
771 return ret;
772}
773
774static inline Eina_Bool
775eina_value_array_pinsert(Eina_Value *value, unsigned int position, const void *ptr)
776{
777 Eina_Value_Array desc;
778 void *mem;
779
780 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
781 if (!eina_value_pget(value, &desc))
782 return EINA_FALSE;
783
784 mem = eina_inarray_alloc_at(desc.array, position, 1);
785 if (!mem)
786 return EINA_FALSE;
787
788 if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
789 if (!eina_value_type_pset(desc.subtype, mem, ptr)) goto error_set;
790 return EINA_TRUE;
791
792 error_set:
793 eina_value_type_flush(desc.subtype, mem);
794 error_setup:
795 eina_inarray_remove_at(desc.array, position);
796 return EINA_FALSE;
797}
798
799static inline Eina_Bool
800eina_value_array_pappend(Eina_Value *value, const void *ptr)
801{
802 Eina_Value_Array desc;
803 void *mem;
804 int position;
805
806 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(value, 0);
807 if (!eina_value_pget(value, &desc))
808 return EINA_FALSE;
809
810 position = eina_inarray_count(desc.array);
811 mem = eina_inarray_alloc_at(desc.array, position, 1);
812 if (!mem)
813 return EINA_FALSE;
814
815 if (!eina_value_type_setup(desc.subtype, mem)) goto error_setup;
816 if (!eina_value_type_pset(desc.subtype, mem, ptr)) goto error_set;
817 return EINA_TRUE;
818
819 error_set:
820 eina_value_type_flush(desc.subtype, mem);
821 error_setup:
822 eina_inarray_remove_at(desc.array, position);
823 return EINA_FALSE;
824}
825
826static inline Eina_Bool
827eina_value_array_value_get(const Eina_Value *src, unsigned int position, Eina_Value *dst)
828{
829 Eina_Value_Array desc;
830
831 EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL(src, EINA_FALSE);
832 EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
833
834 if (!eina_value_pget(src, &desc))
835 return EINA_FALSE;
836 if (position >= eina_inarray_count(desc.array))
837 return EINA_FALSE;
838 if (!eina_value_setup(dst, desc.subtype))
839 return EINA_FALSE;
840 if (!eina_value_pset(dst, eina_inarray_nth(desc.array, position)))
841 {
842 eina_value_flush(dst);
843 return EINA_FALSE;
844 }
845
846 return EINA_TRUE;
847}
848
849#undef EINA_VALUE_TYPE_ARRAY_CHECK_RETURN_VAL
850
851#define EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, retval) \
852 EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
853 EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_LIST, retval)
854
855static inline void *
856eina_value_list_node_memory_get(const Eina_Value_Type *type, const Eina_List *node)
857{
858 if (node == NULL) return NULL;
859 if (type->value_size <= sizeof(void*))
860 return (void *)&(node->data);
861 return node->data;
862}
863
864static inline void *
865eina_value_list_node_memory_setup(const Eina_Value_Type *type, Eina_List *node)
866{
867 if (type->value_size <= sizeof(void*))
868 return (void *)&(node->data);
869 node->data = malloc(type->value_size);
870 return node->data;
871}
872
873static inline void
874eina_value_list_node_memory_flush(const Eina_Value_Type *type, Eina_List *node)
875{
876 if (type->value_size <= sizeof(void*))
877 return;
878 free(node->data);
879}
880
881static inline Eina_Bool
882eina_value_list_setup(Eina_Value *value, const Eina_Value_Type *subtype)
883{
884 Eina_Value_List desc = { subtype, NULL };
885 if (!eina_value_setup(value, EINA_VALUE_TYPE_LIST))
886 return EINA_FALSE;
887 if (!eina_value_pset(value, &desc))
888 {
889 eina_value_flush(value);
890 return EINA_FALSE;
891 }
892 return EINA_TRUE;
893}
894
895static inline unsigned int
896eina_value_list_count(const Eina_Value *value)
897{
898 Eina_Value_List *desc;
899 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
900 desc = (Eina_Value_List *)eina_value_memory_get(value);
901 if (!desc)
902 return 0;
903 return eina_list_count(desc->list);
904}
905
906static inline Eina_Bool
907eina_value_list_remove(Eina_Value *value, unsigned int position)
908{
909 Eina_Value_List *desc;
910 Eina_List *node;
911 void *mem;
912
913 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
914 desc = (Eina_Value_List *)eina_value_memory_get(value);
915 if (!desc)
916 return EINA_FALSE;
917
918 node = eina_list_nth_list(desc->list, position);
919 mem = eina_value_list_node_memory_get(desc->subtype, node);
920 if (!mem)
921 return EINA_FALSE;
922
923 eina_value_type_flush(desc->subtype, mem);
924 eina_value_list_node_memory_flush(desc->subtype, node);
925 desc->list = eina_list_remove_list(desc->list, node);
926 return EINA_TRUE;
927}
928
929static inline Eina_Bool
930eina_value_list_vset(Eina_Value *value, unsigned int position, va_list args)
931{
932 Eina_Value_List *desc;
933 Eina_List *node;
934 void *mem;
935
936 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
937 desc = (Eina_Value_List *)eina_value_memory_get(value);
938 if (!desc)
939 return EINA_FALSE;
940
941 node = eina_list_nth_list(desc->list, position);
942 mem = eina_value_list_node_memory_get(desc->subtype, node);
943 if (!mem)
944 return EINA_FALSE;
945
946 return eina_value_type_vset(desc->subtype, mem, args);
947}
948
949static inline Eina_Bool
950eina_value_list_vget(const Eina_Value *value, unsigned int position, va_list args)
951{
952 const Eina_Value_List *desc;
953 const Eina_List *node;
954 const void *mem;
955 void *ptr;
956 Eina_Bool ret;
957
958 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
959 desc = (const Eina_Value_List *)eina_value_memory_get(value);
960 if (!desc)
961 return EINA_FALSE;
962
963 node = eina_list_nth_list(desc->list, position);
964 mem = eina_value_list_node_memory_get(desc->subtype, node);
965 if (!mem)
966 return EINA_FALSE;
967
968 ptr = va_arg(args, void *);
969 ret = eina_value_type_pget(desc->subtype, mem, ptr);
970 return ret;
971}
972
973static inline Eina_Bool
974eina_value_list_vinsert(Eina_Value *value, unsigned int position, va_list args)
975{
976 Eina_Value_List *desc;
977 Eina_List *node;
978 void *mem;
979
980 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
981 desc = (Eina_Value_List *)eina_value_memory_get(value);
982 if (!desc)
983 return EINA_FALSE;
984
985 if (!desc->list)
986 node = desc->list = eina_list_append(NULL, (void*)1L);
987 else if (position == 0)
988 node = desc->list = eina_list_prepend(desc->list, (void*)1L);
989 else
990 {
991 Eina_List *rel = eina_list_nth_list(desc->list, position - 1);
992 desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel);
993 node = rel->next;
994 }
995 EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
996 EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
997
998 mem = eina_value_list_node_memory_setup(desc->subtype, node);
999 if (!mem)
1000 {
1001 desc->list = eina_list_remove_list(desc->list, node);
1002 return EINA_FALSE;
1003 }
1004
1005 if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
1006 if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set;
1007 return EINA_TRUE;
1008
1009 error_set:
1010 eina_value_type_flush(desc->subtype, mem);
1011 error_setup:
1012 eina_value_list_node_memory_flush(desc->subtype, node);
1013 desc->list = eina_list_remove_list(desc->list, node);
1014 return EINA_FALSE;
1015}
1016
1017static inline Eina_Bool
1018eina_value_list_vappend(Eina_Value *value, va_list args)
1019{
1020 Eina_Value_List *desc;
1021 Eina_List *node;
1022 void *mem;
1023
1024 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
1025 desc = (Eina_Value_List *)eina_value_memory_get(value);
1026 if (!desc)
1027 return EINA_FALSE;
1028
1029 desc->list = eina_list_append(desc->list, (void*)1L);
1030 node = eina_list_last(desc->list);
1031 EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
1032 EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
1033
1034 mem = eina_value_list_node_memory_setup(desc->subtype, node);
1035 if (!mem)
1036 {
1037 desc->list = eina_list_remove_list(desc->list, node);
1038 return EINA_FALSE;
1039 }
1040
1041 if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
1042 if (!eina_value_type_vset(desc->subtype, mem, args)) goto error_set;
1043 return EINA_TRUE;
1044
1045 error_set:
1046 eina_value_type_flush(desc->subtype, mem);
1047 error_setup:
1048 eina_value_list_node_memory_flush(desc->subtype, node);
1049 desc->list = eina_list_remove_list(desc->list, node);
1050 return EINA_FALSE;
1051}
1052
1053static inline Eina_Bool
1054eina_value_list_set(Eina_Value *value, unsigned int position, ...)
1055{
1056 va_list args;
1057 Eina_Bool ret;
1058 va_start(args, position);
1059 ret = eina_value_list_vset(value, position, args);
1060 va_end(args);
1061 return ret;
1062}
1063
1064static inline Eina_Bool
1065eina_value_list_get(const Eina_Value *value, unsigned int position, ...)
1066{
1067 va_list args;
1068 Eina_Bool ret;
1069 va_start(args, position);
1070 ret = eina_value_list_vget(value, position, args);
1071 va_end(args);
1072 return ret;
1073}
1074
1075static inline Eina_Bool
1076eina_value_list_insert(Eina_Value *value, unsigned int position, ...)
1077{
1078 va_list args;
1079 Eina_Bool ret;
1080 va_start(args, position);
1081 ret = eina_value_list_vinsert(value, position, args);
1082 va_end(args);
1083 return ret;
1084}
1085
1086static inline Eina_Bool eina_value_list_append(Eina_Value *value, ...)
1087{
1088 va_list args;
1089 Eina_Bool ret;
1090 va_start(args, value);
1091 ret = eina_value_list_vappend(value, args);
1092 va_end(args);
1093 return ret;
1094}
1095
1096static inline Eina_Bool
1097eina_value_list_pset(Eina_Value *value, unsigned int position, const void *ptr)
1098{
1099 Eina_Value_List *desc;
1100 Eina_List *node;
1101 void *mem;
1102
1103 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
1104 desc = (Eina_Value_List *)eina_value_memory_get(value);
1105 if (!desc)
1106 return EINA_FALSE;
1107
1108 node = eina_list_nth_list(desc->list, position);
1109 mem = eina_value_list_node_memory_get(desc->subtype, node);
1110 if (!mem)
1111 return EINA_FALSE;
1112
1113 return eina_value_type_pset(desc->subtype, mem, ptr);
1114}
1115
1116static inline Eina_Bool
1117eina_value_list_pget(const Eina_Value *value, unsigned int position, void *ptr)
1118{
1119 const Eina_Value_List *desc;
1120 const Eina_List *node;
1121 const void *mem;
1122 Eina_Bool ret;
1123
1124 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
1125 desc = (const Eina_Value_List *)eina_value_memory_get(value);
1126 if (!desc)
1127 return EINA_FALSE;
1128
1129 node = eina_list_nth_list(desc->list, position);
1130 mem = eina_value_list_node_memory_get(desc->subtype, node);
1131 if (!mem)
1132 return EINA_FALSE;
1133
1134 ret = eina_value_type_pget(desc->subtype, mem, ptr);
1135 return ret;
1136}
1137
1138static inline Eina_Bool
1139eina_value_list_pinsert(Eina_Value *value, unsigned int position, const void *ptr)
1140{
1141 Eina_Value_List *desc;
1142 Eina_List *node;
1143 void *mem;
1144
1145 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
1146 desc = (Eina_Value_List *)eina_value_memory_get(value);
1147 if (!desc)
1148 return EINA_FALSE;
1149
1150 if (!desc->list)
1151 node = desc->list = eina_list_append(NULL, (void*)1L);
1152 else if (position == 0)
1153 node = desc->list = eina_list_prepend(desc->list, (void*)1L);
1154 else
1155 {
1156 Eina_List *rel = eina_list_nth_list(desc->list, position - 1);
1157 desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel);
1158 node = rel->next;
1159 }
1160 EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
1161 EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
1162
1163 mem = eina_value_list_node_memory_setup(desc->subtype, node);
1164 if (!mem)
1165 {
1166 desc->list = eina_list_remove_list(desc->list, node);
1167 return EINA_FALSE;
1168 }
1169
1170 if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
1171 if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set;
1172 return EINA_TRUE;
1173
1174 error_set:
1175 eina_value_type_flush(desc->subtype, mem);
1176 error_setup:
1177 eina_value_list_node_memory_flush(desc->subtype, node);
1178 desc->list = eina_list_remove_list(desc->list, node);
1179 return EINA_FALSE;
1180}
1181
1182static inline Eina_Bool
1183eina_value_list_pappend(Eina_Value *value, const void *ptr)
1184{
1185 Eina_Value_List *desc;
1186 Eina_List *node;
1187 void *mem;
1188
1189 EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL(value, 0);
1190 desc = (Eina_Value_List *)eina_value_memory_get(value);
1191 if (!desc)
1192 return EINA_FALSE;
1193
1194 desc->list = eina_list_append(desc->list, (void*)1L);
1195 node = eina_list_last(desc->list);
1196 EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
1197 EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
1198
1199 mem = eina_value_list_node_memory_setup(desc->subtype, node);
1200 if (!mem)
1201 {
1202 desc->list = eina_list_remove_list(desc->list, node);
1203 return EINA_FALSE;
1204 }
1205
1206 if (!eina_value_type_setup(desc->subtype, mem)) goto error_setup;
1207 if (!eina_value_type_pset(desc->subtype, mem, ptr)) goto error_set;
1208 return EINA_TRUE;
1209
1210 error_set:
1211 eina_value_type_flush(desc->subtype, mem);
1212 error_setup:
1213 eina_value_list_node_memory_flush(desc->subtype, node);
1214 desc->list = eina_list_remove_list(desc->list, node);
1215 return EINA_FALSE;
1216}
1217#undef EINA_VALUE_TYPE_LIST_CHECK_RETURN_VAL
1218
1219#define EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, retval) \
1220 EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
1221 EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_HASH, retval)
1222
1223static inline Eina_Bool
1224eina_value_hash_setup(Eina_Value *value, const Eina_Value_Type *subtype, unsigned int buckets_power_size)
1225{
1226 Eina_Value_Hash desc = { subtype, buckets_power_size, NULL };
1227 if (!eina_value_setup(value, EINA_VALUE_TYPE_HASH))
1228 return EINA_FALSE;
1229 if (!eina_value_pset(value, &desc))
1230 {
1231 eina_value_flush(value);
1232 return EINA_FALSE;
1233 }
1234 return EINA_TRUE;
1235}
1236
1237static inline unsigned int
1238eina_value_hash_population(const Eina_Value *value)
1239{
1240 Eina_Value_Hash *desc;
1241 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
1242 desc = (Eina_Value_Hash *)eina_value_memory_get(value);
1243 if (!desc)
1244 return 0;
1245 return eina_hash_population(desc->hash);
1246}
1247
1248static inline Eina_Bool
1249eina_value_hash_del(Eina_Value *value, const char *key)
1250{
1251 Eina_Value_Hash *desc;
1252 void *mem;
1253
1254 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
1255 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
1256 desc = (Eina_Value_Hash *)eina_value_memory_get(value);
1257 if (!desc)
1258 return EINA_FALSE;
1259
1260 mem = eina_hash_find(desc->hash, key);
1261 if (!mem)
1262 return EINA_FALSE;
1263
1264 eina_value_type_flush(desc->subtype, mem);
1265 free(mem);
1266 eina_hash_del_by_key(desc->hash, key);
1267 return EINA_TRUE;
1268}
1269
1270static inline Eina_Bool
1271eina_value_hash_vset(Eina_Value *value, const char *key, va_list args)
1272{
1273 Eina_Value_Hash *desc;
1274 void *mem;
1275
1276 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
1277 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
1278 desc = (Eina_Value_Hash *)eina_value_memory_get(value);
1279 if (!desc)
1280 return EINA_FALSE;
1281
1282 mem = eina_hash_find(desc->hash, key);
1283 if (!mem)
1284 {
1285 mem = malloc(desc->subtype->value_size);
1286 if (!mem)
1287 {
1288 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1289 return EINA_FALSE;
1290 }
1291 if (!eina_hash_add(desc->hash, key, mem))
1292 {
1293 free(mem);
1294 return EINA_FALSE;
1295 }
1296 if (!eina_value_type_setup(desc->subtype, mem))
1297 {
1298 eina_value_type_flush(desc->subtype, mem);
1299 eina_hash_del_by_key(desc->hash, key);
1300 free(mem);
1301 }
1302 }
1303
1304 return eina_value_type_vset(desc->subtype, mem, args);
1305}
1306
1307static inline Eina_Bool
1308eina_value_hash_vget(const Eina_Value *value, const char *key, va_list args)
1309{
1310 const Eina_Value_Hash *desc;
1311 const void *mem;
1312 void *ptr;
1313 Eina_Bool ret;
1314
1315 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, EINA_FALSE);
1316 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
1317 desc = (const Eina_Value_Hash *)eina_value_memory_get(value);
1318 if (!desc)
1319 return EINA_FALSE;
1320
1321 mem = eina_hash_find(desc->hash, key);
1322 if (!mem)
1323 return EINA_FALSE;
1324
1325 ptr = va_arg(args, void *);
1326 ret = eina_value_type_pget(desc->subtype, mem, ptr);
1327 return ret;
1328}
1329
1330static inline Eina_Bool
1331eina_value_hash_set(Eina_Value *value, const char *key, ...)
1332{
1333 va_list args;
1334 Eina_Bool ret;
1335 va_start(args, key);
1336 ret = eina_value_hash_vset(value, key, args);
1337 va_end(args);
1338 return ret;
1339}
1340
1341static inline Eina_Bool
1342eina_value_hash_get(const Eina_Value *value, const char *key, ...)
1343{
1344 va_list args;
1345 Eina_Bool ret;
1346 va_start(args, key);
1347 ret = eina_value_hash_vget(value, key, args);
1348 va_end(args);
1349 return ret;
1350}
1351
1352static inline Eina_Bool
1353eina_value_hash_pset(Eina_Value *value, const char *key, const void *ptr)
1354{
1355 Eina_Value_Hash *desc;
1356 void *mem;
1357
1358 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
1359 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
1360 desc = (Eina_Value_Hash *)eina_value_memory_get(value);
1361 if (!desc)
1362 return EINA_FALSE;
1363
1364 mem = eina_hash_find(desc->hash, key);
1365 if (!mem)
1366 {
1367 mem = malloc(desc->subtype->value_size);
1368 if (!mem)
1369 {
1370 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1371 return EINA_FALSE;
1372 }
1373 if (!eina_hash_add(desc->hash, key, mem))
1374 {
1375 free(mem);
1376 return EINA_FALSE;
1377 }
1378 if (!eina_value_type_setup(desc->subtype, mem))
1379 {
1380 eina_value_type_flush(desc->subtype, mem);
1381 eina_hash_del_by_key(desc->hash, key);
1382 free(mem);
1383 }
1384 }
1385
1386 return eina_value_type_pset(desc->subtype, mem, ptr);
1387}
1388
1389static inline Eina_Bool
1390eina_value_hash_pget(const Eina_Value *value, const char *key, void *ptr)
1391{
1392 const Eina_Value_Hash *desc;
1393 const void *mem;
1394 Eina_Bool ret;
1395
1396 EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL(value, 0);
1397 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
1398 desc = (const Eina_Value_Hash *)eina_value_memory_get(value);
1399 if (!desc)
1400 return EINA_FALSE;
1401
1402 mem = eina_hash_find(desc->hash, key);
1403 if (!mem)
1404 return EINA_FALSE;
1405
1406 ret = eina_value_type_pget(desc->subtype, mem, ptr);
1407 return ret;
1408}
1409#undef EINA_VALUE_TYPE_HASH_CHECK_RETURN_VAL
1410
1411#define EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, retval) \
1412 EINA_SAFETY_ON_NULL_RETURN_VAL(value, retval); \
1413 EINA_SAFETY_ON_FALSE_RETURN_VAL(value->type == EINA_VALUE_TYPE_STRUCT, retval)
1414
1415/**
1416 * @brief Find member of struct
1417 * @since 1.2
1418 * @internal
1419 */
1420EAPI const Eina_Value_Struct_Member *eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
1421
1422static inline Eina_Bool
1423eina_value_struct_setup(Eina_Value *value, const Eina_Value_Struct_Desc *sdesc)
1424{
1425 Eina_Value_Struct desc = {sdesc, NULL};
1426 if (!eina_value_setup(value, EINA_VALUE_TYPE_STRUCT))
1427 return EINA_FALSE;
1428 if (!eina_value_pset(value, &desc))
1429 {
1430 eina_value_flush(value);
1431 return EINA_FALSE;
1432 }
1433 return EINA_TRUE;
1434}
1435
1436static inline void *
1437eina_value_struct_member_memory_get(const Eina_Value_Struct *st, const Eina_Value_Struct_Member *member)
1438{
1439 unsigned char *base = (unsigned char *)st->memory;
1440 if (!base) return NULL;
1441 return base + member->offset;
1442}
1443
1444static inline Eina_Bool
1445eina_value_struct_vset(Eina_Value *value, const char *name, va_list args)
1446{
1447 const Eina_Value_Struct_Member *member;
1448 Eina_Value_Struct *st;
1449 void *mem;
1450
1451 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
1452 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1453 st = (Eina_Value_Struct *)eina_value_memory_get(value);
1454 if (!st)
1455 return EINA_FALSE;
1456 member = eina_value_struct_member_find(st, name);
1457 if (!member)
1458 return EINA_FALSE;
1459 mem = eina_value_struct_member_memory_get(st, member);
1460 if (!mem)
1461 return EINA_FALSE;
1462
1463 return eina_value_type_vset(member->type, mem, args);
1464}
1465
1466static inline Eina_Bool
1467eina_value_struct_vget(const Eina_Value *value, const char *name, va_list args)
1468{
1469 const Eina_Value_Struct_Member *member;
1470 const Eina_Value_Struct *st;
1471 const void *mem;
1472 void *ptr;
1473 Eina_Bool ret;
1474
1475 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
1476 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1477 st = (const Eina_Value_Struct *)eina_value_memory_get(value);
1478 if (!st)
1479 return EINA_FALSE;
1480 member = eina_value_struct_member_find(st, name);
1481 if (!member)
1482 return EINA_FALSE;
1483 mem = eina_value_struct_member_memory_get(st, member);
1484 if (!mem)
1485 return EINA_FALSE;
1486
1487 ptr = va_arg(args, void *);
1488 ret = eina_value_type_pget(member->type, mem, ptr);
1489 return ret;
1490}
1491
1492static inline Eina_Bool
1493eina_value_struct_set(Eina_Value *value, const char *name, ...)
1494{
1495 va_list args;
1496 Eina_Bool ret;
1497 va_start(args, name);
1498 ret = eina_value_struct_vset(value, name, args);
1499 va_end(args);
1500 return ret;
1501}
1502
1503static inline Eina_Bool
1504eina_value_struct_get(const Eina_Value *value, const char *name, ...)
1505{
1506 va_list args;
1507 Eina_Bool ret;
1508 va_start(args, name);
1509 ret = eina_value_struct_vget(value, name, args);
1510 va_end(args);
1511 return ret;
1512}
1513
1514static inline Eina_Bool
1515eina_value_struct_pset(Eina_Value *value, const char *name, const void *ptr)
1516{
1517 const Eina_Value_Struct_Member *member;
1518 Eina_Value_Struct *st;
1519 void *mem;
1520
1521 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
1522 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1523 EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
1524 st = (Eina_Value_Struct *)eina_value_memory_get(value);
1525 if (!st)
1526 return EINA_FALSE;
1527 member = eina_value_struct_member_find(st, name);
1528 if (!member)
1529 return EINA_FALSE;
1530 mem = eina_value_struct_member_memory_get(st, member);
1531 if (!mem)
1532 return EINA_FALSE;
1533
1534 return eina_value_type_pset(member->type, mem, ptr);
1535}
1536
1537static inline Eina_Bool
1538eina_value_struct_pget(const Eina_Value *value, const char *name, void *ptr)
1539{
1540 const Eina_Value_Struct_Member *member;
1541 const Eina_Value_Struct *st;
1542 const void *mem;
1543 Eina_Bool ret;
1544
1545 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(value, EINA_FALSE);
1546 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1547 EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_FALSE);
1548 st = (const Eina_Value_Struct *)eina_value_memory_get(value);
1549 if (!st)
1550 return EINA_FALSE;
1551 member = eina_value_struct_member_find(st, name);
1552 if (!member)
1553 return EINA_FALSE;
1554 mem = eina_value_struct_member_memory_get(st, member);
1555 if (!mem)
1556 return EINA_FALSE;
1557
1558 ret = eina_value_type_pget(member->type, mem, ptr);
1559 return ret;
1560}
1561
1562static inline Eina_Bool
1563eina_value_struct_value_get(const Eina_Value *src, const char *name, Eina_Value *dst)
1564{
1565 const Eina_Value_Struct_Member *member;
1566 const Eina_Value_Struct *st;
1567 const void *mem;
1568
1569 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE);
1570 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1571 EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
1572 st = (const Eina_Value_Struct *)eina_value_memory_get(src);
1573 if (!st)
1574 return EINA_FALSE;
1575 member = eina_value_struct_member_find(st, name);
1576 if (!member)
1577 return EINA_FALSE;
1578 mem = eina_value_struct_member_memory_get(st, member);
1579 if (!mem)
1580 return EINA_FALSE;
1581 if (!eina_value_setup(dst, member->type))
1582 return EINA_FALSE;
1583 if (!eina_value_pset(dst, mem))
1584 {
1585 eina_value_flush(dst);
1586 return EINA_FALSE;
1587 }
1588 return EINA_TRUE;
1589}
1590
1591static inline Eina_Bool
1592eina_value_struct_value_set(Eina_Value *dst, const char *name, const Eina_Value *src)
1593{
1594 const Eina_Value_Struct_Member *member;
1595 Eina_Value_Struct *st;
1596 void *mem;
1597 const void *ptr;
1598
1599 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE);
1600 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
1601 EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
1602
1603 st = (Eina_Value_Struct *)eina_value_memory_get(dst);
1604 if (!st)
1605 return EINA_FALSE;
1606 member = eina_value_struct_member_find(st, name);
1607 if (!member)
1608 return EINA_FALSE;
1609 EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE);
1610
1611 mem = eina_value_struct_member_memory_get(st, member);
1612 if (!mem)
1613 return EINA_FALSE;
1614
1615 ptr = eina_value_memory_get(src);
1616 if (!ptr)
1617 return EINA_FALSE;
1618
1619 return eina_value_type_pset(member->type, mem, ptr);
1620}
1621
1622static inline Eina_Bool
1623eina_value_struct_member_value_get(const Eina_Value *src, const Eina_Value_Struct_Member *member, Eina_Value *dst)
1624{
1625 const Eina_Value_Struct *st;
1626 const void *mem;
1627
1628 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(src, EINA_FALSE);
1629 EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE);
1630 EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
1631 st = (const Eina_Value_Struct *)eina_value_memory_get(src);
1632 if (!st)
1633 return EINA_FALSE;
1634 mem = eina_value_struct_member_memory_get(st, member);
1635 if (!mem)
1636 return EINA_FALSE;
1637 if (!eina_value_setup(dst, member->type))
1638 return EINA_FALSE;
1639 if (!eina_value_pset(dst, mem))
1640 {
1641 eina_value_flush(dst);
1642 return EINA_FALSE;
1643 }
1644 return EINA_TRUE;
1645}
1646
1647static inline Eina_Bool
1648eina_value_struct_member_value_set(Eina_Value *dst, const Eina_Value_Struct_Member *member, const Eina_Value *src)
1649{
1650 Eina_Value_Struct *st;
1651 void *mem;
1652 const void *ptr;
1653
1654 EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL(dst, EINA_FALSE);
1655 EINA_SAFETY_ON_NULL_RETURN_VAL(member, EINA_FALSE);
1656 EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
1657
1658 st = (Eina_Value_Struct *)eina_value_memory_get(dst);
1659 if (!st)
1660 return EINA_FALSE;
1661 EINA_SAFETY_ON_FALSE_RETURN_VAL(src->type == member->type, EINA_FALSE);
1662
1663 mem = eina_value_struct_member_memory_get(st, member);
1664 if (!mem)
1665 return EINA_FALSE;
1666
1667 ptr = eina_value_memory_get(src);
1668 if (!ptr)
1669 return EINA_FALSE;
1670
1671 return eina_value_type_pset(member->type, mem, ptr);
1672}
1673
1674#undef EINA_VALUE_TYPE_STRUCT_CHECK_RETURN_VAL
1675
1676
1677static inline Eina_Bool
1678eina_value_type_setup(const Eina_Value_Type *type, void *mem)
1679{
1680 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1681 if (!type->setup)
1682 {
1683 eina_error_set(EINA_ERROR_VALUE_FAILED);
1684 return EINA_FALSE;
1685 }
1686 return type->setup(type, mem);
1687}
1688
1689static inline Eina_Bool
1690eina_value_type_flush(const Eina_Value_Type *type, void *mem)
1691{
1692 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1693 if (!type->flush)
1694 {
1695 eina_error_set(EINA_ERROR_VALUE_FAILED);
1696 return EINA_FALSE;
1697 }
1698 return type->flush(type, mem);
1699}
1700
1701static inline Eina_Bool
1702eina_value_type_copy(const Eina_Value_Type *type, const void *src, void *dst)
1703{
1704 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1705 if (!type->copy)
1706 {
1707 eina_error_set(EINA_ERROR_VALUE_FAILED);
1708 return EINA_FALSE;
1709 }
1710 return type->copy(type, src, dst);
1711}
1712
1713static inline int
1714eina_value_type_compare(const Eina_Value_Type *type, const void *a, const void *b)
1715{
1716 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1717 if (!type->compare)
1718 {
1719 eina_error_set(EINA_ERROR_VALUE_FAILED);
1720 return EINA_FALSE;
1721 }
1722 return type->compare(type, a, b);
1723}
1724
1725static inline Eina_Bool
1726eina_value_type_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1727{
1728 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1729 if (!type->convert_to)
1730 {
1731 eina_error_set(EINA_ERROR_VALUE_FAILED);
1732 return EINA_FALSE;
1733 }
1734 return type->convert_to(type, convert, type_mem, convert_mem);
1735}
1736
1737static inline Eina_Bool
1738eina_value_type_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem)
1739{
1740 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1741 if (!type->convert_from)
1742 {
1743 eina_error_set(EINA_ERROR_VALUE_FAILED);
1744 return EINA_FALSE;
1745 }
1746 return type->convert_from(type, convert, type_mem, convert_mem);
1747}
1748
1749static inline Eina_Bool
1750eina_value_type_vset(const Eina_Value_Type *type, void *mem, va_list args)
1751{
1752 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1753 if (!type->vset)
1754 {
1755 eina_error_set(EINA_ERROR_VALUE_FAILED);
1756 return EINA_FALSE;
1757 }
1758 return type->vset(type, mem, args);
1759}
1760
1761static inline Eina_Bool
1762eina_value_type_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
1763{
1764 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1765 if (!type->pset)
1766 {
1767 eina_error_set(EINA_ERROR_VALUE_FAILED);
1768 return EINA_FALSE;
1769 }
1770 return type->pset(type, mem, ptr);
1771}
1772
1773static inline Eina_Bool
1774eina_value_type_pget(const Eina_Value_Type *type, const void *mem, void *ptr)
1775{
1776 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), EINA_FALSE);
1777 if (!type->pget)
1778 {
1779 eina_error_set(EINA_ERROR_VALUE_FAILED);
1780 return EINA_FALSE;
1781 }
1782 return type->pget(type, mem, ptr);
1783}
1784
1785#undef EINA_VALUE_TYPE_DEFAULT
1786#undef EINA_VALUE_TYPE_CHECK_RETURN
1787#undef EINA_VALUE_TYPE_CHECK_RETURN_VAL
1788#undef EINA_VALUE_TYPE_DISPATCH
1789#undef EINA_VALUE_TYPE_DISPATCH_RETURN
1790#endif
diff --git a/libraries/eina/src/include/eina_inlist.h b/libraries/eina/src/include/eina_inlist.h
deleted file mode 100644
index cfb3159..0000000
--- a/libraries/eina/src/include/eina_inlist.h
+++ /dev/null
@@ -1,814 +0,0 @@
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 eina_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 eina_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 * eina_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 eina_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 eina_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 eina_inlist_01_example_page
372 * @li @ref eina_inlist_02_example_page
373 * @li @ref eina_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 in_list.
432 *
433 * @note @a in_item 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 in_list existing list head or NULL to create a new list.
439 * @param in_item new list node, must not be NULL.
440 *
441 * @return the new list head. Use it and not @a in_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 in_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 in_list existing list head or NULL to create a new list.
458 * @param in_item new list node, must not be NULL.
459 *
460 * @return the new list head. Use it and not @a in_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 in_list.
470 *
471 * @note @a in_item_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 in_item prev and next pointers is done, so it's safe
474 * to have them uninitialized.
475 *
476 * @note @a in_relative is considered to be inside @a in_list, no checks are
477 * done to confirm that and giving nodes from different lists
478 * will lead to problems. Giving NULL @a in_relative is the same as
479 * eina_list_append().
480 *
481 * @param in_list existing list head or NULL to create a new list.
482 * @param in_item new list node, must not be NULL.
483 * @param in_relative reference node, @a in_item 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 in_list.
496 *
497 * @note @a in_item 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 in_item prev and next pointers is done, so it's safe
500 * to have them uninitialized.
501 *
502 * @note @a in_relative is considered to be inside @a in_list, no checks are
503 * done to confirm that and giving nodes from different lists
504 * will lead to problems. Giving NULL @a in_relative is the same as
505 * eina_list_prepend().
506 *
507 * @param in_list existing list head or NULL to create a new list.
508 * @param in_item new list node, must not be NULL.
509 * @param in_relative reference node, @a in_item will be added before it.
510 *
511 * @return the new list head. Use it and not @a in_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 in_item is considered to be inside @a in_list, no checks are
524 * done to confirm that and giving nodes from different lists
525 * will lead to problems, especially if @a in_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 in_list existing list head, must not be NULL.
530 * @param in_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 in_list existing list to search @a in_item in, must not be NULL.
544 * @param in_item what to search for, must not be NULL.
545 *
546 * @return @a in_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 in_list The list.
607 * @return A new iterator.
608 *
609 * This function returns a newly allocated iterator associated to @p
610 * in_list. If @p in_list is @c NULL or the count member of @p in_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 in_list The list.
629 * @return A new accessor.
630 *
631 * This function returns a newly allocated accessor associated to
632 * @p in_list. If @p in_list is @c NULL or the count member of @p in_list is
633 * less or equal than 0, this function returns @c NULL. If the memory can
634 * not be allocated, @c 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 head 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 head. @p func is used to
737 * compare two elements of @p head. If @p head 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/** Macro to iterate over an inlist */
791#define EINA_INLIST_FOREACH(list, l) \
792 for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL); l; \
793 l = (EINA_INLIST_GET(l)->next ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL))
794#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \
795 for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \
796 l; \
797 l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL)
798#define EINA_INLIST_REVERSE_FOREACH(list, l) \
799 for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list->last) : NULL); \
800 l; l = (EINA_INLIST_GET(l)->prev ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL))
801
802/**
803 * @}
804 */
805
806/**
807 * @}
808 */
809
810/**
811 * @}
812 */
813
814#endif /*EINA_INLIST_H_*/
diff --git a/libraries/eina/src/include/eina_iterator.h b/libraries/eina/src/include/eina_iterator.h
deleted file mode 100644
index 10a9ece..0000000
--- a/libraries/eina/src/include/eina_iterator.h
+++ /dev/null
@@ -1,337 +0,0 @@
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_page 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_page and @ref eina_array_01_example_page :
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_page 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_page "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
deleted file mode 100644
index dcb8773..0000000
--- a/libraries/eina/src/include/eina_lalloc.h
+++ /dev/null
@@ -1,60 +0,0 @@
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
deleted file mode 100644
index c8ef06d..0000000
--- a/libraries/eina/src/include/eina_list.h
+++ /dev/null
@@ -1,1631 +0,0 @@
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 eina_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 eina_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 eina_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 eina_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 eina_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 eina_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 eina_list_01_example_page. In this example we also use
205 * @ref Eina_Stringshare_Group, 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 eina_list_01_example_page
280 * @li @ref eina_list_02_example_page
281 * @li @ref eina_list_03_example_page
282 * @li @ref eina_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 list node.
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 limit The maximum number of list elements 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 limit 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 limit, 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
deleted file mode 100644
index 16f4314..0000000
--- a/libraries/eina/src/include/eina_lock.h
+++ /dev/null
@@ -1,129 +0,0 @@
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
84static inline Eina_Bool eina_semaphore_new(Eina_Semaphore *sem, int count_init);
85static inline Eina_Bool eina_semaphore_free(Eina_Semaphore *sem);
86static inline Eina_Bool eina_semaphore_lock(Eina_Semaphore *sem);
87static inline Eina_Bool eina_semaphore_release(Eina_Semaphore *sem, int count_release);
88
89#ifdef EINA_HAVE_DEBUG_THREADS
90# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
91 do { \
92 if (EINA_UNLIKELY(!eina_main_loop_is())) \
93 { \
94 eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
95 EINA_LOG_ERR("You are calling %s from outside" \
96 "of the main loop threads in %s at line %i", \
97 __FUNCTION__, \
98 __FILE__, \
99 __LINE__); \
100 return val; \
101 } \
102 } while (0)
103# define EINA_MAIN_LOOP_CHECK_RETURN \
104 do { \
105 if (EINA_UNLIKELY(!eina_main_loop_is())) \
106 { \
107 eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
108 EINA_LOG_ERR("You are calling %s from outside" \
109 "of the main loop threads in %s at line %i", \
110 __FUNCTION__, \
111 __FILE__, \
112 __LINE__); \
113 return ; \
114 } \
115 } while (0)
116#else
117# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val)
118# define EINA_MAIN_LOOP_CHECK_RETURN
119#endif
120
121/**
122 * @}
123 */
124
125/**
126 * @}
127 */
128
129#endif
diff --git a/libraries/eina/src/include/eina_log.h b/libraries/eina/src/include/eina_log.h
deleted file mode 100644
index 186397d..0000000
--- a/libraries/eina/src/include/eina_log.h
+++ /dev/null
@@ -1,903 +0,0 @@
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#include <sys/types.h>
25
26#include "eina_types.h"
27
28#define EINA_COLOR_LIGHTRED "\033[31;1m"
29#define EINA_COLOR_RED "\033[31m"
30#define EINA_COLOR_LIGHTBLUE "\033[34;1m"
31#define EINA_COLOR_BLUE "\033[34m"
32#define EINA_COLOR_GREEN "\033[32;1m"
33#define EINA_COLOR_YELLOW "\033[33;1m"
34#define EINA_COLOR_ORANGE "\033[0;33m"
35#define EINA_COLOR_WHITE "\033[37;1m"
36#define EINA_COLOR_LIGHTCYAN "\033[36;1m"
37#define EINA_COLOR_CYAN "\033[36m"
38#define EINA_COLOR_RESET "\033[0m"
39#define EINA_COLOR_HIGH "\033[1m"
40
41
42/**
43 * @page tutorial_log_page Log Tutorial
44 *
45 * @section tutorial_log_introduction Introduction
46 *
47 * The Eina Log module provides logging facilities for libraries and
48 * applications. It provides colored logging, basic logging levels (error,
49 * warning, debug, info, critical) and loggers - called logging domains -
50 * which will be covered on next sections.
51 *
52 * @section tutorial_log_basic_usage Basic Usage
53 *
54 * Log messages can be displayed using the following macros:
55 *
56 * @li EINA_LOG_ERR(),
57 * @li EINA_LOG_INFO(),
58 * @li EINA_LOG_WARN(),
59 * @li EINA_LOG_DBG().
60 *
61 * Here is an example:
62 *
63 * @include eina_log_02.c
64 *
65 * If you compiled Eina without debug mode, execution will yield only one log
66 * message, which is "argument is negative".
67 *
68 * Here we introduce the concept of logging domains (or loggers), which might
69 * already be familiar to readers. It is basically a way to separate a set of
70 * log messages into a context (e.g. a module) and provide a way of controlling
71 * this set as a whole.
72 *
73 * For example, suppose you have 3 different modules on your application and you
74 * want to get logging only from one of them (e.g. create some sort of filter).
75 * For achieving that, all you need to do is create a logging domain for each
76 * module so that all logging inside a module can be considered as a whole.
77 *
78 * Logging domains are specified by a name, color applied to the name and the
79 * level. The first two (name and color) are set through code, that is, inside
80 * your application/module/library.
81 *
82 * The level is used for controlling which messages should appear. It
83 * specifies the lowest level that should be displayed (e.g. a message
84 * with level 11 being logged on a domain with level set to 10 would be
85 * displayed, while a message with level 9 wouldn't).
86 *
87 * The domain level is set during runtime (in contrast with the name and
88 * color) through the environment variable EINA_LOG_LEVELS. This variable
89 * expects a list in the form domain_name1:level1,domain_name2:level2,... . For
90 * example:
91 *
92 * @verbatim EINA_LOG_LEVELS=mymodule1:5,mymodule2:2,mymodule3:0 ./myapp@endverbatim
93 *
94 * This line would set mymodule1 level to 5, mymodule2 level to 2 and mymodule3
95 * level to 0.
96 *
97 * There's also a global logger to which EINA_LOG_(ERR, DBG, INFO, CRIT, WARN)
98 * macros do log on. It is a logger that is created internally by Eina Log with
99 * an empty name and can be used for general logging (where logging domains do
100 * not apply).
101 *
102 * Since this global logger doesn't have a name, you can't set its level through
103 * EINA_LOG_LEVELS variable. Here we introduce a second environment variable
104 * that is a bit more special: EINA_LOG_LEVEL.
105 *
106 * This variable specifies the level of the global logging domain and the level
107 * of domains that haven't been set through EINA_LOG_LEVELS. Here's an example:
108 *
109 * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS=module1:10,module3:2 ./myapp@endverbatim
110 *
111 * Supposing you have modules named "module1", "module2" and "module3", this
112 * line would result in module1 with level 10, module2 with level 3 and module3
113 * with level 2. Note that module2's level wasn't specified, so it's level is
114 * set to the global level. This way we can easily apply filters to multiple
115 * domains with only one parameter (EINA_LOG_LEVEL=num).
116 *
117 * The global level (EINA_LOG_LEVEL) can also be set through code, using
118 * eina_log_level_set() function.
119 *
120 * While developing your libraries or applications, you may notice that
121 * EINA_LOG_DOM_(ERR, DBG, INFO, CRIT, WARN) macros also print out
122 * messages from eina itself. Here we introduce another environment variable
123 * that is a bit more special: EINA_LOG_LEVELS_GLOB.
124 *
125 * This variable allows you to disable the logging of any/all code in eina itself.
126 * This is useful when developing your libraries or applications so that you can
127 * see your own domain's messages easier without having to sift through a lot of
128 * internal eina debug messages. Here's an example:
129 *
130 * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS_GLOB=eina_*:0 ./myapp@endverbatim
131 *
132 * This will disable eina_log output from all internal eina code thus allowing
133 * you to see your own domain messages easier.
134 *
135 * @section tutorial_log_advanced_display Advanced usage of print callbacks
136 *
137 * The log module allows the user to change the way
138 * eina_log_print() displays the messages. It suffices to pass to
139 * eina_log_print_cb_set() the function used to display the
140 * message. That function must be of type #Eina_Log_Print_Cb. As a
141 * custom data can be passed to that callback, powerful display
142 * messages can be displayed.
143 *
144 * It is suggested to not use __FILE__, __FUNCTION__ or __LINE__ when
145 * writing that callback, but when defining macros (like
146 * EINA_LOG_ERR() and other macros).
147 *
148 * Here is an example of custom callback, whose behavior can be
149 * changed at runtime:
150 *
151 * @include eina_log_03.c
152 * @example eina_log_02.c
153 * @example eina_log_03.c
154 */
155
156/**
157 * @addtogroup Eina_Log_Group Log
158 *
159 * @brief Full-featured logging system.
160 *
161 * Eina provides eina_log_print(), a standard function to manage all
162 * logging messages. This function may be called directly or using the
163 * helper macros such as EINA_LOG_DBG(), EINA_LOG_ERR() or those that
164 * take a specific domain as argument EINA_LOG_DOM_DBG(),
165 * EINA_LOG_DOM_ERR(). Internally, eina_log_print() will call the
166 * function defined with eina_log_print_cb_set(), that defaults to
167 * eina_log_print_cb_stderr(), but may be changed to do whatever you
168 * need, such as networking or syslog logging.
169 *
170 * The logging system is thread safe once initialized with
171 * eina_log_threads_enable(). The thread that calls this function
172 * first is considered "main thread" and other threads will have their
173 * thread id (pthread_self()) printed in the log message so it is easy
174 * to detect from where it is coming.
175 *
176 * Log domains is the Eina way to differentiate messages. There might
177 * be different domains to represent different modules, different
178 * feature-set, different categories and so on. Filtering can be
179 * applied to domain names by means of @c EINA_LOG_LEVELS environment
180 * variable or eina_log_domain_level_set().
181 *
182 * The different logging levels serve to customize the amount of
183 * debugging one want to take and may be used to automatically call
184 * abort() once some given level message is printed. This is
185 * controlled by environment variable @c EINA_LOG_ABORT and the level
186 * to be considered critical with @c EINA_LOG_ABORT_LEVEL. These can
187 * be changed with eina_log_abort_on_critical_set() and
188 * eina_log_abort_on_critical_level_set().
189 *
190 * The default maximum level to print is defined by environment
191 * variable @c EINA_LOG_LEVEL, but may be set per-domain with @c
192 * EINA_LOG_LEVELS. It will default to #EINA_LOG_ERR. This can be
193 * changed with eina_log_level_set().
194 *
195 * To use the log system Eina must be initialized with eina_init() and
196 * later shut down with eina_shutdown(). Here is a straightforward
197 * example:
198 *
199 * @include eina_log_01.c
200 *
201 * Compile this code with the following command:
202 *
203 * @verbatim gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`@endverbatim
204 *
205 * Now execute the program with:
206 *
207 * @verbatim EINA_LOG_LEVEL=2 ./eina_log_01@endverbatim
208 *
209 * You should see a message displayed in the terminal.
210 *
211 * For more information, you can look at the @ref tutorial_log_page.
212 *
213 * @example eina_log_01.c
214 */
215
216/**
217 * @addtogroup Eina_Tools_Group Tools
218 *
219 * @{
220 */
221
222/**
223 * @defgroup Eina_Log_Group Log
224 *
225 * @{
226 */
227
228/**
229 * EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be
230 * used, it is always registered and available everywhere.
231 */
232EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
233
234#ifndef EINA_LOG_DOMAIN_DEFAULT
235
236/**
237 * @def EINA_LOG_DOMAIN_DEFAULT
238 * This macro defines the domain to use with the macros EINA_LOG_DOM_DBG(),
239 * EINA_LOG_DOM_INFO(), EINA_LOG_DOM_WARN(), EINA_LOG_DOM_ERR() and
240 * EINA_LOG_DOM_CRIT().
241 *
242 * If not defined prior to the inclusion of this header, then it
243 * defaults to #EINA_LOG_DOMAIN_GLOBAL.
244 *
245 * @note One may like to redefine this in its code to avoid typing too
246 * much. In this case the recommended way is:
247 *
248 * @code
249 * #include <Eina.h>
250 * #undef EINA_LOG_DOMAIN_DEFAULT
251 * #define EINA_LOG_DOMAIN_DEFAULT _log_dom
252 * static int _log_dom = -1;
253 *
254 * int main(void)
255 * {
256 * eina_init();
257 * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN);
258 * EINA_LOG_ERR("using my own domain");
259 * return 0;
260 * }
261 * @endcode
262 *
263 * @warning If one defines the domain prior to inclusion of this
264 * header, the defined log domain symbol must be defined
265 * prior as well, otherwise the inlined functions defined by
266 * Eina will fail to find the symbol, causing build failure.
267 *
268 * @code
269 * #define EINA_LOG_DOMAIN_DEFAULT _log_dom
270 * static int _log_dom = -1; // must come before inclusion of Eina.h!
271 * #include <Eina.h>
272 *
273 * int main(void)
274 * {
275 * eina_init();
276 * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN);
277 * EINA_LOG_ERR("using my own domain");
278 * return 0;
279 * }
280 * @endcode
281 *
282 */
283# define EINA_LOG_DOMAIN_DEFAULT EINA_LOG_DOMAIN_GLOBAL
284
285#endif /* EINA_LOG_DOMAIN_DEFAULT */
286
287/**
288 * @def EINA_LOG(DOM, LEVEL, fmt, ...)
289 * Logs a message on the specified domain, level and format.
290 *
291 * @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger
292 * than this value will be ignored regardless of current domain
293 * level, the eina_log_print() is not even called! Most
294 * compilers will just detect the two integers make the branch
295 * impossible and remove the branch and function call all
296 * together. Take this as optimization tip and possible remove
297 * debug messages from binaries to be deployed, saving on hot
298 * paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public
299 * header files.
300 */
301#ifdef EINA_ENABLE_LOG
302# ifdef EINA_LOG_LEVEL_MAXIMUM
303# define EINA_LOG(DOM, LEVEL, fmt, ...) \
304 do { \
305 if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) { \
306 eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \
307 fmt, ## __VA_ARGS__); } \
308 } while (0)
309# else
310# define EINA_LOG(DOM, LEVEL, fmt, ...) \
311 eina_log_print(DOM, \
312 LEVEL, \
313 __FILE__, \
314 __FUNCTION__, \
315 __LINE__, \
316 fmt, \
317 ## __VA_ARGS__)
318# endif
319#else
320#define EINA_LOG(DOM, LEVEL, fmt, ...) \
321 do { (void) DOM; (void) LEVEL; (void) fmt; } while (0)
322#endif
323
324/**
325 * @def EINA_LOG_DOM_CRIT(DOM, fmt, ...)
326 * Logs a message with level CRITICAL on the specified domain and format.
327 */
328#define EINA_LOG_DOM_CRIT(DOM, fmt, ...) \
329 EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__)
330
331/**
332 * @def EINA_LOG_DOM_ERR(DOM, fmt, ...)
333 * Logs a message with level ERROR on the specified domain and format.
334 */
335#define EINA_LOG_DOM_ERR(DOM, fmt, ...) \
336 EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__)
337
338/**
339 * @def EINA_LOG_DOM_INFO(DOM, fmt, ...)
340 * Logs a message with level INFO on the specified domain and format.
341 */
342#define EINA_LOG_DOM_INFO(DOM, fmt, ...) \
343 EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__)
344
345/**
346 * @def EINA_LOG_DOM_DBG(DOM, fmt, ...)
347 * Logs a message with level DEBUG on the specified domain and format.
348 */
349#define EINA_LOG_DOM_DBG(DOM, fmt, ...) \
350 EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__)
351
352/**
353 * @def EINA_LOG_DOM_WARN(DOM, fmt, ...)
354 * Logs a message with level WARN on the specified domain and format.
355 */
356#define EINA_LOG_DOM_WARN(DOM, fmt, ...) \
357 EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__)
358
359/**
360 * @def EINA_LOG_CRIT(fmt, ...)
361 * Logs a message with level CRITICAL on the default domain with the specified
362 * format.
363 */
364#define EINA_LOG_CRIT(fmt, ...) \
365 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, \
366 EINA_LOG_LEVEL_CRITICAL, \
367 fmt, \
368 ## __VA_ARGS__)
369
370/**
371 * @def EINA_LOG_ERR(fmt, ...)
372 * Logs a message with level ERROR on the default domain with the specified
373 * format.
374 */
375#define EINA_LOG_ERR(fmt, ...) \
376 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__)
377
378/**
379 * @def EINA_LOG_INFO(fmt, ...)
380 * Logs a message with level INFO on the default domain with the specified
381 * format.
382 */
383#define EINA_LOG_INFO(fmt, ...) \
384 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__)
385
386/**
387 * @def EINA_LOG_WARN(fmt, ...)
388 * Logs a message with level WARN on the default domain with the specified
389 * format.
390 */
391#define EINA_LOG_WARN(fmt, ...) \
392 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__)
393
394/**
395 * @def EINA_LOG_DBG(fmt, ...)
396 * Logs a message with level DEBUG on the default domain with the specified
397 * format.
398 */
399#define EINA_LOG_DBG(fmt, ...) \
400 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__)
401
402/**
403 * @typedef Eina_Log_Domain
404 * The domain used for logging.
405 */
406typedef struct _Eina_Log_Domain Eina_Log_Domain;
407
408/**
409 * @struct _Eina_Log_Domain
410 * The domain used for logging.
411 */
412struct _Eina_Log_Domain
413{
414 int level; /**< Max level to log */
415 const char *domain_str; /**< Formatted string with color to print */
416 const char *name; /**< Domain name */
417 size_t namelen; /**< strlen(name) */
418
419 /* Private */
420 Eina_Bool deleted : 1; /**< Flags deletion of domain, a free slot */
421};
422
423/**
424 * Enable logging module to handle threads.
425 *
426 * There is no disable option on purpose, if it is enabled, there is
427 * no way back until you call the last eina_shutdown().
428 *
429 * There is no function to retrieve if threads are enabled as one is
430 * not supposed to know this from outside.
431 *
432 * After this call is executed at least once, if Eina was compiled
433 * with threads support then logging will lock around debug messages
434 * and threads that are not the main thread will have its identifier
435 * printed.
436 *
437 * The main thread is considered the thread where the first
438 * eina_init() was called.
439 */
440EAPI void eina_log_threads_enable(void);
441
442/**
443 * @enum _Eina_Log_Level
444 * List of available logging levels.
445 */
446typedef enum _Eina_Log_Level
447{
448 EINA_LOG_LEVEL_CRITICAL, /**< Critical log level */
449 EINA_LOG_LEVEL_ERR, /**< Error log level */
450 EINA_LOG_LEVEL_WARN, /**< Warning log level */
451 EINA_LOG_LEVEL_INFO, /**< Information log level */
452 EINA_LOG_LEVEL_DBG, /**< Debug log level */
453 EINA_LOG_LEVELS, /**< Count of default log levels */
454 EINA_LOG_LEVEL_UNKNOWN = (-2147483647 - 1) /**< Unknown level */
455} Eina_Log_Level;
456
457/**
458 * @typedef Eina_Log_Print_Cb
459 * Type for print callbacks.
460 */
461typedef void (*Eina_Log_Print_Cb)(const Eina_Log_Domain *d,
462 Eina_Log_Level level,
463 const char *file, const char *fnc, int line,
464 const char *fmt, void *data, va_list args);
465
466/*
467 * Customization
468 */
469
470/**
471 * Sets logging method to use.
472 *
473 * @param cb The callback to call when printing a log.
474 * @param data The data to pass to the callback.
475 *
476 * By default, eina_log_print_cb_stderr() is used.
477 *
478 * @note MT: safe to call from any thread.
479 *
480 * @note MT: given function @a cb will be called protected by mutex.
481 * This means you're safe from other calls but you should never
482 * call eina_log_print(), directly or indirectly.
483 */
484EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1);
485
486
487/**
488 * @brief Set the default log level.
489 *
490 * @param level The log level.
491 *
492 * This function sets the log level @p level. It is used in
493 * eina_log_print().
494 *
495 * @note this is initially set to envvar EINA_LOG_LEVEL by eina_init().
496 *
497 * @see eina_log_level_get()
498 */
499EAPI void eina_log_level_set(int level);
500
501/**
502 * @brief Get the default log level.
503 *
504 * @return the log level that limits eina_log_print().
505 *
506 * @see eina_log_level_set()
507 */
508EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT;
509
510static inline Eina_Bool eina_log_level_check(int level);
511
512/**
513 * Checks if current thread is the main thread.
514 *
515 * @return #EINA_TRUE if threads were enabled and the current thread
516 * is the one that called eina_log_threads_init(). If there is
517 * no thread support (compiled with --disable-pthreads) or
518 * they were not enabled, then #EINA_TRUE is also
519 * returned. The only case where #EINA_FALSE is returned is
520 * when threads were successfully enabled but the current
521 * thread is not the main (one that called
522 * eina_log_threads_init()).
523 */
524EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT;
525
526
527/**
528 * @brief Set if color logging should be disabled.
529 *
530 * @param disabled if #EINA_TRUE, color logging should be disabled.
531 *
532 * @note this is initially set to envvar EINA_LOG_COLOR_DISABLE by eina_init().
533 *
534 * @see eina_log_color_disable_get()
535 */
536EAPI void eina_log_color_disable_set(Eina_Bool disabled);
537
538/**
539 * @brief Get if color logging should be disabled.
540 *
541 * @return if #EINA_TRUE, color logging should be disabled.
542 *
543 * @see eina_log_color_disable_set()
544 */
545EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT;
546
547/**
548 * @brief Set if originating file name logging should be disabled.
549 *
550 * @param disabled if #EINA_TRUE, file name logging should be disabled.
551 *
552 * @note this is initially set to envvar EINA_LOG_FILE_DISABLE by eina_init().
553 *
554 * @see eina_log_file_disable_get()
555 */
556EAPI void eina_log_file_disable_set(Eina_Bool disabled);
557
558/**
559 * @brief Get if originating file name logging should be disabled.
560 *
561 * @return if #EINA_TRUE, file name logging should be disabled.
562 *
563 * @see eina_log_file_disable_set()
564 */
565EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
566
567/**
568 * @brief Set if originating function name logging should be disabled.
569 *
570 * @param disabled if #EINA_TRUE, function name logging should be disabled.
571 *
572 * @note this is initially set to envvar EINA_LOG_FUNCTION_DISABLE by
573 * eina_init().
574 *
575 * @see eina_log_function_disable_get()
576 */
577EAPI void eina_log_function_disable_set(Eina_Bool disabled);
578
579/**
580 * @brief Get if originating function name logging should be disabled.
581 *
582 * @return if #EINA_TRUE, function name logging should be disabled.
583 *
584 * @see eina_log_function_disable_set()
585 */
586EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT;
587
588/**
589 * @brief Set if critical messages should abort the program.
590 *
591 * @param abort_on_critical if #EINA_TRUE, messages with level equal
592 * or smaller than eina_log_abort_on_critical_level_get() will
593 * abort the program.
594 *
595 * @note this is initially set to envvar EINA_LOG_ABORT by
596 * eina_init().
597 *
598 * @see eina_log_abort_on_critical_get()
599 * @see eina_log_abort_on_critical_level_set()
600 */
601EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical);
602
603/**
604 * @brief Get if critical messages should abort the program.
605 *
606 * @return if #EINA_TRUE, any messages with level equal or smaller
607 * than eina_log_abort_on_critical_level_get() will abort the
608 * program.
609 *
610 * @see eina_log_abort_on_critical_set()
611 * @see eina_log_abort_on_critical_level_set()
612 */
613EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT;
614
615/**
616 * @brief Set level that triggers abort if abort-on-critical is set.
617 *
618 * @param critical_level levels equal or smaller than the given value
619 * will trigger program abortion if
620 * eina_log_abort_on_critical_get() returns #EINA_TRUE.
621 *
622 * @note this is initially set to envvar EINA_LOG_ABORT_LEVEL by
623 * eina_init().
624 *
625 * @see eina_log_abort_on_critical_level_get()
626 * @see eina_log_abort_on_critical_get()
627 */
628EAPI void eina_log_abort_on_critical_level_set(int critical_level);
629
630/**
631 * @brief Get level that triggers abort if abort-on-critical is set.
632 *
633 * @return critical level equal or smaller than value will trigger
634 * program abortion if eina_log_abort_on_critical_get() returns
635 * #EINA_TRUE.
636 *
637 * @see eina_log_abort_on_critical_level_set()
638 * @see eina_log_abort_on_critical_get()
639 */
640EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT;
641
642
643/**
644 * Set the domain level given its name.
645 *
646 * This call has the same effect as setting
647 * EINA_LOG_LEVELS=&lt;@p domain_name&gt;:&lt;@p level&gt;
648 *
649 * @param domain_name domain name to change the level. It may be of a
650 * still not registered domain. If the domain is not registered
651 * yet, it will be saved as a pending set and applied upon
652 * registration.
653 * @param level level to use to limit eina_log_print() for given domain.
654 */
655EAPI void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1);
656
657/**
658 * Get the domain level given its name.
659 *
660 * @param domain_name domain name to retrieve the level. It may be of
661 * a still not registered domain. If the domain is not
662 * registered yet, but there is a pending value, either from
663 * eina_log_domain_level_set(),EINA_LOG_LEVELS environment
664 * variable or from EINA_LOG_LEVELS_GLOB, these are
665 * returned. If nothing else was found, then the global/default
666 * level (eina_log_level_get()) is returned.
667 *
668 * @return level to use to limit eina_log_print() for given
669 * domain. On error (@p domain_name == NULL),
670 * EINA_LOG_LEVEL_UNKNOWN is returned.
671 *
672 * @see eina_log_domain_level_set()
673 * @see eina_log_domain_registered_level_get()
674 */
675EAPI int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
676
677/**
678 * Get the domain level given its identifier.
679 *
680 * @param domain identifier, so it must be previously registered with
681 * eina_log_domain_register(). It's a much faster version of
682 * eina_log_domain_level_get(), but relies on domain being
683 * present.
684 *
685 * @return level to use to limit eina_log_print() for given domain. On
686 * error EINA_LOG_LEVEL_UNKNOWN is returned.
687 */
688EAPI int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT;
689
690static inline Eina_Bool eina_log_domain_level_check(int domain, int level);
691
692/*
693 * Logging domains
694 */
695
696/**
697 * @param name Domain name
698 * @param color Color of the domain name
699 *
700 * @return Domain index that will be used as the DOMAIN parameter on log
701 * macros. A negative return value means an log occurred.
702 *
703 * @note MT: safe to call from any thread.
704 */
705EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1);
706
707/**
708 * Forget about a logging domain registered by eina_log_domain_register()
709 *
710 * @param domain domain identifier as reported by eina_log_domain_register(),
711 * must be >= 0.
712 *
713 * @note MT: safe to call from any thread.
714 */
715EAPI void eina_log_domain_unregister(int domain);
716
717/*
718 * Logging functions.
719 */
720
721/**
722 * Print out log message using given domain and level.
723 *
724 * @note Usually you'll not use this function directly but the helper
725 * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and
726 * so on. See eina_log.h
727 *
728 * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if
729 * you registered none. It is recommended that modules and
730 * applications have their own logging domain.
731 * @param level message level, those with level greater than user
732 * specified value (eina_log_level_set() or environment
733 * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored.
734 * @param file filename that originated the call, must @b not be @c NULL.
735 * @param function function that originated the call, must @b not be @c NULL.
736 * @param line originating line in @a file.
737 * @param fmt printf-like format to use. Should not provide trailing
738 * '\n' as it is automatically included.
739 *
740 * @note MT: this function may be called from different threads if
741 * eina_log_threads_enable() was called before.
742 */
743EAPI void eina_log_print(int domain,
744 Eina_Log_Level level,
745 const char *file,
746 const char *function,
747 int line,
748 const char *fmt,
749 ...) EINA_ARG_NONNULL(3, 4, 6) EINA_PRINTF(6, 7) EINA_NOINSTRUMENT;
750
751/**
752 * Print out log message using given domain and level.
753 *
754 * @note Usually you'll not use this function directly but the helper
755 * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and
756 * so on. See eina_log.h
757 *
758 * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if
759 * you registered none. It is recommended that modules and
760 * applications have their own logging domain.
761 * @param level message level, those with level greater than user
762 * specified value (eina_log_level_set() or environment
763 * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored.
764 * @param file filename that originated the call, must @b not be @c NULL.
765 * @param fnc function that originated the call, must @b not be @c NULL.
766 * @param line originating line in @a file.
767 * @param fmt printf-like format to use. Should not provide trailing
768 * '\n' as it is automatically included.
769 * @param args the arguments needed by the format.
770 *
771 * @note MT: this function may be called from different threads if
772 * eina_log_threads_enable() was called before.
773 *
774 * @see eina_log_print()
775 */
776EAPI void eina_log_vprint(int domain,
777 Eina_Log_Level level,
778 const char *file,
779 const char *fnc,
780 int line,
781 const char *fmt,
782 va_list args) EINA_ARG_NONNULL(3, 4, 6) EINA_NOINSTRUMENT;
783
784/*
785 * Logging methods (change how logging is done).
786 */
787
788/**
789 * @brief Alternative logging method, this will output to standard output stream.
790 *
791 * @param d The domain.
792 * @param level The level.
793 * @param file The file which is logged.
794 * @param fnc The function which is logged.
795 * @param line The line which is logged.
796 * @param fmt The ouptut format to use.
797 * @param data Not used.
798 * @param args The arguments needed by the format.
799 *
800 * This method will colorize output based on domain provided color and
801 * message logging level. To disable color, set environment variable
802 * EINA_LOG_COLOR_DISABLE=1. Similarly, to disable file and line
803 * information, set EINA_LOG_FILE_DISABLE=1 or
804 * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is
805 * not acceptable to have both EINA_LOG_FILE_DISABLE and
806 * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just
807 * EINA_LOG_FUNCTION_DISABLE will be considered and file information
808 * will be printed anyways.
809 *
810 * @note MT: if threads are enabled, this function is called within locks.
811 * @note MT: Threads different from main thread will have thread id
812 * appended to domain name.
813 */
814EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d,
815 Eina_Log_Level level,
816 const char *file,
817 const char *fnc,
818 int line,
819 const char *fmt,
820 void *data,
821 va_list args);
822
823/**
824 * @brief Default logging method, this will output to standard error stream.
825 *
826 * @param d The domain.
827 * @param level The level.
828 * @param file The file which is logged.
829 * @param fnc The function which is logged.
830 * @param line The line which is logged.
831 * @param fmt The ouptut format to use.
832 * @param data Not used.
833 * @param args The arguments needed by the format.
834 *
835 * This method will colorize output based on domain provided color and
836 * message logging level.
837 *
838 * To disable color, set environment variable
839 * EINA_LOG_COLOR_DISABLE=1. To enable color, even if directing to a
840 * file or when using a non-supported color terminal, use
841 * EINA_LOG_COLOR_DISABLE=0. If EINA_LOG_COLOR_DISABLE is unset (or
842 * -1), then Eina will disable color if terminal ($TERM) is
843 * unsupported or if redirecting to a file.
844
845 . Similarly, to disable file and line
846 * information, set EINA_LOG_FILE_DISABLE=1 or
847 * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is
848 * not acceptable to have both EINA_LOG_FILE_DISABLE and
849 * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just
850 * EINA_LOG_FUNCTION_DISABLE will be considered and file information
851 * will be printed anyways.
852 *
853 * @note MT: if threads are enabled, this function is called within locks.
854 * @note MT: Threads different from main thread will have thread id
855 * appended to domain name.
856 */
857EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d,
858 Eina_Log_Level level,
859 const char *file,
860 const char *fnc,
861 int line,
862 const char *fmt,
863 void *data,
864 va_list args);
865
866/**
867 * Alternative logging method, this will output to given file stream.
868 *
869 * @param d The domain.
870 * @param level Not used.
871 * @param file The file which is logged.
872 * @param fnc The function which is logged.
873 * @param line The line which is logged.
874 * @param fmt The ouptut format to use.
875 * @param data The file which will store the output (as a FILE *).
876 * @param args The arguments needed by the format.
877 *
878 * This method will never output color.
879 *
880 * @note MT: if threads are enabled, this function is called within locks.
881 * @note MT: Threads different from main thread will have thread id
882 * appended to domain name.
883 */
884EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d,
885 Eina_Log_Level level,
886 const char *file,
887 const char *fnc,
888 int line,
889 const char *fmt,
890 void *data,
891 va_list args);
892
893#include "eina_inline_log.x"
894
895/**
896 * @}
897 */
898
899/**
900 * @}
901 */
902
903#endif /* EINA_LOG_H_ */
diff --git a/libraries/eina/src/include/eina_magic.h b/libraries/eina/src/include/eina_magic.h
deleted file mode 100644
index d4909d8..0000000
--- a/libraries/eina/src/include/eina_magic.h
+++ /dev/null
@@ -1,330 +0,0 @@
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#include "eina_error.h"
25
26/**
27 * @page eina_magic_example_01_page
28 * @dontinclude eina_magic_01.c
29 *
30 * Whenever using Eina we must include it:
31 * @skipline #include
32 *
33 * For this example we are going to define two classes, person and pilot, and
34 * since every pilot is a person we use inheritance. To be type safe we are
35 * going to add EINA_MAGIC to our classes:
36 * @until struct _pilot pilot
37 * @note The values of BASETYPE_MAGIC and SUBTYPE_MAGIC have no meaning, the
38 * only important thing about them is that they be unique.
39 *
40 * Here we have a function to create a perso given a name, nothing too fancy:
41 * @until }
42 *
43 * And now the counterpart, a function the free a person.
44 * @until {
45 * Before we start releasing resources we check that the pointer we were given
46 * actually points to a person, and if not we will print an error message and
47 * quit:
48 * @until }
49 * @note EINA_MAGIC_FAIL is a macro that make's it easy to print an appropriate
50 * (and consistent) error message.
51 * Now knowing that ptr is indeed of type person we prooced to set EINA_MAGIC to
52 * EINA_MAGIC_NONE and free alocated memory:
53 * @until }
54 * @note Setting EINA_MAGIC to EINA_MAGIC_NONE is important to prevent the
55 * struct from being used after freed.
56 *
57 * Now we have our function to create a pilot, this one is a little more complex
58 * because we need to set EINA_MAGIC for the pilot and pilot->base, this is very
59 * important so that checking the EINA_MAGIC of (person*)my_pilot will work:
60 * @until }
61 *
62 * The function to free a pilot is not too different from the one that frees a
63 * person:
64 * @until }
65 * @until }
66 *
67 * We also create functions to print a person or a pilot that check the type of
68 * the pointers they receive:
69 * @until }
70 * @until }
71 *
72 * And on to our main function where we declare some variables and initialize
73 * Eina:
74 * @until eina_init
75 *
76 * For Eina to be able to provide more informative error messages we are going
77 * to give names to our EINA_MAGIC types:
78 * @until string_set
79 *
80 * Since our types won't live longer than the scope of the current function we
81 * can set the name without eina making a copy of the string:
82 * @until static_set
83 *
84 * Now we create a person, a pilot and print both as persons:
85 * @until person *
86 *
87 * Now we try to print both as pilots, which will obvisouly not work since base
88 * is not a pilot:
89 * @until pilot(sub
90 *
91 * That's all folks:
92 * @until }
93 *
94 * See full source @ref eina_magic_example_01_c "here".
95 */
96/**
97 * @page eina_magic_example_01_c Eina_Magic
98 * @include eina_magic_01.c
99 * @example eina_magic_01.c
100 */
101/**
102 * @addtogroup Eina_Tools_Group Tools
103 *
104 * @{
105 */
106/**
107 * @defgroup Eina_Magic_Group Magic
108 *
109 * @brief Eina_Magic provides run-time type-checking.
110 *
111 * C is a weak statically typed language, in other words, it will just check for
112 * types during compile time and any cast will make the compiler believe the
113 * type is correct.
114 *
115 * In real world code we often need to deal with casts, either explicit or
116 * implicit by means of @c void*. We also need to resort to casts when doing
117 * inheritance in C.
118 *
119 * Eina_Magic give us a way to do casts and still be certain of the type we are
120 * opearting on.
121 *
122 * @note It should be noted that it is considered good practice to @b disable
123 * Eina_Magic for production code. The reasoning is that any Eina_Magic errors
124 * should have been caught during testing and therefore there is no reason to
125 * incur the performance downside of Eina_Magic.
126 *
127 * An @ref eina_magic_example_01_page "example" should elucidate matters.
128 *
129 * @{
130 */
131
132/**
133 * An abstract type for a magic number.
134 */
135typedef unsigned int Eina_Magic;
136
137/**
138 * @brief Return the string associated to the given magic identifier.
139 *
140 * @param magic The magic identifier.
141 * @return The string associated to the identifier.
142 *
143 * This function returns the string associated to @p magic. Even if none are
144 * found this function still returns non @c NULL, in this case an identifier
145 * such as "(none)", "(undefined)" or "(unknown)".
146 *
147 * The following identifiers may be returned whenever magic is
148 * invalid, with their meanings:
149 *
150 * - (none): no magic was registered exists at all.
151 * - (undefined): magic was registered and found, but no string associated.
152 * - (unknown): magic was not found in the registry.
153 *
154 * @warning The returned value must not be freed.
155 */
156EAPI const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT;
157/**
158 * @brief Set the string associated to the given magic identifier.
159 *
160 * @param magic The magic identifier.
161 * @param magic_name The string associated to the identifier, must not
162 * be @c NULL.
163 *
164 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
165 *
166 * This function sets the string @p magic_name to @p magic. It is not
167 * checked if number or string are already set, in which case you will end with
168 * duplicates. Internally, eina will make a copy of @p magic_name.
169 *
170 * @see eina_magic_string_static_set()
171 */
172EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic,
173 const char *magic_name) EINA_ARG_NONNULL(2);
174
175/**
176 * @brief Set the string associated to the given magic identifier.
177 *
178 * @param magic The magic identifier.
179 * @param magic_name The string associated to the identifier, must not be
180 * @c NULL.
181 *
182 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
183 *
184 * This function sets the string @p magic_name to @p magic. It is not checked if
185 * number or string are already set, in which case you might end with
186 * duplicates. Eina will @b not make a copy of @p magic_name, this means that
187 * @p magic_name has to be a valid pointer for as long as @p magic is used.
188 *
189 * @see eina_magic_string_set()
190 */
191EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic,
192 const char *magic_name) EINA_ARG_NONNULL(2);
193
194/**
195 * @def EINA_MAGIC_NONE
196 * Random value for specifying that a structure using the magic
197 * feature has already been freed. It is used by eina_magic_fail().
198 *
199 * If the magic feature of Eina is disabled, #EINA_MAGIC_NONE is just
200 * @c 0.
201 */
202#define EINA_MAGIC_NONE 0x1234fedc
203
204/**
205 * @var EINA_ERROR_MAGIC_FAILED
206 * Error identifier corresponding to magic check failure.
207 */
208EAPI extern Eina_Error EINA_ERROR_MAGIC_FAILED;
209
210
211#ifdef EINA_MAGIC_DEBUG
212
213/**
214 * @def EINA_MAGIC
215 * Declaration of a variable of type #Eina_Magic. To put in a structure
216 * when one wants to use the magic feature of Eina with the functions
217 * of that structure, like that:
218 *
219 * @code
220 * struct Foo
221 * {
222 * int i;
223 *
224 * EINA_MAGIC
225 * };
226 * @endcode
227 *
228 * If the magic feature of Eina is disabled, #EINA_MAGIC does nothing.
229 */
230#define EINA_MAGIC Eina_Magic __magic;
231
232/**
233 * @def EINA_MAGIC_SET(d, m)
234 * Set the magic number of @p d to @p m. @p d must be a valid pointer
235 * to a structure holding an Eina magic number declaration. Use
236 * #EINA_MAGIC to add such declaration.
237 *
238 * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just
239 * the value @c 0.
240 */
241#define EINA_MAGIC_SET(d, m) (d)->__magic = (m)
242
243/**
244 * @def EINA_MAGIC_CHECK(d, m)
245 * Test if @p d is @c NULL or not, and if not @c NULL, if
246 * @p d->__eina_magic is equal to @p m. @p d must be a structure that
247 * holds an Eina magic number declaration. Use #EINA_MAGIC to add such
248 * declaration.
249 *
250 * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just
251 * the value @c 1.
252 */
253#define EINA_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m)))
254
255/**
256 * @def EINA_MAGIC_FAIL(d, m)
257 * Call eina_magic_fail() with the parameters @p d, @p d->__magic, @p
258 * m, __FILE__, __FUNCTION__ and __LINE__. @p d must be a structure that
259 * holds an Eina magic number declaration. Use #EINA_MAGIC to add such
260 * declaration.
261 *
262 * If the magic feature of Eina is disabled, #EINA_MAGIC_FAIL does
263 * nothing.
264 */
265#define EINA_MAGIC_FAIL(d, m) \
266 eina_magic_fail((void *)(d), \
267 (d) ? (d)->__magic : 0, \
268 (m), \
269 __FILE__, \
270 __FUNCTION__, \
271 __LINE__);
272
273/**
274 * @brief Display a message or abort if a magic check failed.
275 *
276 * @param d The checked data pointer.
277 * @param m The magic identifer to check.
278 * @param req_m The requested magic identifier to check.
279 * @param file The file in which the magic check failed.
280 * @param fnc The function in which the magic check failed.
281 * @param line The line at which the magic check failed.
282 *
283 * @warning You should @b strongly consider using @ref EINA_MAGIC_FAIL(d, m)
284 * instead.
285 *
286 * This function displays an error message if a magic check has
287 * failed, using the following logic in the following order:
288 * @li If @p d is @c NULL, a message warns about a @c NULL pointer.
289 * @li Otherwise, if @p m is equal to #EINA_MAGIC_NONE, a message
290 * warns about a handle that was already freed.
291 * @li Otherwise, if @p m is equal to @p req_m, a message warns about
292 * a handle that is of wrong type.
293 * @li Otherwise, a message warns you about ab-using that function...
294 *
295 * If the environment variable EINA_LOG_ABORT is set, abort() is
296 * called and the program stops. It is useful for debugging programs
297 * with gdb.
298 */
299EAPI void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m,
300 const char *file, const char *fnc,
301 int line) EINA_ARG_NONNULL(4, 5);
302
303#else
304
305/**
306 * @cond LOCAL
307 */
308
309#define EINA_MAGIC
310#define EINA_MAGIC_SET(d, m) ((void)0)
311#define EINA_MAGIC_CHECK(d, m) (1)
312#define EINA_MAGIC_FAIL(d, m) ((void)0)
313
314#define eina_magic_fail(d, m, req_m, file, fnx, line) ((void)0)
315
316/**
317 * @endcond
318 */
319
320#endif
321
322/**
323 * @}
324 */
325
326/**
327 * @}
328 */
329
330#endif /* EINA_MAGIC_H_ */
diff --git a/libraries/eina/src/include/eina_main.h b/libraries/eina/src/include/eina_main.h
deleted file mode 100644
index 4baf40e..0000000
--- a/libraries/eina/src/include/eina_main.h
+++ /dev/null
@@ -1,165 +0,0 @@
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 2
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 *
138 * @return #EINA_TRUE is the calling function is the same thread, #EINA_FALSE otherwise.
139 *
140 * @since 1.1.0
141 *
142 * Most EFL function are not thread safe and all the call need to happen in
143 * the main loop. With this call you could know if you can call an EFL
144 * function or not.
145 */
146EAPI Eina_Bool eina_main_loop_is(void);
147
148/**
149 * @brief You should never use that function excpet if you really really know what your are doing.
150 * @since 1.1.0
151 *
152 * If you are reading this documentation, that certainly means you don't know what is the purpose of
153 * this call and you should just not use it.
154 */
155EAPI void eina_main_loop_define(void);
156
157/**
158 * @}
159 */
160
161/**
162 * @}
163 */
164
165#endif /* EINA_MAIN_H_ */
diff --git a/libraries/eina/src/include/eina_matrixsparse.h b/libraries/eina/src/include/eina_matrixsparse.h
deleted file mode 100644
index 97d1ca5..0000000
--- a/libraries/eina/src/include/eina_matrixsparse.h
+++ /dev/null
@@ -1,399 +0,0 @@
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
deleted file mode 100644
index 796bc9e..0000000
--- a/libraries/eina/src/include/eina_mempool.h
+++ /dev/null
@@ -1,123 +0,0 @@
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
deleted file mode 100644
index d7e3819..0000000
--- a/libraries/eina/src/include/eina_mmap.h
+++ /dev/null
@@ -1,59 +0,0 @@
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_model.h b/libraries/eina/src/include/eina_model.h
deleted file mode 100644
index 0a1566e..0000000
--- a/libraries/eina/src/include/eina_model.h
+++ /dev/null
@@ -1,3105 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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_MODEL_H_
20#define EINA_MODEL_H_
21
22#include "eina_types.h"
23#include "eina_value.h"
24#include "eina_inlist.h"
25#include <stdarg.h>
26
27/**
28 * @page eina_model_01_c Eina_Model inheritance and function overriding
29 * @include eina_model_01.c
30 */
31
32/**
33 * @page eina_model_04_c Eina_Model inheritance, interfaces, and function overriding
34 * @include eina_model_04_main.c
35 * @include eina_model_04_animal.c
36 * @include eina_model_04_human.c
37 * @include eina_model_04_parrot.c
38 * @include eina_model_04_child.c
39 * @include eina_model_04_main.c
40 * @include eina_model_04_whistler.c
41 * @include eina_model_04_animal.h
42 * @include eina_model_04_human.h
43 * @include eina_model_04_whistler.h
44 * @include eina_model_04_child.h
45 * @include eina_model_04_parrot.h
46 */
47
48/**
49 * @page eina_model_02_example_page Creating a simple model
50 * @dontinclude eina_model_02.c
51 *
52 * This example shows the creation of a model with five properties, named:
53 * 'a', 'b', 'c', 'd' and 'e' with values 0, 1, 2, 3 and 4
54 * respectively. In addition to the 5 properties our model also add 5 children,
55 * and to each child we give a property named 'x' with a value of 1, 2, 3, 4 and
56 * 5.
57 *
58 * In other words this piece of code shows how to use eina_model to store a list
59 * of elements, given that the list itself has some properties.
60 *
61 * Now let's walk through the code and examine the interesting bits.
62 *
63 * This is some pretty standard initialization code.
64 * @until eina_init
65 *
66 * We now create our eina_model, the important detail here is the type of the
67 * model being created, for this example we use the generic type provided by
68 * eina:
69 * @until model_new
70 *
71 * Once our model has been created we can add callbacks to be notified of events
72 * that happen to our model, for this example we are just going to add a
73 * callback for the "delete" event. To get a list of events a given eina model
74 * can emit see @ref eina_model_event_names_list_get().
75 * @until callback_add
76 *
77 * Once we have a model, we need to populate it with information. There are two
78 * types of information we can store on an eina model: properties and eina
79 * models. We are going to start by looking at properties.
80 *
81 * Properties are, simply put, named values. They have a char* identifier and an
82 * Eina_Value value. This means you can store in a property almost any type of
83 * data. For this example we are going to add some very simple numeric
84 * properties which will have single letter identifiers.
85 * @until }
86 * @until }
87 *
88 * Despite being able to store almost any value properties the least flexible
89 * information unit we can put in an eina model. We can add eina models to our
90 * eina model, this allows us to represt complex information hierarchies. This
91 * example adds 5 models(with no children of their own) to our parent model @c
92 * m.
93 * @until }
94 * The code here should be pretty easy to understand, we create a model, much
95 * like we did before, and we then add a property to our model, again a task we
96 * have already done.
97 *
98 * The important issue to note here is that we could have given each of our @c c
99 * child models as complex an structure as we needed, they could each be a list
100 * or a tree on their own right.
101 *
102 * Now that we have a populated model we print a string representation of
103 * it(without forgetting to free the string):
104 * @until free
105 *
106 * And since we are done using our model we release our reference to it(and
107 * since no else holds references to it, it will be freed):
108 * @until }
109 *
110 * Note that we don't need to iterate over the children of @c m unrefing it,
111 * this is because we don't hold references to it, we freed our references right
112 * after we added them to their parent model, so when the parent model dies(and
113 * releases the references to it's children) they will be freed.
114 *
115 * The only thing we are going to look at is the callback we registered for
116 * whenever a model is deleted, since our models don't do anything fancy we are
117 * just going to print the memory address of the model being freed.
118 * @until }
119 *
120 * Note that this means the memory address is still valid, our callback is
121 * called just before the memory is freed so we could still access its
122 * information here.
123 *
124 * The full code can be seen in @ref eina_model_02_c
125 */
126
127/**
128 * @page eina_model_02_c eina_model_02.c
129 * @include eina_model_02.c
130 * @example eina_model_02.c
131 */
132
133/**
134 * @page eina_model_03_example_page Using Eina_Model and inheritance
135 * @dontinclude eina_model_03.c
136 *
137 * This example will use two custom defined eina model types: @c PERSON_TYPE to
138 * represent a person and @c ADDRESS_BOOK_TYPE to represent the an address book.
139 * Both our types inherit from EINA_MODEL_TYPE_STRUCT, and, therefore,
140 * store it's data on a struct. Our address book will be very simple it will
141 * only contain one property, the name of the file where we store our address
142 * book. The person type will contain two fields a name and en email. Let's look
143 * at the code.
144 *
145 * We'll start with declaring the variables and functions we'll need to define
146 * our custom type. This will all be explained when the variables get used.
147 * @until address_book_init
148 *
149 * We then jump into our @c main function, declare a couple of variables and
150 * initialize eina:
151 * @until eina_init
152 *
153 * After eina is initialized we'll @c address_book_init() which will initialize
154 * both our @c PERSON_TYPE and our @c ADDRESS_BOOK_TYPE. Details of this will be
155 * shown latter on:
156 * @until address_book_init
157 *
158 * Now that everything is correctly initialized we can create the model that
159 * will represent our address book's
160 * @until eina_model_new
161 *
162 * Before we can load data into our model we need to tell it where to load from,
163 * we do this by setting it's filename property:
164 * @until value_flush
165 *
166 * We then load data into our model and display it as a string:
167 * @until free
168 *
169 * While @c eina_model_to_string allows you to see the contents of the model,
170 * it's display format is not user friendly, it's best used for debugging. So
171 * let's now print our model in a user friendly way.
172 *
173 * First we see how many people are in our address book and print that:
174 * @until printf
175 *
176 * And now we iterate over every child of our address book model, which
177 * represents a person:
178 * @until person
179 *
180 * But again simply calling @c eina_model_to_string would result in not very
181 * user friendly output, so we'll need to get the properties of the person(name
182 * and email) and print them with some formatting:
183 * @until printf
184 *
185 * We then free the resources we allocated to print this person:
186 * @until }
187 *
188 * And that's it for our main function, now just freeing our resources:
189 * @until }
190 *
191 * This however obviously doesn't conclude our example we need to examine how
192 * the the loading of data works to really understand what is happening in the
193 * @c main function.
194 *
195 * Let's start with the constructors(and the variables they use). Both our
196 * constructors do two very important tasks:
197 * @li Calls our parent's constructor, and
198 * @li Sets the description of the struct on our model
199 *
200 * For these constructors that's all we need to do since most of our
201 * functionality is provided by @c EINA_MODEL_TYPE_STRUCT.
202 * @until }
203 * @until }
204 *
205 * And now we have our load function, it opens the file from which we'll
206 * read the address book:
207 * @until EINA_SAFETY_ON_NULL_RETURN_VAL
208 *
209 * Once the file has been opened we read from it line by line and for each
210 * non-blank line we get a name and an email:
211 * @until email
212 * @until email
213 *
214 * Once we have the name and email we create our person model, set it's
215 * properties and make our person a child of the address book:
216 * @until }
217 *
218 * And now that we're done reading the file we close it:
219 * @until }
220 *
221 * This next function is perphaps the most interesting one of our example, it's
222 * the one that creates the definition of our derived types.
223 *
224 * First thing we'll do is the description of the members of our person type.
225 * @until person_members[1].type
226 * Now the description of the struct itself(which uses the members):
227 * @until }
228 * And finally we define the person type itself:
229 * @until person_type.constructor
230 *
231 * With the person now described we'll do the same process for our address book
232 * type:
233 * @until address_book_type.load
234 *
235 * So far everything we created has been in the scope of our function to make
236 * this available outside(such as in the @c main function where we use @c
237 * ADDRESS_BOOK_TYPE and on @c _address_book_load function where we use @c
238 * PERSON_TYPE) we need to assign our descriptions and type to global variables:
239 * @until }
240 *
241 * This concludes this example. A good exercise for the reader is to extend this
242 * example to have the model save the addres book, for example once it's
243 * unloaded, this can be done by overriding the .unload property of @c
244 * ADDRESS_BOOK_TYPE.
245 *
246 * For the full code see: @ref eina_model_03_c
247 */
248
249/**
250 * @page eina_model_03_c eina_model_03.c
251 * @include eina_model_03.c
252 * @example eina_model_03.c
253 */
254
255/**
256 * @addtogroup Eina_Data_Types_Group Data Types
257 *
258 * @since 1.2
259 *
260 * @{
261 */
262
263/**
264 * @addtogroup Eina_Containers_Group Containers
265 *
266 * @{
267 */
268
269/**
270 * @defgroup Eina_Model_Group Data Model API
271 *
272 * Abstracts data access to hierarchical data in an efficient way,
273 * extensible to different backing stores such as database or remote
274 * access.
275 *
276 * It is heavily based on #Eina_Value, as properties are exchanged
277 * using this data type as interface, although internally models may
278 * store them as they want. See @ref Eina_Value_Group.
279 *
280 * Although extensible and easy to optimize, a simple generic type is
281 * provided as #EINA_MODEL_TYPE_GENERIC. It is recommended that people
282 * use it during development, get the logic right and just then
283 * optimize what is needed (properties or children management).
284 *
285 * Not as generic as #EINA_MODEL_TYPE_GENERIC, but way more efficient
286 * is #EINA_MODEL_TYPE_STRUCT that instead of a hash of properties of
287 * any type, it uses a struct to map properties. Its properties are
288 * fixed set of names and they have fixed type, as defined by the
289 * #Eina_Value_Struct_Desc description used internally.
290 *
291 * Examples:
292 * @li @ref eina_model_01_c inheritance example, uses #EINA_MODEL_TYPE_GENERIC
293 * @li @ref eina_model_02_example_page contains an easy to follow
294 * example that demonstrates several of the important features of
295 * eina_model, uses #EINA_MODEL_TYPE_GENERIC.
296 * @li @ref eina_model_03_example_page walk-through example on how to
297 * inherit types, a suggestion of eina_model_load() usage and uses
298 * #EINA_MODEL_TYPE_STRUCT.
299 * @li @ref eina_model_04_c Advanced inheritance, interfaces and interface
300 * function overloading example.
301 *
302 * @{
303 */
304
305/**
306 * @var EINA_ERROR_MODEL_FAILED
307 * Defined when model-specific errors happens.
308 */
309EAPI extern Eina_Error EINA_ERROR_MODEL_FAILED;
310
311/**
312 * @var EINA_ERROR_MODEL_METHOD_MISSING
313 * Defined when model-specific errors happens.
314 */
315EAPI extern Eina_Error EINA_ERROR_MODEL_METHOD_MISSING;
316
317/**
318 * @typedef Eina_Model
319 * Data Model Object.
320 *
321 * This is an opaque handle that is created with eina_model_new() and
322 * released with eina_model_unref().
323 *
324 * It contains properties, children and may emit events. See
325 * respectively:
326 * @li eina_model_property_get() and eina_model_property_set()
327 * @li eina_model_child_get() and eina_model_child_set()
328 * @li eina_model_event_names_list_get(), eina_model_event_callback_add() and eina_model_event_callback_del()
329 *
330 * @see eina_model_new()
331 * @see eina_model_ref() and eina_model_xref()
332 * @see eina_model_unref(), eina_model_xunref() and eina_model_del()
333 * @see eina_model_type_get() and eina_model_interface_get()
334 * @since 1.2
335 */
336typedef struct _Eina_Model Eina_Model;
337
338/**
339 * @typedef Eina_Model_Type
340 * Data Model Type.
341 *
342 * @see #_Eina_Model_Type explains fields.
343 * @since 1.2
344 */
345typedef struct _Eina_Model_Type Eina_Model_Type;
346
347/**
348 * @typedef Eina_Model_Interface
349 * Data Model Interface.
350 *
351 * @see #_Eina_Model_Interface explains fields.
352 * @since 1.2
353 */
354typedef struct _Eina_Model_Interface Eina_Model_Interface;
355
356/**
357 * @typedef Eina_Model_Event_Description
358 * Data Model Event Description.
359 *
360 * This is used to declare events supported by types and interfaces
361 * and also to provide introspection to receivers of signals so they
362 * can know which data they are receiving as @c event_info.
363 *
364 * @see EINA_MODEL_EVENT_DESCRIPTION()
365 * @see #EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
366 * @see #_Eina_Model_Event_Description explains fields.
367 * @since 1.2
368 */
369typedef struct _Eina_Model_Event_Description Eina_Model_Event_Description;
370
371/**
372 * @brief Creates a new model of type @a Type.
373 * @param type The type of the model to create.
374 * @return If successfull pointer to model, NULL otherwise.
375 *
376 * @see _Eina_Model_Type
377 * @see eina_model_del()
378 * @since 1.2
379 */
380EAPI Eina_Model *eina_model_new(const Eina_Model_Type *type);
381/**
382 * @brief Frees the memory associated with @a model
383 * @param model The model instance.
384 *
385 * @see eina_model_new()
386 * @since 1.2
387 */
388EAPI void eina_model_del(Eina_Model *model) EINA_ARG_NONNULL(1);
389
390/**
391 * @brief Returns the type of @a model.
392 * @param model The model instance.
393 * @return The type of @a model.
394 *
395 * @see eina_model_new()
396 * @see _Eina_Model_Type
397 * @since 1.2
398 */
399EAPI const Eina_Model_Type *eina_model_type_get(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
400
401/**
402 * @brief Returns the interface named @a name of @a model.
403 * @param model The model instance.
404 * @param name Name of interface to get.
405 * @return If successfull requested interface, NULL otherwise.
406 *
407 * The name of every interface of @a model will be compared to @a name, the
408 * first one to match will be returned.
409 *
410 * @see eina_model_new()
411 * @see _Eina_Model_Interface
412 * @since 1.2
413 */
414EAPI const Eina_Model_Interface *eina_model_interface_get(const Eina_Model *model,
415 const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
416
417/**
418 * @brief Increases the refcount of @a model.
419 * @param model The model to increase reference.
420 * @return The @a model with reference increased.
421 * @return If successfull pointer to model, NULL otherwise.
422 *
423 * @see eina_model_new()
424 * @see eina_model_unref()
425 * @since 1.2
426 */
427EAPI Eina_Model *eina_model_ref(Eina_Model *model) EINA_ARG_NONNULL(1);
428
429/**
430 * @brief Increases the refcount of @a model, informs reference identifier.
431 * @param model The model to increase reference.
432 * @param id An identifier to mark this reference.
433 * @param label An optional label to help debug, may be @c NULL.
434 * @return The @a model with reference increased.
435 *
436 * This extended version of reference explicitly marks the origin of
437 * the reference and eina_model_xunref() should be used to check and
438 * remove it.
439 *
440 * Usually the @a id is another object, like a parent object, or some
441 * class/structure/file/function that is holding the reference for
442 * some reason.
443 *
444 * Its purpose is to help debuging if Eina was compiled with model
445 * usage debug enabled and environment variable @c EINA_MODEL_DEBUG=1
446 * is set.
447 *
448 * It is recommended to use eina_model_xref() and eina_model_xunref()
449 * pair whenever you want to be sure you released your
450 * references. Both at your own type, or using applications. As an
451 * example #EINA_MODEL_INTERFACE_CHILDREN_INARRAY will use this to
452 * make sure it deleted every managed children.
453 *
454 * In order to debug leaks, consider using eina_model_xrefs_get() or
455 * eina_models_usage_dump() for a global picture. However, some
456 * references are not tracked, namely:
457 *
458 * @li eina_model_new()
459 * @li eina_model_child_get()
460 * @li eina_model_child_iterator_get()
461 * @li eina_model_child_reversed_iterator_get()
462 * @li eina_model_child_sorted_iterator_get()
463 * @li eina_model_child_filtered_iterator_get()
464 * @li eina_model_child_slice_iterator_get()
465 * @li eina_model_child_slice_reversed_iterator_get()
466 * @li eina_model_child_slice_sorted_iterator_get()
467 * @li eina_model_child_slice_filtered_iterator_get()
468 *
469 * @note this function is slower than eina_model_ref() if
470 * @c EINA_MODEL_DEBUG is set to "1" or "backtrace". Otherwise it
471 * should have the same performance cost.
472 *
473 * @see eina_model_ref()
474 * @see eina_model_xunref()
475 * @since 1.2
476 */
477EAPI Eina_Model *eina_model_xref(Eina_Model *model,
478 const void *id,
479 const char *label) EINA_ARG_NONNULL(1, 2);
480
481/**
482 * @brief Decreases the refcount of @a model.
483 * @param model The model to decrease reference.
484 * @return If successfull pointer to model, NULL otherwise.
485 *
486 * After this function returns, consider @a model pointer invalid.
487 *
488 * @see eina_model_ref()
489 * @see eina_model_del()
490 * @since 1.2
491 */
492EAPI void eina_model_unref(Eina_Model *model) EINA_ARG_NONNULL(1);
493
494/**
495 * @brief Decreases the refcount of @a model, informs reference identifier.
496 * @param model The model to decrease reference.
497 * @param id An identifier to mark this reference.
498 * @return If successfull pointer to model, NULL otherwise.
499 *
500 * This function will match eina_model_xref() and the @a id must match
501 * a previously call, otherwise it will produce an error if @c
502 * EINA_MODEL_DEBUG is set to "1" or "backtrace", and the reference is
503 * not decreased!
504 *
505 * After this function returns, consider @a model pointer invalid.
506 *
507 * @note this function is slower than eina_model_unref() if
508 * @c EINA_MODEL_DEBUG is set to "1" or "backtrace". Otherwise it
509 * should have the same performance cost.
510 *
511 * @see eina_model_xref()
512 * @since 1.2
513 */
514EAPI void eina_model_xunref(Eina_Model *model,
515 const void *id) EINA_ARG_NONNULL(1, 2);
516
517
518
519/**
520 * @defgroup Eina_Model_Event_Group Data Model Events
521 * Events and their usage with models.
522 *
523 * Events are specified by each type and interface level using
524 * #Eina_Model_Event_Description. One can know all events supported by
525 * a model with eina_model_event_names_list_get() and then
526 * eina_model_event_description_get() to retrieve details.
527 *
528 * By default the following events are supported in every object:
529 * @li deleted: last reference was released or eina_model_del() was called.
530 * @li freed: memory was destroyed, destructors were called.
531 * @li property,set: eina_model_property_set() was done.
532 * @li property,deleted: eina_model_property_del() was done.
533 * @li children,changed: children was changed somehow (added, modified, deleted)
534 * @li child,inserted: new child was added (eina_model_child_append() or eina_model_child_insert_at())
535 * @li child,set: child was replaced (eina_model_child_set())
536 * @li child,deleted: eina_model_child_del() was done.
537 * @li loaded: eina_model_load() was done.
538 * @li unloaded: eina_model_unload() was done.
539 *
540 * Mix-in interfaces may emit these:
541 * @li properties,loaded
542 * @li properties,unloaded
543 * @li children,loaded
544 * @li children,unloaded
545 *
546 * One can be notified of events with eina_model_event_callback_add().
547 *
548 * Types emit these events with eina_model_event_callback_call(),
549 * these are handled asynchronously unless event is frozen with
550 * eina_model_event_callback_freeze() is blocking it. In this case the
551 * events are ignored. Usually this is used in some cases that want to
552 * avoid storm of events in batch operations.
553 *
554 * @{
555 */
556
557/**
558 * @typedef Eina_Model_Event_Cb
559 * Notifies of events in this model.
560 *
561 * @since 1.2
562 */
563typedef void (*Eina_Model_Event_Cb)(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info);
564
565/**
566 * @brief Add a callback to be called when @a event_name is emited.
567 * @param model The model instance.
568 * @param event_name The name of event for which @a cb will be called.
569 * @param cb The function to be called.
570 * @param data Data @a cb will be called with. May be NULL.
571 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
572 *
573 * @see eina_model_event_callback_del()
574 * @since 1.2
575 */
576EAPI Eina_Bool eina_model_event_callback_add(Eina_Model *model,
577 const char *event_name,
578 Eina_Model_Event_Cb cb,
579 const void *data) EINA_ARG_NONNULL(1, 2, 3);
580/**
581 * @brief Remove a callback that was to be called when @a event_name was emited.
582 * @param model The model instance.
583 * @param event_name The name of event for which to delete callback.
584 * @param cb The function given to eina_model_event_callback_add().
585 * @param data Data given to eina_model_event_callback_add(). A NULL value means
586 * every @a data will not be compared.
587 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
588 *
589 * @see eina_model_event_callback_add()
590 * @since 1.2
591 */
592EAPI Eina_Bool eina_model_event_callback_del(Eina_Model *model,
593 const char *event_name,
594 Eina_Model_Event_Cb cb,
595 const void *data) EINA_ARG_NONNULL(1, 2, 3);
596
597/**
598 * @brief Returns a description of the event named @c event_name
599 * @param model The model instance.
600 * @param event_name Name of event whose description is wanted.
601 * @return Description of event.
602 *
603 * @see Eina_Model_Event_Description
604 * @since 1.2
605 */
606EAPI const Eina_Model_Event_Description *eina_model_event_description_get(const Eina_Model *model,
607 const char *event_name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
608
609/**
610 * @brief Returns list of events this model may emit.
611 * @param model The model whose events are to be listed.
612 * @return An Eina_List of stringshares with the name of every event. Free the
613 * list with eina_model_event_names_list_free().
614 *
615 * @since 1.2
616 */
617EAPI Eina_List *eina_model_event_names_list_get(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
618/**
619 * @brief Frees the list of event's names gotten from
620 * eina_model_event_names_list_get().
621 * @param list The list to free.
622 *
623 * @see eina_model_event_names_list_get()
624 * @since 1.2
625 */
626EAPI void eina_model_event_names_list_free(Eina_List *list);
627
628/**
629 * @brief Calls every callback associated to @a name on model @a model with @a
630 * event_info.
631 * @param model The model instance.
632 * @param name The event whose callbacks will be called.
633 * @param event_info The data given to the callback as event_info. May be NULL.
634 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
635 *
636 * @see eina_model_event_callback_add()
637 * @see eina_model_event_callback_del()
638 * @since 1.2
639 */
640EAPI Eina_Bool eina_model_event_callback_call(Eina_Model *model,
641 const char *name,
642 const void *event_info) EINA_ARG_NONNULL(1, 2);
643
644/**
645 * @brief Makes @a model not call the callbacks associated with @a name.
646 * @param model The model instance.
647 * @param name The event whose callbacks are to be frozen.
648 * @return Count of freezes called on this event.
649 *
650 * @see eina_model_event_callback_call()
651 * @see eina_model_event_callback_thaw()
652 * @since 1.2
653 */
654EAPI int eina_model_event_callback_freeze(Eina_Model *model,
655 const char *name) EINA_ARG_NONNULL(1, 2);
656/**
657 * @brief Makes @a model able to call the callbacks associated with @a name.
658 * @param model The model instance.
659 * @param name The event whose callbacks are to be frozen.
660 * @return Count of freezes still valid in this event.
661 *
662 * @warning Behavior is undefined if called on a @a model, @a name not frozen.
663 *
664 * @see eina_model_event_callback_call()
665 * @see eina_model_event_callback_freeze()
666 * @since 1.2
667 */
668EAPI int eina_model_event_callback_thaw(Eina_Model *model,
669 const char *name) EINA_ARG_NONNULL(1, 2);
670
671/**
672 * @}
673 */
674
675
676/**
677 * @brief Makes a shallow copy of @a model.
678 * @param model The model instance.
679 * @return Copied model.
680 *
681 * The returned model will have a copy of the properties of @a model and a
682 * reference to the children of @a model.
683 *
684 * @see eina_model_deep_copy()
685 * @since 1.2
686 */
687EAPI Eina_Model *eina_model_copy(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
688/**
689 * @brief Makes a deep(complete) copy of @a model.
690 * @param model The model instance.
691 * @return Copied model.
692 *
693 * The returned model will have a copy of the properties of @a model, its
694 * children will be created by making a deep copy of the children of @a model.
695 *
696 * @see eina_model_copy()
697 * @since 1.2
698 */
699EAPI Eina_Model *eina_model_deep_copy(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
700
701/**
702 * @brief Compares two models.
703 * @param a The first model to compare.
704 * @param b The second model to compare.
705 * @return Greater than zero if @a a > @a b, zero if @a a == @a b and less than
706 * zero if @a a < @a b
707 *
708 * The default comparison checks that the properties of @a a and @a b all have
709 * the same name and value, and then recursively compares all children.
710 *
711 * A model with less properties or children is considered smaller than one with
712 * more properties.
713 *
714 * @since 1.2
715 */
716EAPI int eina_model_compare(const Eina_Model *a, const Eina_Model *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
717
718/**
719 * @brief Loads the @a model's data.
720 * @param model The model instance.
721 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
722 *
723 * By convention this means loading data from an external source and populating
724 * the models properties and children with it. For example in the case of file
725 * system backed model, this means opening the relevant files and reading the
726 * data from them(creating the properties and children from it).
727 * @warning This convention should be followed, but no guarantees of behaviour
728 * by user defined types can be given.
729 *
730 * @note The types provided by Eina_Model don't implement this method.
731 * @note Calling this function on a model that doesn't implement it returns @c
732 * EINA_TRUE without any effect on @a model.
733 *
734 * @see eina_model_unload()
735 * @since 1.2
736 */
737EAPI Eina_Bool eina_model_load(Eina_Model *model) EINA_ARG_NONNULL(1);
738/**
739 * @brief Unloads the @a model's data.
740 * @param model The model instance.
741 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
742 *
743 * By convention this means releasing data gotten from an external source. For
744 * example of a database backed model this might mean releasing the iterator for
745 * the currently loaded data or deleting a temporary table.
746 * @warning This convention should be followed, but no guarantees of behaviour
747 * by user defined types can be given.
748 *
749 * @note The types provided by Eina_Model don't implement this method.
750 * @note Calling this function on a model that doesn't implement it returns @c
751 * EINA_TRUE without any effect on @a model.
752 *
753 * @see eina_model_load()
754 * @since 1.2
755 */
756EAPI Eina_Bool eina_model_unload(Eina_Model *model) EINA_ARG_NONNULL(1);
757
758
759/**
760 * @defgroup Eina_Model_Properties_Group Data Model Properties
761 * Properties and their usage with models.
762 *
763 * Properties are attributes of model. They have a name and contain a
764 * data value (@ref Eina_Value_Group).
765 *
766 * The actual values and their types, if it is possible to read and
767 * write them and if new properties can be created or deleted it is up
768 * to the type.
769 *
770 * @{
771 */
772/**
773 * @brief Gets the value of @a model's property named @a name.
774 * @param[in] model The model from which to get the property.
775 * @param[in] name The name of the property whose value is wanted.
776 * @param[out] value A pointer to an Eina_Value to receive the property's value.
777 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
778 *
779 * @return EINA_TRUE if @a model has a property named @a name, EINA_FALSE
780 * otherwise.
781 *
782 * @see eina_model_property_set()
783 * @see eina_model_property_del()
784 * @since 1.2
785 */
786EAPI Eina_Bool eina_model_property_get(const Eina_Model *model,
787 const char *name,
788 Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3);
789/**
790 * @brief Sets the value of @a model's property named @a name to @a value.
791 * @param model The model in which to set the property.
792 * @param name The name of the property whose value is to set.
793 * @param value A pointer to a const Eina_Value to containing the property's
794 * value.
795 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
796 *
797 * @see eina_model_property_get()
798 * @see eina_model_property_del()
799 * @since 1.2
800 */
801EAPI Eina_Bool eina_model_property_set(Eina_Model *model,
802 const char *name,
803 const Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3);
804/**
805 * @brief Deletes @a model's property named @a name.
806 * @param model The model from which to delete the property.
807 * @param name The name of the property to delete.
808 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
809 *
810 * @see eina_model_property_set()
811 * @see eina_model_property_get()
812 * @since 1.2
813 */
814EAPI Eina_Bool eina_model_property_del(Eina_Model *model,
815 const char *name) EINA_ARG_NONNULL(1, 2);
816
817/**
818 * @brief Gets a list of the names of every property of @a model.
819 * @param model The model instance.
820 * @return #Eina_List of names.
821 *
822 * @note The returned list should be freed with @c
823 * eina_model_properties_names_list_free().
824 *
825 * @see eina_model_properties_names_list_free()
826 * @see eina_model_property_get()
827 * @since 1.2
828 */
829EAPI Eina_List *eina_model_properties_names_list_get(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
830/**
831 * @brief Frees a list of names of properties gotten with @c
832 * eina_model_properties_names_list_get().
833 * @param list The list to free.
834 *
835 * @warning Behavior is undefined if called on a list not gotten from @c
836 * eina_model_properties_names_list_get().
837 *
838 * @see eina_model_properties_names_list_get()
839 * @see eina_model_property_get()
840 * @since 1.2
841 */
842EAPI void eina_model_properties_names_list_free(Eina_List *list);
843
844/**
845 * @}
846 */
847
848/**
849 * @defgroup Eina_Model_Children_Group Data Model Children
850 * Children and their usage with models.
851 *
852 * Children are other model instances that are kept sequentially in
853 * the model. They are accessed by their integer index within the
854 * model. Their index may change if child are inserted or deleted
855 * before them, as in an array.
856 *
857 * @{
858 */
859
860/**
861 * @brief Returns the number of child models in @a model.
862 * @param model The model instance.
863 * @return Number of children in @a model.
864 *
865 * @see eina_model_child_append()
866 * @see eina_model_child_get()
867 * @see eina_model_child_del()
868 * @since 1.2
869 */
870EAPI int eina_model_child_count(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
871
872/**
873 * @brief Get the child at a given position from a model.
874 * @param model the model instance.
875 * @param position index of child to get.
876 * @return child instance with reference @b increased, or @c NULL on error.
877 *
878 * The given @a position must be valid, otherwise it may fail and
879 * return @c NULL, one should check for a valid position with
880 * eina_model_child_count().
881 *
882 * @warning The returned model has its reference increased, you must release it
883 * with eina_model_unref(). This convention is imposed to avoid the
884 * object being removed before the caller function has time to use it.
885 */
886EAPI Eina_Model *eina_model_child_get(const Eina_Model *model,
887 unsigned int position) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
888
889/**
890 * @brief Set the child at a given position from a model.
891 * @param model the model instance.
892 * @param position index of child to set.
893 * @param child the child to use at given position.
894 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
895 *
896 * The given @a position must be valid, otherwise it may fail and
897 * return #EINA_FALSE, one should check for a valid position with
898 * eina_model_child_count().
899 *
900 * The existing child is replaced. Its reference will be decreased
901 * automatically. To insert a new item instead of replacing, use
902 * eina_model_child_insert_at() or eina_model_child_append().
903 *
904 * The given model will be adopted by @a model, that is, the @a child
905 * will have its reference increased if this call succeeds.
906 *
907 * @see eina_model_child_append()
908 * @see eina_model_child_insert_at()
909 * @since 1.2
910 */
911EAPI Eina_Bool eina_model_child_set(Eina_Model *model,
912 unsigned int position,
913 Eina_Model *child) EINA_ARG_NONNULL(1, 3);
914
915/**
916 * @brief Deletes the child model in @a position-th of @a model.
917 * @param model The model instance.
918 * @param position The position of the child to be deleted.
919 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
920 *
921 * @warning This decrements the reference count of the child being deleted,
922 * which may, or not, cause it to be deconstructed and freed.
923 *
924 * @see eina_model_child_append()
925 * @see eina_model_child_get()
926 * @since 1.2
927 */
928EAPI Eina_Bool eina_model_child_del(Eina_Model *model,
929 unsigned int position) EINA_ARG_NONNULL(1);
930
931/**
932 * @brief Insert @a child in the @a position-th of the list of children of @a
933 * model.
934 * @param model The model instance.
935 * @param position Position in which to insert child.
936 * @param child The child to be inserted.
937 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
938 *
939 * @warning This increments the reference count of the child being inserted, if
940 * it will no longer be used by the inserting code it should call
941 * eina_model_unref() on it.
942 *
943 * @see eina_model_child_append()
944 * @see eina_model_child_set()
945 * @since 1.2
946 */
947EAPI Eina_Bool eina_model_child_insert_at(Eina_Model *model,
948 unsigned int position,
949 Eina_Model *child) EINA_ARG_NONNULL(1, 3);
950
951/**
952 * @brief Appends @a child in @a model.
953 * @param model The model instance.
954 * @param child The child to be appended.
955 * @return The position of the added child, or -1 on failure.
956 *
957 * @warning This increments the reference count of the child being inserted, if
958 * it will no longer be used by the inserting code it should call
959 * eina_model_unref() on it.
960 *
961 * @see eina_model_child_insert_at()
962 * @see eina_model_child_set()
963 * @since 1.2
964 */
965EAPI int eina_model_child_append(Eina_Model *model,
966 Eina_Model *child) EINA_ARG_NONNULL(1, 2);
967
968/**
969 * @brief Returns the position of @a other amongst the children of @a model.
970 * @param model The parent model whose children will be searched.
971 * @param start_position The first children to be compared with @a other.
972 * @param other The model whose position is desired.
973 * @return The position of the searched for child, or -1 if not found.
974 *
975 * @since 1.2
976 */
977EAPI int eina_model_child_find(const Eina_Model *model,
978 unsigned int start_position,
979 const Eina_Model *other) EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT;
980
981/**
982 * @brief Returns the position of a child of @a model that mathes the criteria.
983 * @param model The model whose children will be searched.
984 * @param start_position The position of the first child to be checked.
985 * @param match The function used to check if a child matches the criteria.
986 * @param data Data given the to the @a match function.
987 * @return The position of the first child to match the criteria or -1 if no
988 * child matches it.
989 *
990 * Returns the position of the first(from @a start_position) child of @a model
991 * to which @a match returns EINA_TRUE.
992 *
993 * @since 1.2
994 */
995EAPI int eina_model_child_criteria_match(const Eina_Model *model,
996 unsigned int start_position,
997 Eina_Each_Cb match,
998 const void *data) EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT;
999
1000/**
1001 * @brief Sorts the children of @a model according to @a compare.
1002 * @param model The model instance.
1003 * @param compare The function to be used in the comparison.
1004 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1005 *
1006 * The @a compare function receives to const pointer to eina models(const
1007 * *Eina_Model).
1008 *
1009 * @since 1.2
1010 */
1011EAPI Eina_Bool eina_model_child_sort(Eina_Model *model,
1012 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2);
1013
1014/**
1015 * @}
1016 */
1017
1018/**
1019 * @defgroup Eina_Model_Iterators_Group Data Model Iterators
1020 * Iterators and their usage with models.
1021 *
1022 * One of the most common tasks of models is to iterate over their
1023 * children, either forwards or backwards, filtering by some criteria
1024 * or a different ordering function.
1025 *
1026 * @{
1027 */
1028
1029/**
1030 * @brief create an iterator that outputs a child model on each iteration.
1031 * @param model the model instance.
1032 * @return Newly created iterator instance on success or @c NULL on failure.
1033 *
1034 * @code
1035 * Eina_Model *child;
1036 * Eina_Iterator *it = eina_model_child_iterator_get(model);
1037 * EINA_ITERATOR_FOREACH(it, child)
1038 * {
1039 * use_child(child);
1040 * eina_model_unref(child);
1041 * }
1042 * eina_iterator_free(it);
1043 * @endcode
1044 * This code shows how to use iterators to do something (in this example call
1045 * use_child()) on every child element.
1046 *
1047 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1048 * with reference @b increased! You must call eina_model_unref() after you're
1049 * done with it.
1050 *
1051 * @see eina_model_child_slice_iterator_get()
1052 * @see eina_model_child_reversed_iterator_get()
1053 * @see eina_model_child_sorted_iterator_get()
1054 * @see eina_model_child_filtered_iterator_get()
1055 * @since 1.2
1056 */
1057EAPI Eina_Iterator *eina_model_child_iterator_get(Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
1058/**
1059 * @brief Gets an iterator to a slice of @a model's children.
1060 * @param model The model whose children to iterate over.
1061 * @param start The first child included in the iterator.
1062 * @param count The number of children included in the iterator.
1063 * @return Newly created iterator instance on success or @c NULL on failure.
1064 *
1065 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1066 * with reference @b increased! You must call eina_model_unref() after you're
1067 * done with it.
1068 *
1069 * @see eina_model_child_iterator_get()
1070 * @see eina_model_child_slice_reversed_iterator_get()
1071 * @since 1.2
1072 */
1073EAPI Eina_Iterator *eina_model_child_slice_iterator_get(Eina_Model *model,
1074 unsigned int start,
1075 unsigned int count) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
1076
1077/**
1078 * @brief create an iterator that outputs a child model in reversed order.
1079 * @param model the model instance.
1080 * @return Newly created iterator instance on success or @c NULL on failure.
1081 *
1082 * Each iteration output a child model with reference @b increased!
1083 * You must call eina_model_unref() after you're done with it.
1084 *
1085 * The order is reversed, that is, the last element is outputted first.
1086 *
1087 * @code
1088 * Eina_Model *child;
1089 * Eina_Iterator *it = eina_model_child_reversed_iterator_get(model);
1090 * EINA_ITERATOR_FOREACH(it, child)
1091 * {
1092 * use_child(child);
1093 * eina_model_unref(child);
1094 * }
1095 * eina_iterator_free(it);
1096 * @endcode
1097 * This code shows how to use iterators to do something (in this example call
1098 * use_child()) on every child element starting from last to first.
1099 *
1100 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1101 * with reference @b increased! You must call eina_model_unref() after you're
1102 * done with it.
1103 *
1104 * @see eina_model_child_slice_iterator_get()
1105 * @see eina_model_child_reversed_iterator_get()
1106 * @see eina_model_child_sorted_iterator_get()
1107 * @see eina_model_child_filtered_iterator_get()
1108 * @since 1.2
1109 */
1110EAPI Eina_Iterator *eina_model_child_reversed_iterator_get(Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
1111
1112/**
1113 * @brief Gets a reversed iterator to a slice of @a model's children.
1114 * @param model The model whose children to iterate over.
1115 * @param start The first child included in the iterator.
1116 * @param count The number of children included in the iterator.
1117 * @return Newly created iterator instance on success or @c NULL on failure.
1118 *
1119 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1120 * with reference @b increased! You must call eina_model_unref() after you're
1121 * done with it.
1122 *
1123 * @see eina_model_child_reversed_iterator_get()
1124 * @see eina_model_child_slice_iterator_get()
1125 * @since 1.2
1126 */
1127EAPI Eina_Iterator *eina_model_child_slice_reversed_iterator_get(Eina_Model *model,
1128 unsigned int start,
1129 unsigned int count) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
1130
1131/**
1132 * @brief create an iterator that outputs a child model using sort criteria.
1133 * @param model the model instance.
1134 * @param compare compare function to use as sort criteria.
1135 * @return Newly created iterator instance on success or @c NULL on failure.
1136 *
1137 * Each iteration output a child model with reference @b increased!
1138 * You must call eina_model_unref() after you're done with it.
1139 *
1140 * The sort will not affect the main object @a model, it's just a view
1141 * of it.
1142 *
1143 * @code
1144 * Eina_Model *child;
1145 * Eina_Iterator *it = eina_model_child_sorted_iterator_get(model, EINA_COMPARE_CB(eina_model_compare));
1146 * EINA_ITERATOR_FOREACH(it, child)
1147 * {
1148 * use_child(child);
1149 * eina_model_unref(child);
1150 * }
1151 * eina_iterator_free(it);
1152 * @endcode
1153 * This bit of code shows how to use iterators to do something (in this example
1154 * call use_child()) on every child element in the order given by the @a compare
1155 * function.
1156 *
1157 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1158 * with reference @b increased! You must call eina_model_unref() after you're
1159 * done with it.
1160 *
1161 * @see eina_model_child_slice_iterator_get()
1162 * @see eina_model_child_reversed_iterator_get()
1163 * @see eina_model_child_sorted_iterator_get()
1164 * @see eina_model_child_filtered_iterator_get()
1165 * @since 1.2
1166 */
1167EAPI Eina_Iterator *eina_model_child_sorted_iterator_get(Eina_Model *model,
1168 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
1169
1170/**
1171 * @brief Returns a sorted iterator to a slice of @a model's children.
1172 * @param model The model whose children to iterate over.
1173 * @param start The position(before sorting) of the first child included in
1174 * the iterator.
1175 * @param count The number of children included in the iterator.
1176 * @param compare The function used to sort the children.
1177 * @return Newly created iterator instance on success or @c NULL on failure.
1178 *
1179 * @warning Each iteration(call to eina_iterator_next()) gives a child model
1180 * with reference @b increased! You must call eina_model_unref() after you're
1181 * done with it.
1182 *
1183 * @see eina_model_child_slice_iterator_get()
1184 * @see eina_model_child_reversed_iterator_get()
1185 * @see eina_model_child_sorted_iterator_get()
1186 * @see eina_model_child_filtered_iterator_get()
1187 * @since 1.2
1188 */
1189EAPI Eina_Iterator *eina_model_child_slice_sorted_iterator_get(Eina_Model *model,
1190 unsigned int start,
1191 unsigned int count,
1192 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 4) EINA_WARN_UNUSED_RESULT;
1193
1194/**
1195 * @brief create an iterator that indexes of children that matches.
1196 * @param model the model instance.
1197 * @param match function to select children.
1198 * @param data extra context given to @a match function.
1199 * @return Newly created iterator instance on success or @c NULL on failure.
1200 *
1201 * Unlike other iterators, each iteration output an integer index!
1202 * This is useful if you want to highlight the matching model
1203 * somewhere else.
1204 *
1205 * If no child element matches a valid, and empty, iterator will be returned.
1206 * Indexes returned by this iterator are guaranteed to exists.
1207 *
1208 * @code
1209 * unsigned int idx;
1210 * Eina_Iterator *it = eina_model_child_filtered_iterator_get(model, filter, ctx);
1211 * EINA_ITERATOR_FOREACH(it, idx)
1212 * {
1213 * Eina_Model *child = eina_model_child_get(model, idx);
1214 * printf("matches at %u %p\n", idx, child);
1215 * eina_model_unref(child);
1216 * }
1217 * eina_iterator_free(it);
1218 * @endcode
1219 * This bit of code shows how to use iterators to do something (in this example
1220 * print the address) on child elements that match the criteria given of @a match.
1221 *
1222 * @see eina_model_child_slice_iterator_get()
1223 * @see eina_model_child_reversed_iterator_get()
1224 * @see eina_model_child_sorted_iterator_get()
1225 * @see eina_model_child_filtered_iterator_get()
1226 * @since 1.2
1227 */
1228EAPI Eina_Iterator *eina_model_child_filtered_iterator_get(Eina_Model *model,
1229 Eina_Each_Cb match,
1230 const void *data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
1231
1232/**
1233 * @brief Returns a filtered slice of the @a model's children.
1234 * @param model The model whose children to iterate over.
1235 * @param start The position of the first child to be tested for inclusion in
1236 * the iterator.
1237 * @param count The number of children to be tested for inclusion in the
1238 * iterator.
1239 * @param match The function used to decide which children will be included in
1240 * the iterator.
1241 * @param data Data passed to the @a match function.
1242 * @return Newly created iterator instance on success or @c NULL on failure.
1243 *
1244 * @note Only children for whom @a match returns EINA_TRUE will be included in
1245 * the iterator.
1246 *
1247 * @note Each iteration(call to eina_iterator_next()) gives an integer index!
1248 *
1249 * @warning The iterator may have less than @a count children, but not more.
1250 *
1251 * @see eina_model_child_slice_iterator_get()
1252 * @see eina_model_child_reversed_iterator_get()
1253 * @see eina_model_child_sorted_iterator_get()
1254 * @see eina_model_child_filtered_iterator_get()
1255 * @since 1.2
1256 */
1257EAPI Eina_Iterator *eina_model_child_slice_filtered_iterator_get(Eina_Model *model,
1258 unsigned int start,
1259 unsigned int count,
1260 Eina_Each_Cb match,
1261 const void *data) EINA_ARG_NONNULL(1, 4) EINA_WARN_UNUSED_RESULT;
1262
1263
1264/**
1265 * @}
1266 */
1267
1268/**
1269 * @brief Convert model to string.
1270 * @param model the model instance.
1271 * @return Newly allocated memory or @c NULL on failure.
1272 *
1273 * The default format of the ouput is:
1274 * Type_Name({Property_Name: Property_Value, ...}, [Child0, Child1, ...])
1275 *
1276 * Where:
1277 * @li Type_Name: eina_model_type_name_get(eina_model_type_get(model))
1278 * @li Properties are sorted alphabetically.
1279 * @li Property_Value is created using eina_value_to_string().
1280 * @li Children are converted using eina_model_to_string()
1281 *
1282 * @since 1.2
1283 */
1284EAPI char *eina_model_to_string(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
1285
1286/**
1287 * @defgroup Eina_Model_Type_Group Data Model Type management
1288 *
1289 * Functions and structures related to implementing new types or
1290 * extending existing ones.
1291 *
1292 * All eina_model_type functions takes an Eina_Model_Type or
1293 * Eina_Model_Interface as parameter and may be used to validate or
1294 * query information about them.
1295 *
1296 * The functions with prefix eina_model_type that matches eina_model
1297 * counterparts, such as eina_model_type_compare() and
1298 * eina_model_compare() are used as "super", that is, calls the @c
1299 * compare() method of the given type (or its parent) instead of the
1300 * most specific type of provided Eina_Model.
1301 *
1302 * Examples:
1303 * @li @ref eina_model_02_example_page contains an easy to follow
1304 * example that demonstrates several of the important features of
1305 * eina_model, uses #EINA_MODEL_TYPE_GENERIC.
1306 * @li @ref eina_model_03_example_page walk-through example on how to
1307 * inherit types, a suggestion of eina_model_load() usage and uses
1308 * #EINA_MODEL_TYPE_STRUCT.
1309 *
1310 * @{
1311 */
1312
1313/**
1314 * @def EINA_MODEL_TYPE_VERSION
1315 * Current API version, used to validate #_Eina_Model_Type.
1316 */
1317#define EINA_MODEL_TYPE_VERSION (1)
1318
1319/**
1320 * @struct _Eina_Model_Type
1321 * API to access models.
1322 *
1323 * Each type of the hierarchy and each interface will get its own
1324 * private data of size @c private_size (defined at each subtype or
1325 * interface), this can be retrieved with
1326 * eina_model_type_private_data_get() and
1327 * eina_model_interface_private_data_get().
1328 *
1329 * Private are created @b automatically and should be setup with @c
1330 * setup and flushed with @c flush. All types (or interfaces)
1331 * functions that exist are called! Don't call your parent's @c setup or
1332 * @c flush! The setup is done from parent to child. Flush is done from
1333 * child to parent.
1334 *
1335 * After memory setup was done, @c constructor of the toplevel type
1336 * defining it is called. If desired it may call parent's constructor
1337 * in whatever order is desired. This may be used to create
1338 * properties, children and may use parent's data if needed. The only
1339 * constructor caled is that of the most specialized type, if interface
1340 * constructors should be called, do them in the desired order from the type
1341 * constructor.
1342 *
1343 * When the model is deleted, explicitly with eina_model_del() or
1344 * implicitly with eina_model_unref() on the last reference, the @c
1345 * destructor is called. It must release references to other
1346 * models. When the last reference is dropped, every @c flush is
1347 * called from child to parent, then memory is freed. The only
1348 * destructor caled is that of the most specialized type, if interface
1349 * destructors should be called, do them in the desired order from the type
1350 * destructor.
1351 *
1352 *
1353 * @note The methods @c setup and @c flush should exist if there is
1354 * private data, otherwise memory may be uninitialized or leaks.
1355 * @note It is recommended that @c constructor and @c destructor exist
1356 * to correctly do their roles and call parents in the correct
1357 * order. Whenever they do not exist, their parent pointer is
1358 * called.
1359 * @note a runtime check will enforce just types with ABI version
1360 * #EINA_MODEL_TYPE_VERSION are used by comparing with the @c version
1361 * member.
1362 *
1363 * @since 1.2
1364 */
1365struct _Eina_Model_Type
1366{
1367 unsigned int version; /**< must be #EINA_MODEL_TYPE_VERSION */
1368 unsigned int private_size; /**< used to allocate type private data */
1369 unsigned int type_size; /**< used to know sizeof(Eina_Model_Type) or subtypes (which may be bigger, by including Eina_Model_Type as a header */
1370 const char *name; /**< name for debug and introspection */
1371 const Eina_Model_Type *parent; /**< parent type, must be EINA_MODEL_TYPE_BASE or a child of */
1372 const Eina_Model_Interface **interfaces; /**< null terminated array of interfaces */
1373 const Eina_Model_Event_Description *events; /**< null terminated array of events */
1374 Eina_Bool (*setup)(Eina_Model *model); /**< setup type private data, do @b not call parent type setup! */
1375 Eina_Bool (*flush)(Eina_Model *model); /**< flush type private data, do @b not call parent type flush! */
1376 Eina_Bool (*constructor)(Eina_Model *model); /**< construct type instance, setup was already called. Should call parent's or interfaces' constructor if needed */
1377 Eina_Bool (*destructor)(Eina_Model *model); /**< destruct type instance, flush will be called after it. Should call parent's or interfaces' destructor if needed. Release reference to other models here. */
1378 Eina_Bool (*copy)(const Eina_Model *src, Eina_Model *dst); /**< copy type private data, do @b not call parent type copy! */
1379 Eina_Bool (*deep_copy)(const Eina_Model *src, Eina_Model *dst); /**< deep copy type private data, do @b not call parent type deep copy! */
1380 Eina_Bool (*compare)(const Eina_Model *a, const Eina_Model *b, int *cmp);
1381 Eina_Bool (*load)(Eina_Model *model);
1382 Eina_Bool (*unload)(Eina_Model *model);
1383 Eina_Bool (*property_get)(const Eina_Model *model, const char *name, Eina_Value *value);
1384 Eina_Bool (*property_set)(Eina_Model *model, const char *name, const Eina_Value *value);
1385 Eina_Bool (*property_del)(Eina_Model *model, const char *name);
1386 Eina_List *(*properties_names_list_get)(const Eina_Model *model); /**< list of stringshare */
1387 int (*child_count)(const Eina_Model *model);
1388 Eina_Model *(*child_get)(const Eina_Model *model, unsigned int position);
1389 Eina_Bool (*child_set)(Eina_Model *model, unsigned int position, Eina_Model *child);
1390 Eina_Bool (*child_del)(Eina_Model *model, unsigned int position);
1391 Eina_Bool (*child_insert_at)(Eina_Model *model, unsigned int position, Eina_Model *child);
1392 int (*child_find)(const Eina_Model *model, unsigned int start_position, const Eina_Model *other);
1393 int (*child_criteria_match)(const Eina_Model *model, unsigned int start_position, Eina_Each_Cb match, const void *data);
1394 void (*child_sort)(Eina_Model *model, Eina_Compare_Cb compare);
1395 Eina_Iterator *(*child_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count);
1396 Eina_Iterator *(*child_reversed_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count);
1397 Eina_Iterator *(*child_sorted_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count, Eina_Compare_Cb compare);
1398 Eina_Iterator *(*child_filtered_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count, Eina_Each_Cb match, const void *data);
1399 char *(*to_string)(const Eina_Model *model); /**< used to represent model as string, usually for debug purposes or user convenience */
1400 void *__extension_ptr0; /**< not to be used */
1401 void *__extension_ptr1; /**< not to be used */
1402 void *__extension_ptr2; /**< not to be used */
1403 void *__extension_ptr3; /**< not to be used */
1404};
1405
1406#define EINA_MODEL_TYPE_INIT(name, type, private_type, parent, interfaces, events) \
1407 {EINA_MODEL_TYPE_VERSION, \
1408 sizeof(private_type), \
1409 sizeof(type), \
1410 name, \
1411 parent, \
1412 interfaces, \
1413 events, \
1414 NULL, \
1415 NULL, \
1416 NULL, \
1417 NULL, \
1418 NULL, \
1419 NULL, \
1420 NULL, \
1421 NULL, \
1422 NULL, \
1423 NULL, \
1424 NULL, \
1425 NULL, \
1426 NULL, \
1427 NULL, \
1428 NULL, \
1429 NULL, \
1430 NULL, \
1431 NULL, \
1432 NULL, \
1433 NULL, \
1434 NULL, \
1435 NULL, \
1436 NULL, \
1437 NULL, \
1438 NULL, \
1439 NULL, \
1440 NULL, \
1441 NULL, \
1442 NULL, \
1443 NULL \
1444 }
1445
1446#define EINA_MODEL_TYPE_INIT_NOPRIVATE(name, type, parent, interfaces, events) \
1447 {EINA_MODEL_TYPE_VERSION, \
1448 0, \
1449 sizeof(type), \
1450 name, \
1451 parent, \
1452 interfaces, \
1453 events, \
1454 NULL, \
1455 NULL, \
1456 NULL, \
1457 NULL, \
1458 NULL, \
1459 NULL, \
1460 NULL, \
1461 NULL, \
1462 NULL, \
1463 NULL, \
1464 NULL, \
1465 NULL, \
1466 NULL, \
1467 NULL, \
1468 NULL, \
1469 NULL, \
1470 NULL, \
1471 NULL, \
1472 NULL, \
1473 NULL, \
1474 NULL, \
1475 NULL, \
1476 NULL, \
1477 NULL, \
1478 NULL, \
1479 NULL, \
1480 NULL, \
1481 NULL, \
1482 NULL, \
1483 NULL \
1484 }
1485
1486#define EINA_MODEL_TYPE_INIT_NULL \
1487 {0, \
1488 0, \
1489 0, \
1490 NULL, \
1491 NULL, \
1492 NULL, \
1493 NULL, \
1494 NULL, \
1495 NULL, \
1496 NULL, \
1497 NULL, \
1498 NULL, \
1499 NULL, \
1500 NULL, \
1501 NULL, \
1502 NULL, \
1503 NULL, \
1504 NULL, \
1505 NULL, \
1506 NULL, \
1507 NULL, \
1508 NULL, \
1509 NULL, \
1510 NULL, \
1511 NULL, \
1512 NULL, \
1513 NULL, \
1514 NULL, \
1515 NULL, \
1516 NULL, \
1517 NULL, \
1518 NULL, \
1519 NULL, \
1520 NULL, \
1521 NULL, \
1522 NULL, \
1523 NULL \
1524 }
1525
1526/**
1527 * @brief Calls the constructor of @a type for @a model.
1528 * @param type The type whose constructor will be called.
1529 * @param model The model instance.
1530 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1531 *
1532 * This should be used to call the parent's type constructor, something like:
1533 * @code
1534 * static Eina_Bool my_type_constructor(Eina_Model *m)
1535 * {
1536 * // call parents constructor:
1537 * if (!eina_model_type_constructor(MY_TYPE->parent, m))
1538 * return EINA_FALSE;
1539 * // do my stuff
1540 * return EINA_TRUE;
1541 * }
1542 * @endcode
1543 * @note You should only do your type's initialization after the parent type has
1544 * done his own(this is as to ensure you can call on your parent's methods).
1545 *
1546 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1547 * returns EINA_FALSE.
1548 *
1549 * @see eina_model_new()
1550 * @see _Eina_Model_Type
1551 * @since 1.2
1552 */
1553EAPI Eina_Bool eina_model_type_constructor(const Eina_Model_Type *type,
1554 Eina_Model *model) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
1555/**
1556 * @brief Calls the destructor of @a type for @a model.
1557 * @param type The type whose destructor will be called.
1558 * @param model The model instance.
1559 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1560 *
1561 * This should be used to call the parent's type destructor, something like:
1562 * @code
1563 * static Eina_Bool my_type_destructor(Eina_Model *m)
1564 * {
1565 * // do my stuff
1566 * // call parents destructor:
1567 * if (!eina_model_type_destructor(MY_TYPE->parent, m))
1568 * return EINA_FALSE;
1569 * return EINA_TRUE;
1570 * }
1571 * @endcode
1572 * @note It's considered good practice to free your type's resources before
1573 * calling the parent's destructor.
1574 *
1575 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1576 * returns EINA_FALSE.
1577 *
1578 * @see eina_model_del()
1579 * @see _Eina_Model_Type
1580 * @since 1.2
1581 */
1582EAPI Eina_Bool eina_model_type_destructor(const Eina_Model_Type *type,
1583 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
1584/**
1585 * @brief Calls the copy method of @a type for @a model.
1586 * @param type The type whose copy method will be called.
1587 * @param src Pointer to the model to be copied.
1588 * @param dst Pointer to where copy will be put.
1589 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1590 *
1591 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1592 * returns EINA_FALSE.
1593 *
1594 * @see eina_model_copy()
1595 * @see _Eina_Model_Type
1596 * @since 1.2
1597 */
1598EAPI Eina_Bool eina_model_type_copy(const Eina_Model_Type *type,
1599 const Eina_Model *src,
1600 Eina_Model *dst) EINA_ARG_NONNULL(1, 2, 3);
1601/**
1602 * @brief Calls the deep copy method of @a type for @a model.
1603 * @param type The type whose copy method will be called.
1604 * @param src Pointer to the model to be copied.
1605 * @param dst Pointer to where copy will be put.
1606 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1607 *
1608 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1609 * returns EINA_FALSE.
1610 *
1611 * @see eina_model_deep_copy()
1612 * @see _Eina_Model_Type
1613 * @since 1.2
1614 */
1615EAPI Eina_Bool eina_model_type_deep_copy(const Eina_Model_Type *type,
1616 const Eina_Model *src,
1617 Eina_Model *dst) EINA_ARG_NONNULL(1, 2, 3);
1618/**
1619 * @brief Calls the compare method of @a type for @a model.
1620 * @param[in] type The type whose compare method will be called.
1621 * @param[in] a Pointer to the first model to be compared.
1622 * @param[in] b Pointer to the second model to be compared.
1623 * @param[out] cmp The value of the comparison, 1 if @a b is greater than @a a,
1624 * -1 if @a b is smaller than @a a, 0 if @a a and @a b are equal.
1625 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1626 *
1627 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1628 * returns EINA_FALSE.
1629 *
1630 * @see eina_model_compare()
1631 * @see _Eina_Model_Type
1632 * @since 1.2
1633 */
1634EAPI Eina_Bool eina_model_type_compare(const Eina_Model_Type *type,
1635 const Eina_Model *a,
1636 const Eina_Model *b,
1637 int *cmp) EINA_ARG_NONNULL(1, 2, 3, 4);
1638/**
1639 * @brief Calls the load method of @a type for @a model.
1640 * @param type The type whose load method will be called.
1641 * @param model The model instance.
1642 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1643 *
1644 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1645 * returns EINA_FALSE.
1646 *
1647 * @see eina_model_load()
1648 * @see _Eina_Model_Type
1649 * @since 1.2
1650 */
1651EAPI Eina_Bool eina_model_type_load(const Eina_Model_Type *type,
1652 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
1653/**
1654 * @brief Calls the unload method of @a type for @a model.
1655 * @param type The type whose unload method will be called.
1656 * @param model The model instance.
1657 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1658 *
1659 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1660 * returns EINA_FALSE.
1661 *
1662 * @see eina_model_unload()
1663 * @see _Eina_Model_Type
1664 * @since 1.2
1665 */
1666EAPI Eina_Bool eina_model_type_unload(const Eina_Model_Type *type,
1667 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
1668/**
1669 * @brief Calls the property get method of @a type for @a model.
1670 * @param[in] type The type whose property get method will be called.
1671 * @param[in] model The model instance.
1672 * @param[in] name Name of property to get.
1673 * @param[out] value Pointer to where value of property will be placed.
1674 * @return EINA_TRUE if able to get property, EINA_FALSE otherwise.
1675 *
1676 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1677 * returns EINA_FALSE.
1678 *
1679 * @see eina_model_property_get()
1680 * @see _Eina_Model_Type
1681 * @since 1.2
1682 */
1683EAPI Eina_Bool eina_model_type_property_get(const Eina_Model_Type *type,
1684 const Eina_Model *model,
1685 const char *name,
1686 Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3, 4);
1687/**
1688 * @brief Calls the property set method of @a type for @a model.
1689 * @param type The type whose property set method will be called.
1690 * @param model The model instance.
1691 * @param name Name of property whose value will be set.
1692 * @param value The value to be set.
1693 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1694 *
1695 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1696 * returns EINA_FALSE.
1697 *
1698 * @see eina_model_property_set()
1699 * @see _Eina_Model_Type
1700 * @since 1.2
1701 */
1702EAPI Eina_Bool eina_model_type_property_set(const Eina_Model_Type *type,
1703 Eina_Model *model,
1704 const char *name,
1705 const Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3, 4);
1706/**
1707 * @brief Calls the property del method of @a type for @a model.
1708 * @param type The type whose property delete method will be called.
1709 * @param model The model instance.
1710 * @param name The name of the property to be deleted.
1711 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1712 *
1713 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1714 * returns EINA_FALSE.
1715 *
1716 * @see eina_model_property_del()
1717 * @see _Eina_Model_Type
1718 * @since 1.2
1719 */
1720EAPI Eina_Bool eina_model_type_property_del(const Eina_Model_Type *type,
1721 Eina_Model *model,
1722 const char *name) EINA_ARG_NONNULL(1, 2, 3);
1723/**
1724 * @brief Calls the properties name list method of @a type for @a model.
1725 * @param type The type whose property name list get method will be called.
1726 * @param model The model instance.
1727 * @return #Eina_List of properties' names.
1728 *
1729 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1730 * returns EINA_FALSE.
1731 *
1732 * @see eina_model_properties_names_list_get()
1733 * @see _Eina_Model_Type
1734 * @since 1.2
1735 */
1736EAPI Eina_List *eina_model_type_properties_names_list_get(const Eina_Model_Type *type,
1737 const Eina_Model *model) EINA_ARG_NONNULL(1, 2);
1738/**
1739 * @brief Calls the child count method of @a type for @a model.
1740 * @param type The type whose child count method will be called.
1741 * @param model The model instance.
1742 * @return Number of children in @a model.
1743 *
1744 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1745 * returns EINA_FALSE.
1746 *
1747 * @see eina_model_child_count()
1748 * @see _Eina_Model_Type
1749 * @since 1.2
1750 */
1751EAPI int eina_model_type_child_count(const Eina_Model_Type *type,
1752 const Eina_Model *model) EINA_ARG_NONNULL(1, 2);
1753/**
1754 * @brief Calls the child get method of @a type for @a model.
1755 * @param type The type whose child get method will be called.
1756 * @param model The model instance.
1757 * @param position The position of the child to get.
1758 * @return The child model, or NULL on failure.
1759 *
1760 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1761 * returns EINA_FALSE.
1762 *
1763 * @see eina_model_child_get()
1764 * @see _Eina_Model_Type
1765 * @since 1.2
1766 */
1767EAPI Eina_Model *eina_model_type_child_get(const Eina_Model_Type *type,
1768 const Eina_Model *model,
1769 unsigned int position) EINA_ARG_NONNULL(1, 2);
1770/**
1771 * @brief Calls the child set method of @a type for @a model.
1772 * @param type The type whose child set method will be called.
1773 * @param model The model instance.
1774 * @param position The position of the child to be set.
1775 * @param child Pointer to value(child) to be set.
1776 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1777 *
1778 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1779 * returns EINA_FALSE.
1780 *
1781 * @see eina_model_child_set()
1782 * @see _Eina_Model_Type
1783 * @since 1.2
1784 */
1785EAPI Eina_Bool eina_model_type_child_set(const Eina_Model_Type *type,
1786 Eina_Model *model,
1787 unsigned int position,
1788 Eina_Model *child) EINA_ARG_NONNULL(1, 2, 4);
1789/**
1790 * @brief Calls the child del method of @a type for @a model.
1791 * @param type The type whose child delete method will be called.
1792 * @param model The model instance.
1793 * @param position Position of child to be deleted.
1794 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1795 *
1796 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1797 * returns EINA_FALSE.
1798 *
1799 * @see eina_model_child_del()
1800 * @see _Eina_Model_Type
1801 * @since 1.2
1802 */
1803EAPI Eina_Bool eina_model_type_child_del(const Eina_Model_Type *type,
1804 Eina_Model *model,
1805 unsigned int position) EINA_ARG_NONNULL(1, 2);
1806/**
1807 * @brief Calls the child insert at method of @a type for @a model.
1808 * @param type The type whose child insert method will be called.
1809 * @param model The model instance.
1810 * @param position Position in which @a child will be inserted.
1811 * @param child The child to be inserted.
1812 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1813 *
1814 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1815 * returns EINA_FALSE.
1816 *
1817 * @see eina_model_child_insert_at()
1818 * @see _Eina_Model_Type
1819 * @since 1.2
1820 */
1821EAPI Eina_Bool eina_model_type_child_insert_at(const Eina_Model_Type *type,
1822 Eina_Model *model,
1823 unsigned int position,
1824 Eina_Model *child) EINA_ARG_NONNULL(1, 2, 4);
1825/**
1826 * @brief Calls the child find method of @a type for @a model.
1827 * @param type The type whose find method will be called.
1828 * @param model The model instance.
1829 * @param start_position The first position to search for.
1830 * @param other The child being searched for.
1831 * @return The index of the searched child, or -1 if not found.
1832 *
1833 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1834 * returns EINA_FALSE.
1835 *
1836 * @see eina_model_child_find()
1837 * @see _Eina_Model_Type
1838 * @since 1.2
1839 */
1840EAPI int eina_model_type_child_find(const Eina_Model_Type *type,
1841 const Eina_Model *model,
1842 unsigned int start_position,
1843 const Eina_Model *other) EINA_ARG_NONNULL(1, 2, 4);
1844/**
1845 * @brief Calls the child criteria match method of @a type for @a model.
1846 * @param type The type whose child criteria match method will be called.
1847 * @param model The model instance.
1848 * @param start_position The first position to be checked.
1849 * @param match The function used to determine if a child matches the criteria.
1850 * @param data Data given to the @a match function. May be NULL.
1851 * @return The position of the first child to match the criteria or -1 if no
1852 * child matches it.
1853 *
1854 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1855 * returns EINA_FALSE.
1856 *
1857 * @see eina_model_child_criteria_match()
1858 * @see _Eina_Model_Type
1859 * @since 1.2
1860 */
1861EAPI int eina_model_type_child_criteria_match(const Eina_Model_Type *type,
1862 const Eina_Model *model,
1863 unsigned int start_position,
1864 Eina_Each_Cb match,
1865 const void *data) EINA_ARG_NONNULL(1, 2, 4);
1866/**
1867 * @brief Calls the child sort method of @a type for @a model.
1868 * @param type The type whose child sort method will be called.
1869 * @param model The model instance.
1870 * @param compare Function used to compare children.
1871 *
1872 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1873 * returns EINA_FALSE.
1874 *
1875 * @see eina_model_child_sort()
1876 * @see _Eina_Model_Type
1877 * @since 1.2
1878 */
1879EAPI void eina_model_type_child_sort(const Eina_Model_Type *type,
1880 Eina_Model *model,
1881 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
1882/**
1883 * @brief Calls the child iterator get method of @a type for @a model.
1884 * @param type The type whose child iterator get method will be called.
1885 * @param model The model instance.
1886 * @param start The first child to be a part of the iterator.
1887 * @param count The number of children included in the iterator.
1888 * @return Newly created iterator instance on success or @c NULL on failure.
1889 *
1890 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1891 * returns EINA_FALSE.
1892 *
1893 * @see eina_model_child_iterator_get()
1894 * @see _Eina_Model_Type
1895 * @since 1.2
1896 */
1897EAPI Eina_Iterator *eina_model_type_child_iterator_get(const Eina_Model_Type *type,
1898 Eina_Model *model,
1899 unsigned int start,
1900 unsigned int count) EINA_ARG_NONNULL(1, 2);
1901/**
1902 * @brief Calls the child reversed iterator get method of @a type for @a model.
1903 * @param type The type whose child reversed iterator get method will be called.
1904 * @param model The model instance.
1905 * @param start The first child to be a part of the iterator.
1906 * @param count The number of children included in the iterator.
1907 * @return Newly created iterator instance on success or @c NULL on failure.
1908 *
1909 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1910 * returns EINA_FALSE.
1911 *
1912 * @see eina_model_child_reversed_iterator_get()
1913 * @see _Eina_Model_Type
1914 * @since 1.2
1915 */
1916EAPI Eina_Iterator *eina_model_type_child_reversed_iterator_get(const Eina_Model_Type *type,
1917 Eina_Model *model,
1918 unsigned int start,
1919 unsigned int count) EINA_ARG_NONNULL(1, 2);
1920/**
1921 * @brief Calls the child sorted iterator get method of @a type for @a model.
1922 * @param type The type whose child sorted iterator get method will be called.
1923 * @param model The model instance.
1924 * @param start The first child to be a part of the iterator.
1925 * @param count The number of children included in the iterator.
1926 * @param compare Function used to compare children.
1927 * @return Newly created iterator instance on success or @c NULL on failure.
1928 *
1929 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1930 * returns EINA_FALSE.
1931 *
1932 * @see eina_model_child_sorted_iterator_get()
1933 * @see _Eina_Model_Type
1934 * @since 1.2
1935 */
1936EAPI Eina_Iterator *eina_model_type_child_sorted_iterator_get(const Eina_Model_Type *type,
1937 Eina_Model *model,
1938 unsigned int start,
1939 unsigned int count,
1940 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 5);
1941/**
1942 * @brief Calls the child filtered get method of @a type for @a model.
1943 * @param type The type whose child filtered iterator get method will be called.
1944 * @param model The model instance.
1945 * @param start The first child to be a part of the iterator.
1946 * @param count Number of children to be checked for inclusion in the iterator.
1947 * @param match Function used to check if child will be included in the iterator.
1948 * @param data Data given to the @a match function. May be NULL.
1949 * @return Newly created iterator instance on success or @c NULL on failure.
1950 *
1951 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1952 * returns EINA_FALSE.
1953 *
1954 * @see eina_model_child_filtered_iterator_get()
1955 * @see _Eina_Model_Type
1956 * @since 1.2
1957 */
1958EAPI Eina_Iterator *eina_model_type_child_filtered_iterator_get(const Eina_Model_Type *type,
1959 Eina_Model *model,
1960 unsigned int start,
1961 unsigned int count,
1962 Eina_Each_Cb match,
1963 const void *data) EINA_ARG_NONNULL(1, 2, 5);
1964/**
1965 * @brief Calls the to string method of @a type for @a model.
1966 * @param type The type whose to string method will be called.
1967 * @param model The model instance.
1968 * @return String representationof @a model.
1969 *
1970 * @warning If model doesn't inherit from(or is of) @a type does nothing and
1971 * returns EINA_FALSE.
1972 *
1973 * @see eina_model_to_string()
1974 * @see _Eina_Model_Type
1975 * @since 1.2
1976 */
1977EAPI char *eina_model_type_to_string(const Eina_Model_Type *type,
1978 const Eina_Model *model) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
1979
1980
1981/**
1982 * @brief Get resolved method from types that extend Eina_Model_Type given @a offset.
1983 * @param model the model to query the method
1984 * @param offset the byte offset in the structure given as type, it
1985 * must be bigger than Eina_Model_Type itself.
1986 * @return Address to resolved method, or @c NULL if method is not implemented.
1987 *
1988 * The use of this function is discouraged, you should use
1989 * eina_model_method_resolve() instead.
1990 *
1991 * When implementing new types that augments the basic methods from
1992 * Eina_Model_Type, the recommended structure layout is as follow:
1993 * @code
1994 * typedef struct _My_Type My_Type;
1995 * struct _My_Type {
1996 * Eina_Model_Type base;
1997 * int (*my_method)(Eina_Model *model);
1998 * };
1999 *
2000 * int my_type_my_method(Eina_Model *model);
2001 * @endcode
2002 *
2003 * Then the implementation of @c my_type_my_method() needs to get the
2004 * most specific @c my_method that is not @c NULL from type hierarchy,
2005 * also called "resolve the method".
2006 *
2007 * To do this in an efficient way, Eina_Model infrastructure
2008 * pre-resolves all methods and provides this function for efficient
2009 * query. The recommended implementation of my_type_my_method() would
2010 * be:
2011 * @code
2012 * int my_type_my_method(Eina_Model *model)
2013 * {
2014 * int (*meth)(Eina_Model *);
2015 *
2016 * EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(model, MY_TYPE), -1);
2017 *
2018 * meth = eina_model_method_offset_resolve(model, offsetof(My_Type, my_method));
2019 * EINA_SAFETY_ON_NULL_RETURN(meth, -1);
2020 * return meth(model);
2021 * }
2022 * @endcode
2023 *
2024 * @note offset must be bigger than Eina_Model_Type, otherwise use
2025 * specific functions such as eina_model_property_get().
2026 *
2027 * @see eina_model_method_resolve
2028 * @see eina_model_type_method_resolve
2029 * @since 1.2
2030 */
2031EAPI const void *eina_model_method_offset_resolve(const Eina_Model *model, unsigned int offset) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
2032
2033/**
2034 * @brief Gets resolved method from @a type of @a model given @a offset.
2035 * @param type The type whose method offset resolve method will be called.
2036 * @param model The model instance.
2037 * @param offset The offset of the wanted method.
2038 * @return Address to resolved method, or @c NULL if method is not implemented.
2039 *
2040 * @see eina_model_method_offset_resolve()
2041 * @since 1.2
2042 */
2043EAPI const void *eina_model_type_method_offset_resolve(const Eina_Model_Type *type, const Eina_Model *model, unsigned int offset) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2044
2045#define eina_model_method_resolve(model, struct_type, method) eina_model_method_offset_resolve((model), offsetof(struct_type, method))
2046
2047#define eina_model_type_method_resolve(type, model, struct_type, method) eina_model_type_method_offset_resolve((type), (model), offsetof(struct_type, method))
2048
2049/**
2050 * @def EINA_MODEL_INTERFACE_VERSION
2051 * Current API version, used to validate #_Eina_Model_Interface.
2052 */
2053#define EINA_MODEL_INTERFACE_VERSION (1)
2054
2055/**
2056 * @struct _Eina_Model_Interface
2057 * API to access models.
2058 *
2059 * Interfaces are managed by name, then multiple Eina_Model_Interface
2060 * may have the same name meaning it implements that name.
2061 *
2062 * Each interface will get its own private data of size @c
2063 * private_size (defined at each sub interface), this can be retrieved
2064 * with eina_model_interface_private_data_get().
2065 *
2066 * Private are created @b automatically and should be setup with @c
2067 * setup and flushed with @c flush. All interfaces functions that
2068 * exist are called! Don't call your parent's @c setup or @c flush!
2069 * The setup is done from parent to child. Flush is done from child to
2070 * parent (topological sort is applied to interface graph).
2071 *
2072 * @note The methods @c setup and @c flush should exist if there is
2073 * private data, otherwise memory may be uninitialized or leaks.
2074 * @note It is recommended that @c constructor and @c destructor exist
2075 * to correctly do their roles and call parents in the correct
2076 * order. Whenever they do not exist, their parent pointer is
2077 * called.
2078 * @note Interface's constructor and destructor are only called by
2079 * type counterparts. Unlike setup and flush, they are not
2080 * guaranteed to be called.
2081 * @note use the same name pointer on queries to speed up the lookups!
2082 * @note a runtime check will enforce just types with ABI version
2083 * #EINA_MODEL_INTERFACE_VERSION are used by comparing with the
2084 * @c version member.
2085 *
2086 * @since 1.2
2087 */
2088struct _Eina_Model_Interface
2089{
2090 unsigned int version; /**< must be #EINA_MODEL_INTERFACE_VERSION */
2091 unsigned int private_size; /**< used to allocate interface private data */
2092 unsigned int interface_size; /**< used to know sizeof(Eina_Model_Interface) or subtypes (which may be bigger, by including Eina_Model_Interface as header */
2093 const char *name; /**< name for debug and introspection */
2094 const Eina_Model_Interface **interfaces; /**< null terminated array of parent interfaces */
2095 const Eina_Model_Event_Description *events; /**< null terminated array of events */
2096 Eina_Bool (*setup)(Eina_Model *model); /**< setup interface private data, do @b not call parent interface setup! */
2097 Eina_Bool (*flush)(Eina_Model *model); /**< flush interface private data, do @b not call parent interface flush! */
2098 Eina_Bool (*constructor)(Eina_Model *model); /**< construct interface instance, setup was already called. Should call parent's constructor if needed */
2099 Eina_Bool (*destructor)(Eina_Model *model); /**< destruct interface instance, flush will be called after it. Should call parent's destructor if needed. Release reference to other models here. */
2100 Eina_Bool (*copy)(const Eina_Model *src, Eina_Model *dst); /**< copy interface private data, do @b not call parent interface copy! */
2101 Eina_Bool (*deep_copy)(const Eina_Model *src, Eina_Model *dst); /**< deep copy interface private data, do @b not call parent interface deep copy! */
2102 void *__extension_ptr0; /**< not to be used @internal */
2103 void *__extension_ptr1; /**< not to be used @internal */
2104 void *__extension_ptr2; /**< not to be used @internal */
2105 void *__extension_ptr3; /**< not to be used @internal */
2106};
2107
2108#define EINA_MODEL_INTERFACE_INIT(name, iface, private_type, parent, events) \
2109 {EINA_MODEL_INTERFACE_VERSION, \
2110 sizeof(private_type), \
2111 sizeof(iface), \
2112 name, \
2113 parent, \
2114 events, \
2115 NULL, \
2116 NULL, \
2117 NULL, \
2118 NULL, \
2119 NULL, \
2120 NULL, \
2121 NULL, \
2122 NULL, \
2123 NULL, \
2124 NULL \
2125 }
2126
2127#define EINA_MODEL_INTERFACE_INIT_NOPRIVATE(name, iface, parent, events) \
2128 {EINA_MODEL_INTERFACE_VERSION, \
2129 0, \
2130 sizeof(iface), \
2131 name, \
2132 parent, \
2133 events, \
2134 NULL, \
2135 NULL, \
2136 NULL, \
2137 NULL, \
2138 NULL, \
2139 NULL, \
2140 NULL, \
2141 NULL, \
2142 NULL, \
2143 NULL \
2144 }
2145
2146#define EINA_MODEL_INTERFACE_INIT_NULL \
2147 {0, \
2148 0, \
2149 0, \
2150 NULL, \
2151 NULL, \
2152 NULL, \
2153 NULL, \
2154 NULL, \
2155 NULL, \
2156 NULL, \
2157 NULL, \
2158 NULL, \
2159 NULL, \
2160 NULL, \
2161 NULL, \
2162 NULL \
2163 }
2164
2165/**
2166 * @brief Calls the constructor of @a iface on @a model.
2167 * @param iface The interface whose constructor will be called.
2168 * @param model The model instance.
2169 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2170 *
2171 * @warning If @a model doesn't implement @a iface does nothing and returns
2172 * EINA_FALSE.
2173 *
2174 * @see eina_model_new()
2175 * @see _Eina_Model_Interface
2176 * @since 1.2
2177 */
2178EAPI Eina_Bool eina_model_interface_constructor(const Eina_Model_Interface *iface,
2179 Eina_Model *model) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
2180/**
2181 * @brief Calls the destructor of @a iface on @a model.
2182 * @param iface The interface whose destructor will be called.
2183 * @param model The model instance.
2184 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2185 *
2186 * @warning If @a model doesn't implement @a iface does nothing and returns
2187 * EINA_FALSE.
2188 *
2189 * @see eina_model_del()
2190 * @see _Eina_Model_Interface
2191 * @since 1.2
2192 */
2193EAPI Eina_Bool eina_model_interface_destructor(const Eina_Model_Interface *iface,
2194 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2195/**
2196 * @brief Calls the copy method of @a iface on @a model.
2197 * @param iface The interface whose copy method will be called.
2198 * @param src Pointer to the model to be copied.
2199 * @param dst Pointer to where copy will be put.
2200 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2201 *
2202 * @warning If @a model doesn't implement @a iface does nothing and returns
2203 * EINA_FALSE.
2204 *
2205 * @see eina_model_copy()
2206 * @see _Eina_Model_Interface
2207 * @since 1.2
2208 */
2209EAPI Eina_Bool eina_model_interface_copy(const Eina_Model_Interface *iface,
2210 const Eina_Model *src,
2211 Eina_Model *dst) EINA_ARG_NONNULL(1, 2, 3);
2212/**
2213 * @brief Calls the deep copy method of @a iface on @a model.
2214 * @param iface The interface whose deep copy method will be called.
2215 * @param src Pointer to the model to be copied.
2216 * @param dst Pointer to where copy will be put.
2217 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2218 *
2219 * @warning If @a model doesn't implement @a iface does nothing and returns
2220 * EINA_FALSE.
2221 *
2222 * @see eina_model_deep_copy()
2223 * @see _Eina_Model_Interface
2224 * @since 1.2
2225 */
2226EAPI Eina_Bool eina_model_interface_deep_copy(const Eina_Model_Interface *iface,
2227 const Eina_Model *src,
2228 Eina_Model *dst) EINA_ARG_NONNULL(1, 2, 3);
2229
2230#define eina_model_interface_method_resolve(iface, model, struct_type, method) eina_model_interface_method_offset_resolve((iface), (model), offsetof(struct_type, method))
2231
2232/**
2233 * @brief Gets the @a iface's method for @a model at @a offset.
2234 * @param iface The interface whose method offset resolve method will be called.
2235 * @param model The model instance.
2236 * @param offset The offset of the wanted method.
2237 * @return Address to resolved method, or @c NULL if method is not implemented.
2238 *
2239 * @see eina_model_method_offset_resolve()
2240 * @since 1.2
2241 */
2242EAPI const void *eina_model_interface_method_offset_resolve(const Eina_Model_Interface *iface, const Eina_Model *model, unsigned int offset) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2243
2244
2245/**
2246 * @struct _Eina_Model_Event_Description
2247 * Data Model Event Description.
2248 *
2249 * @see EINA_MODEL_EVENT_DESCRIPTION()
2250 * @see #EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
2251 * @since 1.2
2252 */
2253struct _Eina_Model_Event_Description
2254{
2255 const char *name; /**< name used for lookups */
2256 const char *type; /**< used for introspection purposes, documents what goes as callback event information (@c event_info) */
2257 const char *doc; /**< documentation for introspection purposes */
2258};
2259
2260/**
2261 * @def EINA_MODEL_EVENT_DESCRIPTION
2262 *
2263 * Helper to define Eina_Model_Event_Description fields.
2264 *
2265 * @since 1.2
2266 */
2267#define EINA_MODEL_EVENT_DESCRIPTION(name, type, doc) {name, type, doc}
2268
2269/**
2270 * @def EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
2271 *
2272 * Helper to define Eina_Model_Event_Description fields for sentinel (last
2273 * item).
2274 *
2275 * @since 1.2
2276 */
2277#define EINA_MODEL_EVENT_DESCRIPTION_SENTINEL {NULL, NULL, NULL}
2278
2279/**
2280 * @brief Check @a type is valid.
2281 * @param type The type to be checked.
2282 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2283 *
2284 * @since 1.2
2285 */
2286EAPI Eina_Bool eina_model_type_check(const Eina_Model_Type *type) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
2287/**
2288 * @brief Gets the name @a type.
2289 * @param type The type whose name is wanted.
2290 * @return Name of @a type.
2291 *
2292 * @since 1.2
2293 */
2294EAPI const char *eina_model_type_name_get(const Eina_Model_Type *type) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
2295/**
2296 * @brief Gets the parent type of @a type.
2297 * @param type The type whose parent is wanted.
2298 * @return Type of parent.
2299 *
2300 * @since 1.2
2301 */
2302EAPI const Eina_Model_Type *eina_model_type_parent_get(const Eina_Model_Type *type) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
2303
2304/**
2305 * @brief Setup the type to be a subclass of another parent type.
2306 * @param type type to be modified
2307 * @param parent type to be used as parent
2308 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2309 *
2310 * Although @a type is modified, the following properties are not
2311 * touched or they are actually used for validation:
2312 *
2313 * @li @c type->version must be #EINA_MODEL_TYPE_VERSION;
2314 * @li @c type->private_size unmodified, should be set to type's size;
2315 * @li @c type->name unmodified, should be set to type's name.
2316 *
2317 *
2318 * All other fields are modified as follow:
2319 *
2320 * @li @c type->type_size initiated to parent->type_size
2321 * @li @c type->interfaces = NULL;
2322 * @li @c type->events = NULL;
2323 * @li @c type->setup = NULL;
2324 * @li @c type->flush = NULL;
2325 * @li @c type->constructor = NULL;
2326 * @li @c type->destructor = NULL;
2327 * @li @c type->copy = NULL;
2328 * @li @c type->deep_copy = NULL;
2329 * @li @c type->compare = NULL;
2330 * @li @c type->load = NULL;
2331 * @li @c type->unload = NULL;
2332 * @li @c type->property_get = NULL;
2333 * @li @c type->property_set = NULL;
2334 * @li @c type->property_del = NULL;
2335 * @li @c type->properties_names_list_get = NULL;
2336 * @li @c type->child_count = NULL;
2337 * @li @c type->child_get = NULL;
2338 * @li @c type->child_set = NULL;
2339 * @li @c type->child_del = NULL;
2340 * @li @c type->child_insert_at = NULL;
2341 * @li @c type->child_find = NULL;
2342 * @li @c type->child_criteria_match = NULL;
2343 * @li @c type->child_sort = NULL;
2344 * @li @c type->child_iterator_get = NULL;
2345 * @li @c type->child_reversed_iterator_get = NULL;
2346 * @li @c type->child_sorted_iterator_get = NULL;
2347 * @li @c type->child_filtered_iterator_get = NULL;
2348 * @li @c type->to_string = NULL;
2349 *
2350 * If you have custom methods, overload them afterwards
2351 * eina_model_type_subclass_setup() returns with #EINA_TRUE.
2352 *
2353 * @since 1.2
2354 */
2355EAPI Eina_Bool eina_model_type_subclass_setup(Eina_Model_Type *type,
2356 const Eina_Model_Type *parent) EINA_ARG_NONNULL(1, 2);
2357
2358/**
2359 * @brief Checks if @a type is a subclass of(or the same as) @a self_or_parent.
2360 * @param type The type to be checked.
2361 * @param self_or_parent The type being checked for.
2362 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2363 *
2364 * @since 1.2
2365 */
2366EAPI Eina_Bool eina_model_type_subclass_check(const Eina_Model_Type *type,
2367 const Eina_Model_Type *self_or_parent) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2368
2369
2370/**
2371 * @brief Gets a interface with name @a name from @a type.
2372 * @param type The type instance.
2373 * @param name The name of the desired interface.
2374 * @return The interface implemented by @a type with name @a name, or null if
2375 * this type doesn't implement any interface with name @a name.
2376 *
2377 * @since 1.2
2378 */
2379EAPI const Eina_Model_Interface *eina_model_type_interface_get(const Eina_Model_Type *type,
2380 const char *name) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2381
2382/**
2383 * @brief Gets the private date of @a model for type @a type.
2384 * @param model The model instance.
2385 * @param type The type whose private data will be gotten.
2386 * @return Pointer to type's private data.
2387 *
2388 * @since 1.2
2389 */
2390EAPI void *eina_model_type_private_data_get(const Eina_Model *model,
2391 const Eina_Model_Type *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2392
2393/**
2394 * @brief Checks if @a iface is a valid interface.
2395 * @param iface The interface instance.
2396 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2397 *
2398 * @since 1.2
2399 */
2400EAPI Eina_Bool eina_model_interface_check(const Eina_Model_Interface *iface) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
2401
2402/**
2403 * @brief Gets the private date of @a model for interface @a iface.
2404 * @param model The model instance.
2405 * @param iface The interface whose private data will be gotten.
2406 * @return Pointer to interface's private data.
2407 *
2408 * @since 1.2
2409 */
2410EAPI void *eina_model_interface_private_data_get(const Eina_Model *model,
2411 const Eina_Model_Interface *iface) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2412
2413/**
2414 * @def EINA_MODEL_INTERFACE_PROPERTIES_VERSION
2415 * Current API version, used to validate #_Eina_Model_Interface_Properties.
2416 */
2417#define EINA_MODEL_INTERFACE_PROPERTIES_VERSION (1)
2418
2419/**
2420 * @typedef Eina_Model_Interface_Properties
2421 * Interface to manage model's properties.
2422 *
2423 * This extends #Eina_Model_Interface as expected by interface name
2424 * #EINA_MODEL_INTERFACE_NAME_PROPERTIES.
2425 *
2426 * This interface is meant to help managing properties of a model, it
2427 * is used by #EINA_MODEL_TYPE_MIXIN in order to configure methods for
2428 * children independently from properties.
2429 *
2430 * @see #_Eina_Model_Interface_Properties explains fields.
2431 * @since 1.2
2432 */
2433typedef struct _Eina_Model_Interface_Properties Eina_Model_Interface_Properties;
2434
2435/**
2436 * @struct _Eina_Model_Interface_Properties
2437 * Interface to manage model's properties.
2438 *
2439 * This extends #Eina_Model_Interface as expected by interface name
2440 * #EINA_MODEL_INTERFACE_NAME_PROPERTIES.
2441 *
2442 * This interface is meant to help managing properties of a model, it
2443 * is used by #EINA_MODEL_TYPE_MIXIN in order to configure methods for
2444 * children independently from properties.
2445 *
2446 * @since 1.2
2447 */
2448struct _Eina_Model_Interface_Properties
2449{
2450 Eina_Model_Interface base; /**< common interface methods */
2451 unsigned int version; /**< must be #EINA_MODEL_INTERFACE_PROPERTIES_VERSION */
2452 Eina_Bool (*compare)(const Eina_Model *a, const Eina_Model *b, int *cmp); /**< How to compare properties of this model */
2453 Eina_Bool (*load)(Eina_Model *model); /**< How to load properties of this model */
2454 Eina_Bool (*unload)(Eina_Model *model); /**< How to unload properties of this model */
2455 Eina_Bool (*get)(const Eina_Model *model, const char *name, Eina_Value *value); /**< Retrieve a property of this model given its name. The value will be returned as a copy and must be flushed with eina_value_flush(). The previous contents of value is ignored. */
2456 Eina_Bool (*set)(Eina_Model *model, const char *name, const Eina_Value *value); /**< Set a property of this model given its name. The value is assumed to be valied and is copied internally, thus it can be safely cleared with eina_value_flush() after this function returns. */
2457 Eina_Bool (*del)(Eina_Model *model, const char *name); /**< Delete a property given its name */
2458 Eina_List *(*names_list_get)(const Eina_Model *model); /**< List of stringshare with known property names */
2459};
2460
2461/**
2462 * @brief Compares properties using @a iface's comparing function.
2463 *
2464 * @param[in] iface The interface used to compare the properties.
2465 * @param[in] a The first model whose properties will be compared.
2466 * @param[in] b The second model whose properties will be compared.
2467 * @param[out] cmp A pointer to an integer which will contain the result of the
2468 * comparison.
2469 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2470 *
2471 * @warning If either model doesn't implement @a iface will do nothing and
2472 * return EINA_FALSE.
2473 *
2474 * @see eina_model_compare()
2475 * @since 1.2
2476 */
2477EAPI Eina_Bool eina_model_interface_properties_compare(const Eina_Model_Interface *iface,
2478 const Eina_Model *a,
2479 const Eina_Model *b,
2480 int *cmp) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT;
2481
2482/**
2483 * @brief Loads properties using @a iface's loading function.
2484 * @param iface The properties interface whose load method will be called.
2485 * @param model The model instance.
2486 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2487 *
2488 * @warning If either model doesn't implement @a iface will do nothing and
2489 * return EINA_FALSE.
2490 *
2491 * @see eina_model_load()
2492 * @since 1.2
2493 */
2494EAPI Eina_Bool eina_model_interface_properties_load(const Eina_Model_Interface *iface,
2495 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2496/**
2497 * @brief Unloads properties using @a iface's unloading function.
2498 * @param iface The properties interface whose unload method will be called.
2499 * @param model The model instance.
2500 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2501 *
2502 * @warning If either model doesn't implement @a iface will do nothing and
2503 * return EINA_FALSE.
2504 *
2505 * @see eina_model_unload()
2506 * @since 1.2
2507 */
2508EAPI Eina_Bool eina_model_interface_properties_unload(const Eina_Model_Interface *iface,
2509 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2510/**
2511 * @brief Gets property named @a name using @a iface's function to get properties.
2512 * @param iface The properties interface whose property get method will be called.
2513 * @param model The model instance.
2514 * @param name The name of the property to get.
2515 * @param value Pointer to where value will be stored.
2516 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2517 *
2518 * @warning If either model doesn't implement @a iface will do nothing and
2519 * return EINA_FALSE.
2520 *
2521 * @see eina_model_property_get()
2522 * @since 1.2
2523 */
2524EAPI Eina_Bool eina_model_interface_properties_get(const Eina_Model_Interface *iface,
2525 const Eina_Model *model,
2526 const char *name,
2527 Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3, 4);
2528/**
2529 * @brief Sets property named @a name using @a iface's function to set properties.
2530 * @param iface The properties interface whose property set method will be called.
2531 * @param model The model instance.
2532 * @param name The name of the property to set.
2533 * @param value The value to be set.
2534 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2535 *
2536 * @warning If either model doesn't implement @a iface will do nothing and
2537 * return EINA_FALSE.
2538 *
2539 * @see eina_model_property_set()
2540 * @since 1.2
2541 */
2542EAPI Eina_Bool eina_model_interface_properties_set(const Eina_Model_Interface *iface,
2543 Eina_Model *model,
2544 const char *name,
2545 const Eina_Value *value) EINA_ARG_NONNULL(1, 2, 3, 4);
2546/**
2547 * @brief Deletes property named @a name using @a iface's function to delete properties.
2548 * @param iface The properties interface whose property delete method will be called.
2549 * @param model The model instance.
2550 * @param name The name of the property to delete.
2551 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2552 *
2553 * @warning If either model doesn't implement @a iface will do nothing and
2554 * return EINA_FALSE.
2555 *
2556 * @see eina_model_property_del()
2557 * @since 1.2
2558 */
2559EAPI Eina_Bool eina_model_interface_properties_del(const Eina_Model_Interface *iface,
2560 Eina_Model *model,
2561 const char *name) EINA_ARG_NONNULL(1, 2, 3);
2562/**
2563 * @brief Gets properties name list using @a iface's function to get properties
2564 * name list.
2565 * @param iface The properties interface whose property name list get method
2566 * will be called.
2567 * @param model The model instance.
2568 * @return #Eina_List of properties' names.
2569 *
2570 * @warning If either model doesn't implement @a iface will do nothing and
2571 * return EINA_FALSE.
2572 *
2573 * @see eina_model_properties_names_list_get()
2574 * @since 1.2
2575 */
2576EAPI Eina_List *eina_model_interface_properties_names_list_get(const Eina_Model_Interface *iface,
2577 const Eina_Model *model) EINA_ARG_NONNULL(1, 2); /**< list of stringshare */
2578
2579/**
2580 * @typedef Eina_Model_Interface_Children
2581 * Interface to manage model's children.
2582 *
2583 * This extends #Eina_Model_Interface as expected by interface name
2584 * #EINA_MODEL_INTERFACE_NAME_CHILDREN.
2585 *
2586 * This interface is meant to help managing properties of a model, it
2587 * is used by #EINA_MODEL_TYPE_MIXIN in order to configure methods for
2588 * children independently from properties.
2589 *
2590 * @see #_Eina_Model_Interface_Children explains fields.
2591 * @since 1.2
2592 */
2593typedef struct _Eina_Model_Interface_Children Eina_Model_Interface_Children;
2594
2595/**
2596 * @def EINA_MODEL_INTERFACE_CHILDREN_VERSION
2597 * Current API version, used to validate #_Eina_Model_Interface_Children.
2598 */
2599#define EINA_MODEL_INTERFACE_CHILDREN_VERSION (1)
2600
2601/**
2602 * @struct _Eina_Model_Interface_Children
2603 * Interface to manage model's children.
2604 *
2605 * This extends #Eina_Model_Interface as expected by interface name
2606 * #EINA_MODEL_INTERFACE_NAME_CHILDREN.
2607 *
2608 * This interface is meant to help managing properties of a model, it
2609 * is used by #EINA_MODEL_TYPE_MIXIN in order to configure methods for
2610 * children independently from properties.
2611 *
2612 * @since 1.2
2613 */
2614struct _Eina_Model_Interface_Children
2615{
2616 Eina_Model_Interface base; /**< common interface methods */
2617 unsigned int version; /**< must be #EINA_MODEL_INTERFACE_CHILDREN_VERSION */
2618 Eina_Bool (*compare)(const Eina_Model *a, const Eina_Model *b, int *cmp); /**< How to compare children of this model */
2619 Eina_Bool (*load)(Eina_Model *model); /**< How to load children of this model */
2620 Eina_Bool (*unload)(Eina_Model *model); /**< How to unload children of this model */
2621 int (*count)(const Eina_Model *model); /**< How many children of this model */
2622 Eina_Model *(*get)(const Eina_Model *model, unsigned int position); /**< Retrieve a child of this model, returned child must have reference increased! */
2623 Eina_Bool (*set)(Eina_Model *model, unsigned int position, Eina_Model *child); /**< Set (replace) a child of this model, given child will have reference increased! */
2624 Eina_Bool (*del)(Eina_Model *model, unsigned int position); /**< Delete a child of this model. Existing child will have reference decreased! */
2625 Eina_Bool (*insert_at)(Eina_Model *model, unsigned int position, Eina_Model *child); /**< Insert a child into this model, given child will have reference increased! All elements towards the end of the internal list will be shifted to the end to make room for the new child. */
2626 void (*sort)(Eina_Model *model, Eina_Compare_Cb compare); /**< Reorder children to be sorted respecting comparison function @c compare() */
2627};
2628
2629/**
2630 * @brief Compares children using @a iface's comparing function.
2631 *
2632 * @param[in] iface The interface used to compare the properties.
2633 * @param[in] a The first model whose properties will be compared.
2634 * @param[in] b The second model whose properties will be compared.
2635 * @param[out] cmp A pointer to an integer which will contain the result of the
2636 * comparison.
2637 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2638 *
2639 * @warning If either model doesn't implement @a iface will do nothing and
2640 * return EINA_FALSE.
2641 *
2642 * @see eina_model_compare()
2643 * @since 1.2
2644 */
2645EAPI Eina_Bool eina_model_interface_children_compare(const Eina_Model_Interface *iface,
2646 const Eina_Model *a,
2647 const Eina_Model *b,
2648 int *cmp) EINA_ARG_NONNULL(1, 2, 3, 4) EINA_WARN_UNUSED_RESULT;
2649/**
2650 * @brief Loads children using @a iface's loading function.
2651 * @param iface The children interface whose load method will be called.
2652 * @param model The model instance.
2653 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2654 *
2655 * @warning If either model doesn't implement @a iface will do nothing and
2656 * return EINA_FALSE.
2657 *
2658 * @see eina_model_load()
2659 * @since 1.2
2660 */
2661EAPI Eina_Bool eina_model_interface_children_load(const Eina_Model_Interface *iface,
2662 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2663/**
2664 * @brief Unloads children using @a iface's unloading function.
2665 * @param iface The children interface whose unload method will be called.
2666 * @param model The model instance.
2667 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2668 *
2669 * @warning If either model doesn't implement @a iface will do nothing and
2670 * return EINA_FALSE.
2671 *
2672 * @see eina_model_unload()
2673 * @since 1.2
2674 */
2675EAPI Eina_Bool eina_model_interface_children_unload(const Eina_Model_Interface *iface,
2676 Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2677/**
2678 * @brief Count children using @a iface's counting function.
2679 * @param iface The children interface whose count method will be called.
2680 * @param model The model instance.
2681 * @return Number of children in @a model.
2682 *
2683 * @warning If either model doesn't implement @a iface will do nothing and
2684 * return -1.
2685 *
2686 * @see eina_model_child_count()
2687 * @since 1.2
2688 */
2689EAPI int eina_model_interface_children_count(const Eina_Model_Interface *iface,
2690 const Eina_Model *model) EINA_ARG_NONNULL(1, 2);
2691/**
2692 * @brief Get child using @a iface's function to get children.
2693 * @param iface The children interface whose get method will be called.
2694 * @param model The model instance.
2695 * @param position Position of child to be retrieved.
2696 * @return The requested child.
2697 *
2698 * @warning If either model doesn't implement @a iface will do nothing and
2699 * return -1.
2700 *
2701 * @see eina_model_child_get()
2702 * @since 1.2
2703 */
2704EAPI Eina_Model *eina_model_interface_children_get(const Eina_Model_Interface *iface,
2705 const Eina_Model *model,
2706 unsigned int position) EINA_ARG_NONNULL(1, 2);
2707/**
2708 * @brief Set child using @a iface's function to set children.
2709 * @param iface The children interface whose set method will be called.
2710 * @param model The model instance.
2711 * @param position Position of child to be set.
2712 * @param child Value(child) to be set.
2713 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2714 *
2715 * @warning If either model doesn't implement @a iface will do nothing and
2716 * return -1.
2717 *
2718 * @see eina_model_child_set()
2719 * @since 1.2
2720 */
2721EAPI Eina_Bool eina_model_interface_children_set(const Eina_Model_Interface *iface,
2722 Eina_Model *model,
2723 unsigned int position,
2724 Eina_Model *child) EINA_ARG_NONNULL(1, 2, 4);
2725/**
2726 * @brief Delete child using @a iface's function to delete children.
2727 * @param iface The children interface whose delete method will be called.
2728 * @param model The model instance.
2729 * @param position Position of child to be deleted.
2730 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2731 *
2732 * @warning If either model doesn't implement @a iface will do nothing and
2733 * return -1.
2734 *
2735 * @see eina_model_child_del()
2736 * @since 1.2
2737 */
2738EAPI Eina_Bool eina_model_interface_children_del(const Eina_Model_Interface *iface,
2739 Eina_Model *model,
2740 unsigned int position) EINA_ARG_NONNULL(1, 2);
2741/**
2742 * @brief Insert child using @a iface's function to insert children.
2743 * @param iface The children interface whose insert method will be called.
2744 * @param model The model instance.
2745 * @param position Position in which to insert @a child.
2746 * @param child Value(child) to be inserted.
2747 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2748 *
2749 * @warning If either model doesn't implement @a iface will do nothing and
2750 * return -1.
2751 *
2752 * @see eina_model_child_insert_at()
2753 * @since 1.2
2754 */
2755EAPI Eina_Bool eina_model_interface_children_insert_at(const Eina_Model_Interface *iface,
2756 Eina_Model *model,
2757 unsigned int position,
2758 Eina_Model *child) EINA_ARG_NONNULL(1, 2, 4);
2759/**
2760 * @brief Sort children using @a iface's function to sort children.
2761 * @param iface The children interface whose sort method will be called.
2762 * @param model The model instance.
2763 * @param compare Function used to compare children.
2764 *
2765 * @warning If either model doesn't implement @a iface will do nothing and
2766 * return -1.
2767 *
2768 * @see eina_model_child_sort().
2769 * @since 1.2
2770 */
2771EAPI void eina_model_interface_children_sort(const Eina_Model_Interface *iface,
2772 Eina_Model *model,
2773 Eina_Compare_Cb compare) EINA_ARG_NONNULL(1, 2, 3);
2774
2775
2776/**
2777 * @}
2778 */
2779
2780/**
2781 * @defgroup Eina_Model_Utils_Group Data Model Utilities
2782 *
2783 * Miscellaneous utilities to help usage or debug of @ref Eina_Model_Group.
2784 *
2785 * @{
2786 */
2787
2788/**
2789 * @brief Checks if @a model is an instance of @a type.
2790 * @param model The model instance.
2791 * @param type The type being checked for.
2792 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2793 *
2794 * @see eina_model_new()
2795 * @see _Eina_Model_Type
2796 * @since 1.2
2797 */
2798EAPI Eina_Bool eina_model_instance_check(const Eina_Model *model,
2799 const Eina_Model_Type *type) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2800
2801/**
2802 * @brief Checks if @a model implements @a iface.
2803 * @param model The model instance.
2804 * @param iface The interface being checked for.
2805 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2806 *
2807 * @see _Eina_Model_Interface
2808 * @since 1.2
2809 */
2810EAPI Eina_Bool eina_model_interface_implemented(const Eina_Model *model, const Eina_Model_Interface *iface) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_PURE;
2811
2812/**
2813 * @brief Returns the number of references to @a model.
2814 * @param model The model to query number of references.
2815 * @return Number of references to model.
2816 *
2817 * @see eina_model_ref()
2818 * @see eina_model_unref()
2819 * @see eina_model_xref()
2820 * @see eina_model_xunref()
2821 * @see eina_model_xrefs_get()
2822 * @since 1.2
2823 */
2824EAPI int eina_model_refcount(const Eina_Model *model) EINA_ARG_NONNULL(1);
2825
2826/**
2827 * @typedef Eina_Model_XRef
2828 * Extended reference to model.
2829 *
2830 * This is returned by eina_model_xrefs_get() and should never be
2831 * modified. It is managed by eina_model_xref() and
2832 * eina_model_xunref() when @c EINA_MODEL_DEBUG is set to "1" or
2833 * "backtrace".
2834 *
2835 * @see #_Eina_Model_XRef explains fields.
2836 * @since 1.2
2837 */
2838typedef struct _Eina_Model_XRef Eina_Model_XRef;
2839
2840/**
2841 * @struct _Eina_Model_XRef
2842 * Extended reference to model.
2843 *
2844 * This is returned by eina_model_xrefs_get() and should never be
2845 * modified. It is managed by eina_model_xref() and
2846 * eina_model_xunref() when @c EINA_MODEL_DEBUG is set to "1" or
2847 * "backtrace".
2848 *
2849 * @see eina_model_xrefs_get()
2850 * @see eina_models_usage_dump()
2851 * @since 1.2
2852 */
2853struct _Eina_Model_XRef
2854{
2855 EINA_INLIST;
2856 const void *id; /**< as given to eina_model_xref() */
2857 struct {
2858 const void * const *symbols; /**< only if @c EINA_MODEL_DEBUG=backtrace is set, otherwise is @c NULL */
2859 unsigned int count; /**< only if @c EINA_MODEL_DEBUG=backtrace is set, otherwise is 0 */
2860 } backtrace;
2861 char label[]; /**< Any given label given to eina_model_xref(). */
2862};
2863
2864/**
2865 * @brief Returns the current references of this model.
2866 * @param model The model to query references.
2867 * @return List of reference holders as Eina_Model_XRef. This is the internal
2868 * list for speed purposes, do not modify or free it in anyway!
2869 *
2870 * @note This list only exist if environment variable
2871 * @c EINA_MODEL_DEBUG is set to "1" or "backtrace".
2872 *
2873 * @note The backtrace information is only available if environment
2874 * variable @c EINA_MODEL_DEBUG=backtrace is set.
2875 * @since 1.2
2876 */
2877EAPI const Eina_Inlist *eina_model_xrefs_get(const Eina_Model *model) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
2878
2879/**
2880 * @brief Dump usage of all existing modules.
2881 * @since 1.2
2882 */
2883EAPI void eina_models_usage_dump(void);
2884
2885/**
2886 * @brief Return a list of all live models.
2887 * @return a newly allocated list of Eina_Model. Free using
2888 * eina_models_list_free()
2889 *
2890 * @note this is meant to debug purposes, do not modify the models in
2891 * any way!
2892 *
2893 * @note due performance reasons, this is only @b enabled when
2894 * @c EINA_MODEL_DEBUG is set to "1" or "backtrace".
2895 *
2896 * @since 1.2
2897 */
2898EAPI Eina_List *eina_models_list_get(void);
2899
2900/**
2901 * @brief Release list returned by eina_models_list_get()
2902 * @param list the list to release.
2903 */
2904EAPI void eina_models_list_free(Eina_List *list);
2905
2906/**
2907 * @}
2908 */
2909
2910/**
2911 * @var EINA_MODEL_INTERFACE_CHILDREN_INARRAY
2912 *
2913 * Implements #Eina_Model_Interface_Children
2914 * (#EINA_MODEL_INTERFACE_NAME_CHILDREN) using #Eina_Inarray. It
2915 * should be efficient in space and time for most operations.
2916 *
2917 * @note it may become slow if eina_model_child_insert_at() is used at(or near)
2918 * the beginning of the array as the members from that position
2919 * to the end must be memmove()d.
2920 *
2921 * @since 1.2
2922 */
2923EAPI extern const Eina_Model_Interface *EINA_MODEL_INTERFACE_CHILDREN_INARRAY;
2924
2925
2926/**
2927 * @var EINA_MODEL_TYPE_BASE
2928 * Base type for all eina model types.
2929 *
2930 * @since 1.2
2931 */
2932EAPI extern const Eina_Model_Type *EINA_MODEL_TYPE_BASE;
2933
2934/**
2935 * @var EINA_MODEL_TYPE_MIXIN
2936 *
2937 * Type that uses #EINA_MODEL_INTERFACE_NAME_PROPERTIES and
2938 * #EINA_MODEL_INTERFACE_NAME_CHILDREN to manage the model.
2939 *
2940 * This is an abstract type, it does not work out of the box as one
2941 * needs to subclass it and define the interface implementations for
2942 * properties and children, as done by #EINA_MODEL_TYPE_GENERIC
2943 *
2944 * @see EINA_MODEL_TYPE_GENERIC
2945 *
2946 * @since 1.2
2947 */
2948EAPI extern const Eina_Model_Type *EINA_MODEL_TYPE_MIXIN;
2949
2950/**
2951 * @var EINA_MODEL_TYPE_GENERIC
2952 *
2953 * Subclass of #EINA_MODEL_TYPE_MIXIN that uses
2954 * #EINA_MODEL_INTERFACE_PROPERTIES_HASH and
2955 * #EINA_MODEL_INTERFACE_CHILDREN_INARRAY.
2956 *
2957 * Should be generic enough to hold lots of items with runtime
2958 * configurable properties of any type.
2959 *
2960 * @see #EINA_MODEL_TYPE_STRUCT
2961 *
2962 * @since 1.2
2963 */
2964EAPI extern const Eina_Model_Type *EINA_MODEL_TYPE_GENERIC;
2965
2966/**
2967 * @var EINA_MODEL_TYPE_STRUCT
2968 *
2969 * Subclass of #EINA_MODEL_TYPE_MIXIN that uses
2970 * #EINA_MODEL_INTERFACE_PROPERTIES_STRUCT and
2971 * #EINA_MODEL_INTERFACE_CHILDREN_INARRAY.
2972 *
2973 * Should be struct enough to hold lots of items with compile time
2974 * configurable properties of any type.
2975 *
2976 * @see #EINA_MODEL_TYPE_GENERIC
2977 *
2978 * @since 1.2
2979 */
2980EAPI extern const Eina_Model_Type *EINA_MODEL_TYPE_STRUCT;
2981
2982/**
2983 * @brief Create and setup an instance of #EINA_MODEL_TYPE_STRUCT.
2984 * @param desc struct description to use for properties.
2985 * @return newly created and set model, or @c NULL on errors.
2986 *
2987 * @see eina_model_type_struct_new()
2988 * @since 1.2
2989 */
2990EAPI Eina_Model *eina_model_struct_new(const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
2991
2992/**
2993 * @brief Create and setup an instance of type subclass of #EINA_MODEL_TYPE_STRUCT.
2994 * @param type a type which is subclass of #EINA_MODEL_TYPE_STRUCT.
2995 * @param desc struct description to use for properties.
2996 * @return newly created and set model, or @c NULL on errors.
2997 *
2998 * @see eina_model_struct_new()
2999 * @since 1.2
3000 */
3001EAPI Eina_Model *eina_model_type_struct_new(const Eina_Model_Type *type,
3002 const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
3003
3004
3005/**
3006 * @brief Configure the internal properties of model implementing #EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.
3007 * @param model The model instance to configure.
3008 * @param desc The structure description to use.
3009 * @param memory If not @c NULL, will be copied by model.
3010 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
3011 *
3012 * This will setup the internal pointers so that the given @a desc is
3013 * used to manage the properties of this struct.
3014 *
3015 * If a given memory is provided, it will be copied (including
3016 * members) and no references are taken after this function returns.
3017 *
3018 * @see #EINA_VALUE_TYPE_STRUCT
3019 *
3020 * @since 1.2
3021 */
3022EAPI Eina_Bool eina_model_struct_set(Eina_Model *model,
3023 const Eina_Value_Struct_Desc *desc,
3024 void *memory) EINA_ARG_NONNULL(1, 2);
3025/**
3026 * @brief Get the internal properties of model implementing #EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.
3027 * @param model the model instance.
3028 * @param p_desc where to return the structure description in use.
3029 * @param p_memory where to return the structure memory in use.
3030 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
3031 *
3032 * No copies are made! The memory and description may be invalidaded
3033 * by calls to eina_model_struct_set() or eina_model_del().
3034 *
3035 * @since 1.2
3036 */
3037EAPI Eina_Bool eina_model_struct_get(const Eina_Model *model,
3038 const Eina_Value_Struct_Desc **p_desc,
3039 void **p_memory) EINA_ARG_NONNULL(1, 2);
3040
3041/**
3042 * @var EINA_MODEL_INTERFACE_NAME_PROPERTIES
3043 *
3044 * Interface that uses #Eina_Model_Interface_Properties as
3045 * #Eina_Model_Interface and can manage the model properties.
3046 *
3047 * @since 1.2
3048 */
3049EAPI extern const char *EINA_MODEL_INTERFACE_NAME_PROPERTIES;
3050
3051/**
3052 * @var EINA_MODEL_INTERFACE_PROPERTIES_HASH
3053 *
3054 * Implements #Eina_Model_Interface_Properties
3055 * (#EINA_MODEL_INTERFACE_NAME_PROPERTIES) using #Eina_Hash.
3056 *
3057 * @note This function is generic but uses too much space given the
3058 * hash data type. For huge number of elements it's better to
3059 * use custom implementation instead.
3060 *
3061 * @see EINA_MODEL_INTERFACE_PROPERTIES_STRUCT
3062 *
3063 * @since 1.2
3064 */
3065EAPI extern const Eina_Model_Interface *EINA_MODEL_INTERFACE_PROPERTIES_HASH;
3066
3067/**
3068 * @var EINA_MODEL_INTERFACE_PROPERTIES_STRUCT
3069 *
3070 * Implements #Eina_Model_Interface_Properties
3071 * (#EINA_MODEL_INTERFACE_NAME_PROPERTIES) using #Eina_Value_Struct.
3072 *
3073 * The interface private data is #Eina_Value of type
3074 * #EINA_VALUE_TYPE_STRUCT. Properties will be accessed using
3075 * Eina_Value_Struct::desc information that can be set by types such
3076 * as #EINA_MODEL_TYPE_STRUCT
3077 *
3078 * @see EINA_MODEL_INTERFACE_PROPERTIES_HASH
3079 *
3080 * @since 1.2
3081 */
3082EAPI extern const Eina_Model_Interface *EINA_MODEL_INTERFACE_PROPERTIES_STRUCT;
3083
3084/**
3085 * @var EINA_MODEL_INTERFACE_NAME_CHILDREN
3086 *
3087 * Interface that uses #Eina_Model_Interface_Children as
3088 * #Eina_Model_Interface and can manage the model children.
3089 *
3090 * @since 1.2
3091 */
3092EAPI extern const char *EINA_MODEL_INTERFACE_NAME_CHILDREN;
3093
3094/**
3095 * @}
3096 */
3097
3098/**
3099 * @}
3100 */
3101
3102/**
3103 * @}
3104 */
3105#endif
diff --git a/libraries/eina/src/include/eina_module.h b/libraries/eina/src/include/eina_module.h
deleted file mode 100644
index 178fa9a..0000000
--- a/libraries/eina/src/include/eina_module.h
+++ /dev/null
@@ -1,350 +0,0 @@
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
70/**
71 * @typedef Eina_Module_Cb
72 * Dynamic module loader callback.
73 */
74typedef Eina_Bool (*Eina_Module_Cb)(Eina_Module *m, void *data);
75
76/**
77 * @typedef Eina_Module_Init
78 * If a function with such signature is exported by module as
79 * __eina_module_init, it will be called on the first load after
80 * dlopen() and if #EINA_FALSE is returned, load will fail, #EINA_TRUE
81 * means the module was successfully initialized.
82 * @see Eina_Module_Shutdown
83 */
84typedef Eina_Bool (*Eina_Module_Init)(void);
85
86/**
87 * @typedef Eina_Module_Shutdown
88 * If a function with such signature is exported by module as
89 * __eina_module_shutdown, it will be called before calling dlclose()
90 * @see Eina_Module_Init
91 */
92typedef void (*Eina_Module_Shutdown)(void);
93
94/**
95 * @def EINA_MODULE_INIT
96 * declares the given function as the module initializer (__eina_module_init).
97 * It must be of signature #Eina_Module_Init
98 */
99#define EINA_MODULE_INIT(f) EAPI Eina_Module_Init __eina_module_init = &f
100
101/**
102 * @def EINA_MODULE_SHUTDOWN
103 * declares the given function as the module shutdownializer
104 * (__eina_module_shutdown). It must be of signature
105 * #Eina_Module_Shutdown
106 */
107#define EINA_MODULE_SHUTDOWN(f) EAPI Eina_Module_Shutdown __eina_module_shutdown = &f
108
109/**
110 * @var EINA_ERROR_WRONG_MODULE
111 * Error identifier corresponding to a wrong module.
112 */
113extern EAPI Eina_Error EINA_ERROR_WRONG_MODULE;
114
115/**
116 * @var EINA_ERROR_MODULE_INIT_FAILED
117 * Error identifier corresponding to a failure during the initialisation of a module.
118 */
119extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
120
121/**
122 * @brief Return a new module.
123 *
124 * @param file The name of the file module to load.
125 *
126 * This function returns a new module. If @p file is @c NULL, the
127 * function returns @c NULL, otherwise, it allocates an Eina_Module,
128 * stores a duplicate string of @p file, sets its reference to @c 0
129 * and its handle to @c NULL.
130 *
131 * When the new module is not needed anymore, use eina_module_free()
132 * to free the allocated memory.
133 *
134 * @see eina_module_load
135 */
136EAPI Eina_Module *
137 eina_module_new(const char *file) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
138
139/**
140 * @brief Delete a module.
141 *
142 * @param module The module to delete.
143 * @return EINA_TRUE on success, EINA_FALSE otherwise.
144 *
145 * This function calls eina_module_unload() if @p module has been previously
146 * loaded and frees the allocated memory. On success this function
147 * returns EINA_TRUE and EINA_FALSE otherwise. If @p module is @c NULL, the
148 * function returns immediately.
149 */
150EAPI Eina_Bool
151 eina_module_free(Eina_Module *module) EINA_ARG_NONNULL(1);
152
153/**
154 * @brief Load a module.
155 *
156 * @param module The module to load.
157 * @return EINA_TRUE on success, EINA_FALSE otherwise.
158 *
159 * This function load the shared file object passed in
160 * eina_module_new(). If it is a internal Eina module (like the
161 * mempools), it also initialize it. It the shared file object can not
162 * be loaded, the error #EINA_ERROR_WRONG_MODULE is set and
163 * #EINA_FALSE is returned. If it is a internal Eina module and the
164 * module can not be initialized, the error
165 * #EINA_ERROR_MODULE_INIT_FAILED is set and #EINA_FALSE is
166 * returned. If the module has already been loaded, it's refeence
167 * counter is increased by one and #EINA_TRUE is returned. If @p module is
168 * @c NULL, the function returns immediately #EINA_FALSE.
169 *
170 * When the symbols of the shared file objetcts are not needed
171 * anymore, call eina_module_unload() to unload the module.
172 */
173EAPI Eina_Bool
174 eina_module_load(Eina_Module *module) EINA_ARG_NONNULL(1);
175
176/**
177 * @brief Unload a module.
178 *
179 * @param module The module to load.
180 * @return EINA_TRUE on success, EINA_FALSE otherwise.
181 *
182 * This function unload the module @p module that has been previously
183 * loaded by eina_module_load(). If the reference counter of @p module is
184 * strictly greater than @c 1, #EINA_FALSE is returned. Otherwise, the
185 * shared object file is closed and if it is a internal Eina module, it
186 * is shutted down just before. In that case, #EINA_TRUE is
187 * returned. In all case, the reference counter is decreased. If @p module
188 * is @c NULL, the function returns immediately #EINA_FALSE.
189 */
190EAPI Eina_Bool
191 eina_module_unload(Eina_Module *module) EINA_ARG_NONNULL(1);
192
193/**
194 * @brief Retrive the data associated to a symbol.
195 *
196 * @param module The module.
197 * @param symbol The symbol.
198 * @return The data associated to the symbol, or @c NULL on failure.
199 *
200 * This function returns the data associated to @p symbol of @p module. @p
201 * module must have been loaded before with eina_module_load(). If @p module
202 * is @c NULL, or if it has not been correctly loaded before, the
203 * function returns immediately @c NULL.
204 */
205EAPI void *
206 eina_module_symbol_get(const Eina_Module *module, const char *symbol) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
207
208/**
209 * @brief Return the file name associated to the module.
210 *
211 * @param module The module.
212 * @return The file name.
213 *
214 * This function returns the file name passed in eina_module_new(). If
215 * @p module is @c NULL, the function returns immediately @c NULL. The
216 * returned value must no be freed.
217 */
218EAPI const char *
219 eina_module_file_get(const Eina_Module *module) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
220
221
222/**
223 * @brief Return the path built from the location of a library and a
224 * given sub directory.
225 *
226 * @param symbol The symbol to search for.
227 * @param sub_dir The subdirectory to append.
228 * @return The built path on success, @c NULL otherwise.
229 *
230 * This function returns the path built by concatenating the path of
231 * the library containing the symbol @p symbol and @p sub_dir. @p sub_dir
232 * can be @c NULL. The returned path must be freed when not used
233 * anymore. If the symbol is not found, or dl_addr() is not supported,
234 * or allocation fails, this function returns @c NULL.
235 */
236EAPI char *
237 eina_module_symbol_path_get(const void *symbol, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
238
239/**
240 * @brief Return the path built from the value of an environment varialbe and a
241 * given sub directory.
242 *
243 * @param env The environment variable to expand.
244 * @param sub_dir The subdirectory to append.
245 * @return The built path on success, @c NULL otherwise.
246 *
247 * This function returns the path built by concatenating the value of
248 * the environment variable named @p env and @p sub_dir. @p sub_dir
249 * can be @c NULL. The returned path must be freed when not used
250 * anymore. If the symbol is not found, or @p env does not exist, or
251 * allocation fails, this function returns @c NULL.
252 */
253EAPI char *
254 eina_module_environment_path_get(const char *env, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
255
256
257/**
258 * @brief Get an array of modules found on the directory path matching an arch type.
259 *
260 * @param array The array that stores the list of the modules.
261 * @param path The directory's path to search for modules.
262 * @param arch The architecture string.
263 * @return The array of modules found in @p path matching @p arch.
264 *
265 * This function adds to @p array the module names found in @p path
266 * which match the cpu architecture @p arch. If @p path or @p arch is
267 * @c NULL, the function returns immediately @p array. @p array can be
268 * @c NULL. In that case, it is created with 4 elements.
269 */
270EAPI Eina_Array *
271 eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch);
272
273/**
274 * @brief Get a list of modules found on the directory path.
275 *
276 * @param array The array that stores the list of the modules.
277 * @param path The directory's path to search for modules.
278 * @param recursive Iterate recursively on the path.
279 * @param cb Callback function to call on each module.
280 * @param data Data passed to the callback function.
281 * @return The array of modules found in @p path.
282 *
283 * This function adds to @p array the list of modules found in
284 * @p path. If @p recursive is #EINA_TRUE, then recursive search is
285 * done. The callback @p cb is called on each module found, and @p data
286 * is passed to @p cb. If @p path is @c NULL, the function returns
287 * immediately @p array. If the returned value of @p cb is 0, the
288 * module will not be added to the list, otherwise it will be added.
289 * @p array can be @c NULL. In that case, it is created with 4
290 * elements. @p cb can be @c NULL.
291 */
292EAPI Eina_Array *
293 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;
294
295/**
296 * @brief Load every module on the list of modules.
297 *
298 * @param array The array of modules to load.
299 *
300 * This function calls eina_module_load() on each element found in
301 * @p array. If @p array is @c NULL, this function does nothing.
302 */
303EAPI void
304 eina_module_list_load(Eina_Array *array) EINA_ARG_NONNULL(1);
305
306/**
307 * @brief Unload every module on the list of modules.
308 *
309 * @param array The array of modules to unload.
310 *
311 * This function calls eina_module_unload() on each element found in
312 * @p array. If @p array is @c NULL, this function does nothing.
313 */
314EAPI void
315 eina_module_list_unload(Eina_Array *array) EINA_ARG_NONNULL(1);
316
317/**
318 * @p Free every module on the list of modules.
319 *
320 * @param array The array of modules to free.
321 *
322 * This function calls eina_module_free() on each element found in
323 * @p array. If @p array is @c NULL, this function does nothing.
324 */
325EAPI void
326 eina_module_list_free(Eina_Array *array) EINA_ARG_NONNULL(1);
327
328/**
329 * @brief Find an module in array.
330 *
331 * @param array The array to find the module.
332 * @param module The name of module to be searched.
333 * @return The module to find on success, @c NULL otherwise.
334 *
335 * This function finds an @p module in @p array.
336 * If the element is found the function returns the module, else
337 * @c NULL is returned.
338 */
339EAPI Eina_Module *
340 eina_module_find(const Eina_Array *array, const char *module) EINA_ARG_NONNULL(1, 2);
341
342/**
343 * @}
344 */
345
346/**
347 * @}
348 */
349
350#endif /*EINA_MODULE_H_*/
diff --git a/libraries/eina/src/include/eina_prefix.h b/libraries/eina/src/include/eina_prefix.h
deleted file mode 100644
index b59080b..0000000
--- a/libraries/eina/src/include/eina_prefix.h
+++ /dev/null
@@ -1,228 +0,0 @@
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
deleted file mode 100644
index 2638d8b..0000000
--- a/libraries/eina/src/include/eina_quadtree.h
+++ /dev/null
@@ -1,53 +0,0 @@
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
deleted file mode 100644
index 8e5b730..0000000
--- a/libraries/eina/src/include/eina_rbtree.h
+++ /dev/null
@@ -1,271 +0,0 @@
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
deleted file mode 100644
index 57e562c..0000000
--- a/libraries/eina/src/include/eina_rectangle.h
+++ /dev/null
@@ -1,239 +0,0 @@
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
deleted file mode 100644
index 6650b01..0000000
--- a/libraries/eina/src/include/eina_refcount.h
+++ /dev/null
@@ -1,76 +0,0 @@
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
deleted file mode 100644
index 4751e5f..0000000
--- a/libraries/eina/src/include/eina_safety_checks.h
+++ /dev/null
@@ -1,254 +0,0 @@
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
deleted file mode 100644
index 43f32b9..0000000
--- a/libraries/eina/src/include/eina_sched.h
+++ /dev/null
@@ -1,39 +0,0 @@
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
deleted file mode 100644
index 78660ef..0000000
--- a/libraries/eina/src/include/eina_simple_xml_parser.h
+++ /dev/null
@@ -1,390 +0,0 @@
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 * @param buf the input string. May not contain \0 terminator.
168 * @param buflen the input string size.
169 * @return pointer to the start of attributes, it can be used
170 * to feed eina_simple_xml_attributes_parse(). NULL is returned
171 * if no attributes were found.
172 *
173 * The tag contents is returned by eina_simple_xml_parse() when
174 * type is #EINA_SIMPLE_XML_OPEN or #EINA_SIMPLE_XML_OPEN_EMPTY.
175 *
176 */
177EAPI const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen);
178
179/**
180 * Given a buffer with xml attributes, parse them to key=value pairs.
181 *
182 * @param buf the input string. May not contain \0 terminator.
183 * @param buflen the input string size.
184 * @param func what to call back while parse to do some action. The
185 * first parameter is the given user @a data, the second is the
186 * key (null-terminated) and the last is the value (null
187 * terminated). These strings should not be modified and
188 * reference is just valid until the function return.
189 * @param data data to pass to the callback function.
190 *
191 * @return EINA_TRUE on success or EINA_FALSE if it was aborted by user or
192 * parsing error.
193 */
194EAPI Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen,
195 Eina_Simple_XML_Attribute_Cb func, const void *data);
196
197/**
198 * Create (and append) new attribute to tag.
199 *
200 * @param parent if provided, will be set in the resulting structure
201 * as well as the attribute will be appended to attributes list.
202 * @param key null-terminated string. Must not be NULL.
203 * @param value null-terminated string. If NULL, the empty string will be used.
204 *
205 * @return newly allocated memory or NULL on error. This memory should be
206 * released with eina_simple_xml_attribute_free() or indirectly
207 * with eina_simple_xml_node_tag_free().
208 */
209EAPI Eina_Simple_XML_Attribute * eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value);
210
211/**
212 * Remove attribute from parent and delete it.
213 *
214 * @param attr attribute to release memory.
215 */
216EAPI void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr);
217
218
219/**
220 * Create new tag. If parent is provided, it is automatically appended.
221 *
222 * @param parent if provided, will be set in the resulting structure
223 * as well as the tag will be appended to children list.
224 * @param name null-terminated string. Must not be NULL.
225 *
226 * @return newly allocated memory or NULL on error. This memory should be
227 * released with eina_simple_xml_node_tag_free() or indirectly
228 * with eina_simple_xml_node_tag_free() of the parent.
229 */
230EAPI Eina_Simple_XML_Node_Tag * eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name);
231
232/**
233 * Remove tag from parent and delete it.
234 *
235 * @param tag to release memory.
236 */
237EAPI void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag);
238
239
240/**
241 * Create new data. If parent is provided, it is automatically appended.
242 *
243 * @param parent if provided, will be set in the resulting structure
244 * as well as the data will be appended to children list.
245 * @param contents string to be used. Must not be NULL.
246 * @param length size in bytes of @a contents.
247 *
248 * @return newly allocated memory or NULL on error. This memory should be
249 * released with eina_simple_xml_node_data_free() or indirectly
250 * with eina_simple_xml_node_tag_free() of the parent.
251 */
252EAPI Eina_Simple_XML_Node_Data * eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
253
254/**
255 * Remove data from parent and delete it.
256 *
257 * @param node to release memory.
258 */
259EAPI void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node);
260
261
262/**
263 * Create new cdata. If parent is provided, it is automatically appended.
264 *
265 * @param parent if provided, will be set in the resulting structure
266 * as well as the cdata will be appended to children list.
267 * @param contents string to be used. Must not be NULL.
268 * @param length size in bytes of @a content.
269 *
270 * @return newly allocated memory or NULL on error. This memory should be
271 * released with eina_simple_xml_node_cdata_free() or indirectly
272 * with eina_simple_xml_node_tag_free() of the parent.
273 */
274EAPI Eina_Simple_XML_Node_CData * eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
275
276/**
277 * Remove cdata from parent and delete it.
278 *
279 * @param node to release memory.
280 */
281EAPI void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node);
282
283
284/**
285 * Create new processing. If parent is provided, it is automatically appended.
286 *
287 * @param parent if provided, will be set in the resulting structure
288 * as well as the processing will be appended to children list.
289 * @param contents string to be used. Must not be NULL.
290 * @param length size in bytes of @a contents.
291 *
292 * @return newly allocated memory or NULL on error. This memory should be
293 * released with eina_simple_xml_node_processing_free() or indirectly
294 * with eina_simple_xml_node_tag_free() of the parent.
295 */
296EAPI Eina_Simple_XML_Node_Processing * eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
297
298/**
299 * Remove processing from parent and delete it.
300 *
301 * @param node processing to release memory.
302 */
303EAPI void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node);
304
305
306/**
307 * Create new doctype. If parent is provided, it is automatically appended.
308 *
309 * @param parent if provided, will be set in the resulting structure
310 * as well as the doctype will be appended to children list.
311 * @param contents string to be used. Must not be NULL.
312 * @param length size in bytes of @a contents.
313 *
314 * @return newly allocated memory or NULL on error. This memory should be
315 * released with eina_simple_xml_node_doctype_free() or indirectly
316 * with eina_simple_xml_node_tag_free() of the parent.
317 */
318EAPI Eina_Simple_XML_Node_Doctype * eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
319
320/**
321 * Remove doctype from parent and delete it.
322 *
323 * @param node doctype to release memory.
324 */
325EAPI void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node);
326
327
328/**
329 * Create new comment. If parent is provided, it is automatically appended.
330 *
331 * @param parent if provided, will be set in the resulting structure
332 * as well as the comment will be appended to children list.
333 * @param contents string to be used. Must not be NULL.
334 * @param length size in bytes of @a contents.
335 *
336 * @return newly allocated memory or NULL on error. This memory should be
337 * released with eina_simple_xml_node_comment_free() or indirectly
338 * with eina_simple_xml_node_tag_free() of the parent.
339 */
340EAPI Eina_Simple_XML_Node_Comment * eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
341
342/**
343 * Remove comment from parent and delete it.
344 *
345 * @param node comment to release memory.
346 */
347EAPI void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node);
348
349
350/**
351 * Load a XML node tree based on the given string.
352 *
353 * @param buf the input string. May not contain \0 terminator.
354 * @param buflen the input string size.
355 * @param strip whenever this parser should strip leading and trailing
356 * whitespace.
357 *
358 * @return document root with children tags, or NULL on errors.
359 * Document with errors may return partial tree instead of NULL,
360 * we'll do our best to avoid returning nothing.
361 */
362EAPI Eina_Simple_XML_Node_Root * eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip);
363
364/**
365 * Free node tree build with eina_simple_xml_node_load()
366 *
367 * @param root memory returned by eina_simple_xml_node_load()
368 */
369EAPI void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root);
370
371/**
372 * Converts the node tree under the given element to a XML string.
373 *
374 * @param node the base node to convert.
375 * @param indent indentation string, or NULL to disable it.
376 *
377 * @return NULL on errors or a newly allocated string on success.
378 */
379EAPI char * eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent);
380
381
382/**
383 * @}
384 */
385
386/**
387 * @}
388 */
389
390#endif /* EINA_SIMPLE_XML_H_ */
diff --git a/libraries/eina/src/include/eina_str.h b/libraries/eina/src/include/eina_str.h
deleted file mode 100644
index 2913fbf..0000000
--- a/libraries/eina/src/include/eina_str.h
+++ /dev/null
@@ -1,325 +0,0 @@
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 string The string to split.
165 * @param delimiter 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 string into a maximum of @p max_tokens pieces,
171 * using the given delimiter @p delimiter. @p delimiter 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 string The string to split.
189 * @param delimiter 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 function splits @p string into a maximum of @p max_tokens pieces,
197 * using the given delimiter @p delimiter. @p delimiter 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
deleted file mode 100644
index 34c200f..0000000
--- a/libraries/eina/src/include/eina_strbuf.h
+++ /dev/null
@@ -1,623 +0,0 @@
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 Create a new string buffer using the passed string. The passed
103 * string is used directly as the buffer, it's somehow the opposite function of
104 * @ref eina_strbuf_string_steal . The passed string must be malloced.
105 *
106 * @param str the string to manage
107 * @param length the length of the string.
108 * @return Newly allocated string buffer instance.
109 *
110 * This function creates a new string buffer. On error, @c NULL is
111 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
112 * free the resources, use eina_strbuf_free().
113 *
114 * @see eina_strbuf_manage_new()
115 * @since 1.2.0
116 */
117EAPI Eina_Strbuf *eina_strbuf_manage_new_length(char *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
118
119/**
120 * @brief Free a string buffer.
121 *
122 * @param buf The string buffer to free.
123 *
124 * This function frees the memory of @p buf. @p buf must have been
125 * created by eina_strbuf_new().
126 */
127EAPI void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
128
129/**
130 * @brief Reset a string buffer.
131 *
132 * @param buf The string buffer to reset.
133 *
134 * This function reset @p buf: the buffer len is set to 0, and the
135 * string is set to '\\0'. No memory is free'd.
136 */
137EAPI void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
138
139/**
140 * @brief Append a 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 appends @p str to @p buf. It computes the length of
147 * @p str, so is slightly slower than eina_strbuf_append_length(). If
148 * the length is known beforehand, consider using that variant. If
149 * @p buf can't append it, #EINA_FALSE is returned, otherwise
150 * #EINA_TRUE is returned.
151 *
152 * @see eina_strbuf_append()
153 * @see eina_strbuf_append_length()
154 */
155EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
156
157/**
158 * @brief Append an escaped string to a buffer, reallocating as necessary.
159 *
160 * @param buf The string buffer to append to.
161 * @param str The string to append.
162 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
163 *
164 * This function escapes and then appends the string @p str to @p buf. If @p str
165 * can not be appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
166 * returned.
167 */
168EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
169
170/**
171 * @brief Append a string to a buffer, reallocating as necessary,
172 * limited by the given length.
173 *
174 * @param buf The string buffer to append to.
175 * @param str The string to append.
176 * @param maxlen The maximum number of characters to append.
177 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
178 *
179 * This function appends at most @p maxlen characters of @p str to
180 * @p buf. It can't append more than the length of @p str. It
181 * computes the length of @p str, so it is slightly slower than
182 * eina_strbuf_append_length(). If the length is known beforehand,
183 * consider using that variant (@p maxlen should then be checked so
184 * that it is greater than the size of @p str). If @p str can not be
185 * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
186 * returned.
187 *
188 * @see eina_strbuf_append()
189 * @see eina_strbuf_append_length()
190 */
191EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
192
193/**
194 * @brief Append a string of exact length to a buffer, reallocating as necessary.
195 *
196 * @param buf The string buffer to append to.
197 * @param str The string to append.
198 * @param length The exact length to use.
199 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
200 *
201 * This function appends @p str to @p buf. @p str must be of size at
202 * most @p length. It is slightly faster than eina_strbuf_append() as
203 * it does not compute the size of @p str. It is useful when dealing
204 * with strings of known size, such as eina_stringshare. If @p buf
205 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
206 * returned.
207 *
208 * @see eina_stringshare_length()
209 * @see eina_strbuf_append()
210 * @see eina_strbuf_append_n()
211 */
212EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size_t length) EINA_ARG_NONNULL(1, 2);
213
214/**
215 * @brief Append a character to a string buffer, reallocating as
216 * necessary.
217 *
218 * @param buf The string buffer to append to.
219 * @param c The char to append.
220 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
221 *
222 * This function inserts @p c to @p buf. If it can not insert it,
223 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
224 */
225EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNULL(1);
226
227/**
228 * @brief Append a string to a buffer, reallocating as necessary.
229 *
230 * @param buf The string buffer to append to.
231 * @param fmt The string to append.
232 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
233 *
234 * This function appends the string defined by the format @p fmt to @p buf. @p
235 * fmt must be of a valid format for printf family of functions. If it can't
236 * insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
237 *
238 * @see eina_strbuf_append()
239 */
240EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
241
242/**
243 * @brief Append a string to a buffer, reallocating as necessary.
244 *
245 * @param buf The string buffer to append to.
246 * @param fmt The string to append.
247 * @param args The variable arguments.
248 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
249 *
250 * @see eina_strbuf_append_printf()
251 */
252EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 2);
253
254/**
255 * @brief Insert a string to a buffer, reallocating as necessary.
256 *
257 * @param buf The string buffer to insert.
258 * @param str The string to insert.
259 * @param pos The position to insert the string.
260 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
261 *
262 * This function inserts @p str to @p buf at position @p pos. It
263 * computes the length of @p str, so is slightly slower than
264 * eina_strbuf_insert_length(). If the length is known beforehand,
265 * consider using that variant. If @p buf can't insert it, #EINA_FALSE
266 * is returned, otherwise #EINA_TRUE is returned.
267 */
268EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
269
270/**
271 * @brief Insert an escaped string to a buffer, reallocating as
272 * necessary.
273 *
274 * @param buf The string buffer to insert to.
275 * @param str The string to insert.
276 * @param pos The position to insert the string.
277 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
278 *
279 * This function escapes and inserts the string @p str to @p buf at
280 * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is
281 * returned, otherwise #EINA_TRUE is returned.
282 */
283EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
284
285/**
286 * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen.
287 *
288 * @param buf The string buffer to insert to.
289 * @param str The string to insert.
290 * @param maxlen The maximum number of chars to insert.
291 * @param pos The position to insert the string.
292 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
293 *
294 * This function inserts @p str to @p buf at position @p pos, with at
295 * most @p maxlen bytes. The number of inserted characters can not be
296 * greater than the length of @p str. It computes the length of
297 * @p str, so is slightly slower than eina_strbuf_insert_length(). If the
298 * length is known beforehand, consider using that variant (@p maxlen
299 * should then be checked so that it is greater than the size of
300 * @p str). If @p str can not be inserted, #EINA_FALSE is returned,
301 * otherwise, #EINA_TRUE is returned.
302 */
303EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
304
305/**
306 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
307 *
308 * @param buf The string buffer to insert to.
309 * @param str The string to insert.
310 * @param length The exact length to use.
311 * @param pos The position to insert the string.
312 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
313 *
314 * This function inserts @p str to @p buf. @p str must be of size at
315 * most @p length. It is slightly faster than eina_strbuf_insert() as
316 * it does not compute the size of @p str. It is useful when dealing
317 * with strings of known size, such as eina_strngshare. If @p buf
318 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
319 * returned.
320 *
321 * @see eina_stringshare_length()
322 * @see eina_strbuf_insert()
323 * @see eina_strbuf_insert_n()
324 */
325EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
326
327/**
328 * @brief Insert a character to a string buffer, reallocating as
329 * necessary.
330 *
331 * @param buf The string buffer to insert to.
332 * @param c The char to insert.
333 * @param pos The position to insert the char.
334 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
335 *
336 * This function inserts @p c to @p buf at position @p pos. If @p buf
337 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
338 * returned.
339 */
340EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EINA_ARG_NONNULL(1);
341
342/**
343 * @brief Insert a string to a buffer, reallocating as necessary.
344 *
345 * @param buf The string buffer to insert.
346 * @param fmt The string to insert.
347 * @param pos The position to insert the string.
348 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
349 *
350 * This function insert a string as described by the format @p fmt to @p buf at
351 * the position @p pos. @p fmt must be of a valid format for printf family of
352 * functions. If it can't insert it, #EINA_FALSE is returned, otherwise
353 * #EINA_TRUE is returned.
354 */
355EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 4);
356
357/**
358 * @brief Insert a string to a buffer, reallocating as necessary.
359 *
360 * @param buf The string buffer to insert.
361 * @param fmt The string to insert.
362 * @param pos The position to insert the string.
363 * @param args The variable arguments.
364 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
365 *
366 * @see eina_strbuf_insert_printf
367 */
368EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, size_t pos, va_list args) EINA_ARG_NONNULL(1, 2);
369
370/**
371 * @def eina_strbuf_prepend(buf, str)
372 * @brief Prepend the given string to the given buffer
373 *
374 * @param buf The string buffer to prepend to.
375 * @param str The string to prepend.
376 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
377 *
378 * This macro is calling eina_strbuf_insert() at position 0. If @p buf
379 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
380 * returned.
381 */
382#define eina_strbuf_prepend(buf, str) eina_strbuf_insert(buf, str, 0)
383
384/**
385 * @def eina_strbuf_prepend_escaped(buf, str)
386 * @brief Prepend the given escaped string to the given buffer
387 *
388 * @param buf The string buffer to prepend to.
389 * @param str The string to prepend.
390 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
391 *
392 * This macro is calling eina_strbuf_insert_escaped() at position 0. If
393 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
394 * #EINA_TRUE is returned.
395 */
396#define eina_strbuf_prepend_escaped(buf, str) eina_strbuf_insert_escaped(buf, str, 0)
397
398/**
399 * @def eina_strbuf_prepend_n(buf, str)
400 * @brief Prepend the given escaped string to the given buffer
401 *
402 * @param buf The string buffer to prepend to.
403 * @param str The string to prepend.
404 * @param maxlen The maximum number of chars to prepend.
405 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
406 *
407 * This macro is calling eina_strbuf_insert_n() at position 0. If
408 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
409 * #EINA_TRUE is returned.
410 */
411#define eina_strbuf_prepend_n(buf, str, maxlen) eina_strbuf_insert_n(buf, str, maxlen, 0)
412
413/**
414 * @def eina_strbuf_prepend_length(buf, str)
415 * @brief Prepend the given escaped string to the given buffer
416 *
417 * @param buf The string buffer to prepend to.
418 * @param str The string to prepend.
419 * @param length The exact length to use.
420 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
421 *
422 * This macro is calling eina_strbuf_insert_length() at position 0. If
423 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
424 * #EINA_TRUE is returned.
425 */
426#define eina_strbuf_prepend_length(buf, str, length) eina_strbuf_insert_length(buf, str, length, 0)
427
428/**
429 * @def eina_strbuf_prepend_char(buf, str)
430 * @brief Prepend the given character to the given buffer
431 *
432 * @param buf The string buffer to prepend to.
433 * @param c The character to prepend.
434 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
435 *
436 * This macro is calling eina_strbuf_insert_char() at position 0. If
437 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
438 * #EINA_TRUE is returned.
439 */
440#define eina_strbuf_prepend_char(buf, c) eina_strbuf_insert_char(buf, c, 0)
441
442/**
443 * @def eina_strbuf_prepend_printf(buf, fmt, ...)
444 * @brief Prepend the given string to the given buffer
445 *
446 * @param buf The string buffer to prepend to.
447 * @param fmt The string to prepend.
448 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
449 *
450 * This macro is calling eina_strbuf_insert_printf() at position 0.If @p buf
451 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
452 * returned.
453 */
454#define eina_strbuf_prepend_printf(buf, fmt, ...) eina_strbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__)
455
456/**
457 * @def eina_strbuf_prepend_vprintf(buf, fmt, args)
458 * @brief Prepend the given string to the given buffer
459 *
460 * @param buf The string buffer to prepend to.
461 * @param fmt The string to prepend.
462 * @param args The variable arguments.
463 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
464 *
465 * This macro is calling eina_strbuf_insert_vprintf() at position 0.If @p buf
466 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
467 * returned.
468 */
469#define eina_strbuf_prepend_vprintf(buf, fmt, args) eina_strbuf_insert_vprintf(buf, fmt, 0, args)
470
471/**
472 * @brief Remove a slice of the given string buffer.
473 *
474 * @param buf The string buffer to remove a slice.
475 * @param start The initial (inclusive) slice position to start
476 * removing, in bytes.
477 * @param end The final (non-inclusive) slice position to finish
478 * removing, in bytes.
479 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
480 *
481 * This function removes a slice of @p buf, starting at @p start
482 * (inclusive) and ending at @p end (non-inclusive). Both values are
483 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
484 */
485
486EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
487
488/**
489 * @brief Retrieve a pointer to the contents of a string buffer
490 *
491 * @param buf The string buffer.
492 * @return The current string in the string buffer.
493 *
494 * This function returns the string contained in @p buf. The returned
495 * value must not be modified and will no longer be valid if @p buf is
496 * modified. In other words, any eina_strbuf_append() or similar will
497 * make that pointer invalid. The pointer returned by this function <b>must
498 * not</b> be freed.
499 *
500 * @see eina_strbuf_string_steal()
501 */
502EAPI const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
503
504/**
505 * @brief Steal the contents of a string buffer.
506 *
507 * @param buf The string buffer to steal.
508 * @return The current string in the string buffer.
509 *
510 * This function returns the string contained in @p buf. @p buf is
511 * then initialized and does not own the returned string anymore. The
512 * caller must release the memory of the returned string by calling
513 * free().
514 *
515 * @see eina_strbuf_string_get()
516 */
517EAPI char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
518
519/**
520 * @brief Free the contents of a string buffer but not the buffer.
521 *
522 * @param buf The string buffer to free the string of.
523 *
524 * This function frees the string contained in @p buf without freeing
525 * @p buf.
526 */
527EAPI void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
528
529/**
530 * @brief Retrieve the length of the string buffer content.
531 *
532 * @param buf The string buffer.
533 * @return The current length of the string, in bytes.
534 *
535 * This function returns the length of @p buf.
536 */
537EAPI size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
538
539
540/**
541 * @brief Replace the n-th string with an other string.
542 *
543 * @param buf The string buffer to work with.
544 * @param str The string to replace.
545 * @param with The replaceing string.
546 * @param n The number of the fitting string.
547 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
548 *
549 * This function replaces the n-th occurrence of @p str in @p buf with
550 * @p with. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
551 */
552EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) EINA_ARG_NONNULL(1, 2, 3);
553
554/**
555 * @def eina_strbuf_replace_first(buf, str, with)
556 * @brief Prepend the given character to the given buffer
557 *
558 * @param buf The string buffer to work with.
559 * @param str The string to replace.
560 * @param with The replaceing string.
561 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
562 *
563 * This macro is calling eina_strbuf_replace() with the n-th occurrence
564 * equal to @c 1. If @p buf can't replace it, #EINA_FALSE is returned,
565 * otherwise #EINA_TRUE is returned.
566 */
567#define eina_strbuf_replace_first(buf, str, with) eina_strbuf_replace(buf, str, with, 1)
568
569
570/**
571 * @brief Replace all strings with an other string.
572
573 * @param buf the string buffer to work with.
574 * @param str The string to replace.
575 * @param with The replaceing string.
576 * @return How often the string was replaced.
577 *
578 * This function replaces all the occurrences of @p str in @p buf with
579 * the string @p with. This function returns the number of times @p str
580 * has been replaced. On failure, it returns 0.
581 */
582EAPI int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3);
583
584/**
585 * @brief Trim the string buffer
586
587 * @param buf the string buffer to work with.
588 *
589 * This function skips whitespaces in the beginning and the end of the buffer.
590 */
591EAPI void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
592
593/**
594 * @brief Left trim the string buffer
595
596 * @param buf the string buffer to work with.
597 *
598 * This function skips whitespaces in the beginning of the buffer.
599 */
600EAPI void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
601
602/**
603 * @brief Right trim the string buffer
604
605 * @param buf the string buffer to work with.
606 *
607 * This function skips whitespaces in the end of the buffer.
608 */
609EAPI void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
610
611/**
612 * @}
613 */
614
615/**
616 * @}
617 */
618
619/**
620 * @}
621 */
622
623#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_stringshare.h b/libraries/eina/src/include/eina_stringshare.h
deleted file mode 100644
index 8edadd2..0000000
--- a/libraries/eina/src/include/eina_stringshare.h
+++ /dev/null
@@ -1,345 +0,0 @@
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 * Using eina stringshares usually boils down to:
130 * @code
131 * const char *str = eina_stringshare_add("My string");
132 * ...
133 * //Use str
134 * ...
135 * eina_stringshare_del(str);
136 * @endcode
137 * @note It's very important to note that string shares are @b @c const,
138 * changing them will result in undefined behavior.
139 * @note eina_stringshare_del() @b doesn't guarantee the string share will be
140 * freed, it releases a reference to it, but if other references to it still
141 * exist the string share will live until those are released.
142 *
143 * The following diagram gives an idea of what happens as you create strings
144 * with eina_stringshare_add():
145 *
146 * @image html eina_stringshare.png
147 * @image latex eina_stringshare.eps height=\textheight
148 *
149 * For more information, see @ref eina_stringshare_example_01_page
150 * "this example".
151 */
152
153/**
154 * @addtogroup Eina_Data_Types_Group Data Types
155 *
156 * @{
157 */
158
159/**
160 * @defgroup Eina_Stringshare_Group Stringshare
161 *
162 * @{
163 */
164
165/**
166 * @typedef Eina_Stringshare
167 *
168 * Interchangeable with "const char *" but still a good visual hint for the
169 * purpose. Maybe in the far far future we'll even add strict type checking.
170 *
171 * @since 1.2.0
172 */
173typedef const char Eina_Stringshare;
174
175/**
176 * @brief Retrieve an instance of a string for use in a program.
177 *
178 * @param str The string to retrieve an instance of.
179 * @param slen The string size (<= strlen(str)).
180 * @return A pointer to an instance of the string on success.
181 * @c NULL on failure.
182 *
183 * This function retrieves an instance of @p str. If @p str is
184 * @c NULL, then @c NULL is returned. If @p str is already stored, it
185 * is just returned and its reference counter is increased. Otherwise
186 * a duplicated string of @p str is returned.
187 *
188 * This function does not check string size, but uses the
189 * exact given size. This can be used to share_common part of a larger
190 * buffer or substring.
191 *
192 * @see eina_share_common_add()
193 */
194EAPI Eina_Stringshare *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
195
196/**
197 * @brief Retrieve an instance of a string for use in a program.
198 *
199 * @param str The NULL terminated string to retrieve an instance of.
200 * @return A pointer to an instance of the string on success.
201 * @c NULL on failure.
202 *
203 * This function retrieves an instance of @p str. If @p str is
204 * @c NULL, then @c NULL is returned. If @p str is already stored, it
205 * is just returned and its reference counter is increased. Otherwise
206 * a duplicated string of @p str is returned.
207 *
208 * The string @p str must be NULL terminated ('@\0') and its full
209 * length will be used. To use part of the string or non-null
210 * terminated, use eina_stringshare_add_length() instead.
211 *
212 * @see eina_stringshare_add_length()
213 */
214EAPI Eina_Stringshare *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
215
216/**
217 * @brief Retrieve an instance of a string for use in a program
218 * from a format string.
219 *
220 * @param fmt The NULL terminated format string to retrieve an instance of.
221 * @return A pointer to an instance of the string on success.
222 * @c NULL on failure.
223 *
224 * This function retrieves an instance of @p fmt. If @p fmt is
225 * @c NULL, then @c NULL is returned. If @p fmt is already stored, it
226 * is just returned and its reference counter is increased. Otherwise
227 * a duplicated string is returned.
228 *
229 * The format string @p fmt must be NULL terminated ('@\0') and its full
230 * length will be used. To use part of the format string or non-null
231 * terminated, use eina_stringshare_nprintf() instead.
232 *
233 * @see eina_stringshare_nprintf()
234 */
235EAPI Eina_Stringshare *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
236
237/**
238 * @brief Retrieve an instance of a string for use in a program
239 * from a format string.
240 *
241 * @param fmt The NULL terminated format string to retrieve an instance of.
242 * @param args The va_args for @p fmt
243 * @return A pointer to an instance of the string on success.
244 * @c NULL on failure.
245 *
246 * This function retrieves an instance of @p fmt with @p args. If @p fmt is
247 * @c NULL, then @c NULL is returned. If @p fmt with @p args is already stored, it
248 * is just returned and its reference counter is increased. Otherwise
249 * a duplicated string is returned.
250 *
251 * The format string @p fmt must be NULL terminated ('@\0') and its full
252 * length will be used. To use part of the format string or non-null
253 * terminated, use eina_stringshare_nprintf() instead.
254 *
255 * @see eina_stringshare_nprintf()
256 */
257EAPI Eina_Stringshare *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
258
259/**
260 * @brief Retrieve an instance of a string for use in a program
261 * from a format string with size limitation.
262 * @param len The length of the format string to use
263 * @param fmt The format string to retrieve an instance of.
264 * @return A pointer to an instance of the string on success.
265 * @c NULL on failure.
266 *
267 * This function retrieves an instance of @p fmt limited by @p len. If @p fmt is
268 * @c NULL or @p len is < 1, then @c NULL is returned. If the resulting string
269 * is already stored, it is returned and its reference counter is increased.
270 * Otherwise a duplicated string is returned.
271 *
272 * @p len length of the format string will be used. To use the
273 * entire format string, use eina_stringshare_printf() instead.
274 *
275 * @see eina_stringshare_printf()
276 */
277EAPI Eina_Stringshare *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
278
279/**
280 * Increment references of the given shared string.
281 *
282 * @param str The shared string.
283 * @return A pointer to an instance of the string on success.
284 * @c NULL on failure.
285 *
286 * This is similar to eina_share_common_add(), but it's faster since it will
287 * avoid lookups if possible, but on the down side it requires the parameter
288 * to be shared string. In other words, it must be the return of a previous
289 * call to one of the stringshare functions.
290 *
291 * There is no unref since this is the work of eina_share_common_del().
292 */
293EAPI Eina_Stringshare *eina_stringshare_ref(Eina_Stringshare *str);
294
295/**
296 * @brief Note that the given string has lost an instance.
297 *
298 * @param str string The given string.
299 *
300 * This function decreases the reference counter associated to @p str
301 * if it exists. If that counter reaches 0, the memory associated to
302 * @p str is freed. If @p str is NULL, the function returns
303 * immediately.
304 *
305 * Note that if the given pointer is not shared or NULL, bad things
306 * will happen, likely a segmentation fault.
307 */
308EAPI void eina_stringshare_del(Eina_Stringshare *str);
309
310/**
311 * @brief Note that the given string @b must be shared.
312 *
313 * @param str the shared string to know the length. It is safe to
314 * give NULL, in that case -1 is returned.
315 * @return The length of a shared string.
316 *
317 * This function is a cheap way to known the length of a shared
318 * string. Note that if the given pointer is not shared, bad
319 * things will happen, likely a segmentation fault. If in doubt, try
320 * strlen().
321 */
322EAPI int eina_stringshare_strlen(Eina_Stringshare *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
323
324/**
325 * @brief Dump the contents of the share_common.
326 *
327 * This function dumps all strings in the share_common to stdout with a
328 * DDD: prefix per line and a memory usage summary.
329 */
330EAPI void eina_stringshare_dump(void);
331
332static inline Eina_Bool eina_stringshare_replace(Eina_Stringshare **p_str, const char *news) EINA_ARG_NONNULL(1);
333static inline Eina_Bool eina_stringshare_replace_length(Eina_Stringshare **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
334
335#include "eina_inline_stringshare.x"
336
337/**
338 * @}
339 */
340
341/**
342 * @}
343 */
344
345#endif /* EINA_STRINGSHARE_H_ */
diff --git a/libraries/eina/src/include/eina_tiler.h b/libraries/eina/src/include/eina_tiler.h
deleted file mode 100644
index 5272099..0000000
--- a/libraries/eina/src/include/eina_tiler.h
+++ /dev/null
@@ -1,310 +0,0 @@
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
deleted file mode 100644
index f53d99e..0000000
--- a/libraries/eina/src/include/eina_trash.h
+++ /dev/null
@@ -1,100 +0,0 @@
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
deleted file mode 100644
index b0a7cf8..0000000
--- a/libraries/eina/src/include/eina_types.h
+++ /dev/null
@@ -1,300 +0,0 @@
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# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 3)
128# define EINA_PRINTF(fmt, arg) __attribute__((__format__ (__gnu_printf__, fmt, arg)))
129# else
130# define EINA_PRINTF(fmt, arg) __attribute__((__format__ (__printf__, fmt, arg)))
131# endif
132# define EINA_SCANF(fmt, arg) __attribute__((__format__ (__scanf__, fmt, arg)))
133# define EINA_FORMAT(fmt) __attribute__((__format_arg__(fmt)))
134# define EINA_CONST __attribute__((__const__))
135# define EINA_NOINSTRUMENT __attribute__((__no_instrument_function__))
136# define EINA_UNLIKELY(exp) __builtin_expect((exp), 0)
137# define EINA_LIKELY(exp) __builtin_expect((exp), 1)
138# else
139# define EINA_PRINTF(fmt, arg)
140# define EINA_SCANF(fmt, arg)
141# define EINA_FORMAT(fmt)
142# define EINA_CONST
143# define EINA_NOINSTRUMENT
144# define EINA_UNLIKELY(exp) exp
145# define EINA_LIKELY(exp) exp
146# endif
147
148#elif defined(_WIN32)
149# define EINA_WARN_UNUSED_RESULT
150# define EINA_ARG_NONNULL(idx, ...)
151# if defined(_MSC_VER) && _MSC_VER >= 1300
152# define EINA_DEPRECATED __declspec(deprecated)
153# else
154# define EINA_DEPRECATED
155# endif
156# define EINA_MALLOC
157# define EINA_PURE
158# define EINA_PRINTF(fmt, arg)
159# define EINA_SCANF(fmt, arg)
160# define EINA_FORMAT(fmt)
161# define EINA_CONST
162# define EINA_NOINSTRUMENT
163# define EINA_UNLIKELY(exp) exp
164# define EINA_LIKELY(exp) exp
165
166#elif defined(__SUNPRO_C)
167# define EINA_WARN_UNUSED_RESULT
168# define EINA_ARG_NONNULL(...)
169# define EINA_DEPRECATED
170# if __SUNPRO_C >= 0x590
171# define EINA_MALLOC __attribute__ ((malloc))
172# define EINA_PURE __attribute__ ((pure))
173# else
174# define EINA_MALLOC
175# define EINA_PURE
176# endif
177# define EINA_PRINTF(fmt, arg)
178# define EINA_SCANF(fmt, arg)
179# define EINA_FORMAT(fmt)
180# if __SUNPRO_C >= 0x590
181# define EINA_CONST __attribute__ ((const))
182# else
183# define EINA_CONST
184# endif
185# define EINA_NOINSTRUMENT
186# define EINA_UNLIKELY(exp) exp
187# define EINA_LIKELY(exp) exp
188
189#else /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
190
191/**
192 * @def EINA_WARN_UNUSED_RESULT
193 * Used to warn when the returned value of the function is not used.
194 */
195# define EINA_WARN_UNUSED_RESULT
196
197/**
198 * @def EINA_ARG_NONNULL
199 * Used to warn when the specified arguments of the function are @c NULL.
200 */
201# define EINA_ARG_NONNULL(idx, ...)
202
203/**
204 * @def EINA_DEPRECATED
205 * Used to warn when the function is considered as deprecated.
206 */
207# define EINA_DEPRECATED
208# define EINA_MALLOC
209# define EINA_PURE
210# define EINA_PRINTF(fmt, arg)
211# define EINA_SCANF(fmt, arg)
212# define EINA_FORMAT(fmt)
213# define EINA_CONST
214# define EINA_NOINSTRUMENT
215# define EINA_UNLIKELY(exp) exp
216# define EINA_LIKELY(exp) exp
217#endif /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
218
219/**
220 * @typedef Eina_Bool
221 * Type to mimic a boolean.
222 *
223 * @note it differs from stdbool.h as this is defined as an unsigned
224 * char to make it usable by bitfields (Eina_Bool name:1) and
225 * also take as few bytes as possible.
226 */
227typedef unsigned char Eina_Bool;
228
229/**
230 * @def EINA_FALSE
231 * boolean value FALSE (numerical value 0)
232 */
233#define EINA_FALSE ((Eina_Bool)0)
234
235/**
236 * @def EINA_TRUE
237 * boolean value TRUE (numerical value 1)
238 */
239#define EINA_TRUE ((Eina_Bool)1)
240
241EAPI extern const unsigned int eina_prime_table[];
242
243/**
244 * @typedef Eina_Compare_Cb
245 * Function used in functions using sorting. It compares @p data1 and
246 * @p data2. If @p data1 is 'less' than @p data2, -1 must be returned,
247 * if it is 'greater', 1 must be returned, and if they are equal, 0
248 * must be returned.
249 */
250typedef int (*Eina_Compare_Cb)(const void *data1, const void *data2);
251
252/**
253 * @def EINA_COMPARE_CB
254 * Macro to cast to Eina_Compare_Cb.
255 */
256#define EINA_COMPARE_CB(function) ((Eina_Compare_Cb)function)
257
258/**
259 * @typedef Eina_Each_Cb
260 * A callback type used when iterating over a container.
261 */
262typedef Eina_Bool (*Eina_Each_Cb)(const void *container, void *data, void *fdata);
263
264/**
265 * @def EINA_EACH_CB
266 * Macro to cast to Eina_Each.
267 */
268#define EINA_EACH_CB(Function) ((Eina_Each_Cb)Function)
269
270/**
271 * @typedef Eina_Free_Cb
272 * A callback type used to free data when iterating over a container.
273 */
274typedef void (*Eina_Free_Cb)(void *data);
275
276/**
277 * @def EINA_FREE_CB
278 * Macro to cast to Eina_Free_Cb.
279 */
280#define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function)
281
282/**
283 * @def EINA_C_ARRAY_LENGTH
284 * Macro to return the array length of a standard c array.
285 * For example:
286 * int foo[] = { 0, 1, 2, 3 };
287 * would return 4 and not 4 * sizeof(int).
288 * @since 1.2.0
289 */
290#define EINA_C_ARRAY_LENGTH(arr) (sizeof(arr) / sizeof((arr)[0]))
291
292/**
293 * @}
294 */
295
296/**
297 * @}
298 */
299
300#endif /* EINA_TYPES_H_ */
diff --git a/libraries/eina/src/include/eina_unicode.h b/libraries/eina/src/include/eina_unicode.h
deleted file mode 100644
index 2bbfe45..0000000
--- a/libraries/eina/src/include/eina_unicode.h
+++ /dev/null
@@ -1,186 +0,0 @@
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 the given size. Assumes n < len
72 *
73 * @param text The text to duplicate.
74 * @param n The maximum size of the text to duplicate.
75 * @return The duplicated string.
76 *
77 * This function duplicates @p text. The resuting string is cut on @p
78 * n. @p n is assumed to be lesser (<) than the length of @p
79 * text. When not needed anymore, the returned string must be freed.
80 *
81 * @since 1.1.0
82 */
83EAPI Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
84
85
86/**
87 * @brief Same as the standard strcmp just with Eina_Unicode instead of char.
88 */
89EAPI int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
90
91
92/**
93 * @brief Same as the standard strcpy just with Eina_Unicode instead of char.
94 */
95EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) EINA_ARG_NONNULL(1, 2);
96
97
98/**
99 * @brief Same as the standard strstr just with Eina_Unicode instead of char.
100 */
101EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
102
103
104/**
105 * @brief Same as the standard strncpy just with Eina_Unicode instead of char.
106 */
107EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) EINA_ARG_NONNULL(1, 2);
108
109
110/**
111 * @see eina_str_escape()
112 */
113EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode *str) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
114
115/* UTF-8 Handling */
116
117
118/**
119 * Reads UTF8 bytes from @p buf, starting at @p iindex and returns
120 * the decoded code point at @p iindex offset, and advances @p iindex
121 * to the next code point after this. @p iindex is always advanced,
122 * unless if the advancement is after the NULL.
123 * On error: return a codepoint between DC80 to DCFF where the low 8 bits
124 * are the byte's value.
125 *
126 * @param buf the string
127 * @param iindex the index to look at and return by.
128 * @return the codepoint found.
129 * @since 1.1.0
130 */
131EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
132
133/**
134 * Reads UTF8 bytes from @p buf, starting at @p iindex and returns
135 * the decoded code point at @p iindex offset, and moves àp iindex
136 * to the previous code point. @p iindex is always moved, as long
137 * as it's not past the start of the string.
138 * On error: return a codepoint between DC80 to DCFF where the low 8 bits
139 * are the byte's value.
140 *
141 * @param buf the string
142 * @param iindex the index to look at and return by.
143 * @return the codepoint found.
144 * @since 1.1.0
145 */
146EAPI Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
147
148/**
149 * Returns the number of unicode characters in the string. That is,
150 * the number of Eina_Unicodes it'll take to store this string in
151 * an Eina_Unicode string.
152 *
153 * @param buf the string
154 * @return the number of unicode characters (not bytes) in the string
155 * @since 1.1.0
156 */
157EAPI int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1);
158
159/**
160 * Converts a utf-8 string to a newly allocated Eina_Unicode string.
161 *
162 * @param utf the string in utf-8
163 * @param _len the length of the returned Eina_Unicode string.
164 * @return the newly allocated Eina_Unicode string.
165 * @since 1.1.0
166 */
167EAPI Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
168
169/**
170 * Converts an Eina_Unicode string to a newly allocated utf-8 string.
171 *
172 * @param uni the Eina_Unicode string
173 * @param _len the length byte length of the return utf8 string.
174 * @return the newly allocated utf-8 string.
175 * @since 1.1.0
176 */
177EAPI char * eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
178
179/**
180 * @}
181 */
182/**
183 * @}
184 */
185
186#endif
diff --git a/libraries/eina/src/include/eina_ustrbuf.h b/libraries/eina/src/include/eina_ustrbuf.h
deleted file mode 100644
index 9710c42..0000000
--- a/libraries/eina/src/include/eina_ustrbuf.h
+++ /dev/null
@@ -1,464 +0,0 @@
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_UStrbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
69
70/**
71 * @brief Create a new string buffer using the passed string. The passed
72 * string is used directly as the buffer, it's somehow the opposite function of
73 * @ref eina_ustrbuf_string_steal . The passed string must be malloced.
74 *
75 * @param str the string to manage
76 * @param length the length of the string.
77 * @return Newly allocated string buffer instance.
78 *
79 * This function creates a new string buffer. On error, @c NULL is
80 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
81 * free the resources, use eina_ustrbuf_free().
82 *
83 * @see eina_ustrbuf_manage_new()
84 * @since 1.2.0
85 */
86EAPI Eina_UStrbuf *eina_ustrbuf_manage_new_length(Eina_Unicode *str, size_t length) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
87
88/**
89 * @brief Free a string buffer.
90 *
91 * @param buf The string buffer to free.
92 *
93 * This function frees the memory of @p buf. @p buf must have been
94 * created by eina_ustrbuf_new().
95 */
96EAPI void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
97
98/**
99 * @brief Reset a string buffer.
100 *
101 * @param buf The string buffer to reset.
102 *
103 * This function reset @p buf: the buffer len is set to 0, and the
104 * string is set to '\\0'. No memory is free'd.
105 */
106EAPI void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
107
108/**
109 * @brief Append a 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 @p str to @p buf. It computes the length of
116 * @p str, so is slightly slower than eina_ustrbuf_append_length(). If
117 * the length is known beforehand, consider using that variant. If
118 * @p buf can't append it, #EINA_FALSE is returned, otherwise
119 * #EINA_TRUE is returned.
120 *
121 * @see eina_ustrbuf_append()
122 * @see eina_ustrbuf_append_length()
123 */
124EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
125
126/**
127 * @brief Append an escaped string to a buffer, reallocating as necessary.
128 *
129 * @param buf The string buffer to append to.
130 * @param str The string to append.
131 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
132 *
133 * This function appends the escaped string @p str to @p buf. If @p
134 * str can not be appended, #EINA_FALSE is returned, otherwise,
135 * #EINA_TRUE is returned.
136 */
137EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
138
139/**
140 * @brief Append a string to a buffer, reallocating as necessary,
141 * limited by the given length.
142 *
143 * @param buf The string buffer to append to.
144 * @param str The string to append.
145 * @param maxlen The maximum number of characters to append.
146 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
147 *
148 * This function appends at most @p maxlen characters of @p str to
149 * @p buf. It can't appends more than the length of @p str. It
150 * computes the length of @p str, so is slightly slower than
151 * eina_ustrbuf_append_length(). If the length is known beforehand,
152 * consider using that variant (@p maxlen should then be checked so
153 * that it is greater than the size of @p str). If @p str can not be
154 * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
155 * returned.
156 *
157 * @see eina_ustrbuf_append()
158 * @see eina_ustrbuf_append_length()
159 */
160EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
161
162/**
163 * @brief Append a string of exact length to a buffer, reallocating as necessary.
164 *
165 * @param buf The string buffer to append to.
166 * @param str The string to append.
167 * @param length The exact length to use.
168 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
169 *
170 * This function appends @p str to @p buf. @p str must be of size at
171 * most @p length. It is slightly faster than eina_ustrbuf_append() as
172 * it does not compute the size of @p str. It is useful when dealing
173 * with strings of known size, such as eina_strngshare. If @p buf
174 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
175 * returned.
176 *
177 * @see eina_stringshare_length()
178 * @see eina_ustrbuf_append()
179 * @see eina_ustrbuf_append_n()
180 */
181EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length) EINA_ARG_NONNULL(1, 2);
182
183/**
184 * @brief Append a character to a string buffer, reallocating as
185 * necessary.
186 *
187 * @param buf The string buffer to append to.
188 * @param c The char to append.
189 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
190 *
191 * This function inserts @p c to @p buf. If it can not insert it,
192 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
193 */
194EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_ARG_NONNULL(1);
195
196/**
197 * @brief Insert a string to a buffer, reallocating as necessary.
198 *
199 * @param buf The string buffer to insert.
200 * @param str The string to insert.
201 * @param pos The position to insert the string.
202 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
203 *
204 * This function inserts @p str to @p buf at position @p pos. It
205 * computes the length of @p str, so is slightly slower than
206 * eina_ustrbuf_insert_length(). If the length is known beforehand,
207 * consider using that variant. If @p buf can't insert it, #EINA_FALSE
208 * is returned, otherwise #EINA_TRUE is returned.
209 */
210EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
211
212/**
213 * @brief Insert an escaped string to a buffer, reallocating as
214 * necessary.
215 *
216 * @param buf The string buffer to insert to.
217 * @param str The string to insert.
218 * @param pos The position to insert the string.
219 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
220 *
221 * This function inserts the escaped string @p str to @p buf at
222 * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is
223 * returned, otherwise #EINA_TRUE is returned.
224 */
225EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
226
227/**
228 * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen.
229 *
230 * @param buf The string buffer to insert to.
231 * @param str The string to insert.
232 * @param maxlen The maximum number of chars to insert.
233 * @param pos The position to insert the string.
234 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
235 *
236 * This function inserts @p str ot @p buf at position @p pos, with at
237 * most @p maxlen bytes. The number of inserted characters can not be
238 * greater than the length of @p str. It computes the length of
239 * @p str, so is slightly slower than eina_ustrbuf_insert_length(). If the
240 * length is known beforehand, consider using that variant (@p maxlen
241 * should then be checked so that it is greater than the size of
242 * @p str). If @p str can not be inserted, #EINA_FALSE is returned,
243 * otherwise, #EINA_TRUE is returned.
244 */
245EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
246
247/**
248 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
249 *
250 * @param buf The string buffer to insert to.
251 * @param str The string to insert.
252 * @param length The exact length to use.
253 * @param pos The position to insert the string.
254 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
255 *
256 * This function inserts @p str to @p buf. @p str must be of size at
257 * most @p length. It is slightly faster than eina_ustrbuf_insert() as
258 * it does not compute the size of @p str. It is useful when dealing
259 * with strings of known size, such as eina_strngshare. If @p buf
260 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
261 * returned.
262 *
263 * @see eina_stringshare_length()
264 * @see eina_ustrbuf_insert()
265 * @see eina_ustrbuf_insert_n()
266 */
267EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
268
269/**
270 * @brief Insert a character to a string buffer, reallocating as
271 * necessary.
272 *
273 * @param buf The string buffer to insert to.
274 * @param c The char to insert.
275 * @param pos The position to insert the char.
276 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
277 *
278 * This function inserts @p c to @p buf at position @p pos. If @p buf
279 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
280 * returned.
281 */
282EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_t pos) EINA_ARG_NONNULL(1);
283
284/**
285 * @def eina_ustrbuf_prepend(buf, str)
286 * @brief Prepend the given string to the given buffer
287 *
288 * @param buf The string buffer to prepend to.
289 * @param str The string to prepend.
290 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
291 *
292 * This macro is calling eina_ustrbuf_insert() at position 0.If @p buf
293 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
294 * returned.
295 */
296#define eina_ustrbuf_prepend(buf, str) eina_ustrbuf_insert(buf, str, 0)
297
298/**
299 * @def eina_ustrbuf_prepend_escaped(buf, str)
300 * @brief Prepend the given escaped string to the given buffer
301 *
302 * @param buf The string buffer to prepend to.
303 * @param str The string to prepend.
304 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
305 *
306 * This macro is calling eina_ustrbuf_insert_escaped() at position 0. If
307 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
308 * #EINA_TRUE is returned.
309 */
310#define eina_ustrbuf_prepend_escaped(buf, str) eina_ustrbuf_insert_escaped(buf, str, 0)
311
312/**
313 * @def eina_ustrbuf_prepend_n(buf, str)
314 * @brief Prepend the given escaped string to the given buffer
315 *
316 * @param buf The string buffer to prepend to.
317 * @param str The string to prepend.
318 * @param maxlen The maximum number of Eina_Unicode *s to prepend.
319 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
320 *
321 * This macro is calling eina_ustrbuf_insert_n() at position 0. If
322 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
323 * #EINA_TRUE is returned.
324 */
325#define eina_ustrbuf_prepend_n(buf, str, maxlen) eina_ustrbuf_insert_n(buf, str, maxlen, 0)
326
327/**
328 * @def eina_ustrbuf_prepend_length(buf, str)
329 * @brief Prepend the given escaped string to the given buffer
330 *
331 * @param buf The string buffer to prepend to.
332 * @param str The string to prepend.
333 * @param length The exact length to use.
334 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
335 *
336 * This macro is calling eina_ustrbuf_insert_length() at position 0. If
337 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
338 * #EINA_TRUE is returned.
339 */
340#define eina_ustrbuf_prepend_length(buf, str, length) eina_ustrbuf_insert_length(buf, str, length, 0)
341
342/**
343 * @def eina_ustrbuf_prepend_char(buf, c)
344 * @brief Prepend the given unicode character to the given buffer
345 *
346 * @param buf The string buffer to prepend to.
347 * @param c The Eina_Unicode character to prepend.
348 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
349 *
350 * This macro is calling eina_ustrbuf_insert_Eina_Unicode *() at position 0. If
351 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
352 * #EINA_TRUE is returned.
353 */
354#define eina_ustrbuf_prepend_char(buf, c) eina_ustrbuf_insert_char(buf, c, 0)
355
356/**
357 * @def eina_ustrbuf_prepend_printf(buf, fmt, ...)
358 * @brief Prepend the given string to the given buffer
359 *
360 * @param buf The string buffer to prepend to.
361 * @param fmt The string to prepend.
362 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
363 *
364 * This macro is calling eina_ustrbuf_insert_printf() at position 0.If @p buf
365 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
366 * returned.
367 */
368#define eina_ustrbuf_prepend_printf(buf, fmt, ...) eina_ustrbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__)
369
370/**
371 * @def eina_ustrbuf_prepend_vprintf(buf, fmt, args)
372 * @brief Prepend the given string to the given buffer
373 *
374 * @param buf The string buffer to prepend to.
375 * @param fmt The string to prepend.
376 * @param args The variable arguments.
377 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
378 *
379 * This macro is calling eina_ustrbuf_insert_vprintf() at position 0.If @p buf
380 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
381 * returned.
382 */
383#define eina_ustrbuf_prepend_vprintf(buf, fmt, args) eina_ustrbuf_insert_vprintf(buf, fmt, 0, args)
384
385/**
386 * @brief Remove a slice of the given string buffer.
387 *
388 * @param buf The string buffer to remove a slice.
389 * @param start The initial (inclusive) slice position to start
390 * removing, in bytes.
391 * @param end The final (non-inclusive) slice position to finish
392 * removing, in bytes.
393 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
394 *
395 * This function removes a slice of @p buf, starting at @p start
396 * (inclusive) and ending at @p end (non-inclusive). Both values are
397 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
398 */
399EAPI Eina_Bool
400eina_ustrbuf_remove(Eina_UStrbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
401
402/**
403 * @brief Retrieve a pointer to the contents of a string buffer
404 *
405 * @param buf The string buffer.
406 * @return The current string in the string buffer.
407 *
408 * This function returns the string contained in @p buf. The returned
409 * value must not be modified and will no longer be valid if @p buf is
410 * modified. In other words, any eina_ustrbuf_append() or similar will
411 * make that pointer invalid.
412 *
413 * @see eina_ustrbuf_string_steal()
414 */
415EAPI const Eina_Unicode *
416eina_ustrbuf_string_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
417
418/**
419 * @brief Steal the contents of a string buffer.
420 *
421 * @param buf The string buffer to steal.
422 * @return The current string in the string buffer.
423 *
424 * This function returns the string contained in @p buf. @p buf is
425 * then initialized and does not own the returned string anymore. The
426 * caller must release the memory of the returned string by calling
427 * free().
428 *
429 * @see eina_ustrbuf_string_get()
430 */
431EAPI Eina_Unicode *
432eina_ustrbuf_string_steal(Eina_UStrbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
433
434/**
435 * @brief Free the contents of a string buffer but not the buffer.
436 *
437 * @param buf The string buffer to free the string of.
438 *
439 * This function frees the string contained in @p buf without freeing
440 * @p buf.
441 */
442EAPI void
443eina_ustrbuf_string_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
444
445/**
446 * @brief Retrieve the length of the string buffer content.
447 *
448 * @param buf The string buffer.
449 * @return The current length of the string, in bytes.
450 *
451 * This function returns the length of @p buf.
452 */
453EAPI size_t
454eina_ustrbuf_length_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
455
456/**
457 * @}
458 */
459
460/**
461 * @}
462 */
463
464#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_ustringshare.h b/libraries/eina/src/include/eina_ustringshare.h
deleted file mode 100644
index 1036573..0000000
--- a/libraries/eina/src/include/eina_ustringshare.h
+++ /dev/null
@@ -1,200 +0,0 @@
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_value.h b/libraries/eina/src/include/eina_value.h
deleted file mode 100644
index 341781f..0000000
--- a/libraries/eina/src/include/eina_value.h
+++ /dev/null
@@ -1,3533 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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_VALUE_H_
20#define EINA_VALUE_H_
21
22#include <stdarg.h>
23
24#include "eina_types.h"
25#include "eina_fp.h" /* defines int64_t and uint64_t */
26#include "eina_inarray.h"
27#include "eina_list.h"
28#include "eina_hash.h"
29
30/**
31 * @page eina_value_example_01_page Eina_Value usage
32 * @dontinclude eina_value_01.c
33 *
34 * This very simple example shows how to use some of the basic features of eina
35 * value: setting and getting values, converting between types and printing a
36 * value as a string.
37 *
38 * Our main function starts out with the basic, declaring some variables and
39 * initializing eina:
40 * @until eina_init
41 *
42 * Now we can jump into using eina value. We set a value, get this value and
43 * then print it:
44 * @until printf
45 *
46 * In the above snippet of code we printed an @c int value, we can however print
47 * the value as a string:
48 * @until free
49 *
50 * And once done with a value it's good practice to destroy it:
51 * @until eina_value_flush
52 *
53 * We now reuse @c v to store a string, get its value and print it:
54 * @until printf
55 * @note Since @c s is the value and not returned by @c eina_value_to_string()
56 * we don't need to free it.
57 *
58 * Just because we stored a string doesn't mean we can't use the @c
59 * eina_value_to_string() function, we can and it's important to note that it
60 * will return not the stored string but rather a copy of it(one we have to
61 * free):
62 * @until eina_value_flush
63 *
64 * And now to explore conversions between two type we'll create another value:
65 * @until eina_value_setup
66 *
67 * And make sure @c v and @c otherv have different types:
68 * @until eina_value_setup
69 *
70 * We then set a value to @c v and have it converted, to do this we don't need
71 * to tell to which type we want to convert, we just say were we want to store
72 * the converted value and eina value will figure out what to convert to, and
73 * how:
74 * @until eina_value_convert
75 *
76 * And now let's check the conversion worked:
77 * @until printf
78 *
79 * But converting to strings is not particularly exciting, @c
80 * eina_value_to_string() already did that, so now let's make the conversion the
81 * other way around, from string to @c int:
82 * @until printf
83 *
84 * And once done, destroy the values:
85 * @until }
86 *
87 * Full source code: @ref eina_value_01_c
88 */
89
90/**
91 * @page eina_value_01_c eina_value_01.c
92 * @include eina_value_01.c
93 * @example eina_value_01.c
94 */
95
96/**
97 * @page eina_value_example_02_page Eina_Value struct usage
98 * @dontinclude eina_value_02.c
99 *
100 * This example will examine a hypothetical situation in which we had a
101 * structure(which represented parameters) with two fields, and then need to add
102 * a third field to our structure. If using structs directly we'd need to
103 * rewrite every piece of code that touches the struct, by using eina value, and
104 * thus having the compiler not even know the struct, we can reduce the amount
105 * of changes needed and retain interoperability between the old and new format.
106 *
107 * Our example will start with a function that creates descriptions of both of
108 * our structs for eina value usage. The first step is to create a struct and
109 * describe its members:
110 * @until v1_members[1]
111 * @note We can't pass the types of the members to EINA_VALUE_STRUCT_MEMBER
112 * macro because they are not constant initializers.
113 *
114 * So far it should be pretty easy to understand, we said @c My_Struct_V1 has
115 * two members, one of type @c int and another of type @c char. We now create
116 * the description of the actual struct, again nothing overly complex, we signal
117 * which version of EINA_VALUE_STRUCT we're using, we declare no special
118 * operations, our members and our size:
119 * @until V1_DESC
120 *
121 * We now repeat the process for the second version of our struct, the only
122 * difference is the addition of a third parameter of type @c int :
123 * @until V2_DESC
124 * @until }
125 *
126 * We'll now look at a function that sets the values of our structs. For
127 * simplicity's sake we initialize it we random values, a real world case would
128 * read these values from a file, a database or even from the network. The
129 * fundamental detail here is that this function works for both V1 and V2
130 * structs, this is because setting a parameter that a struct that doesn't have
131 * does nothing without throwing any errors:
132 * @until }
133 * @note While using eina_value_struct_set() with an in-existing parameter
134 * causes no error, it does return #EINA_FALSE, to notify it was not possible
135 * to set the value. This could be used to determine that we're handling a V1
136 * struct and take some action based on that.
137 *
138 * The next thing is to do is see what a function that uses the values of the
139 * struct looks like. We'll again be very simplistic in our usage, we'll just
140 * print the values, but a real world case, might send these values to another
141 * process use them to open a network/database connection or anything else.
142 * Since all versions of the struct have @c param1 and @c param2 we'll
143 * unconditionally use them:
144 * @until printf
145 *
146 * The next step is to conditionally use @c param3, which can fortunately be
147 * done in the same step in which we get it's value:
148 * @until }
149 *
150 * There we've now got functions that can both populate and use values from both
151 * our structs, so now let's actually use them in our main function by creating
152 * a struct of each type, initializing them and them using them:
153 * @until }
154 *
155 * This concludes our example. For the full source code see @ref
156 * eina_value_02_c.
157 */
158
159/**
160 * @page eina_value_02_c eina_value_02.c
161 * @include eina_value_02.c
162 * @example eina_value_02.c
163 */
164
165/**
166 * @page eina_value_example_03_page Eina value custom type example
167 * @dontinclude eina_value_03.c
168 *
169 * For this example we'll be creating our own custom type of eina value. Eina
170 * value can already store struct timeval(man gettimeofday for more information)
171 * but it has no type to store struct timezone, so that's what this example will
172 * do.
173 * @note struct timezone is actually obsolete, so using it in real world
174 * programs is probably not a good idea, but this is an example so, bear with
175 * us.
176 *
177 * To create our own custom eina value type we need to define functions to
178 * do the following operations on it:
179 * @li Setup
180 * @li Flush
181 * @li Copy
182 * @li Compare
183 * @li Set
184 * @li Get
185 * @li Conversion
186 *
187 * Most of this functions are very simple, so let's look at them, starting with
188 * setup which only clear the memory so that we can be certain we won't be using
189 * stale data:
190 * @until }
191 *
192 * Now the flush function, which is even simpler, it does nothing, that's
193 * because there is nothing we need to do, all the necessary steps are taken by
194 * eina value itself:
195 * @until }
196 *
197 * Our next function, copy, is a bit more interesting, but not much, it just
198 * casts our void pointers to struct timezone pointers and does the copy:
199 * @until }
200 * @note By now you might be wondering why our functions receive void pointers
201 * instead of pointers to struct timezone, and this is a good point. The reason
202 * for this is that eina value doesn't know anything about our type so it must
203 * use a generic void pointer, casting that pointer into a proper value is the
204 * job of the implementor of the new type.
205 *
206 * Next we have the comparison function, which compares the @c tz_minuteswest
207 * field of struct timezone, we don't compare @c tz_dsttime because that field
208 * is not used in linux:
209 * @until }
210 *
211 * Next we have setting, this however requires not one but rather two functions,
212 * the reason for this is because to be able to receive arguments of any type
213 * eina value uses @ref https://wikipedia.org/wiki/Variadic_functions "variadic
214 * functions", so we need a function to get the argument from a va_list and
215 * another to actually to the setting.
216 *
217 * Lets first look at the pset function which sets the received value to a
218 * pointer:
219 * @until }
220 *
221 * Next we have the vset function which get the argument from the va_list and
222 * passes it to the pset function:
223 * @until }
224 *
225 * And now the function to get the value, a very simple copying of the value to
226 * the given pointer:
227 * @until }
228 *
229 * And finally our conversion function, this is our longest and most interesting
230 * one. For numeric type we simply assign the value of @c tz_minuteswest to the
231 * new type and call a set function using it:
232 * @until EINA_VALUE_TYPE_DOUBLE
233 * @until return
234 * @note It would be a good idea to add checks for over and underflow for these
235 * types and return #EINA_FALSE in thoses cases, we omit this here for brevity.
236 *
237 * For string types we use @c snprintf() to format our @c tz_minuteswest field
238 * and put it in a string(again @c tz_dsttime is ignored because it's not used):
239 * @until }
240 *
241 * Finally we handle any other types by returning an error in that case:
242 * @until }
243 *
244 * Now that we have all the functions, we can populate an @c Eina_Value_Type to
245 * later use it with @c eina_value_setup():
246 * @until }
247 *
248 * We can now finally use our new TZ_TYPE with eina value, so lets conclude our
249 * example by practicing that by setting its value and printing it:
250 * @until }
251 *
252 * For the full source code see @ref eina_value_03_c.
253 */
254
255/**
256 * @page eina_value_03_c eina_value_03.c
257 * @include eina_value_03.c
258 * @example eina_value_03.c
259 */
260
261/**
262 * @addtogroup Eina_Data_Types_Group Data Types
263 *
264 * @since 1.2
265 *
266 * @{
267 */
268
269/**
270 * @addtogroup Eina_Containers_Group Containers
271 *
272 * @{
273 */
274
275/**
276 * @defgroup Eina_Value_Group Generic Value Storage
277 *
278 * Abstracts generic data storage and access to it in an extensible
279 * and efficient way.
280 *
281 * It comes with pre-defined types for numbers, array, list, hash,
282 * blob and structs. It is able to convert between data types,
283 * including to string.
284 *
285 * It is meant for simple data types, providing uniform access and
286 * release functions, useful to exchange data preserving their
287 * types. For more complex hierarchical data, with properties and
288 * children, reference counting, inheritance and interfaces, see @ref
289 * Eina_Model_Group.
290 *
291 * Examples of usage of the Eina_Value API:
292 * @li @ref eina_value_example_01_page
293 * @li @ref eina_value_example_02_page
294 * @li @ref eina_value_example_03_page
295 *
296 * @{
297 */
298
299
300/**
301 * @typedef Eina_Value
302 * Store generic values.
303 *
304 * @since 1.2
305 */
306typedef struct _Eina_Value Eina_Value;
307
308/**
309 * @typedef Eina_Value_Type
310 * Describes the data contained by the value
311 *
312 * @since 1.2
313 */
314typedef struct _Eina_Value_Type Eina_Value_Type;
315
316/**
317 * @typedef Eina_Value_Union
318 * Union of all known value types.
319 *
320 * This is only used to specify the minimum payload memory for #Eina_Value.
321 *
322 * @internal
323 * @since 1.2
324 */
325typedef union _Eina_Value_Union Eina_Value_Union;
326
327/**
328 * @union _Eina_Value_Union
329 * All possible value types.
330 *
331 * This is only used to specify the minimum payload memory for #Eina_Value.
332 *
333 * @internal
334 * @since 1.2
335 */
336union _Eina_Value_Union
337{
338 unsigned char buf[8]; /**< just hold 8-bytes, more goes into ptr */
339 void *ptr; /**< used as generic pointer */
340 uint64_t _guarantee; /**< guarantees 8-byte alignment */
341};
342
343/**
344 * @var EINA_VALUE_TYPE_UCHAR
345 * manages unsigned char type.
346 *
347 * @since 1.2
348 */
349EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR;
350
351/**
352 * @var EINA_VALUE_TYPE_USHORT
353 * manages unsigned short type.
354 *
355 * @since 1.2
356 */
357EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_USHORT;
358
359/**
360 * @var EINA_VALUE_TYPE_UINT
361 * manages unsigned int type.
362 *
363 * @since 1.2
364 */
365EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT;
366
367/**
368 * @var EINA_VALUE_TYPE_ULONG
369 * manages unsigned long type.
370 *
371 * @since 1.2
372 */
373EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ULONG;
374
375/**
376 * @var EINA_VALUE_TYPE_TIMESTAMP
377 * manages unsigned long type used for timestamps.
378 * @note this is identical in function to EINA_VALUE_TYPE_ULONG
379 *
380 * @since 1.2
381 */
382EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP;
383
384/**
385 * @var EINA_VALUE_TYPE_UINT64
386 * manages unsigned integer of 64 bits type.
387 *
388 * @since 1.2
389 */
390EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_UINT64;
391
392/**
393 * @var EINA_VALUE_TYPE_CHAR
394 * manages char type.
395 *
396 * @since 1.2
397 */
398EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_CHAR;
399
400/**
401 * @var EINA_VALUE_TYPE_SHORT
402 * manages short type.
403 *
404 * @since 1.2
405 */
406EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_SHORT;
407
408/**
409 * @var EINA_VALUE_TYPE_INT
410 * manages int type.
411 *
412 * @since 1.2
413 */
414EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT;
415
416/**
417 * @var EINA_VALUE_TYPE_LONG
418 * manages long type.
419 *
420 * @since 1.2
421 */
422EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LONG;
423
424/**
425 * @var EINA_VALUE_TYPE_INT64
426 * manages integer of 64 bits type.
427 *
428 * @since 1.2
429 */
430EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_INT64;
431
432/**
433 * @var EINA_VALUE_TYPE_FLOAT
434 * manages float type.
435 *
436 * @since 1.2
437 */
438EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT;
439
440/**
441 * @var EINA_VALUE_TYPE_DOUBLE
442 * manages double type.
443 *
444 * @since 1.2
445 */
446EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE;
447
448/**
449 * @var EINA_VALUE_TYPE_STRINGSHARE
450 * manages stringshared string type.
451 *
452 * @since 1.2
453 */
454EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE;
455
456/**
457 * @var EINA_VALUE_TYPE_STRING
458 * manages string type.
459 *
460 * @since 1.2
461 */
462EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRING;
463
464
465/**
466 * @var EINA_VALUE_TYPE_ARRAY
467 *
468 * manages array type. Use the value get/set for arrays:
469 * @li eina_value_array_get() and eina_value_array_set()
470 * @li eina_value_array_vget() and eina_value_array_vset()
471 * @li eina_value_array_pget() and eina_value_array_pset()
472 *
473 * eina_value_set() takes an #Eina_Value_Array where just @c subtype
474 * and @c step are used. If there is an @c array, it will be copied
475 * (including each item) and its contents must be properly
476 * configurable as @c subtype expects. eina_value_pset() takes a
477 * pointer to an #Eina_Value_Array. For your convenience, use
478 * eina_value_array_setup().
479 *
480 * eina_value_get() and eina_value_pget() takes a pointer to
481 * #Eina_Value_Array, it's an exact copy of the current structure in
482 * use by value, no copies are done.
483 *
484 * @since 1.2
485 */
486EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY;
487
488/**
489 * @var EINA_VALUE_TYPE_LIST
490 *
491 * manages list type. Use the value get/set for lists:
492 * @li eina_value_list_get() and eina_value_list_set()
493 * @li eina_value_list_vget() and eina_value_list_vset()
494 * @li eina_value_list_pget() and eina_value_list_pset()
495 *
496 * eina_value_set() takes an #Eina_Value_List where just @c subtype is
497 * used. If there is an @c list, it will be copied (including each
498 * item) and its contents must be properly configurable as @c
499 * subtype expects. eina_value_pset() takes a pointer to an
500 * #Eina_Value_List. For your convenience, use
501 * eina_value_list_setup().
502 *
503 * eina_value_get() and eina_value_pget() takes a pointer to
504 * #Eina_Value_List, it's an exact copy of the current structure in
505 * use by value, no copies are done.
506 *
507 * @since 1.2
508 */
509EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_LIST;
510
511/**
512 * @var EINA_VALUE_TYPE_HASH
513 *
514 * manages hash type. Use the value get/set for hashes:
515 * @li eina_value_hash_get() and eina_value_hash_set()
516 * @li eina_value_hash_vget() and eina_value_hash_vset()
517 * @li eina_value_hash_pget() and eina_value_hash_pset()
518 *
519 * eina_value_set() takes an #Eina_Value_Hash where just @c subtype
520 * and @c buckets_power_size are used. If there is an @c hash, it will
521 * be copied (including each item) and its contents must be
522 * properly configurable as @c subtype expects. eina_value_pset()
523 * takes a pointer to an #Eina_Value_Hash. For your convenience, use
524 * eina_value_hash_setup().
525 *
526 * eina_value_get() and eina_value_pget() takes a pointer to
527 * #Eina_Value_Hash, it's an exact copy of the current structure in
528 * use by value, no copies are done.
529 *
530 * @note be aware that hash data is always an allocated memory of size
531 * defined by @c subtype->value_size. If your @c subtype is an
532 * integer, add as data malloc(sizeof(int)). If your @c subtype
533 * is an string, add as data malloc(sizeof(char*)) and this data
534 * value must point to strdup(string)!
535 *
536 * @since 1.2
537 */
538EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_HASH;
539
540/**
541 * @var EINA_VALUE_TYPE_TIMEVAL
542 * manages 'struct timeval' type
543 *
544 * eina_value_set() takes a "struct timeval" from sys/time.h.
545 * eina_value_pset() takes a pointer to "struct timeval".
546 *
547 * eina_value_get() and eina_value_pget() takes a pointer to "struct
548 * timeval" and it's an exact copy of value.
549 *
550 * @since 1.2
551 */
552EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL;
553
554/**
555 * @var EINA_VALUE_TYPE_BLOB
556 * manages blob of bytes type, see @ref Eina_Value_Blob
557 *
558 * eina_value_set() takes an #Eina_Value_Blob
559 * eina_value_pset() takes a pointer to #Eina_Value_Blob.
560 *
561 * eina_value_get() and eina_value_pget() takes a pointer to
562 * #Eina_Value_Blob and it's an exact copy of value, no allocations
563 * are made.
564 *
565 * Memory is untouched unless you provide @c ops (operations) pointer.
566 *
567 * @since 1.2
568 */
569EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_BLOB;
570
571/**
572 * @var EINA_VALUE_TYPE_STRUCT
573 *
574 * manages struct type. Use the value get/set for structs:
575 * @li eina_value_struct_get() and eina_value_struct_set()
576 * @li eina_value_struct_vget() and eina_value_struct_vset()
577 * @li eina_value_struct_pget() and eina_value_struct_pset()
578 *
579 * eina_value_set() takes an #Eina_Value_Struct where just @c desc is
580 * used. If there is an @c memory, it will be copied (including each
581 * member) and its contents must be properly configurable as @c desc
582 * expects. eina_value_pset() takes a pointer to an
583 * #Eina_Value_Struct. For your convenience, use
584 * eina_value_struct_setup().
585 *
586 * eina_value_get() and eina_value_pget() takes a pointer to
587 * #Eina_Value_Struct, it's an exact copy of the current structure in
588 * use by value, no copies are done.
589 *
590 * @since 1.2
591 */
592EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT;
593
594/**
595 * @var EINA_VALUE_TYPE_MODEL
596 *
597 * manages Eina_Model type. Use the value get/set to change the model
598 * in use, it will increase the reference while in use by the value.
599 *
600 * eina_value_set() takes a pointer to #Eina_Model, increasing the
601 * reference.
602 *
603 * eina_value_get() takes a pointer to pointer to #Eina_Model, it's an
604 * exact copy of the current model, no copies are done, no references
605 * are increased.
606 *
607 * @since 1.2
608 */
609EAPI extern const Eina_Value_Type *EINA_VALUE_TYPE_MODEL;
610
611/**
612 * @var EINA_ERROR_VALUE_FAILED
613 * Error identifier corresponding to value check failure.
614 *
615 * @since 1.2
616 */
617EAPI extern int EINA_ERROR_VALUE_FAILED;
618
619/**
620 * @defgroup Eina_Value_Value_Group Generic Value management
621 *
622 * @{
623 */
624
625/**
626 * @struct _Eina_Value
627 * defines the contents of a value
628 *
629 * @since 1.2
630 */
631struct _Eina_Value
632{
633 const Eina_Value_Type *type; /**< how to access values */
634 Eina_Value_Union value; /**< to be accessed with type descriptor */
635};
636
637/**
638 * @brief Create generic value storage.
639 * @param type how to manage this value.
640 * @return The new value or @c NULL on failure.
641 *
642 * Create a new generic value storage. The members are managed using
643 * the description specified by @a type.
644 *
645 * Some types may specify more operations:
646 * eg. #EINA_VALUE_TYPE_ARRAY uses eina_value_array_set(),
647 * eina_value_array_get() and so on.
648 *
649 * On failure, @c NULL is returned and either #EINA_ERROR_OUT_OF_MEMORY or
650 * #EINA_ERROR_VALUE_FAILED is set.
651 *
652 * @note this calls creates from mempool and then uses
653 * eina_value_setup(). Consider using eina_value_flush() and
654 * eina_value_setup() instead to avoid memory allocations.
655 *
656 * @see eina_value_free()
657 *
658 * @since 1.2
659 */
660EAPI Eina_Value *eina_value_new(const Eina_Value_Type *type) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
661
662/**
663 * @brief Free value and its data.
664 * @param value value object
665 *
666 * @see eina_value_flush()
667 *
668 * @since 1.2
669 */
670EAPI void eina_value_free(Eina_Value *value) EINA_ARG_NONNULL(1);
671
672
673/**
674 * @brief Initialize generic value storage.
675 * @param value value object
676 * @param type how to manage this value.
677 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
678 *
679 * Initializes existing generic value storage. The members are managed using the
680 * description specified by @a type.
681 *
682 * Some types may specify more operations, as an example
683 * #EINA_VALUE_TYPE_ARRAY uses eina_value_array_set(),
684 * eina_value_array_get() and so on.
685 *
686 * @note Existing contents are ignored! If the value was previously used, then
687 * use eina_value_flush() first.
688 *
689 * On failure, #EINA_FALSE is returned and #EINA_ERROR_OUT_OF_MEMORY
690 * or #EINA_ERROR_VALUE_FAILED is set.
691 *
692 * @see eina_value_flush()
693 *
694 * @since 1.2
695 */
696static inline Eina_Bool eina_value_setup(Eina_Value *value,
697 const Eina_Value_Type *type) EINA_ARG_NONNULL(1, 2);
698
699/**
700 * @brief Create generic value storage.
701 * @param value value object
702 *
703 * Releases all the resources associated with an #Eina_Value. The
704 * value must be already set with eina_value_setup() or
705 * eina_value_new().
706 *
707 * After this call returns, the contents of the value are undefined,
708 * but the value can be reused by calling eina_value_setup() again.
709 *
710 * @see eina_value_setup()
711 * @see eina_value_free()
712 *
713 * @since 1.2
714 */
715static inline void eina_value_flush(Eina_Value *value) EINA_ARG_NONNULL(1);
716
717/**
718 * @brief Copy generic value storage.
719 * @param value source value object
720 * @param copy destination value object
721 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
722 *
723 * The @a copy object is considered uninitialized and its existing
724 * contents are overwritten (just as if eina_value_flush() was called on
725 * it).
726 *
727 * The copy happens by calling eina_value_setup() on @a copy, followed
728 * by getting the contents of @a value and setting it to @a copy.
729 *
730 * @since 1.2
731 */
732EAPI Eina_Bool eina_value_copy(const Eina_Value *value,
733 Eina_Value *copy) EINA_ARG_NONNULL(1, 2);
734
735/**
736 * @brief Compare generic value storage.
737 * @param a left side of comparison
738 * @param b right side of comparison
739 * @return less than zero if a < b, greater than zero if a > b, zero
740 * if a == b
741 *
742 * @since 1.2
743 */
744static inline int eina_value_compare(const Eina_Value *a,
745 const Eina_Value *b) EINA_ARG_NONNULL(1, 2);
746
747/**
748 * @brief Set the generic value.
749 * @param value source value object
750 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
751 *
752 * The variable argument is dependent on chosen type. The list for
753 * basic types:
754 *
755 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
756 * @li EINA_VALUE_TYPE_USHORT: unsigned short
757 * @li EINA_VALUE_TYPE_UINT: unsigned int
758 * @li EINA_VALUE_TYPE_ULONG: unsigned long
759 * @li EINA_VALUE_TYPE_UINT64: uint64_t
760 * @li EINA_VALUE_TYPE_CHAR: char
761 * @li EINA_VALUE_TYPE_SHORT: short
762 * @li EINA_VALUE_TYPE_INT: int
763 * @li EINA_VALUE_TYPE_LONG: long
764 * @li EINA_VALUE_TYPE_INT64: int64_t
765 * @li EINA_VALUE_TYPE_FLOAT: float
766 * @li EINA_VALUE_TYPE_DOUBLE: double
767 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
768 * @li EINA_VALUE_TYPE_STRING: const char *
769 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array
770 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
771 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
772 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
773 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
774 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
775 *
776 * @code
777 * Eina_Value *value = eina_value_new(EINA_VALUE_TYPE_INT);
778 * int x = 567;
779 * eina_value_set(value, 1234);
780 * eina_value_set(value, x);
781 *
782 * eina_value_flush(value);
783 *
784 * eina_value_setup(value, EINA_VALUE_TYPE_STRING);
785 * eina_value_set(value, "hello world!");
786 *
787 * eina_value_free(value);
788 * @endcode
789 *
790 * @note for array member see eina_value_array_set()
791 * @note for list member see eina_value_list_set()
792 * @note for hash member see eina_value_hash_set()
793 *
794 * @see eina_value_get()
795 * @see eina_value_vset()
796 * @see eina_value_pset()
797 *
798 * @since 1.2
799 */
800static inline Eina_Bool eina_value_set(Eina_Value *value,
801 ...) EINA_ARG_NONNULL(1);
802
803/**
804 * @brief Get the generic value.
805 * @param value source value object
806 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
807 *
808 * The value is returned in the variable argument parameter, the
809 * actual value is type-dependent, but usually it will be what is
810 * stored inside the object. There shouldn't be any memory allocation,
811 * thus the contents should @b not be freed.
812 *
813 * The variable argument is dependent on chosen type. The list for
814 * basic types:
815 *
816 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
817 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
818 * @li EINA_VALUE_TYPE_UINT: unsigned int*
819 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
820 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
821 * @li EINA_VALUE_TYPE_CHAR: char*
822 * @li EINA_VALUE_TYPE_SHORT: short*
823 * @li EINA_VALUE_TYPE_INT: int*
824 * @li EINA_VALUE_TYPE_LONG: long*
825 * @li EINA_VALUE_TYPE_INT64: int64_t*
826 * @li EINA_VALUE_TYPE_FLOAT: float*
827 * @li EINA_VALUE_TYPE_DOUBLE: double*
828 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
829 * @li EINA_VALUE_TYPE_STRING: const char **
830 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
831 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
832 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
833 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
834 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
835 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
836 *
837 * @code
838 * Eina_Value *value = eina_value_new(EINA_VALUE_TYPE_INT);
839 * int x;
840 * const char *s;
841 *
842 * eina_value_set(value, 1234);
843 * eina_value_get(value, &x);
844 *
845 * eina_value_flush(value);
846 *
847 * eina_value_setup(value, EINA_VALUE_TYPE_STRING);
848 * eina_value_set(value, "hello world!");
849 * eina_value_get(value, &s);
850 *
851 * eina_value_free(value);
852 * @endcode
853 *
854 * @note for array member see eina_value_array_get()
855 * @note for list member see eina_value_list_get()
856 * @note for hash member see eina_value_hash_get()
857 *
858 * @see eina_value_set()
859 * @see eina_value_vset()
860 * @see eina_value_pset()
861 *
862 * @since 1.2
863 */
864static inline Eina_Bool eina_value_get(const Eina_Value *value,
865 ...) EINA_ARG_NONNULL(1);
866
867/**
868 * @brief Set the generic value.
869 * @param value source value object
870 * @param args variable argument
871 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
872 *
873 * @note for array member see eina_value_array_vset()
874 * @note for list member see eina_value_list_vset()
875 * @note for hash member see eina_value_hash_vset()
876 *
877 * @see eina_value_vget()
878 * @see eina_value_set()
879 * @see eina_value_pset()
880 *
881 * @since 1.2
882 */
883static inline Eina_Bool eina_value_vset(Eina_Value *value,
884 va_list args) EINA_ARG_NONNULL(1);
885
886/**
887 * @brief Get the generic value.
888 * @param value source value object
889 * @param args variable argument
890 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
891 *
892 * The value is returned in the variable argument parameter, the
893 * actual value is type-dependent, but usually it will be what is
894 * stored inside the object. There shouldn't be any memory allocation,
895 * thus the contents should @b not be freed.
896 *
897 * @note for array member see eina_value_array_vget()
898 * @note for list member see eina_value_list_vget()
899 * @note for hash member see eina_value_hash_vget()
900 *
901 * @see eina_value_vset()
902 * @see eina_value_get()
903 * @see eina_value_pget()
904 *
905 * @since 1.2
906 */
907static inline Eina_Bool eina_value_vget(const Eina_Value *value,
908 va_list args) EINA_ARG_NONNULL(1);
909
910/**
911 * @brief Set the generic value from pointer.
912 * @param value source value object
913 * @param ptr pointer to specify the contents.
914 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
915 *
916 * The pointer type is dependent on chosen value type. The list for
917 * basic types:
918 *
919 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
920 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
921 * @li EINA_VALUE_TYPE_UINT: unsigned int*
922 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
923 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
924 * @li EINA_VALUE_TYPE_CHAR: char*
925 * @li EINA_VALUE_TYPE_SHORT: short*
926 * @li EINA_VALUE_TYPE_INT: int*
927 * @li EINA_VALUE_TYPE_LONG: long*
928 * @li EINA_VALUE_TYPE_INT64: int64_t*
929 * @li EINA_VALUE_TYPE_FLOAT: float*
930 * @li EINA_VALUE_TYPE_DOUBLE: double*
931 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
932 * @li EINA_VALUE_TYPE_STRING: const char **
933 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
934 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
935 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
936 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
937 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
938 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
939 *
940 * @note the pointer contents are written using the size defined by
941 * type. It can be larger than void* or uint64_t.
942 *
943 * @code
944 * Eina_Value *value = eina_value_new(EINA_VALUE_TYPE_INT);
945 * int x = 567;
946 * const char *s = "hello world!";
947 *
948 * eina_value_pset(value, &x);
949 *
950 * eina_value_flush(value);
951 *
952 * eina_value_setup(value, EINA_VALUE_TYPE_STRING);
953 * eina_value_pset(value, &s);
954 *
955 * eina_value_free(value);
956 * @endcode
957 *
958 * @note for array member see eina_value_array_pset()
959 * @note for list member see eina_value_list_pset()
960 * @note for hash member see eina_value_hash_pset()
961 *
962 * @see eina_value_pget()
963 * @see eina_value_set()
964 * @see eina_value_vset()
965 *
966 * @since 1.2
967 */
968static inline Eina_Bool eina_value_pset(Eina_Value *value,
969 const void *ptr) EINA_ARG_NONNULL(1, 2);
970
971/**
972 * @brief Get the generic value to pointer.
973 * @param value source value object
974 * @param ptr pointer to receive the contents.
975 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
976 *
977 * The value is returned in pointer contents, the actual value is
978 * type-dependent, but usually it will be what is stored inside the
979 * object. There shouldn't be any memory allocation, thus the contents
980 * should @b not be freed.
981 *
982 * The pointer type is dependent on chosen value type. The list for
983 * basic types:
984 *
985 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
986 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
987 * @li EINA_VALUE_TYPE_UINT: unsigned int*
988 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
989 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
990 * @li EINA_VALUE_TYPE_CHAR: char*
991 * @li EINA_VALUE_TYPE_SHORT: short*
992 * @li EINA_VALUE_TYPE_INT: int*
993 * @li EINA_VALUE_TYPE_LONG: long*
994 * @li EINA_VALUE_TYPE_INT64: int64_t*
995 * @li EINA_VALUE_TYPE_FLOAT: float*
996 * @li EINA_VALUE_TYPE_DOUBLE: double*
997 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
998 * @li EINA_VALUE_TYPE_STRING: const char **
999 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1000 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1001 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1002 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1003 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1004 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1005 *
1006 * @code
1007 * Eina_Value *value = eina_value_new(EINA_VALUE_TYPE_INT);
1008 * int x;
1009 * const char *s;
1010 *
1011 * eina_value_set(value, 1234);
1012 * eina_value_pget(value, &x);
1013 *
1014 * eina_value_flush(value);
1015 *
1016 * eina_value_setup(value, EINA_VALUE_TYPE_STRING);
1017 * eina_value_set(value, "hello world!");
1018 * eina_value_pget(value, &s);
1019 *
1020 * eina_value_free(value);
1021 * @endcode
1022 *
1023 * @note for array member see eina_value_array_get()
1024 * @note for list member see eina_value_list_get()
1025 * @note for hash member see eina_value_hash_get()
1026 *
1027 * @see eina_value_set()
1028 * @see eina_value_vset()
1029 * @see eina_value_pset()
1030 *
1031 * @since 1.2
1032 */
1033static inline Eina_Bool eina_value_pget(const Eina_Value *value,
1034 void *ptr) EINA_ARG_NONNULL(1, 2);
1035
1036/**
1037 * @brief Convert one value to another type.
1038 * @param value source value object.
1039 * @param convert destination value object.
1040 * @return #EINA_TRUE if converted, #EINA_FALSE otherwise.
1041 *
1042 * Converts one value to another trying first @a value type
1043 * @c convert_to() function. If unsuccessful, tries using @c convert_from()
1044 * function in @a convert.
1045 *
1046 * Conversion functions are type defined, and the basic types can convert
1047 * between themselves, but conversion is strict! That is, if
1048 * converting from negative value to unsigned type, it will fail. It
1049 * also fails on value overflow.
1050 *
1051 * It is recommended that all types implement at least convert to
1052 * string, used by eina_value_to_string().
1053 *
1054 * @note Both objects must have eina_value_setup() called on them beforehand!
1055 *
1056 * @since 1.2
1057 */
1058EAPI Eina_Bool eina_value_convert(const Eina_Value *value,
1059 Eina_Value *convert) EINA_ARG_NONNULL(1, 2);
1060
1061
1062/**
1063 * @brief Convert value to string.
1064 * @param value value object.
1065 * @return newly allocated memory or @c NULL on failure.
1066 *
1067 * @see eina_value_convert()
1068 * @since 1.2
1069 */
1070EAPI char *eina_value_to_string(const Eina_Value *value) EINA_ARG_NONNULL(1);
1071
1072/**
1073 * @brief Query value type.
1074 * @param value value object.
1075 * @return type instance or @c NULL if type is invalid.
1076 *
1077 * Check if value type is valid and returns it. A type is invalid if
1078 * it does not exist or if it is using a different version field.
1079 *
1080 * @see eina_value_type_check()
1081 *
1082 * @since 1.2
1083 */
1084static inline const Eina_Value_Type *eina_value_type_get(const Eina_Value *value) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
1085
1086/**
1087 * @}
1088 */
1089
1090
1091/**
1092 * @defgroup Eina_Value_Array_Group Generic Value Array management
1093 *
1094 * @{
1095 */
1096
1097
1098/**
1099 * @typedef Eina_Value_Array
1100 * Value type for #EINA_VALUE_TYPE_ARRAY.
1101 *
1102 * @see #_Eina_Value_Array explains fields.
1103 * @since 1.2
1104 */
1105typedef struct _Eina_Value_Array Eina_Value_Array;
1106
1107/**
1108 * @struct _Eina_Value_Array
1109 * Used to store the array and its subtype.
1110 * @since 1.2
1111 */
1112struct _Eina_Value_Array
1113{
1114 const Eina_Value_Type *subtype; /**< how to allocate and access items */
1115 unsigned int step; /**< how to grow the members array */
1116 Eina_Inarray *array; /**< the array that holds data, members are of subtype->value_size bytes. */
1117};
1118
1119/**
1120 * @brief Create generic value storage of type array.
1121 * @param subtype how to manage this array members.
1122 * @param step how to grow the members array.
1123 * @return The new value or @c NULL on failure.
1124 *
1125 * Create a new generic value storage of type array. The members are
1126 * managed using the description specified by @a subtype.
1127 *
1128 * On failure, @c NULL is returned and #EINA_ERROR_OUT_OF_MEMORY or
1129 * #EINA_ERROR_VALUE_FAILED is set.
1130 *
1131 * @note this creates from mempool and then uses
1132 * eina_value_array_setup(). @see eina_value_free() @see
1133 * eina_value_array_setup()
1134 *
1135 * @since 1.2
1136 */
1137EAPI Eina_Value *eina_value_array_new(const Eina_Value_Type *subtype,
1138 unsigned int step) EINA_ARG_NONNULL(1);
1139
1140/**
1141 * @brief Initialize generic value storage of type array.
1142 * @param value value object
1143 * @param subtype how to manage array members.
1144 * @param step how to grow the members array.
1145 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1146 *
1147 * Initializes new generic value storage of type array with the given
1148 * @a subtype.
1149 *
1150 * This is the same as calling eina_value_set() with
1151 * #EINA_VALUE_TYPE_ARRAY followed by eina_value_pset() with the
1152 * #Eina_Value_Array description configured.
1153 *
1154 * @note Existing contents are ignored! If the value was previously used, then
1155 * use eina_value_flush() first.
1156 *
1157 * On failure, #EINA_FALSE is returned and #EINA_ERROR_OUT_OF_MEMORY
1158 * or #EINA_ERROR_VALUE_FAILED is set.
1159 *
1160 * @see eina_value_flush()
1161 *
1162 * @since 1.2
1163 */
1164static inline Eina_Bool eina_value_array_setup(Eina_Value *value,
1165 const Eina_Value_Type *subtype,
1166 unsigned int step) EINA_ARG_NONNULL(1, 2);
1167
1168/**
1169 * @brief Query number of elements in value of array type.
1170 * @param value value object.
1171 * @return number of child elements.
1172 * @since 1.2
1173 */
1174static inline unsigned int eina_value_array_count(const Eina_Value *value);
1175
1176/**
1177 * @brief Remove element at given position in value of array type.
1178 * @param value value object.
1179 * @param position index of the member
1180 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1181 * @since 1.2
1182 */
1183static inline Eina_Bool eina_value_array_remove(Eina_Value *value,
1184 unsigned int position) EINA_ARG_NONNULL(1);
1185
1186/**
1187 * @brief Set the generic value in an array member.
1188 * @param value source value object
1189 * @param position index of the member
1190 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1191 *
1192 * The variable argument is dependent on chosen subtype. The list for
1193 * basic types:
1194 *
1195 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
1196 * @li EINA_VALUE_TYPE_USHORT: unsigned short
1197 * @li EINA_VALUE_TYPE_UINT: unsigned int
1198 * @li EINA_VALUE_TYPE_ULONG: unsigned long
1199 * @li EINA_VALUE_TYPE_UINT64: uint64_t
1200 * @li EINA_VALUE_TYPE_CHAR: char
1201 * @li EINA_VALUE_TYPE_SHORT: short
1202 * @li EINA_VALUE_TYPE_INT: int
1203 * @li EINA_VALUE_TYPE_LONG: long
1204 * @li EINA_VALUE_TYPE_INT64: int64_t
1205 * @li EINA_VALUE_TYPE_FLOAT: float
1206 * @li EINA_VALUE_TYPE_DOUBLE: double
1207 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
1208 * @li EINA_VALUE_TYPE_STRING: const char *
1209 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array
1210 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
1211 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
1212 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
1213 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
1214 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
1215 *
1216 * @code
1217 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1218 * int x;
1219 *
1220 * eina_value_array_append(value, 1234);
1221 * eina_value_array_set(value, 0, 5678);
1222 * eina_value_array_get(value, 0, &x);
1223 * eina_value_free(value);
1224 * @endcode
1225 *
1226 * @see eina_value_array_get()
1227 * @see eina_value_array_vset()
1228 * @see eina_value_array_pset()
1229 * @see eina_value_array_insert()
1230 * @see eina_value_array_vinsert()
1231 * @see eina_value_array_pinsert()
1232 * @see eina_value_array_append()
1233 * @see eina_value_array_vappend()
1234 * @see eina_value_array_pappend()
1235 *
1236 * @since 1.2
1237 */
1238static inline Eina_Bool eina_value_array_set(Eina_Value *value,
1239 unsigned int position,
1240 ...) EINA_ARG_NONNULL(1);
1241
1242/**
1243 * @brief Get the generic value from an array member.
1244 * @param value source value object
1245 * @param position index of the member
1246 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1247 *
1248 * The value is returned in the variable argument parameter, and the
1249 * actual value is type-dependent, but usually it will be what is
1250 * stored inside the object. There shouldn't be any memory allocation;
1251 * thus the contents should @b not be freed.
1252 *
1253 * The variable argument is dependent on chosen subtype. The list for
1254 * basic types:
1255 *
1256 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1257 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1258 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1259 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1260 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1261 * @li EINA_VALUE_TYPE_CHAR: char*
1262 * @li EINA_VALUE_TYPE_SHORT: short*
1263 * @li EINA_VALUE_TYPE_INT: int*
1264 * @li EINA_VALUE_TYPE_LONG: long*
1265 * @li EINA_VALUE_TYPE_INT64: int64_t*
1266 * @li EINA_VALUE_TYPE_FLOAT: float*
1267 * @li EINA_VALUE_TYPE_DOUBLE: double*
1268 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1269 * @li EINA_VALUE_TYPE_STRING: const char **
1270 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1271 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1272 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1273 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1274 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1275 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1276 *
1277 * @code
1278 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1279 * int x;
1280 *
1281 * eina_value_array_append(value, 1234);
1282 * eina_value_array_get(value, 0, &x);
1283 * eina_value_free(value);
1284 * @endcode
1285 *
1286 * @see eina_value_array_set()
1287 * @see eina_value_array_vset()
1288 * @see eina_value_array_pset()
1289 *
1290 * @since 1.2
1291 */
1292static inline Eina_Bool eina_value_array_get(const Eina_Value *value,
1293 unsigned int position,
1294 ...) EINA_ARG_NONNULL(1);
1295
1296/**
1297 * @brief Insert a generic value in an array member position.
1298 * @param value source value object
1299 * @param position index of the member
1300 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1301 *
1302 * The variable argument is dependent on chosen subtype. The list for
1303 * basic types:
1304 *
1305 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
1306 * @li EINA_VALUE_TYPE_USHORT: unsigned short
1307 * @li EINA_VALUE_TYPE_UINT: unsigned int
1308 * @li EINA_VALUE_TYPE_ULONG: unsigned long
1309 * @li EINA_VALUE_TYPE_UINT64: uint64_t
1310 * @li EINA_VALUE_TYPE_CHAR: char
1311 * @li EINA_VALUE_TYPE_SHORT: short
1312 * @li EINA_VALUE_TYPE_INT: int
1313 * @li EINA_VALUE_TYPE_LONG: long
1314 * @li EINA_VALUE_TYPE_INT64: int64_t
1315 * @li EINA_VALUE_TYPE_FLOAT: float
1316 * @li EINA_VALUE_TYPE_DOUBLE: double
1317 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
1318 * @li EINA_VALUE_TYPE_STRING: const char *
1319 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array
1320 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
1321 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
1322 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
1323 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
1324 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
1325 *
1326 * @code
1327 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1328 * int x;
1329 *
1330 * eina_value_array_insert(value, 0, 1234);
1331 * eina_value_array_get(value, 0, &x);
1332 * eina_value_free(value);
1333 * @endcode
1334 *
1335 * @see eina_value_array_set()
1336 * @see eina_value_array_get()
1337 * @see eina_value_array_vset()
1338 * @see eina_value_array_pset()
1339 * @see eina_value_array_vinsert()
1340 * @see eina_value_array_pinsert()
1341 * @see eina_value_array_append()
1342 * @see eina_value_array_vappend()
1343 * @see eina_value_array_pappend()
1344 *
1345 * @since 1.2
1346 */
1347static inline Eina_Bool eina_value_array_insert(Eina_Value *value,
1348 unsigned int position,
1349 ...) EINA_ARG_NONNULL(1);
1350
1351
1352/**
1353 * @brief Append a generic value in an array.
1354 * @param value source value object
1355 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1356 *
1357 * The variable argument is dependent on chosen subtype. The list for
1358 * basic types:
1359 *
1360 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
1361 * @li EINA_VALUE_TYPE_USHORT: unsigned short
1362 * @li EINA_VALUE_TYPE_UINT: unsigned int
1363 * @li EINA_VALUE_TYPE_ULONG: unsigned long
1364 * @li EINA_VALUE_TYPE_UINT64: uint64_t
1365 * @li EINA_VALUE_TYPE_CHAR: char
1366 * @li EINA_VALUE_TYPE_SHORT: short
1367 * @li EINA_VALUE_TYPE_INT: int
1368 * @li EINA_VALUE_TYPE_LONG: long
1369 * @li EINA_VALUE_TYPE_INT64: int64_t
1370 * @li EINA_VALUE_TYPE_FLOAT: float
1371 * @li EINA_VALUE_TYPE_DOUBLE: double
1372 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
1373 * @li EINA_VALUE_TYPE_STRING: const char *
1374 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array
1375 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
1376 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
1377 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
1378 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
1379 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
1380 *
1381 * @code
1382 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1383 * int x;
1384 *
1385 * eina_value_array_append(value, 1234);
1386 * eina_value_array_get(value, 0, &x);
1387 * eina_value_free(value);
1388 * @endcode
1389 *
1390 * @see eina_value_array_set()
1391 * @see eina_value_array_get()
1392 * @see eina_value_array_vset()
1393 * @see eina_value_array_pset()
1394 * @see eina_value_array_vinsert()
1395 * @see eina_value_array_pinsert()
1396 * @see eina_value_array_append()
1397 * @see eina_value_array_vappend()
1398 * @see eina_value_array_pappend()
1399 *
1400 * @since 1.2
1401 */
1402static inline Eina_Bool eina_value_array_append(Eina_Value *value,
1403 ...) EINA_ARG_NONNULL(1);
1404
1405/**
1406 * @brief Set a generic value to an array member.
1407 * @param value source value object
1408 * @param position index of the member
1409 * @param args variable argument
1410 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1411 * @see eina_value_array_set()
1412 * @see eina_value_array_get()
1413 * @see eina_value_array_pset()
1414 * @see eina_value_array_insert()
1415 * @see eina_value_array_vinsert()
1416 * @see eina_value_array_pinsert()
1417 * @see eina_value_array_append()
1418 * @see eina_value_array_vappend()
1419 * @see eina_value_array_pappend()
1420 *
1421 * @since 1.2
1422 */
1423static inline Eina_Bool eina_value_array_vset(Eina_Value *value,
1424 unsigned int position,
1425 va_list args) EINA_ARG_NONNULL(1);
1426
1427/**
1428 * @brief Get the generic value from an array member.
1429 * @param value source value object
1430 * @param position index of the member
1431 * @param args variable argument
1432 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1433 *
1434 * The value is returned in the variable argument parameter, the
1435 * actual value is type-dependent, but usually it will be what is
1436 * stored inside the object. There shouldn't be any memory allocation,
1437 * thus the contents should @b not be freed.
1438 *
1439 * @see eina_value_array_vset()
1440 * @see eina_value_array_get()
1441 * @see eina_value_array_pget()
1442 *
1443 * @since 1.2
1444 */
1445static inline Eina_Bool eina_value_array_vget(const Eina_Value *value,
1446 unsigned int position,
1447 va_list args) EINA_ARG_NONNULL(1);
1448/**
1449 * @brief Insert a generic value to an array member position.
1450 * @param value source value object
1451 * @param position index of the member
1452 * @param args variable argument
1453 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1454 * @see eina_value_array_set()
1455 * @see eina_value_array_get()
1456 * @see eina_value_array_vset()
1457 * @see eina_value_array_pset()
1458 * @see eina_value_array_insert()
1459 * @see eina_value_array_pinsert()
1460 * @see eina_value_array_append()
1461 * @see eina_value_array_vappend()
1462 * @see eina_value_array_pappend()
1463 *
1464 * @since 1.2
1465 */
1466static inline Eina_Bool eina_value_array_vinsert(Eina_Value *value,
1467 unsigned int position,
1468 va_list args) EINA_ARG_NONNULL(1);
1469
1470/**
1471 * @brief Append a generic value to an array.
1472 * @param value source value object
1473 * @param args variable argument
1474 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1475 * @see eina_value_array_set()
1476 * @see eina_value_array_get()
1477 * @see eina_value_array_vget()
1478 * @see eina_value_array_pset()
1479 * @see eina_value_array_insert()
1480 * @see eina_value_array_vinsert()
1481 * @see eina_value_array_pinsert()
1482 * @see eina_value_array_append()
1483 * @see eina_value_array_pappend()
1484 *
1485 * @since 1.2
1486 */
1487static inline Eina_Bool eina_value_array_vappend(Eina_Value *value,
1488 va_list args) EINA_ARG_NONNULL(1);
1489
1490
1491/**
1492 * @brief Set a generic value to an array member from a pointer.
1493 * @param value source value object
1494 * @param position index of the member
1495 * @param ptr pointer to specify the contents.
1496 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1497 *
1498 * The pointer type is dependent on chosen value type. The list for
1499 * basic types:
1500 *
1501 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1502 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1503 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1504 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1505 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1506 * @li EINA_VALUE_TYPE_CHAR: char*
1507 * @li EINA_VALUE_TYPE_SHORT: short*
1508 * @li EINA_VALUE_TYPE_INT: int*
1509 * @li EINA_VALUE_TYPE_LONG: long*
1510 * @li EINA_VALUE_TYPE_INT64: int64_t*
1511 * @li EINA_VALUE_TYPE_FLOAT: float*
1512 * @li EINA_VALUE_TYPE_DOUBLE: double*
1513 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1514 * @li EINA_VALUE_TYPE_STRING: const char **
1515 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1516 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1517 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1518 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1519 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1520 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1521 *
1522 * @note the pointer contents are written using the size defined by
1523 * type. It can be larger than void* or uint64_t.
1524 *
1525 * @code
1526 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1527 * int x = 1234;
1528 *
1529 * eina_value_array_append(value, 1234);
1530 * eina_value_array_pset(value, 0, &x);
1531 * eina_value_array_pget(value, 0, &x);
1532 * eina_value_free(value);
1533 * @endcode
1534 *
1535 * @see eina_value_array_set()
1536 * @see eina_value_array_get()
1537 * @see eina_value_array_vset()
1538 * @see eina_value_array_insert()
1539 * @see eina_value_array_vinsert()
1540 * @see eina_value_array_pinsert()
1541 * @see eina_value_array_append()
1542 * @see eina_value_array_vappend()
1543 * @see eina_value_array_pappend()
1544 *
1545 * @since 1.2
1546 */
1547static inline Eina_Bool eina_value_array_pset(Eina_Value *value,
1548 unsigned int position,
1549 const void *ptr) EINA_ARG_NONNULL(1, 3);
1550
1551/**
1552 * @brief Retrieve a generic value into a pointer from an array member.
1553 * @param value source value object
1554 * @param position index of the member
1555 * @param ptr pointer to receive the contents.
1556 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1557 *
1558 * The value is returned in pointer contents, the actual value is
1559 * type-dependent, but usually it will be what is stored inside the
1560 * object. There shouldn't be any memory allocation, thus the contents
1561 * should @b not be freed.
1562 *
1563 * The pointer type is dependent on chosen value type. The list for
1564 * basic types:
1565 *
1566 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1567 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1568 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1569 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1570 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1571 * @li EINA_VALUE_TYPE_CHAR: char*
1572 * @li EINA_VALUE_TYPE_SHORT: short*
1573 * @li EINA_VALUE_TYPE_INT: int*
1574 * @li EINA_VALUE_TYPE_LONG: long*
1575 * @li EINA_VALUE_TYPE_INT64: int64_t*
1576 * @li EINA_VALUE_TYPE_FLOAT: float*
1577 * @li EINA_VALUE_TYPE_DOUBLE: double*
1578 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1579 * @li EINA_VALUE_TYPE_STRING: const char **
1580 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1581 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1582 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1583 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1584 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1585 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1586 *
1587 * @code
1588 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1589 * int x;
1590 *
1591 * eina_value_array_append(value, 1234);
1592 * eina_value_array_pget(value, 0, &x);
1593 * eina_value_free(value);
1594 * @endcode
1595 *
1596 * @see eina_value_array_set()
1597 * @see eina_value_array_vset()
1598 * @see eina_value_array_pset()
1599 *
1600 * @since 1.2
1601 */
1602static inline Eina_Bool eina_value_array_pget(const Eina_Value *value,
1603 unsigned int position,
1604 void *ptr) EINA_ARG_NONNULL(1, 3);
1605
1606/**
1607 * @brief Insert a generic value to an array member position from a pointer.
1608 * @param value source value object
1609 * @param position index of the member
1610 * @param ptr pointer to specify the contents.
1611 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1612 *
1613 * The pointer type is dependent on chosen value type. The list for
1614 * basic types:
1615 *
1616 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1617 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1618 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1619 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1620 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1621 * @li EINA_VALUE_TYPE_CHAR: char*
1622 * @li EINA_VALUE_TYPE_SHORT: short*
1623 * @li EINA_VALUE_TYPE_INT: int*
1624 * @li EINA_VALUE_TYPE_LONG: long*
1625 * @li EINA_VALUE_TYPE_INT64: int64_t*
1626 * @li EINA_VALUE_TYPE_FLOAT: float*
1627 * @li EINA_VALUE_TYPE_DOUBLE: double*
1628 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1629 * @li EINA_VALUE_TYPE_STRING: const char **
1630 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1631 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1632 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1633 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1634 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1635 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1636 *
1637 * @note the pointer contents are written using the size defined by
1638 * type. It can be larger than void* or uint64_t.
1639 *
1640 * @code
1641 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1642 * int x = 1234;
1643 *
1644 * eina_value_array_pinsert(value, 0, &x);
1645 * eina_value_array_pget(value, 0, &x);
1646 * eina_value_free(value);
1647 * @endcode
1648 *
1649 * @see eina_value_array_set()
1650 * @see eina_value_array_get()
1651 * @see eina_value_array_vset()
1652 * @see eina_value_array_insert()
1653 * @see eina_value_array_vinsert()
1654 * @see eina_value_array_pinsert()
1655 * @see eina_value_array_append()
1656 * @see eina_value_array_vappend()
1657 * @see eina_value_array_pappend()
1658 *
1659 * @since 1.2
1660 */
1661static inline Eina_Bool eina_value_array_pinsert(Eina_Value *value,
1662 unsigned int position,
1663 const void *ptr) EINA_ARG_NONNULL(1);
1664
1665/**
1666 * @brief Append a generic value to an array from a pointer.
1667 * @param value source value object
1668 * @param ptr pointer to specify the contents.
1669 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1670 *
1671 * The pointer type is dependent on chosen value type. The list for
1672 * basic types:
1673 *
1674 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1675 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1676 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1677 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1678 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1679 * @li EINA_VALUE_TYPE_CHAR: char*
1680 * @li EINA_VALUE_TYPE_SHORT: short*
1681 * @li EINA_VALUE_TYPE_INT: int*
1682 * @li EINA_VALUE_TYPE_LONG: long*
1683 * @li EINA_VALUE_TYPE_INT64: int64_t*
1684 * @li EINA_VALUE_TYPE_FLOAT: float*
1685 * @li EINA_VALUE_TYPE_DOUBLE: double*
1686 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1687 * @li EINA_VALUE_TYPE_STRING: const char **
1688 * @li EINA_VALUE_TYPE_ARRAY: Eina_Value_Array*
1689 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1690 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1691 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1692 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1693 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1694 *
1695 * @note the pointer contents are written using the size defined by
1696 * type. It can be larger than void* or uint64_t.
1697 *
1698 * @code
1699 * Eina_Value *value = eina_value_array_new(EINA_VALUE_TYPE_INT, 0);
1700 * int x = 1234;
1701 *
1702 * eina_value_array_pappend(value, &x);
1703 * eina_value_array_pget(value, 0, &x);
1704 * eina_value_free(value);
1705 * @endcode
1706 *
1707 * @see eina_value_array_set()
1708 * @see eina_value_array_get()
1709 * @see eina_value_array_vset()
1710 * @see eina_value_array_insert()
1711 * @see eina_value_array_vinsert()
1712 * @see eina_value_array_pinsert()
1713 * @see eina_value_array_append()
1714 * @see eina_value_array_vappend()
1715 * @see eina_value_array_pappend()
1716 *
1717 * @since 1.2
1718 */
1719static inline Eina_Bool eina_value_array_pappend(Eina_Value *value,
1720 const void *ptr) EINA_ARG_NONNULL(1);
1721
1722/**
1723 * @brief Retrieves a value from the array as an Eina_Value copy.
1724 * @param value source value object
1725 * @param position index of the member
1726 * @param dst where to return the array member
1727 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1728 *
1729 * The argument @a dst is considered uninitialized and it's setup to
1730 * the type of the member.
1731 *
1732 * @since 1.2
1733 */
1734static inline Eina_Bool eina_value_array_value_get(const Eina_Value *src,
1735 unsigned int position,
1736 Eina_Value *dst) EINA_ARG_NONNULL(1, 3);
1737
1738/**
1739 * @}
1740 */
1741
1742
1743/**
1744 * @defgroup Eina_Value_List_Group Generic Value List management
1745 *
1746 * @{
1747 */
1748
1749
1750/**
1751 * @typedef Eina_Value_List
1752 * Value type for #EINA_VALUE_TYPE_LIST.
1753 *
1754 * @see #_Eina_Value_List explains fields.
1755 * @since 1.2
1756 */
1757typedef struct _Eina_Value_List Eina_Value_List;
1758
1759/**
1760 * @struct _Eina_Value_List
1761 * Used to store the list and its subtype.
1762 * @since 1.2
1763 */
1764struct _Eina_Value_List
1765{
1766 const Eina_Value_Type *subtype; /**< how to allocate and access items */
1767 Eina_List *list; /**< the list that holds data, members are of subtype->value_size bytes. */
1768};
1769
1770/**
1771 * @brief Create generic value storage of type list.
1772 * @param subtype how to manage this list members.
1773 * @return The new value or @c NULL on failure.
1774 *
1775 * Create a new generic value storage of type list. The members are
1776 * managed using the description specified by @a subtype.
1777 *
1778 * On failure, @c NULL is returned and #EINA_ERROR_OUT_OF_MEMORY or
1779 * #EINA_ERROR_VALUE_FAILED is set.
1780 *
1781 * @note this creates from mempool and then uses
1782 * eina_value_list_setup().
1783 *
1784 * @see eina_value_free()
1785 * @see eina_value_list_setup()
1786 *
1787 * @since 1.2
1788 */
1789EAPI Eina_Value *eina_value_list_new(const Eina_Value_Type *subtype) EINA_ARG_NONNULL(1);
1790
1791/**
1792 * @brief Initialize generic value storage of type list.
1793 * @param value value object
1794 * @param subtype how to manage this list members.
1795 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1796 *
1797 * Initializes new generic value storage of type list with the given
1798 * @a subtype.
1799 *
1800 * This is the same as calling eina_value_set() with
1801 * #EINA_VALUE_TYPE_LIST followed by eina_value_pset() with the
1802 * #Eina_Value_List description configured.
1803 *
1804 * @note Existing contents are ignored! If the value was previously used, then
1805 * use eina_value_flush() first.
1806 *
1807 * On failure, #EINA_FALSE is returned and #EINA_ERROR_OUT_OF_MEMORY
1808 * or #EINA_ERROR_VALUE_FAILED is set.
1809 *
1810 * @see eina_value_flush()
1811 *
1812 * @since 1.2
1813 */
1814static inline Eina_Bool eina_value_list_setup(Eina_Value *value,
1815 const Eina_Value_Type *subtype) EINA_ARG_NONNULL(1, 2);
1816
1817/**
1818 * @brief Query number of elements in value of list type.
1819 * @param value value object.
1820 * @return number of child elements.
1821 * @since 1.2
1822 */
1823static inline unsigned int eina_value_list_count(const Eina_Value *value);
1824
1825/**
1826 * @brief Remove element at given position in value of list type.
1827 * @param value value object.
1828 * @param position index of the member
1829 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1830 * @since 1.2
1831 */
1832static inline Eina_Bool eina_value_list_remove(Eina_Value *value,
1833 unsigned int position) EINA_ARG_NONNULL(1);
1834
1835/**
1836 * @brief Set the generic value in an list member.
1837 * @param value source value object
1838 * @param position index of the member
1839 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1840 *
1841 * The variable argument is dependent on chosen subtype. The list for
1842 * basic types:
1843 *
1844 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
1845 * @li EINA_VALUE_TYPE_USHORT: unsigned short
1846 * @li EINA_VALUE_TYPE_UINT: unsigned int
1847 * @li EINA_VALUE_TYPE_ULONG: unsigned long
1848 * @li EINA_VALUE_TYPE_UINT64: uint64_t
1849 * @li EINA_VALUE_TYPE_CHAR: char
1850 * @li EINA_VALUE_TYPE_SHORT: short
1851 * @li EINA_VALUE_TYPE_INT: int
1852 * @li EINA_VALUE_TYPE_LONG: long
1853 * @li EINA_VALUE_TYPE_INT64: int64_t
1854 * @li EINA_VALUE_TYPE_FLOAT: float
1855 * @li EINA_VALUE_TYPE_DOUBLE: double
1856 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
1857 * @li EINA_VALUE_TYPE_STRING: const char *
1858 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
1859 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
1860 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
1861 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
1862 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
1863 *
1864 * @code
1865 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
1866 * int x;
1867 *
1868 * eina_value_list_append(value, 1234);
1869 * eina_value_list_set(value, 0, 5678);
1870 * eina_value_list_get(value, 0, &x);
1871 * eina_value_free(value);
1872 * @endcode
1873 *
1874 * @see eina_value_list_get()
1875 * @see eina_value_list_vset()
1876 * @see eina_value_list_pset()
1877 * @see eina_value_list_insert()
1878 * @see eina_value_list_vinsert()
1879 * @see eina_value_list_pinsert()
1880 * @see eina_value_list_append()
1881 * @see eina_value_list_vappend()
1882 * @see eina_value_list_pappend()
1883 *
1884 * @since 1.2
1885 */
1886static inline Eina_Bool eina_value_list_set(Eina_Value *value,
1887 unsigned int position,
1888 ...) EINA_ARG_NONNULL(1);
1889
1890/**
1891 * @brief Get the generic value from an list member.
1892 * @param value source value object
1893 * @param position index of the member
1894 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1895 *
1896 * The value is returned in the variable argument parameter, the
1897 * actual value is type-dependent, but usually it will be what is
1898 * stored inside the object. There shouldn't be any memory allocation,
1899 * thus the contents should @b not be freed.
1900 *
1901 * The variable argument is dependent on chosen subtype. The list for
1902 * basic types:
1903 *
1904 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
1905 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
1906 * @li EINA_VALUE_TYPE_UINT: unsigned int*
1907 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
1908 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
1909 * @li EINA_VALUE_TYPE_CHAR: char*
1910 * @li EINA_VALUE_TYPE_SHORT: short*
1911 * @li EINA_VALUE_TYPE_INT: int*
1912 * @li EINA_VALUE_TYPE_LONG: long*
1913 * @li EINA_VALUE_TYPE_INT64: int64_t*
1914 * @li EINA_VALUE_TYPE_FLOAT: float*
1915 * @li EINA_VALUE_TYPE_DOUBLE: double*
1916 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
1917 * @li EINA_VALUE_TYPE_STRING: const char **
1918 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
1919 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
1920 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
1921 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
1922 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
1923 *
1924 * @code
1925 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
1926 * int x;
1927 *
1928 * eina_value_list_append(value, 1234);
1929 * eina_value_list_get(value, 0, &x);
1930 * eina_value_free(value);
1931 * @endcode
1932 *
1933 * @see eina_value_list_set()
1934 * @see eina_value_list_vset()
1935 * @see eina_value_list_pset()
1936 *
1937 * @since 1.2
1938 */
1939static inline Eina_Bool eina_value_list_get(const Eina_Value *value,
1940 unsigned int position,
1941 ...) EINA_ARG_NONNULL(1);
1942
1943/**
1944 * @brief Insert the generic value in an list member position.
1945 * @param value source value object
1946 * @param position index of the member
1947 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
1948 *
1949 * The variable argument is dependent on chosen subtype. The list for
1950 * basic types:
1951 *
1952 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
1953 * @li EINA_VALUE_TYPE_USHORT: unsigned short
1954 * @li EINA_VALUE_TYPE_UINT: unsigned int
1955 * @li EINA_VALUE_TYPE_ULONG: unsigned long
1956 * @li EINA_VALUE_TYPE_UINT64: uint64_t
1957 * @li EINA_VALUE_TYPE_CHAR: char
1958 * @li EINA_VALUE_TYPE_SHORT: short
1959 * @li EINA_VALUE_TYPE_INT: int
1960 * @li EINA_VALUE_TYPE_LONG: long
1961 * @li EINA_VALUE_TYPE_INT64: int64_t
1962 * @li EINA_VALUE_TYPE_FLOAT: float
1963 * @li EINA_VALUE_TYPE_DOUBLE: double
1964 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
1965 * @li EINA_VALUE_TYPE_STRING: const char *
1966 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
1967 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
1968 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
1969 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
1970 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
1971 *
1972 * @code
1973 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
1974 * int x;
1975 *
1976 * eina_value_list_insert(value, 0, 1234);
1977 * eina_value_list_get(value, 0, &x);
1978 * eina_value_free(value);
1979 * @endcode
1980 *
1981 * @see eina_value_list_set()
1982 * @see eina_value_list_get()
1983 * @see eina_value_list_vset()
1984 * @see eina_value_list_pset()
1985 * @see eina_value_list_vinsert()
1986 * @see eina_value_list_pinsert()
1987 * @see eina_value_list_append()
1988 * @see eina_value_list_vappend()
1989 * @see eina_value_list_pappend()
1990 *
1991 * @since 1.2
1992 */
1993static inline Eina_Bool eina_value_list_insert(Eina_Value *value,
1994 unsigned int position,
1995 ...) EINA_ARG_NONNULL(1);
1996
1997
1998/**
1999 * @brief Append the generic value in an list.
2000 * @param value source value object
2001 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2002 *
2003 * The variable argument is dependent on chosen subtype. The list for
2004 * basic types:
2005 *
2006 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
2007 * @li EINA_VALUE_TYPE_USHORT: unsigned short
2008 * @li EINA_VALUE_TYPE_UINT: unsigned int
2009 * @li EINA_VALUE_TYPE_ULONG: unsigned long
2010 * @li EINA_VALUE_TYPE_UINT64: uint64_t
2011 * @li EINA_VALUE_TYPE_CHAR: char
2012 * @li EINA_VALUE_TYPE_SHORT: short
2013 * @li EINA_VALUE_TYPE_INT: int
2014 * @li EINA_VALUE_TYPE_LONG: long
2015 * @li EINA_VALUE_TYPE_INT64: int64_t
2016 * @li EINA_VALUE_TYPE_FLOAT: float
2017 * @li EINA_VALUE_TYPE_DOUBLE: double
2018 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
2019 * @li EINA_VALUE_TYPE_STRING: const char *
2020 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List
2021 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
2022 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval
2023 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob
2024 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct
2025 *
2026 * @code
2027 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
2028 * int x;
2029 *
2030 * eina_value_list_append(value, 1234);
2031 * eina_value_list_get(value, 0, &x);
2032 * eina_value_free(value);
2033 * @endcode
2034 *
2035 * @see eina_value_list_set()
2036 * @see eina_value_list_get()
2037 * @see eina_value_list_vset()
2038 * @see eina_value_list_pset()
2039 * @see eina_value_list_vinsert()
2040 * @see eina_value_list_pinsert()
2041 * @see eina_value_list_append()
2042 * @see eina_value_list_vappend()
2043 * @see eina_value_list_pappend()
2044 *
2045 * @since 1.2
2046 */
2047static inline Eina_Bool eina_value_list_append(Eina_Value *value,
2048 ...) EINA_ARG_NONNULL(1);
2049
2050/**
2051 * @brief Set the generic value in an list member.
2052 * @param value source value object
2053 * @param position index of the member
2054 * @param args variable argument
2055 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2056 * @see eina_value_list_set()
2057 * @see eina_value_list_get()
2058 * @see eina_value_list_pset()
2059 * @see eina_value_list_insert()
2060 * @see eina_value_list_vinsert()
2061 * @see eina_value_list_pinsert()
2062 * @see eina_value_list_append()
2063 * @see eina_value_list_vappend()
2064 * @see eina_value_list_pappend()
2065 *
2066 * @since 1.2
2067 */
2068static inline Eina_Bool eina_value_list_vset(Eina_Value *value,
2069 unsigned int position,
2070 va_list args) EINA_ARG_NONNULL(1);
2071
2072/**
2073 * @brief Get the generic value from an list member.
2074 * @param value source value object
2075 * @param position index of the member
2076 * @param args variable argument
2077 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2078 *
2079 * The value is returned in the variable argument parameter, the
2080 * actual value is type-dependent, but usually it will be what is
2081 * stored inside the object. There shouldn't be any memory allocation,
2082 * thus the contents should @b not be freed.
2083 *
2084 * @see eina_value_list_vset()
2085 * @see eina_value_list_get()
2086 * @see eina_value_list_pget()
2087 *
2088 * @since 1.2
2089 */
2090static inline Eina_Bool eina_value_list_vget(const Eina_Value *value,
2091 unsigned int position,
2092 va_list args) EINA_ARG_NONNULL(1);
2093/**
2094 * @brief Insert the generic value in an list member position.
2095 * @param value source value object
2096 * @param position index of the member
2097 * @param args variable argument
2098 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2099 * @see eina_value_list_set()
2100 * @see eina_value_list_get()
2101 * @see eina_value_list_vset()
2102 * @see eina_value_list_pset()
2103 * @see eina_value_list_insert()
2104 * @see eina_value_list_pinsert()
2105 * @see eina_value_list_append()
2106 * @see eina_value_list_vappend()
2107 * @see eina_value_list_pappend()
2108 *
2109 * @since 1.2
2110 */
2111static inline Eina_Bool eina_value_list_vinsert(Eina_Value *value,
2112 unsigned int position,
2113 va_list args) EINA_ARG_NONNULL(1);
2114
2115/**
2116 * @brief Append the generic value in an list.
2117 * @param value source value object
2118 * @param args variable argument
2119 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2120 * @see eina_value_list_set()
2121 * @see eina_value_list_get()
2122 * @see eina_value_list_vget()
2123 * @see eina_value_list_pset()
2124 * @see eina_value_list_insert()
2125 * @see eina_value_list_vinsert()
2126 * @see eina_value_list_pinsert()
2127 * @see eina_value_list_append()
2128 * @see eina_value_list_pappend()
2129 *
2130 * @since 1.2
2131 */
2132static inline Eina_Bool eina_value_list_vappend(Eina_Value *value,
2133 va_list args) EINA_ARG_NONNULL(1);
2134
2135
2136/**
2137 * @brief Set the generic value in an list member from pointer.
2138 * @param value source value object
2139 * @param position index of the member
2140 * @param ptr pointer to specify the contents.
2141 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2142 *
2143 * The pointer type is dependent on chosen value type. The list for
2144 * basic types:
2145 *
2146 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2147 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2148 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2149 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2150 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2151 * @li EINA_VALUE_TYPE_CHAR: char*
2152 * @li EINA_VALUE_TYPE_SHORT: short*
2153 * @li EINA_VALUE_TYPE_INT: int*
2154 * @li EINA_VALUE_TYPE_LONG: long*
2155 * @li EINA_VALUE_TYPE_INT64: int64_t*
2156 * @li EINA_VALUE_TYPE_FLOAT: float*
2157 * @li EINA_VALUE_TYPE_DOUBLE: double*
2158 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2159 * @li EINA_VALUE_TYPE_STRING: const char **
2160 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
2161 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2162 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2163 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2164 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2165 *
2166 * @note the pointer contents are written using the size defined by
2167 * type. It can be larger than void* or uint64_t.
2168 *
2169 * @code
2170 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
2171 * int x = 1234;
2172 *
2173 * eina_value_list_append(value, 1234);
2174 * eina_value_list_pset(value, 0, &x);
2175 * eina_value_list_pget(value, 0, &x);
2176 * eina_value_free(value);
2177 * @endcode
2178 *
2179 * @see eina_value_list_set()
2180 * @see eina_value_list_get()
2181 * @see eina_value_list_vset()
2182 * @see eina_value_list_insert()
2183 * @see eina_value_list_vinsert()
2184 * @see eina_value_list_pinsert()
2185 * @see eina_value_list_append()
2186 * @see eina_value_list_vappend()
2187 * @see eina_value_list_pappend()
2188 *
2189 * @since 1.2
2190 */
2191static inline Eina_Bool eina_value_list_pset(Eina_Value *value,
2192 unsigned int position,
2193 const void *ptr) EINA_ARG_NONNULL(1, 3);
2194
2195/**
2196 * @brief Get the generic value to pointer from an list member.
2197 * @param value source value object
2198 * @param position index of the member
2199 * @param ptr pointer to receive the contents.
2200 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2201 *
2202 * The value is returned in pointer contents, the actual value is
2203 * type-dependent, but usually it will be what is stored inside the
2204 * object. There shouldn't be any memory allocation, thus the contents
2205 * should @b not be freed.
2206 *
2207 * The pointer type is dependent on chosen value type. The list for
2208 * basic types:
2209 *
2210 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2211 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2212 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2213 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2214 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2215 * @li EINA_VALUE_TYPE_CHAR: char*
2216 * @li EINA_VALUE_TYPE_SHORT: short*
2217 * @li EINA_VALUE_TYPE_INT: int*
2218 * @li EINA_VALUE_TYPE_LONG: long*
2219 * @li EINA_VALUE_TYPE_INT64: int64_t*
2220 * @li EINA_VALUE_TYPE_FLOAT: float*
2221 * @li EINA_VALUE_TYPE_DOUBLE: double*
2222 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2223 * @li EINA_VALUE_TYPE_STRING: const char **
2224 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
2225 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2226 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2227 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2228 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2229 *
2230 * @code
2231 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
2232 * int x;
2233 *
2234 * eina_value_list_append(value, 1234);
2235 * eina_value_list_pget(value, 0, &x);
2236 * eina_value_free(value);
2237 * @endcode
2238 *
2239 * @see eina_value_list_set()
2240 * @see eina_value_list_vset()
2241 * @see eina_value_list_pset()
2242 *
2243 * @since 1.2
2244 */
2245static inline Eina_Bool eina_value_list_pget(const Eina_Value *value,
2246 unsigned int position,
2247 void *ptr) EINA_ARG_NONNULL(1, 3);
2248
2249/**
2250 * @brief Insert the generic value in an list member position from pointer.
2251 * @param value source value object
2252 * @param position index of the member
2253 * @param ptr pointer to specify the contents.
2254 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2255 *
2256 * The pointer type is dependent on chosen value type. The list for
2257 * basic types:
2258 *
2259 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2260 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2261 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2262 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2263 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2264 * @li EINA_VALUE_TYPE_CHAR: char*
2265 * @li EINA_VALUE_TYPE_SHORT: short*
2266 * @li EINA_VALUE_TYPE_INT: int*
2267 * @li EINA_VALUE_TYPE_LONG: long*
2268 * @li EINA_VALUE_TYPE_INT64: int64_t*
2269 * @li EINA_VALUE_TYPE_FLOAT: float*
2270 * @li EINA_VALUE_TYPE_DOUBLE: double*
2271 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2272 * @li EINA_VALUE_TYPE_STRING: const char **
2273 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
2274 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2275 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2276 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2277 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2278 *
2279 * @note the pointer contents are written using the size defined by
2280 * type. It can be larger than void* or uint64_t.
2281 *
2282 * @code
2283 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
2284 * int x = 1234;
2285 *
2286 * eina_value_list_pinsert(value, 0, &x);
2287 * eina_value_list_pget(value, 0, &x);
2288 * eina_value_free(value);
2289 * @endcode
2290 *
2291 * @see eina_value_list_set()
2292 * @see eina_value_list_get()
2293 * @see eina_value_list_vset()
2294 * @see eina_value_list_insert()
2295 * @see eina_value_list_vinsert()
2296 * @see eina_value_list_pinsert()
2297 * @see eina_value_list_append()
2298 * @see eina_value_list_vappend()
2299 * @see eina_value_list_pappend()
2300 *
2301 * @since 1.2
2302 */
2303static inline Eina_Bool eina_value_list_pinsert(Eina_Value *value,
2304 unsigned int position,
2305 const void *ptr) EINA_ARG_NONNULL(1);
2306
2307/**
2308 * @brief Append the generic value in an list from pointer.
2309 * @param value source value object
2310 * @param ptr pointer to specify the contents.
2311 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2312 *
2313 * The pointer type is dependent on chosen value type. The list for
2314 * basic types:
2315 *
2316 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2317 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2318 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2319 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2320 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2321 * @li EINA_VALUE_TYPE_CHAR: char*
2322 * @li EINA_VALUE_TYPE_SHORT: short*
2323 * @li EINA_VALUE_TYPE_INT: int*
2324 * @li EINA_VALUE_TYPE_LONG: long*
2325 * @li EINA_VALUE_TYPE_INT64: int64_t*
2326 * @li EINA_VALUE_TYPE_FLOAT: float*
2327 * @li EINA_VALUE_TYPE_DOUBLE: double*
2328 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2329 * @li EINA_VALUE_TYPE_STRING: const char **
2330 * @li EINA_VALUE_TYPE_LIST: Eina_Value_List*
2331 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2332 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2333 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2334 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2335 *
2336 * @note the pointer contents are written using the size defined by
2337 * type. It can be larger than void* or uint64_t.
2338 *
2339 * @code
2340 * Eina_Value *value = eina_value_list_new(EINA_VALUE_TYPE_INT);
2341 * int x = 1234;
2342 *
2343 * eina_value_list_pappend(value, &x);
2344 * eina_value_list_pget(value, 0, &x);
2345 * eina_value_free(value);
2346 * @endcode
2347 *
2348 * @see eina_value_list_set()
2349 * @see eina_value_list_get()
2350 * @see eina_value_list_vset()
2351 * @see eina_value_list_insert()
2352 * @see eina_value_list_vinsert()
2353 * @see eina_value_list_pinsert()
2354 * @see eina_value_list_append()
2355 * @see eina_value_list_vappend()
2356 * @see eina_value_list_pappend()
2357 *
2358 * @since 1.2
2359 */
2360static inline Eina_Bool eina_value_list_pappend(Eina_Value *value,
2361 const void *ptr) EINA_ARG_NONNULL(1);
2362
2363/**
2364 * @}
2365 */
2366
2367/**
2368 * @defgroup Eina_Value_Hash_Group Generic Value Hash management
2369 *
2370 * @{
2371 */
2372
2373/**
2374 * @typedef Eina_Value_Hash
2375 * Value type for #EINA_VALUE_TYPE_HASH.
2376 *
2377 * @see #_Eina_Value_Hash explains fields.
2378 * @since 1.2
2379 */
2380typedef struct _Eina_Value_Hash Eina_Value_Hash;
2381
2382/**
2383 * @struct _Eina_Value_Hash
2384 * Used to store the hash and its subtype.
2385 * @since 1.2
2386 */
2387struct _Eina_Value_Hash
2388{
2389 const Eina_Value_Type *subtype; /**< how to allocate and access items */
2390 unsigned int buckets_power_size; /**< how to allocate hash buckets, if zero a sane default is chosen. */
2391 Eina_Hash *hash; /**< the hash that holds data, members are of subtype->value_size bytes. */
2392};
2393
2394/**
2395 * @brief Create generic value storage of type hash.
2396 * @param subtype how to manage this hash members.
2397 * @param buckets_power_size how to allocate hash buckets (2 ^
2398 * buckets_power_size), if zero then a sane value is chosen.
2399 * @return The new value or @c NULL on failure.
2400 *
2401 * Create a new generic value storage of type hash. The members are
2402 * managed using the description specified by @a subtype.
2403 *
2404 * On failure, @c NULL is returned and #EINA_ERROR_OUT_OF_MEMORY or
2405 * #EINA_ERROR_VALUE_FAILED is set.
2406 *
2407 * @note this creates from mempool and then uses
2408 * eina_value_hash_setup().
2409 *
2410 * @see eina_value_free()
2411 * @see eina_value_hash_setup()
2412 *
2413 * @since 1.2
2414 */
2415EAPI Eina_Value *eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_size) EINA_ARG_NONNULL(1);
2416
2417/**
2418 * @brief Initialize generic value storage of type hash.
2419 * @param value value object
2420 * @param subtype how to manage this hash members.
2421 * @param buckets_power_size how to allocate hash buckets (2 ^
2422 * buckets_power_size), if zero then a sane value is chosen.
2423 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2424 *
2425 * Initializes new generic value storage of type hash with the given
2426 * @a subtype.
2427 *
2428 * This is the same as calling eina_value_set() with
2429 * #EINA_VALUE_TYPE_HASH followed by eina_value_pset() with the
2430 * #Eina_Value_Hash description configured.
2431 *
2432 * @note Existing contents are ignored! If the value was previously used, then
2433 * use eina_value_flush() first.
2434 *
2435 * On failure, #EINA_FALSE is returned and #EINA_ERROR_OUT_OF_MEMORY
2436 * or #EINA_ERROR_VALUE_FAILED is set.
2437 *
2438 * @see eina_value_flush()
2439 *
2440 * @since 1.2
2441 */
2442static inline Eina_Bool eina_value_hash_setup(Eina_Value *value,
2443 const Eina_Value_Type *subtype,
2444 unsigned int buckets_power_size) EINA_ARG_NONNULL(1, 2);
2445
2446/**
2447 * @brief Query number of elements in value of hash type.
2448 * @param value value object.
2449 * @return number of child elements.
2450 * @since 1.2
2451 */
2452static inline unsigned int eina_value_hash_population(const Eina_Value *value);
2453
2454/**
2455 * @brief Remove element at given position in value of hash type.
2456 * @param value value object.
2457 * @param key key to find the member
2458 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2459 * @since 1.2
2460 */
2461static inline Eina_Bool eina_value_hash_del(Eina_Value *value,
2462 const char *key) EINA_ARG_NONNULL(1);
2463
2464/**
2465 * @brief Set the generic value in an hash member.
2466 * @param value source value object
2467 * @param key key to find the member
2468 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2469 *
2470 * The variable argument is dependent on chosen subtype. The list for
2471 * basic types:
2472 *
2473 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
2474 * @li EINA_VALUE_TYPE_USHORT: unsigned short
2475 * @li EINA_VALUE_TYPE_UINT: unsigned int
2476 * @li EINA_VALUE_TYPE_ULONG: unsigned long
2477 * @li EINA_VALUE_TYPE_UINT64: uint64_t
2478 * @li EINA_VALUE_TYPE_CHAR: char
2479 * @li EINA_VALUE_TYPE_SHORT: short
2480 * @li EINA_VALUE_TYPE_INT: int
2481 * @li EINA_VALUE_TYPE_LONG: long
2482 * @li EINA_VALUE_TYPE_INT64: int64_t
2483 * @li EINA_VALUE_TYPE_FLOAT: float
2484 * @li EINA_VALUE_TYPE_DOUBLE: double
2485 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
2486 * @li EINA_VALUE_TYPE_STRING: const char *
2487 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
2488 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2489 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2490 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2491 *
2492 * @code
2493 * Eina_Value *value = eina_value_hash_new(EINA_VALUE_TYPE_INT, 0);
2494 * int x;
2495 *
2496 * eina_value_hash_set(value, "abc", 5678);
2497 * eina_value_hash_get(value, "abc", &x);
2498 * eina_value_free(value);
2499 * @endcode
2500 *
2501 * @see eina_value_hash_get()
2502 * @see eina_value_hash_vset()
2503 * @see eina_value_hash_pset()
2504 * @see eina_value_hash_del()
2505 *
2506 * @since 1.2
2507 */
2508static inline Eina_Bool eina_value_hash_set(Eina_Value *value,
2509 const char *key,
2510 ...) EINA_ARG_NONNULL(1);
2511
2512/**
2513 * @brief Get the generic value from an hash member.
2514 * @param value source value object
2515 * @param key key to find the member
2516 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2517 *
2518 * The value is returned in the variable argument parameter, the
2519 * actual value is type-dependent, but usually it will be what is
2520 * stored inside the object. There shouldn't be any memory allocation,
2521 * thus the contents should @b not be freed.
2522 *
2523 * The variable argument is dependent on chosen subtype. The list for
2524 * basic types:
2525 *
2526 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2527 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2528 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2529 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2530 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2531 * @li EINA_VALUE_TYPE_CHAR: char*
2532 * @li EINA_VALUE_TYPE_SHORT: short*
2533 * @li EINA_VALUE_TYPE_INT: int*
2534 * @li EINA_VALUE_TYPE_LONG: long*
2535 * @li EINA_VALUE_TYPE_INT64: int64_t*
2536 * @li EINA_VALUE_TYPE_FLOAT: float*
2537 * @li EINA_VALUE_TYPE_DOUBLE: double*
2538 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2539 * @li EINA_VALUE_TYPE_STRING: const char **
2540 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2541 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2542 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2543 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2544 *
2545 * @code
2546 * Eina_Value *value = eina_value_hash_new(EINA_VALUE_TYPE_INT, 0);
2547 * int x;
2548 *
2549 * eina_value_hash_set(value, "abc", 1234);
2550 * eina_value_hash_get(value, "abc", &x);
2551 * eina_value_free(value);
2552 * @endcode
2553 *
2554 * @see eina_value_hash_set()
2555 * @see eina_value_hash_vset()
2556 * @see eina_value_hash_pset()
2557 *
2558 * @since 1.2
2559 */
2560static inline Eina_Bool eina_value_hash_get(const Eina_Value *value,
2561 const char *key,
2562 ...) EINA_ARG_NONNULL(1);
2563
2564/**
2565 * @brief Set the generic value in an hash member.
2566 * @param value source value object
2567 * @param key key to find the member
2568 * @param args variable argument
2569 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2570 * @see eina_value_hash_set()
2571 * @see eina_value_hash_get()
2572 * @see eina_value_hash_pset()
2573 *
2574 * @since 1.2
2575 */
2576static inline Eina_Bool eina_value_hash_vset(Eina_Value *value,
2577 const char *key,
2578 va_list args) EINA_ARG_NONNULL(1);
2579
2580/**
2581 * @brief Get the generic value from an hash member.
2582 * @param value source value object
2583 * @param key key to find the member
2584 * @param args variable argument
2585 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2586 *
2587 * The value is returned in the variable argument parameter, the
2588 * actual value is type-dependent, but usually it will be what is
2589 * stored inside the object. There shouldn't be any memory allocation,
2590 * thus the contents should @b not be freed.
2591 *
2592 * @see eina_value_hash_vset()
2593 * @see eina_value_hash_get()
2594 * @see eina_value_hash_pget()
2595 *
2596 * @since 1.2
2597 */
2598static inline Eina_Bool eina_value_hash_vget(const Eina_Value *value,
2599 const char *key,
2600 va_list args) EINA_ARG_NONNULL(1);
2601
2602/**
2603 * @brief Set the generic value in an hash member from pointer.
2604 * @param value source value object
2605 * @param key key to find the member
2606 * @param ptr pointer to specify the contents.
2607 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2608 *
2609 * The pointer type is dependent on chosen value type. The list for
2610 * basic types:
2611 *
2612 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2613 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2614 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2615 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2616 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2617 * @li EINA_VALUE_TYPE_CHAR: char*
2618 * @li EINA_VALUE_TYPE_SHORT: short*
2619 * @li EINA_VALUE_TYPE_INT: int*
2620 * @li EINA_VALUE_TYPE_LONG: long*
2621 * @li EINA_VALUE_TYPE_INT64: int64_t*
2622 * @li EINA_VALUE_TYPE_FLOAT: float*
2623 * @li EINA_VALUE_TYPE_DOUBLE: double*
2624 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2625 * @li EINA_VALUE_TYPE_STRING: const char **
2626 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2627 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2628 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2629 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2630 *
2631 * @note the pointer contents are written using the size defined by
2632 * type. It can be larger than void* or uint64_t.
2633 *
2634 * @code
2635 * Eina_Value *value = eina_value_hash_new(EINA_VALUE_TYPE_INT, 0);
2636 * int x = 1234;
2637 *
2638 * eina_value_hash_pset(value, "abc", &x);
2639 * eina_value_hash_pget(value, "abc", &x);
2640 * eina_value_free(value);
2641 * @endcode
2642 *
2643 * @see eina_value_hash_set()
2644 * @see eina_value_hash_get()
2645 * @see eina_value_hash_vset()
2646 *
2647 * @since 1.2
2648 */
2649static inline Eina_Bool eina_value_hash_pset(Eina_Value *value,
2650 const char *key,
2651 const void *ptr) EINA_ARG_NONNULL(1, 3);
2652
2653/**
2654 * @brief Get the generic value to pointer from an hash member.
2655 * @param value source value object
2656 * @param key key to find the member
2657 * @param ptr pointer to receive the contents.
2658 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2659 *
2660 * The value is returned in pointer contents, the actual value is
2661 * type-dependent, but usually it will be what is stored inside the
2662 * object. There shouldn't be any memory allocation, thus the contents
2663 * should @b not be freed.
2664 *
2665 * The pointer type is dependent on chosen value type. The list for
2666 * basic types:
2667 *
2668 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
2669 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
2670 * @li EINA_VALUE_TYPE_UINT: unsigned int*
2671 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
2672 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
2673 * @li EINA_VALUE_TYPE_CHAR: char*
2674 * @li EINA_VALUE_TYPE_SHORT: short*
2675 * @li EINA_VALUE_TYPE_INT: int*
2676 * @li EINA_VALUE_TYPE_LONG: long*
2677 * @li EINA_VALUE_TYPE_INT64: int64_t*
2678 * @li EINA_VALUE_TYPE_FLOAT: float*
2679 * @li EINA_VALUE_TYPE_DOUBLE: double*
2680 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
2681 * @li EINA_VALUE_TYPE_STRING: const char **
2682 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
2683 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
2684 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
2685 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
2686 *
2687 * @code
2688 * Eina_Value *value = eina_value_hash_new(EINA_VALUE_TYPE_INT, 0);
2689 * int x;
2690 *
2691 * eina_value_hash_set(value, "abc", 1234);
2692 * eina_value_hash_pget(value, "abc", &x);
2693 * eina_value_free(value);
2694 * @endcode
2695 *
2696 * @see eina_value_hash_set()
2697 * @see eina_value_hash_vset()
2698 * @see eina_value_hash_pset()
2699 *
2700 * @since 1.2
2701 */
2702static inline Eina_Bool eina_value_hash_pget(const Eina_Value *value,
2703 const char *key,
2704 void *ptr) EINA_ARG_NONNULL(1, 3);
2705
2706/**
2707 * @}
2708 */
2709
2710/**
2711 * @defgroup Eina_Value_Blob_Group Generic Value Blob management
2712 *
2713 * @{
2714 */
2715
2716/**
2717 * @typedef Eina_Value_Blob_Operations
2718 * How to manage blob. Any @c NULL callback is ignored.
2719 * @see #_Eina_Value_Blob_Operations explains fields.
2720 * @since 1.2
2721 */
2722typedef struct _Eina_Value_Blob_Operations Eina_Value_Blob_Operations;
2723
2724/**
2725 * @def EINA_VALUE_BLOB_OPERATIONS_VERSION
2726 * Current API version, used to validate #_Eina_Value_Blob_Operations.
2727 */
2728#define EINA_VALUE_BLOB_OPERATIONS_VERSION (1)
2729
2730/**
2731 * @struct _Eina_Value_Blob_Operations
2732 * How to manage blob. Any @c NULL callback is ignored.
2733 * @since 1.2
2734 */
2735struct _Eina_Value_Blob_Operations
2736{
2737 unsigned int version; /**< must be #EINA_VALUE_BLOB_OPERATIONS_VERSION */
2738 void (*free)(const Eina_Value_Blob_Operations *ops, void *memory, size_t size);
2739 void *(*copy)(const Eina_Value_Blob_Operations *ops, const void *memory, size_t size);
2740 int (*compare)(const Eina_Value_Blob_Operations *ops, const void *data1, size_t size_data1, const void *data2, size_t size_data2);
2741 char *(*to_string)(const Eina_Value_Blob_Operations *ops, const void *memory, size_t size);
2742};
2743
2744/**
2745 * @var EINA_VALUE_BLOB_OPERATIONS_MALLOC
2746 *
2747 * Assumes @c memory was create with malloc() and applies free() to it
2748 * during flush (Eina_Value_Blob_Operations::free). Copy is done with
2749 * malloc() as well.
2750 *
2751 * No compare or to_string are provided, defaults will be used.
2752 */
2753EAPI extern const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC;
2754
2755/**
2756 * @typedef Eina_Value_Blob
2757 * Value type for #EINA_VALUE_TYPE_BLOB.
2758 *
2759 * @see #_Eina_Value_Blob explains fields.
2760 * @since 1.2
2761 */
2762typedef struct _Eina_Value_Blob Eina_Value_Blob;
2763
2764/**
2765 * @struct _Eina_Value_Blob
2766 * Used to store the blob information and management operations.
2767 * @since 1.2
2768 */
2769struct _Eina_Value_Blob
2770{
2771 const Eina_Value_Blob_Operations *ops; /**< if @c NULL, nothing is freed, copy will just copy the memory pointer, not its value. */
2772 const void *memory;
2773 unsigned int size;
2774};
2775
2776/**
2777 * @}
2778 */
2779
2780/**
2781 * @defgroup Eina_Value_Struct_Group Generic Value Struct management
2782 *
2783 * @{
2784 */
2785
2786/**
2787 * @typedef Eina_Value_Struct_Operations
2788 * How to manage struct. Any @c NULL callback is ignored.
2789 *
2790 * A structure can specify alternative methods to allocate, free and
2791 * copy itself. See structure definition for all methods.
2792 *
2793 * @see #_Eina_Value_Struct_Operations explains fields.
2794 * @since 1.2
2795 */
2796typedef struct _Eina_Value_Struct_Operations Eina_Value_Struct_Operations;
2797
2798/**
2799 * @typedef Eina_Value_Struct_Member
2800 * Describes a single member of struct.
2801 *
2802 * The member holds a name, type and its byte offset within the struct
2803 * memory. Most Eina_Value_Struct functions takes the member name as
2804 * parameter, as in eina_value_struct_set().
2805 *
2806 * @see #_Eina_Value_Struct_Member explains fields.
2807 * @since 1.2
2808 */
2809typedef struct _Eina_Value_Struct_Member Eina_Value_Struct_Member;
2810
2811/**
2812 * @typedef Eina_Value_Struct_Desc
2813 * Describes the struct by listing its size, members and operations.
2814 * @see #_Eina_Value_Struct_Desc explains fields.
2815 * @since 1.2
2816 */
2817typedef struct _Eina_Value_Struct_Desc Eina_Value_Struct_Desc;
2818
2819/**
2820 * @typedef Eina_Value_Struct
2821 * Value type for #EINA_VALUE_TYPE_STRUCT.
2822 *
2823 * @see #_Eina_Value_Struct explains fields.
2824 * @since 1.2
2825 */
2826typedef struct _Eina_Value_Struct Eina_Value_Struct;
2827
2828/**
2829 * @def EINA_VALUE_STRUCT_OPERATIONS_VERSION
2830 * Current API version, used to validate #_Eina_Value_Struct_Operations.
2831 */
2832#define EINA_VALUE_STRUCT_OPERATIONS_VERSION (1)
2833
2834/**
2835 * @struct _Eina_Value_Struct_Operations
2836 * How to manage struct. Any @c NULL callback is ignored.
2837 * @since 1.2
2838 */
2839struct _Eina_Value_Struct_Operations
2840{
2841 unsigned int version; /**< must be #EINA_VALUE_STRUCT_OPERATIONS_VERSION */
2842 void *(*alloc)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc); /**< How to allocate struct memory to be managed by the Eina_Value */
2843 void (*free)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, void *memory); /**< How to release memory managed by the Eina_Value */
2844 void *(*copy)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *memory); /**< How to copy struct memory from an existing Eina_Value, if not provided alloc() will be used, then every member is copied using eina_value_type_copy() with member's type. */
2845 int (*compare)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const void *data1, const void *data2); /**< How to compare two struct memories */
2846 const Eina_Value_Struct_Member *(*find_member)(const Eina_Value_Struct_Operations *ops, const Eina_Value_Struct_Desc *desc, const char *name); /**< How to find description for member. For huge structures consider using binary search, stringshared, hash or gperf. The default function does linear search using strcmp(). */
2847};
2848
2849/**
2850 * @var EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH
2851 *
2852 * Assumes @c members is sorted by name and applies binary search for
2853 * names.
2854 *
2855 * Ideally the @c member_count field is set to speed it up.
2856 *
2857 * No other methods are set (alloc, free, copy, compare), then it uses
2858 * the default operations.
2859 */
2860EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH;
2861
2862/**
2863 * @var EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE
2864 *
2865 * Assumes @c members name are stringshared and can be compared for
2866 * equality without using its contents (simple pointer comparison).
2867 *
2868 * Ideally the search @c name will be stringshared as well, but it
2869 * will do a second loop with a forced stringshare if it did not find
2870 * the member.
2871 *
2872 * No other methods are set (alloc, free, copy, compare), then it uses
2873 * the default operations.
2874 */
2875EAPI extern const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE;
2876
2877/**
2878 * @struct _Eina_Value_Struct_Member
2879 * Describes a single member of struct.
2880 *
2881 * The name is used to lookup the member description. This is done as
2882 * specified as _Eina_Value_Struct_Operations::find_member(). For
2883 * structures with huge number of members, consider using a better
2884 * find_member function to quickly finding it! There are two helper
2885 * operations provided to help this:
2886 * #EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH and
2887 * #EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE, both depend on properly
2888 * set #_Eina_Value_Struct_Desc and #_Eina_Value_Struct_Member.
2889 *
2890 * @see #EINA_VALUE_STRUCT_MEMBER
2891 * @see #EINA_VALUE_STRUCT_MEMBER_SENTINEL
2892 *
2893 * @since 1.2
2894 */
2895struct _Eina_Value_Struct_Member
2896{
2897 const char *name; /**< member name, used in lookups such as eina_value_struct_get() */
2898 const Eina_Value_Type *type; /**< how to use this member */
2899 unsigned int offset; /**< where this member is located within the structure memory */
2900};
2901
2902/**
2903 * @def EINA_VALUE_STRUCT_DESC_VERSION
2904 * Current API version, used to validate #_Eina_Value_Struct_Desc.
2905 */
2906#define EINA_VALUE_STRUCT_DESC_VERSION (1)
2907
2908/**
2909 * @struct _Eina_Value_Struct_Desc
2910 * Describes the struct by listing its size, members and operations.
2911 *
2912 * This is the root of Eina_Value knowledge about the memory it's
2913 * handling as a structure. It adds introspection, saying the byte
2914 * size of the structure, its members and how to manage such members.
2915 *
2916 * @since 1.2
2917 */
2918struct _Eina_Value_Struct_Desc
2919{
2920 unsigned int version; /**< must be #EINA_VALUE_STRUCT_DESC_VERSION */
2921 const Eina_Value_Struct_Operations *ops; /**< operations, if @c NULL defaults will be used. You may use operations to optimize member lookup using binary search or gperf hash. */
2922 const Eina_Value_Struct_Member *members; /**< array of member descriptions, if @c member_count is zero, then it must be @c NULL terminated. */
2923 unsigned int member_count; /**< if > 0, specifies number of members. If zero then @c members must be NULL terminated. */
2924 unsigned int size; /**< byte size to allocate, may be bigger than sum of members */
2925};
2926
2927/**
2928 * @def EINA_VALUE_STRUCT_MEMBER
2929 *
2930 * Helper to define Eina_Value_Struct_Member fields, uses offsetof()
2931 * with type and member.
2932 *
2933 * @since 1.2
2934 */
2935#define EINA_VALUE_STRUCT_MEMBER(eina_value_type, type, member) \
2936 {#member, eina_value_type, offsetof(type, member)}
2937
2938/**
2939 * @def EINA_VALUE_STRUCT_MEMBER_SENTINEL
2940 *
2941 * Helper to define Eina_Value_Struct_Member fields for sentinel (last
2942 * item), useful if you did not define @c member_count.
2943 *
2944 * @since 1.2
2945 */
2946#define EINA_VALUE_STRUCT_MEMBER_SENTINEL {NULL, NULL, 0}
2947
2948
2949/**
2950 * @struct _Eina_Value_Struct
2951 * Used to store the memory and its description.
2952 * @since 1.2
2953 */
2954struct _Eina_Value_Struct
2955{
2956 const Eina_Value_Struct_Desc *desc; /**< How to manage the structure */
2957 void *memory; /**< The managed structure memory */
2958};
2959
2960/**
2961 * @brief Create generic value storage of type struct.
2962 * @param desc how to manage this struct members.
2963 * @return The new value or @c NULL on failure.
2964 *
2965 * Create a new generic value storage of type struct. The members are
2966 * managed using the description specified by @a desc.
2967 *
2968 * On failure, @c NULL is returned and #EINA_ERROR_OUT_OF_MEMORY or
2969 * #EINA_ERROR_VALUE_FAILED is set.
2970 *
2971 * @note this creates from mempool and then uses
2972 * eina_value_struct_setup().
2973 *
2974 * @see eina_value_free()
2975 * @see eina_value_struct_setup()
2976 *
2977 * @since 1.2
2978 */
2979EAPI Eina_Value *eina_value_struct_new(const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1);
2980
2981/**
2982 * @brief Initialize generic value storage of type struct.
2983 * @param value value object
2984 * @param desc how to manage this struct members.
2985 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
2986 *
2987 * Initializes new generic value storage of type struct with the given
2988 * @a desc.
2989 *
2990 * This is the same as calling eina_value_set() with
2991 * #EINA_VALUE_TYPE_STRUCT followed by eina_value_pset() with the
2992 * #Eina_Value_Struct description configured.
2993 *
2994 * @note Existing contents are ignored! If the value was previously used, then
2995 * use eina_value_flush() first.
2996 *
2997 * On failure, #EINA_FALSE is returned and #EINA_ERROR_OUT_OF_MEMORY
2998 * or #EINA_ERROR_VALUE_FAILED is set.
2999 *
3000 * @see eina_value_flush()
3001 *
3002 * @since 1.2
3003 */
3004static inline Eina_Bool eina_value_struct_setup(Eina_Value *value,
3005 const Eina_Value_Struct_Desc *desc) EINA_ARG_NONNULL(1, 2);
3006
3007/**
3008 * @brief Set the generic value in an struct member.
3009 * @param value source value object
3010 * @param name name to find the member
3011 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3012 *
3013 * The variable argument is dependent on chosen member type. The list
3014 * for basic types:
3015 *
3016 * @li EINA_VALUE_TYPE_UCHAR: unsigned char
3017 * @li EINA_VALUE_TYPE_USHORT: unsigned short
3018 * @li EINA_VALUE_TYPE_UINT: unsigned int
3019 * @li EINA_VALUE_TYPE_ULONG: unsigned long
3020 * @li EINA_VALUE_TYPE_UINT64: uint64_t
3021 * @li EINA_VALUE_TYPE_CHAR: char
3022 * @li EINA_VALUE_TYPE_SHORT: short
3023 * @li EINA_VALUE_TYPE_INT: int
3024 * @li EINA_VALUE_TYPE_LONG: long
3025 * @li EINA_VALUE_TYPE_INT64: int64_t
3026 * @li EINA_VALUE_TYPE_FLOAT: float
3027 * @li EINA_VALUE_TYPE_DOUBLE: double
3028 * @li EINA_VALUE_TYPE_STRINGSHARE: const char *
3029 * @li EINA_VALUE_TYPE_STRING: const char *
3030 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash
3031 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
3032 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
3033 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
3034 *
3035 * @code
3036 * struct myst {
3037 * int i;
3038 * char c;
3039 * };
3040 * const Eina_Value_Struct_Member myst_members[] = {
3041 * {"i", EINA_VALUE_TYPE_INT, 0},
3042 * {"c", EINA_VALUE_TYPE_CHAR, 4},
3043 * {NULL, NULL, 0}
3044 * };
3045 * const Eina_Value_Struct_Desc myst_desc = {
3046 * EINA_VALUE_STRUCT_DESC_VERSION,
3047 * NULL, myst_members, 2, sizeof(struct myst)
3048 * };
3049 * Eina_Value *value = eina_value_struct_new(&my_desc);
3050 * int x;
3051 * char y;
3052 *
3053 * eina_value_struct_set(value, "i", 5678);
3054 * eina_value_struct_get(value, "i", &x);
3055 * eina_value_struct_set(value, "c", 0xf);
3056 * eina_value_struct_get(value, "c", &y);
3057 * eina_value_free(value);
3058 * @endcode
3059 *
3060 * @see eina_value_struct_get()
3061 * @see eina_value_struct_vset()
3062 * @see eina_value_struct_pset()
3063 *
3064 * @since 1.2
3065 */
3066static inline Eina_Bool eina_value_struct_set(Eina_Value *value,
3067 const char *name,
3068 ...) EINA_ARG_NONNULL(1, 2);
3069
3070/**
3071 * @brief Get the generic value from an struct member.
3072 * @param value source value object
3073 * @param name name to find the member
3074 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3075 *
3076 * The value is returned in the variable argument parameter, the
3077 * actual value is type-dependent, but usually it will be what is
3078 * stored inside the object. There shouldn't be any memory allocation,
3079 * thus the contents should @b not be freed.
3080 *
3081 * The variable argument is dependent on chosen member type. The list
3082 * for basic types:
3083 *
3084 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
3085 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
3086 * @li EINA_VALUE_TYPE_UINT: unsigned int*
3087 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
3088 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
3089 * @li EINA_VALUE_TYPE_CHAR: char*
3090 * @li EINA_VALUE_TYPE_SHORT: short*
3091 * @li EINA_VALUE_TYPE_INT: int*
3092 * @li EINA_VALUE_TYPE_LONG: long*
3093 * @li EINA_VALUE_TYPE_INT64: int64_t*
3094 * @li EINA_VALUE_TYPE_FLOAT: float*
3095 * @li EINA_VALUE_TYPE_DOUBLE: double*
3096 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
3097 * @li EINA_VALUE_TYPE_STRING: const char **
3098 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
3099 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
3100 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
3101 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
3102 *
3103 * @code
3104 * struct myst {
3105 * int i;
3106 * char c;
3107 * };
3108 * const Eina_Value_Struct_Member myst_members[] = {
3109 * {"i", EINA_VALUE_TYPE_INT, 0},
3110 * {"c", EINA_VALUE_TYPE_CHAR, 4},
3111 * {NULL, NULL, 0}
3112 * };
3113 * const Eina_Value_Struct_Desc myst_desc = {
3114 * EINA_VALUE_STRUCT_DESC_VERSION,
3115 * NULL, myst_members, 2, sizeof(struct myst)
3116 * };
3117 * Eina_Value *value = eina_value_struct_new(&my_desc);
3118 * int x;
3119 * char y;
3120 *
3121 * eina_value_struct_set(value, "i", 5678);
3122 * eina_value_struct_get(value, "i", &x);
3123 * eina_value_struct_set(value, "c", 0xf);
3124 * eina_value_struct_get(value, "c", &y);
3125 * eina_value_free(value);
3126 * @endcode
3127 *
3128 * @see eina_value_struct_set()
3129 * @see eina_value_struct_vset()
3130 * @see eina_value_struct_pset()
3131 *
3132 * @since 1.2
3133 */
3134static inline Eina_Bool eina_value_struct_get(const Eina_Value *value,
3135 const char *name,
3136 ...) EINA_ARG_NONNULL(1, 2);
3137
3138/**
3139 * @brief Set the generic value in an struct member.
3140 * @param value source value object
3141 * @param name name to find the member
3142 * @param args variable argument
3143 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3144 * @see eina_value_struct_set()
3145 * @see eina_value_struct_get()
3146 * @see eina_value_struct_pset()
3147 *
3148 * @since 1.2
3149 */
3150static inline Eina_Bool eina_value_struct_vset(Eina_Value *value,
3151 const char *name,
3152 va_list args) EINA_ARG_NONNULL(1, 2);
3153
3154/**
3155 * @brief Get the generic value from an struct member.
3156 * @param value source value object
3157 * @param name name to find the member
3158 * @param args variable argument
3159 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3160 *
3161 * The value is returned in the variable argument parameter, the
3162 * actual value is type-dependent, but usually it will be what is
3163 * stored inside the object. There shouldn't be any memory allocation,
3164 * thus the contents should @b not be freed.
3165 *
3166 * @see eina_value_struct_vset()
3167 * @see eina_value_struct_get()
3168 * @see eina_value_struct_pget()
3169 *
3170 * @since 1.2
3171 */
3172static inline Eina_Bool eina_value_struct_vget(const Eina_Value *value,
3173 const char *name,
3174 va_list args) EINA_ARG_NONNULL(1, 2);
3175
3176/**
3177 * @brief Set the generic value in an struct member from pointer.
3178 * @param value source value object
3179 * @param name name to find the member
3180 * @param ptr pointer to specify the contents.
3181 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3182 *
3183 * The pointer type is dependent on chosen value type. The list for
3184 * basic types:
3185 *
3186 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
3187 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
3188 * @li EINA_VALUE_TYPE_UINT: unsigned int*
3189 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
3190 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
3191 * @li EINA_VALUE_TYPE_CHAR: char*
3192 * @li EINA_VALUE_TYPE_SHORT: short*
3193 * @li EINA_VALUE_TYPE_INT: int*
3194 * @li EINA_VALUE_TYPE_LONG: long*
3195 * @li EINA_VALUE_TYPE_INT64: int64_t*
3196 * @li EINA_VALUE_TYPE_FLOAT: float*
3197 * @li EINA_VALUE_TYPE_DOUBLE: double*
3198 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
3199 * @li EINA_VALUE_TYPE_STRING: const char **
3200 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
3201 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
3202 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
3203 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
3204 *
3205 * @note the pointer contents are written using the size defined by
3206 * type. It can be larger than void* or uint64_t.
3207 *
3208 * @code
3209 * struct myst {
3210 * int i;
3211 * char c;
3212 * };
3213 * const Eina_Value_Struct_Member myst_members[] = {
3214 * {"i", EINA_VALUE_TYPE_INT, 0},
3215 * {"c", EINA_VALUE_TYPE_CHAR, 4},
3216 * {NULL, NULL, 0}
3217 * };
3218 * const Eina_Value_Struct_Desc myst_desc = {
3219 * EINA_VALUE_STRUCT_DESC_VERSION,
3220 * NULL, myst_members, 2, sizeof(struct myst)
3221 * };
3222 * Eina_Value *value = eina_value_struct_new(&my_desc);
3223 * int x = 5678;
3224 * char y = 0xf;
3225 *
3226 * eina_value_struct_pset(value, "i", &);
3227 * eina_value_struct_pget(value, "i", &x);
3228 * eina_value_struct_pset(value, "c", &y);
3229 * eina_value_struct_pget(value, "c", &y);
3230 * eina_value_free(value);
3231 * @endcode
3232 *
3233 * @see eina_value_struct_set()
3234 * @see eina_value_struct_get()
3235 * @see eina_value_struct_vset()
3236 *
3237 * @since 1.2
3238 */
3239static inline Eina_Bool eina_value_struct_pset(Eina_Value *value,
3240 const char *name,
3241 const void *ptr) EINA_ARG_NONNULL(1, 2, 3);
3242
3243/**
3244 * @brief Get the generic value to pointer from an struct member.
3245 * @param value source value object
3246 * @param name name to find the member
3247 * @param ptr pointer to receive the contents.
3248 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3249 *
3250 * The value is returned in pointer contents, the actual value is
3251 * type-dependent, but usually it will be what is stored inside the
3252 * object. There shouldn't be any memory allocation, thus the contents
3253 * should @b not be freed.
3254 *
3255 * The pointer type is dependent on chosen value type. The list for
3256 * basic types:
3257 *
3258 * @li EINA_VALUE_TYPE_UCHAR: unsigned char*
3259 * @li EINA_VALUE_TYPE_USHORT: unsigned short*
3260 * @li EINA_VALUE_TYPE_UINT: unsigned int*
3261 * @li EINA_VALUE_TYPE_ULONG: unsigned long*
3262 * @li EINA_VALUE_TYPE_UINT64: uint64_t*
3263 * @li EINA_VALUE_TYPE_CHAR: char*
3264 * @li EINA_VALUE_TYPE_SHORT: short*
3265 * @li EINA_VALUE_TYPE_INT: int*
3266 * @li EINA_VALUE_TYPE_LONG: long*
3267 * @li EINA_VALUE_TYPE_INT64: int64_t*
3268 * @li EINA_VALUE_TYPE_FLOAT: float*
3269 * @li EINA_VALUE_TYPE_DOUBLE: double*
3270 * @li EINA_VALUE_TYPE_STRINGSHARE: const char **
3271 * @li EINA_VALUE_TYPE_STRING: const char **
3272 * @li EINA_VALUE_TYPE_HASH: Eina_Value_Hash*
3273 * @li EINA_VALUE_TYPE_TIMEVAL: struct timeval*
3274 * @li EINA_VALUE_TYPE_BLOB: Eina_Value_Blob*
3275 * @li EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct*
3276 *
3277 * @code
3278 * struct myst {
3279 * int i;
3280 * char c;
3281 * };
3282 * const Eina_Value_Struct_Member myst_members[] = {
3283 * {"i", EINA_VALUE_TYPE_INT, 0},
3284 * {"c", EINA_VALUE_TYPE_CHAR, 4},
3285 * {NULL, NULL, 0}
3286 * };
3287 * const Eina_Value_Struct_Desc myst_desc = {
3288 * EINA_VALUE_STRUCT_DESC_VERSION,
3289 * NULL, myst_members, 2, sizeof(struct myst)
3290 * };
3291 * Eina_Value *value = eina_value_struct_new(&my_desc);
3292 * int x = 5678;
3293 * char y = 0xf;
3294 *
3295 * eina_value_struct_pset(value, "i", &);
3296 * eina_value_struct_pget(value, "i", &x);
3297 * eina_value_struct_pset(value, "c", &y);
3298 * eina_value_struct_pget(value, "c", &y);
3299 * eina_value_free(value);
3300 * @endcode
3301 *
3302 * @see eina_value_struct_set()
3303 * @see eina_value_struct_vset()
3304 * @see eina_value_struct_pset()
3305 *
3306 * @since 1.2
3307 */
3308static inline Eina_Bool eina_value_struct_pget(const Eina_Value *value,
3309 const char *name,
3310 void *ptr) EINA_ARG_NONNULL(1, 2, 3);
3311
3312/**
3313 * @brief Get the member as Eina_Value copy
3314 * @param src source value object
3315 * @param name name to find the member
3316 * @param dst where to return the member value.
3317 *
3318 * The argument @a dst is considered uninitialized and it's setup to
3319 * the type of the member.
3320 *
3321 * @since 1.2
3322 */
3323static inline Eina_Bool eina_value_struct_value_get(const Eina_Value *src,
3324 const char *name,
3325 Eina_Value *dst) EINA_ARG_NONNULL(1, 2, 3);
3326
3327/**
3328 * @brief Set the member from Eina_Value source
3329 * @param dst destination value object
3330 * @param name name to find the member
3331 * @param src source value
3332 *
3333 * @since 1.2
3334 */
3335static inline Eina_Bool eina_value_struct_value_set(Eina_Value *dst,
3336 const char *name,
3337 const Eina_Value *src) EINA_ARG_NONNULL(1, 2, 3);
3338
3339/**
3340 * @brief Get the member as Eina_Value copy given its member description.
3341 * @param src source value object
3342 * @param member the member description to use
3343 * @param dst where to return the member value.
3344 *
3345 * The argument @a dst is considered uninitialized and it's setup to
3346 * the type of the member.
3347 *
3348 * @since 1.2
3349 */
3350static inline Eina_Bool eina_value_struct_member_value_get(const Eina_Value *src,
3351 const Eina_Value_Struct_Member *member,
3352 Eina_Value *dst) EINA_ARG_NONNULL(1, 2, 3);
3353
3354/**
3355 * @brief Set the member from Eina_Value source
3356 * @param dst destination value object
3357 * @param member the member description to use
3358 * @param src source value
3359 *
3360 * @since 1.2
3361 */
3362static inline Eina_Bool eina_value_struct_member_value_set(Eina_Value *dst,
3363 const Eina_Value_Struct_Member *member,
3364 const Eina_Value *src) EINA_ARG_NONNULL(1, 2, 3);
3365
3366
3367/**
3368 * @}
3369 */
3370
3371
3372/**
3373 * @defgroup Eina_Value_Type_Group Generic Value Type management
3374 *
3375 * @{
3376 */
3377
3378/**
3379 * @def EINA_VALUE_TYPE_VERSION
3380 * Current API version, used to validate type.
3381 */
3382#define EINA_VALUE_TYPE_VERSION (1)
3383
3384/**
3385 * @struct _Eina_Value_Type
3386 * API to access values.
3387 *
3388 * @since 1.2
3389 */
3390struct _Eina_Value_Type
3391{
3392 unsigned int version; /**< must be #EINA_VALUE_TYPE_VERSION */
3393 unsigned int value_size; /**< byte size of value */
3394 const char *name; /**< name for debug and introspection */
3395 Eina_Bool (*setup)(const Eina_Value_Type *type, void *mem); /**< mem will be malloc(value_size) and should be configured */
3396 Eina_Bool (*flush)(const Eina_Value_Type *type, void *mem); /**< clear any values from mem */
3397 Eina_Bool (*copy)(const Eina_Value_Type *type, const void *src, void *dst); /**< how to copy values, both memory are @c value_size */
3398 int (*compare)(const Eina_Value_Type *type, const void *a, const void *b); /**< how to compare values, both memory are @c value_size */
3399 Eina_Bool (*convert_to)(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem); /**< how to convert values, both memory are @c value_size */
3400 Eina_Bool (*convert_from)(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem); /**< how to convert values, both memory are @c value_size */
3401 Eina_Bool (*vset)(const Eina_Value_Type *type, void *mem, va_list args); /**< how to set memory from variable argument */
3402 Eina_Bool (*pset)(const Eina_Value_Type *type, void *mem, const void *ptr); /**< how to set memory from pointer */
3403 Eina_Bool (*pget)(const Eina_Value_Type *type, const void *mem, void *ptr); /**< how to read memory */
3404};
3405
3406/**
3407 * @brief Query type name.
3408 * @param type type reference.
3409 * @return string or @c NULL if type is invalid.
3410 * @since 1.2
3411 */
3412EAPI const char *eina_value_type_name_get(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
3413
3414/**
3415 * @brief Check if type is valid.
3416 * @param type type reference.
3417 * @return #EINA_TRUE if valid, #EINA_FALSE otherwise.
3418 *
3419 * A type is invalid if it's NULL or if version field is not the same
3420 * as runtime #EINA_VALUE_TYPE_VERSION.
3421 *
3422 * @since 1.2
3423 */
3424EAPI Eina_Bool eina_value_type_check(const Eina_Value_Type *type) EINA_PURE EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
3425
3426/**
3427 * @brief Initialize memory using type descriptor.
3428 * @param type type reference.
3429 * @param mem memory to operate, must be of size @c type->value_size.
3430 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3431 * @since 1.2
3432 */
3433static inline Eina_Bool eina_value_type_setup(const Eina_Value_Type *type, void *mem);
3434
3435/**
3436 * @brief Flush (clear) memory using type descriptor.
3437 * @param type type reference.
3438 * @param mem memory to operate, must be of size @c type->value_size.
3439 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3440 * @since 1.2
3441 */
3442static inline Eina_Bool eina_value_type_flush(const Eina_Value_Type *type, void *mem);
3443
3444/**
3445 * @brief Copy memory using type descriptor.
3446 * @param type type reference.
3447 * @param src memory to operate, must be of size @c type->value_size.
3448 * @param dst memory to operate, must be of size @c type->value_size.
3449 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3450 * @since 1.2
3451 */
3452static inline Eina_Bool eina_value_type_copy(const Eina_Value_Type *type, const void *src, void *dst);
3453
3454/**
3455 * @brief Compare memory using type descriptor.
3456 * @param type type reference.
3457 * @param a memory to operate, must be of size @c type->value_size.
3458 * @param b memory to operate, must be of size @c type->value_size.
3459 * @return less than zero if a < b, greater than zero if a > b, zero if equal.
3460 * @since 1.2
3461 */
3462static inline int eina_value_type_compare(const Eina_Value_Type *type, const void *a, const void *b);
3463
3464/**
3465 * @brief Convert memory using type descriptor.
3466 * @param type type reference of the source.
3467 * @param convert type reference of the destination.
3468 * @param type_mem memory to operate, must be of size @c type->value_size.
3469 * @param convert_mem memory to operate, must be of size @c convert->value_size.
3470 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3471 * @since 1.2
3472 */
3473static inline Eina_Bool eina_value_type_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem);
3474
3475/**
3476 * @brief Convert memory using type descriptor.
3477 * @param type type reference of the destination.
3478 * @param convert type reference of the source.
3479 * @param type_mem memory to operate, must be of size @c type->value_size.
3480 * @param convert_mem memory to operate, must be of size @c convert->value_size.
3481 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3482 * @since 1.2
3483 */
3484static inline Eina_Bool eina_value_type_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem);
3485
3486/**
3487 * @brief Set memory using type descriptor and variable argument.
3488 * @param type type reference of the source.
3489 * @param mem memory to operate, must be of size @c type->value_size.
3490 * @param args input value.
3491 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3492 * @since 1.2
3493 */
3494static inline Eina_Bool eina_value_type_vset(const Eina_Value_Type *type, void *mem, va_list args);
3495
3496/**
3497 * @brief Set memory using type descriptor and pointer.
3498 * @param type type reference of the source.
3499 * @param mem memory to operate, must be of size @c type->value_size.
3500 * @param ptr pointer to input value.
3501 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3502 * @since 1.2
3503 */
3504static inline Eina_Bool eina_value_type_pset(const Eina_Value_Type *type, void *mem, const void *ptr);
3505
3506/**
3507 * @brief Get memory using type descriptor.
3508 * @param type type reference of the source.
3509 * @param mem memory to operate, must be of size @c type->value_size.
3510 * @param ptr pointer to output.
3511 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
3512 * @since 1.2
3513 */
3514static inline Eina_Bool eina_value_type_pget(const Eina_Value_Type *type, const void *mem, void *ptr);
3515
3516/**
3517 * @}
3518 */
3519
3520#include "eina_inline_value.x"
3521
3522/**
3523 * @}
3524 */
3525
3526/**
3527 * @}
3528 */
3529
3530/**
3531 * @}
3532 */
3533#endif
diff --git a/libraries/eina/src/include/eina_xattr.h b/libraries/eina/src/include/eina_xattr.h
deleted file mode 100644
index 0f89cc3..0000000
--- a/libraries/eina/src/include/eina_xattr.h
+++ /dev/null
@@ -1,215 +0,0 @@
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
42typedef struct _Eina_Xattr Eina_Xattr;
43struct _Eina_Xattr
44{
45 const char *name; /**< The eXtended attribute name @since 1.2 */
46 const char *value; /**< The eXtended attribute value @since 1.2 */
47
48 size_t length; /**< The length of the eXtended attribute value @since 1.2 */
49};
50
51/**
52 * @brief Get an iterator that list all extended attribute of a file.
53 *
54 * @param file The filename to retrieve the extended attribute list from.
55 * @return an iterator.
56 *
57 * The iterator will not allocate any data during the iteration step, so you need to copy them yourself
58 * if you need.
59 *
60 * @since 1.1
61 */
62EAPI Eina_Iterator *eina_xattr_ls(const char *file);
63
64/**
65 * @brief Get an iterator that list all extended attribute value related to a fd.
66 *
67 * @param file The filename to retrieve the extended attribute list from.
68 * @return an iterator.
69 *
70 * The iterator will not allocate any data during the iteration step, so you need to copy them yourself
71 * if you need. The iterator will provide an Eina_Xattr structure.
72 *
73 * @since 1.2
74 */
75EAPI Eina_Iterator *eina_xattr_value_ls(const char *file);
76
77/**
78 * @brief Get an iterator that list all extended attribute related to a fd.
79 *
80 * @param fd The file descriptor to retrieve the extended attribute list from.
81 * @return an iterator.
82 *
83 * The iterator will not allocate any data during the iteration step, so you need to copy them yourself
84 * if you need.
85 *
86 * @since 1.2
87 */
88EAPI Eina_Iterator *eina_xattr_fd_ls(int fd);
89
90/**
91 * @brief Get an iterator that list all extended attribute value related to a fd.
92 *
93 * @param fd The file descriptor to retrieve the extended attribute list from.
94 * @return an iterator.
95 *
96 * The iterator will not allocate any data during the iteration step, so you need to copy them yourself
97 * if you need. The iterator will provide an Eina_Xattr structure.
98 *
99 * @since 1.2
100 */
101EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd);
102
103/**
104 * @brief Retrieve an extended attribute from a file.
105 *
106 * @param file The file to retrieve the extended attribute from.
107 * @param attribute The extended attribute name to retrieve.
108 * @param size The size of the retrieved extended attribute.
109 * @return the allocated data that hold the extended attribute value.
110 *
111 * It will return NULL and *size will be @c 0 if it fails.
112 *
113 * @since 1.1
114 */
115EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size);
116
117/**
118 * @brief Set an extended attribute on a file.
119 *
120 * @param file The file to set the extended attribute to.
121 * @param attribute The attribute to set.
122 * @param data The data to set.
123 * @param length The length of the data to set.
124 * @param flags Define the set policy.
125 * @return EINA_TRUE on success, EINA_FALSE otherwise.
126 *
127 * @since 1.1
128 */
129EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags);
130
131/**
132 * @brief Set a string as a extended attribute properties.
133 *
134 * @param file The file to set the string to.
135 * @param attribute The attribute to set.
136 * @param data The NULL terminated string to set.
137 * @param flags Define the set policy.
138 * @return EINA_TRUE on success, EINA_FALSE otherwise.
139 *
140 * @since 1.1
141 */
142EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags);
143
144/**
145 * @brief Get a string from an extended attribute properties.
146 *
147 * @param file The file to get the string from.
148 * @param attribute The attribute to get.
149 * @return a valid string on success, NULL otherwise.
150 *
151 * This call check that the string is properly NULL-terminated before returning it.
152 *
153 * @since 1.1
154 */
155EAPI char *eina_xattr_string_get(const char *file, const char *attribute);
156
157/**
158 * @brief Set a double as a extended attribute properties.
159 *
160 * @param file The file to set the double to.
161 * @param attribute The attribute to set.
162 * @param value The NULL terminated double to set.
163 * @param flags Define the set policy.
164 * @return EINA_TRUE on success, EINA_FALSE otherwise.
165 *
166 * @since 1.1
167 */
168EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags);
169
170/**
171 * @brief Get a double from an extended attribute properties.
172 *
173 * @param file The file to get the string from.
174 * @param attribute The attribute to get.
175 * @param value Where to put the extracted value
176 * @return EINA_TRUE on success, EINA_FALSE otherwise.
177 *
178 * This call check that the double is correctly set.
179 *
180 * @since 1.1
181 */
182EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value);
183
184/**
185 * @brief Set an int as a extended attribute properties.
186 *
187 * @param file The file to set the int to.
188 * @param attribute The attribute to set.
189 * @param value The NULL terminated int to set.
190 * @param flags Define the set policy.
191 * @return EINA_TRUE on success, EINA_FALSE otherwise.
192 *
193 * @since 1.1
194 */
195EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags);
196
197/**
198 * @brief Get a int from an extended attribute properties.
199 *
200 * @param file The file to get the string from.
201 * @param attribute The attribute to get.
202 * @param value Where to put the extracted value
203 * @return EINA_TRUE on success, EINA_FALSE otherwise.
204 *
205 * This call check that the int is correctly set.
206 *
207 * @since 1.1
208 */
209EAPI Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value);
210
211/**
212 * @}
213 */
214
215#endif
diff --git a/libraries/eina/src/lib/Makefile.am b/libraries/eina/src/lib/Makefile.am
deleted file mode 100644
index 5de2848..0000000
--- a/libraries/eina/src/lib/Makefile.am
+++ /dev/null
@@ -1,178 +0,0 @@
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@EFL_EINA_BUILD@ \
10@VALGRIND_CFLAGS@
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_inarray.c \
26eina_inlist.c \
27eina_iterator.c \
28eina_lalloc.c \
29eina_list.c \
30eina_log.c \
31eina_magic.c \
32eina_main.c \
33eina_matrixsparse.c \
34eina_mempool.c \
35eina_mmap.c \
36eina_model.c \
37eina_module.c \
38eina_prefix.c \
39eina_quadtree.c \
40eina_rbtree.c \
41eina_rectangle.c \
42eina_safety_checks.c \
43eina_sched.c \
44eina_share_common.c \
45eina_simple_xml_parser.c \
46eina_str.c \
47eina_strbuf.c \
48eina_strbuf_common.c \
49eina_stringshare.c \
50eina_tiler.c \
51eina_unicode.c \
52eina_ustrbuf.c \
53eina_ustringshare.c \
54eina_value.c \
55eina_xattr.c
56
57# Will be back for developper after 1.1
58# eina_object.c
59
60if EINA_HAVE_WIN32
61base_sources += eina_file_win32.c
62else
63base_sources += eina_file.c
64endif
65
66EXTRA_DIST = \
67eina_share_common.h \
68eina_private.h \
69eina_strbuf_common.h \
70eina_strbuf_template_c.x \
71eina_binbuf_template_c.x
72
73
74
75if EINA_STATIC_BUILD_BUDDY
76base_sources += $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
77endif
78
79if EINA_STATIC_BUILD_CHAINED_POOL
80base_sources += $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
81endif
82
83if EINA_STATIC_BUILD_EMEMOA_FIXED
84base_sources += $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
85endif
86
87if EINA_STATIC_BUILD_EMEMOA_UNKNOWN
88base_sources += $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
89endif
90
91if EINA_STATIC_BUILD_FIXED_BITMAP
92base_sources += $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
93endif
94
95if EINA_STATIC_BUILD_ONE_BIG
96base_sources += $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
97endif
98
99if EINA_STATIC_BUILD_PASS_THROUGH
100base_sources += $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
101endif
102
103lib_LTLIBRARIES = libeina.la
104
105if EINA_AMALGAMATION
106nodist_libeina_la_SOURCES = eina_amalgamation.c
107
108eina_amalgamation.c: $(base_sources) Makefile
109 -rm -f eina_amalgamation.c
110
111 @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c
112 @echo "#include \"config.h\"" >> eina_amalgamation.c
113 @echo "#endif" >> eina_amalgamation.c
114
115 @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c
116 @echo "# include <alloca.h>" >> eina_amalgamation.c
117 @echo "#elif defined __GNUC__" >> eina_amalgamation.c
118 @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c
119 @echo "#elif defined _AIX" >> eina_amalgamation.c
120 @echo "# define alloca __alloca" >> eina_amalgamation.c
121 @echo "#elif defined _MSC_VER" >> eina_amalgamation.c
122 @echo "# include <malloc.h>" >> eina_amalgamation.c
123 @echo "# define alloca _alloca" >> eina_amalgamation.c
124 @echo "#else" >> eina_amalgamation.c
125 @echo "# include <stddef.h>" >> eina_amalgamation.c
126 @echo "# ifdef __cplusplus" >> eina_amalgamation.c
127 @echo "#extern \"C\"" >> eina_amalgamation.c
128 @echo "# endif" >> eina_amalgamation.c
129 @echo "#void *alloca (size_t);" >> eina_amalgamation.c
130 @echo "#endif" >> eina_amalgamation.c
131
132 @echo "#include <stdio.h>" >> eina_amalgamation.c
133 @echo "#include <stdlib.h>" >> eina_amalgamation.c
134 @echo "#include <string.h>" >> eina_amalgamation.c
135 @echo "#ifdef HAVE_DLOPEN" >> eina_amalgamation.c
136 @echo "# include <dlfcn.h>" >> eina_amalgamation.c
137 @echo "#endif" >> eina_amalgamation.c
138 @echo "#include <sys/types.h>" >> eina_amalgamation.c
139 @echo "#ifdef HAVE_DIRENT_H" >> eina_amalgamation.c
140 @echo "# include <dirent.h>" >> eina_amalgamation.c
141 @echo "#endif" >> eina_amalgamation.c
142 @echo "#include <assert.h>" >> eina_amalgamation.c
143 @echo "#include <errno.h>" >> eina_amalgamation.c
144 @echo "#include <fnmatch.h>" >> eina_amalgamation.c
145 @echo "#include <fcntl.h>" >> eina_amalgamation.c
146
147 @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c
148 @echo "# include <Evil.h>" >> eina_amalgamation.c
149 @echo "#endif" >> eina_amalgamation.c
150
151 @echo "#include \"eina_config.h\"" >> eina_amalgamation.c
152 @echo "#include \"eina_private.h\"" >> eina_amalgamation.c
153 @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c
154 @echo "#include \"Eina.h\"" >> eina_amalgamation.c
155 @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c
156 @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c
157
158 @for f in $(base_sources); do \
159 if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \
160 file="$(srcdir)/$$f" ; \
161 else \
162 file="$$f" ; \
163 fi ; \
164 echo "/* file: $$file */" >> eina_amalgamation.c; \
165 grep -v -e '^# *include \+.\(config\|eina_[a-z_]\+\|Evil\|stdio\|stdlib\|string\|dlfcn\|dirent\|assert\|errno\|fnmatch\)[.]h.*' $$file >> eina_amalgamation.c; \
166 done
167 @echo "eina_amalgamation.c generated"
168
169else
170libeina_la_SOURCES = $(base_sources)
171endif
172
173libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@
174libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
175libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
176
177clean-local:
178 rm -rf *.gcno eina_amalgamation.c
diff --git a/libraries/eina/src/lib/Makefile.in b/libraries/eina/src/lib/Makefile.in
deleted file mode 100644
index f15bb00..0000000
--- a/libraries/eina/src/lib/Makefile.in
+++ /dev/null
@@ -1,1260 +0,0 @@
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/eina/eina_bench.m4 \
53 $(top_srcdir)/m4/eina/eina_check.m4 \
54 $(top_srcdir)/m4/common/efl_attribute.m4 \
55 $(top_srcdir)/m4/common/efl_benchmark.m4 \
56 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
57 $(top_srcdir)/m4/common/efl_coverage.m4 \
58 $(top_srcdir)/m4/common/efl_cpu.m4 \
59 $(top_srcdir)/m4/common/efl_doxygen.m4 \
60 $(top_srcdir)/m4/common/efl_examples.m4 \
61 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
62 $(top_srcdir)/m4/common/efl_path_max.m4 \
63 $(top_srcdir)/m4/common/efl_tests.m4 \
64 $(top_srcdir)/m4/common/efl_threads.m4 \
65 $(top_srcdir)/m4/common/efl_voltron.m4 \
66 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
67 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
68 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
69 $(top_srcdir)/configure.ac
70am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
71 $(ACLOCAL_M4)
72mkinstalldirs = $(install_sh) -d
73CONFIG_HEADER = $(top_builddir)/config.h
74CONFIG_CLEAN_FILES =
75CONFIG_CLEAN_VPATH_FILES =
76am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
77am__vpath_adj = case $$p in \
78 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
79 *) f=$$p;; \
80 esac;
81am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
82am__install_max = 40
83am__nobase_strip_setup = \
84 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
85am__nobase_strip = \
86 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
87am__nobase_list = $(am__nobase_strip_setup); \
88 for p in $$list; do echo "$$p $$p"; done | \
89 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
90 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
91 if (++n[$$2] == $(am__install_max)) \
92 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
93 END { for (dir in files) print dir, files[dir] }'
94am__base_list = \
95 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
96 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
97am__installdirs = "$(DESTDIR)$(libdir)"
98LTLIBRARIES = $(lib_LTLIBRARIES)
99libeina_la_DEPENDENCIES =
100am__libeina_la_SOURCES_DIST = eina_accessor.c eina_array.c \
101 eina_benchmark.c eina_binbuf.c eina_binshare.c eina_convert.c \
102 eina_counter.c eina_cpu.c eina_error.c eina_fp.c \
103 eina_hamster.c eina_hash.c eina_inarray.c eina_inlist.c \
104 eina_iterator.c eina_lalloc.c eina_list.c eina_log.c \
105 eina_magic.c eina_main.c eina_matrixsparse.c eina_mempool.c \
106 eina_mmap.c eina_model.c eina_module.c eina_prefix.c \
107 eina_quadtree.c eina_rbtree.c eina_rectangle.c \
108 eina_safety_checks.c eina_sched.c eina_share_common.c \
109 eina_simple_xml_parser.c eina_str.c eina_strbuf.c \
110 eina_strbuf_common.c eina_stringshare.c eina_tiler.c \
111 eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \
112 eina_xattr.c eina_file_win32.c eina_file.c \
113 $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c \
114 $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c \
115 $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c \
116 $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c \
117 $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c \
118 $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c \
119 $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
120@EINA_HAVE_WIN32_TRUE@am__objects_1 = libeina_la-eina_file_win32.lo
121@EINA_HAVE_WIN32_FALSE@am__objects_2 = libeina_la-eina_file.lo
122@EINA_STATIC_BUILD_BUDDY_TRUE@am__objects_3 = \
123@EINA_STATIC_BUILD_BUDDY_TRUE@ libeina_la-eina_buddy.lo
124@EINA_STATIC_BUILD_CHAINED_POOL_TRUE@am__objects_4 = libeina_la-eina_chained_mempool.lo
125@EINA_STATIC_BUILD_EMEMOA_FIXED_TRUE@am__objects_5 = libeina_la-eina_ememoa_fixed.lo
126@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_TRUE@am__objects_6 = libeina_la-eina_ememoa_unknown.lo
127@EINA_STATIC_BUILD_FIXED_BITMAP_TRUE@am__objects_7 = libeina_la-eina_fixed_bitmap.lo
128@EINA_STATIC_BUILD_ONE_BIG_TRUE@am__objects_8 = \
129@EINA_STATIC_BUILD_ONE_BIG_TRUE@ libeina_la-eina_one_big.lo
130@EINA_STATIC_BUILD_PASS_THROUGH_TRUE@am__objects_9 = libeina_la-eina_pass_through.lo
131am__objects_10 = libeina_la-eina_accessor.lo libeina_la-eina_array.lo \
132 libeina_la-eina_benchmark.lo libeina_la-eina_binbuf.lo \
133 libeina_la-eina_binshare.lo libeina_la-eina_convert.lo \
134 libeina_la-eina_counter.lo libeina_la-eina_cpu.lo \
135 libeina_la-eina_error.lo libeina_la-eina_fp.lo \
136 libeina_la-eina_hamster.lo libeina_la-eina_hash.lo \
137 libeina_la-eina_inarray.lo libeina_la-eina_inlist.lo \
138 libeina_la-eina_iterator.lo libeina_la-eina_lalloc.lo \
139 libeina_la-eina_list.lo libeina_la-eina_log.lo \
140 libeina_la-eina_magic.lo libeina_la-eina_main.lo \
141 libeina_la-eina_matrixsparse.lo libeina_la-eina_mempool.lo \
142 libeina_la-eina_mmap.lo libeina_la-eina_model.lo \
143 libeina_la-eina_module.lo libeina_la-eina_prefix.lo \
144 libeina_la-eina_quadtree.lo libeina_la-eina_rbtree.lo \
145 libeina_la-eina_rectangle.lo libeina_la-eina_safety_checks.lo \
146 libeina_la-eina_sched.lo libeina_la-eina_share_common.lo \
147 libeina_la-eina_simple_xml_parser.lo libeina_la-eina_str.lo \
148 libeina_la-eina_strbuf.lo libeina_la-eina_strbuf_common.lo \
149 libeina_la-eina_stringshare.lo libeina_la-eina_tiler.lo \
150 libeina_la-eina_unicode.lo libeina_la-eina_ustrbuf.lo \
151 libeina_la-eina_ustringshare.lo libeina_la-eina_value.lo \
152 libeina_la-eina_xattr.lo $(am__objects_1) $(am__objects_2) \
153 $(am__objects_3) $(am__objects_4) $(am__objects_5) \
154 $(am__objects_6) $(am__objects_7) $(am__objects_8) \
155 $(am__objects_9)
156@EINA_AMALGAMATION_FALSE@am_libeina_la_OBJECTS = $(am__objects_10)
157@EINA_AMALGAMATION_TRUE@nodist_libeina_la_OBJECTS = \
158@EINA_AMALGAMATION_TRUE@ libeina_la-eina_amalgamation.lo
159libeina_la_OBJECTS = $(am_libeina_la_OBJECTS) \
160 $(nodist_libeina_la_OBJECTS)
161AM_V_lt = $(am__v_lt_$(V))
162am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
163am__v_lt_0 = --silent
164libeina_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
165 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libeina_la_CFLAGS) \
166 $(CFLAGS) $(libeina_la_LDFLAGS) $(LDFLAGS) -o $@
167DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
168depcomp = $(SHELL) $(top_srcdir)/depcomp
169am__depfiles_maybe = depfiles
170am__mv = mv -f
171COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
172 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
173LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
174 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
175 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
176 $(AM_CFLAGS) $(CFLAGS)
177AM_V_CC = $(am__v_CC_$(V))
178am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
179am__v_CC_0 = @echo " CC " $@;
180AM_V_at = $(am__v_at_$(V))
181am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
182am__v_at_0 = @
183CCLD = $(CC)
184LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
185 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
186 $(AM_LDFLAGS) $(LDFLAGS) -o $@
187AM_V_CCLD = $(am__v_CCLD_$(V))
188am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
189am__v_CCLD_0 = @echo " CCLD " $@;
190AM_V_GEN = $(am__v_GEN_$(V))
191am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
192am__v_GEN_0 = @echo " GEN " $@;
193SOURCES = $(libeina_la_SOURCES) $(nodist_libeina_la_SOURCES)
194DIST_SOURCES = $(am__libeina_la_SOURCES_DIST)
195ETAGS = etags
196CTAGS = ctags
197DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
198ACLOCAL = @ACLOCAL@
199ALLOCA = @ALLOCA@
200AMTAR = @AMTAR@
201AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
202AR = @AR@
203AS = @AS@
204AUTOCONF = @AUTOCONF@
205AUTOHEADER = @AUTOHEADER@
206AUTOMAKE = @AUTOMAKE@
207AWK = @AWK@
208CC = @CC@
209CCDEPMODE = @CCDEPMODE@
210CFLAGS = @CFLAGS@
211CHECK_CFLAGS = @CHECK_CFLAGS@
212CHECK_LIBS = @CHECK_LIBS@
213CPP = @CPP@
214CPPFLAGS = @CPPFLAGS@
215CXX = @CXX@
216CXXCPP = @CXXCPP@
217CXXDEPMODE = @CXXDEPMODE@
218CXXFLAGS = @CXXFLAGS@
219CYGPATH_W = @CYGPATH_W@
220DEFS = @DEFS@
221DEPDIR = @DEPDIR@
222DLLTOOL = @DLLTOOL@
223DSYMUTIL = @DSYMUTIL@
224DUMPBIN = @DUMPBIN@
225ECHO_C = @ECHO_C@
226ECHO_N = @ECHO_N@
227ECHO_T = @ECHO_T@
228ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
229ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
230EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
231EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
232EFL_EINA_BUILD = @EFL_EINA_BUILD@
233EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
234EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
235EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
236EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
237EGREP = @EGREP@
238EINA_CFLAGS = @EINA_CFLAGS@
239EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
240EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
241EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
242EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
243EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
244EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
245EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
246EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
247EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
248EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
249EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
250EINA_LIBS = @EINA_LIBS@
251EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
252EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
253EMEMOA_LIBS = @EMEMOA_LIBS@
254ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
255ESCAPE_LIBS = @ESCAPE_LIBS@
256EVIL_CFLAGS = @EVIL_CFLAGS@
257EVIL_LIBS = @EVIL_LIBS@
258EXEEXT = @EXEEXT@
259EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
260EXOTIC_LIBS = @EXOTIC_LIBS@
261FGREP = @FGREP@
262GLIB_CFLAGS = @GLIB_CFLAGS@
263GLIB_LIBS = @GLIB_LIBS@
264GREP = @GREP@
265INSTALL = @INSTALL@
266INSTALL_DATA = @INSTALL_DATA@
267INSTALL_PROGRAM = @INSTALL_PROGRAM@
268INSTALL_SCRIPT = @INSTALL_SCRIPT@
269INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
270LD = @LD@
271LDFLAGS = @LDFLAGS@
272LIBOBJS = @LIBOBJS@
273LIBS = @LIBS@
274LIBTOOL = @LIBTOOL@
275LIPO = @LIPO@
276LN_S = @LN_S@
277LTLIBOBJS = @LTLIBOBJS@
278MAKEINFO = @MAKEINFO@
279MKDIR_P = @MKDIR_P@
280MODULE_ARCH = @MODULE_ARCH@
281NM = @NM@
282NMEDIT = @NMEDIT@
283OBJDUMP = @OBJDUMP@
284OBJEXT = @OBJEXT@
285OTOOL = @OTOOL@
286OTOOL64 = @OTOOL64@
287PACKAGE = @PACKAGE@
288PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
289PACKAGE_NAME = @PACKAGE_NAME@
290PACKAGE_STRING = @PACKAGE_STRING@
291PACKAGE_TARNAME = @PACKAGE_TARNAME@
292PACKAGE_URL = @PACKAGE_URL@
293PACKAGE_VERSION = @PACKAGE_VERSION@
294PATH_SEPARATOR = @PATH_SEPARATOR@
295PKG_CONFIG = @PKG_CONFIG@
296PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
297PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
298RANLIB = @RANLIB@
299SED = @SED@
300SET_MAKE = @SET_MAKE@
301SHELL = @SHELL@
302STRIP = @STRIP@
303VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
304VALGRIND_LIBS = @VALGRIND_LIBS@
305VERSION = @VERSION@
306VMAJ = @VMAJ@
307abs_builddir = @abs_builddir@
308abs_srcdir = @abs_srcdir@
309abs_top_builddir = @abs_top_builddir@
310abs_top_srcdir = @abs_top_srcdir@
311ac_ct_CC = @ac_ct_CC@
312ac_ct_CXX = @ac_ct_CXX@
313ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
314am__include = @am__include@
315am__leading_dot = @am__leading_dot@
316am__quote = @am__quote@
317am__tar = @am__tar@
318am__untar = @am__untar@
319bindir = @bindir@
320build = @build@
321build_alias = @build_alias@
322build_cpu = @build_cpu@
323build_os = @build_os@
324build_vendor = @build_vendor@
325builddir = @builddir@
326datadir = @datadir@
327datarootdir = @datarootdir@
328dlopen_libs = @dlopen_libs@
329docdir = @docdir@
330dvidir = @dvidir@
331efl_doxygen = @efl_doxygen@
332efl_have_doxygen = @efl_have_doxygen@
333exec_prefix = @exec_prefix@
334have_lcov = @have_lcov@
335host = @host@
336host_alias = @host_alias@
337host_cpu = @host_cpu@
338host_os = @host_os@
339host_vendor = @host_vendor@
340htmldir = @htmldir@
341iconv_libs = @iconv_libs@
342includedir = @includedir@
343infodir = @infodir@
344install_sh = @install_sh@
345libdir = @libdir@
346libexecdir = @libexecdir@
347localedir = @localedir@
348localstatedir = @localstatedir@
349lt_ECHO = @lt_ECHO@
350lt_enable_auto_import = @lt_enable_auto_import@
351mandir = @mandir@
352mkdir_p = @mkdir_p@
353oldincludedir = @oldincludedir@
354pdfdir = @pdfdir@
355pkgconfig_requires_private = @pkgconfig_requires_private@
356prefix = @prefix@
357program_transform_name = @program_transform_name@
358psdir = @psdir@
359release_info = @release_info@
360requirement_eina = @requirement_eina@
361rt_libs = @rt_libs@
362sbindir = @sbindir@
363sharedstatedir = @sharedstatedir@
364srcdir = @srcdir@
365sysconfdir = @sysconfdir@
366target_alias = @target_alias@
367top_build_prefix = @top_build_prefix@
368top_builddir = @top_builddir@
369top_srcdir = @top_srcdir@
370version_info = @version_info@
371MAINTAINERCLEANFILES = Makefile.in
372AM_CPPFLAGS = \
373-I$(top_srcdir)/src/include \
374-I$(top_builddir)/src/include \
375-DPACKAGE_BIN_DIR=\"$(bindir)\" \
376-DPACKAGE_LIB_DIR=\"$(libdir)\" \
377-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
378@EFL_EINA_BUILD@ \
379@VALGRIND_CFLAGS@
380
381base_sources = eina_accessor.c eina_array.c eina_benchmark.c \
382 eina_binbuf.c eina_binshare.c eina_convert.c eina_counter.c \
383 eina_cpu.c eina_error.c eina_fp.c eina_hamster.c eina_hash.c \
384 eina_inarray.c eina_inlist.c eina_iterator.c eina_lalloc.c \
385 eina_list.c eina_log.c eina_magic.c eina_main.c \
386 eina_matrixsparse.c eina_mempool.c eina_mmap.c eina_model.c \
387 eina_module.c eina_prefix.c eina_quadtree.c eina_rbtree.c \
388 eina_rectangle.c eina_safety_checks.c eina_sched.c \
389 eina_share_common.c eina_simple_xml_parser.c eina_str.c \
390 eina_strbuf.c eina_strbuf_common.c eina_stringshare.c \
391 eina_tiler.c eina_unicode.c eina_ustrbuf.c eina_ustringshare.c \
392 eina_value.c eina_xattr.c $(am__append_1) $(am__append_2) \
393 $(am__append_3) $(am__append_4) $(am__append_5) \
394 $(am__append_6) $(am__append_7) $(am__append_8) \
395 $(am__append_9)
396EXTRA_DIST = \
397eina_share_common.h \
398eina_private.h \
399eina_strbuf_common.h \
400eina_strbuf_template_c.x \
401eina_binbuf_template_c.x
402
403lib_LTLIBRARIES = libeina.la
404@EINA_AMALGAMATION_TRUE@nodist_libeina_la_SOURCES = eina_amalgamation.c
405@EINA_AMALGAMATION_FALSE@libeina_la_SOURCES = $(base_sources)
406libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@
407libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
408libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
409all: all-am
410
411.SUFFIXES:
412.SUFFIXES: .c .lo .o .obj
413$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
414 @for dep in $?; do \
415 case '$(am__configure_deps)' in \
416 *$$dep*) \
417 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
418 && { if test -f $@; then exit 0; else break; fi; }; \
419 exit 1;; \
420 esac; \
421 done; \
422 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/Makefile'; \
423 $(am__cd) $(top_srcdir) && \
424 $(AUTOMAKE) --gnu src/lib/Makefile
425.PRECIOUS: Makefile
426Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
427 @case '$?' in \
428 *config.status*) \
429 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
430 *) \
431 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
432 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
433 esac;
434
435$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
436 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
437
438$(top_srcdir)/configure: $(am__configure_deps)
439 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
440$(ACLOCAL_M4): $(am__aclocal_m4_deps)
441 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
442$(am__aclocal_m4_deps):
443install-libLTLIBRARIES: $(lib_LTLIBRARIES)
444 @$(NORMAL_INSTALL)
445 test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
446 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
447 list2=; for p in $$list; do \
448 if test -f $$p; then \
449 list2="$$list2 $$p"; \
450 else :; fi; \
451 done; \
452 test -z "$$list2" || { \
453 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
454 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
455 }
456
457uninstall-libLTLIBRARIES:
458 @$(NORMAL_UNINSTALL)
459 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
460 for p in $$list; do \
461 $(am__strip_dir) \
462 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
463 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
464 done
465
466clean-libLTLIBRARIES:
467 -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
468 @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
469 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
470 test "$$dir" != "$$p" || dir=.; \
471 echo "rm -f \"$${dir}/so_locations\""; \
472 rm -f "$${dir}/so_locations"; \
473 done
474libeina.la: $(libeina_la_OBJECTS) $(libeina_la_DEPENDENCIES)
475 $(AM_V_CCLD)$(libeina_la_LINK) -rpath $(libdir) $(libeina_la_OBJECTS) $(libeina_la_LIBADD) $(LIBS)
476
477mostlyclean-compile:
478 -rm -f *.$(OBJEXT)
479
480distclean-compile:
481 -rm -f *.tab.c
482
483@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_accessor.Plo@am__quote@
484@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_amalgamation.Plo@am__quote@
485@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_array.Plo@am__quote@
486@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_benchmark.Plo@am__quote@
487@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binbuf.Plo@am__quote@
488@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binshare.Plo@am__quote@
489@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_buddy.Plo@am__quote@
490@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_chained_mempool.Plo@am__quote@
491@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_convert.Plo@am__quote@
492@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_counter.Plo@am__quote@
493@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_cpu.Plo@am__quote@
494@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo@am__quote@
495@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo@am__quote@
496@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_error.Plo@am__quote@
497@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file.Plo@am__quote@
498@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file_win32.Plo@am__quote@
499@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo@am__quote@
500@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fp.Plo@am__quote@
501@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hamster.Plo@am__quote@
502@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hash.Plo@am__quote@
503@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_inarray.Plo@am__quote@
504@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_inlist.Plo@am__quote@
505@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_iterator.Plo@am__quote@
506@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_lalloc.Plo@am__quote@
507@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_list.Plo@am__quote@
508@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_log.Plo@am__quote@
509@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_magic.Plo@am__quote@
510@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_main.Plo@am__quote@
511@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_matrixsparse.Plo@am__quote@
512@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mempool.Plo@am__quote@
513@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mmap.Plo@am__quote@
514@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_model.Plo@am__quote@
515@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_module.Plo@am__quote@
516@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_one_big.Plo@am__quote@
517@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_pass_through.Plo@am__quote@
518@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_prefix.Plo@am__quote@
519@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_quadtree.Plo@am__quote@
520@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rbtree.Plo@am__quote@
521@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rectangle.Plo@am__quote@
522@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_safety_checks.Plo@am__quote@
523@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_sched.Plo@am__quote@
524@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_share_common.Plo@am__quote@
525@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo@am__quote@
526@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_str.Plo@am__quote@
527@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf.Plo@am__quote@
528@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf_common.Plo@am__quote@
529@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_stringshare.Plo@am__quote@
530@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_tiler.Plo@am__quote@
531@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_unicode.Plo@am__quote@
532@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustrbuf.Plo@am__quote@
533@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustringshare.Plo@am__quote@
534@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_value.Plo@am__quote@
535@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_xattr.Plo@am__quote@
536
537.c.o:
538@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
539@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
540@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
541@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
542@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
543@am__fastdepCC_FALSE@ $(COMPILE) -c $<
544
545.c.obj:
546@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
547@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
548@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
550@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
551@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
552
553.c.lo:
554@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
555@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
556@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
557@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
558@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
559@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
560
561libeina_la-eina_accessor.lo: eina_accessor.c
562@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
563@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_accessor.Tpo $(DEPDIR)/libeina_la-eina_accessor.Plo
564@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
565@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_accessor.c' object='libeina_la-eina_accessor.lo' libtool=yes @AMDEPBACKSLASH@
566@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
567@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
568
569libeina_la-eina_array.lo: eina_array.c
570@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
571@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_array.Tpo $(DEPDIR)/libeina_la-eina_array.Plo
572@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
573@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_array.c' object='libeina_la-eina_array.lo' libtool=yes @AMDEPBACKSLASH@
574@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
575@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
576
577libeina_la-eina_benchmark.lo: eina_benchmark.c
578@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
579@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_benchmark.Tpo $(DEPDIR)/libeina_la-eina_benchmark.Plo
580@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
581@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_benchmark.c' object='libeina_la-eina_benchmark.lo' libtool=yes @AMDEPBACKSLASH@
582@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
583@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
584
585libeina_la-eina_binbuf.lo: eina_binbuf.c
586@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
587@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binbuf.Tpo $(DEPDIR)/libeina_la-eina_binbuf.Plo
588@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
589@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binbuf.c' object='libeina_la-eina_binbuf.lo' libtool=yes @AMDEPBACKSLASH@
590@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
591@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
592
593libeina_la-eina_binshare.lo: eina_binshare.c
594@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
595@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binshare.Tpo $(DEPDIR)/libeina_la-eina_binshare.Plo
596@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
597@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binshare.c' object='libeina_la-eina_binshare.lo' libtool=yes @AMDEPBACKSLASH@
598@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
599@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
600
601libeina_la-eina_convert.lo: eina_convert.c
602@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
603@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_convert.Tpo $(DEPDIR)/libeina_la-eina_convert.Plo
604@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
605@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_convert.c' object='libeina_la-eina_convert.lo' libtool=yes @AMDEPBACKSLASH@
606@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
607@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
608
609libeina_la-eina_counter.lo: eina_counter.c
610@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
611@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_counter.Tpo $(DEPDIR)/libeina_la-eina_counter.Plo
612@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
613@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_counter.c' object='libeina_la-eina_counter.lo' libtool=yes @AMDEPBACKSLASH@
614@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
615@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
616
617libeina_la-eina_cpu.lo: eina_cpu.c
618@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
619@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_cpu.Tpo $(DEPDIR)/libeina_la-eina_cpu.Plo
620@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
621@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_cpu.c' object='libeina_la-eina_cpu.lo' libtool=yes @AMDEPBACKSLASH@
622@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
623@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
624
625libeina_la-eina_error.lo: eina_error.c
626@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
627@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_error.Tpo $(DEPDIR)/libeina_la-eina_error.Plo
628@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
629@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_error.c' object='libeina_la-eina_error.lo' libtool=yes @AMDEPBACKSLASH@
630@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
631@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
632
633libeina_la-eina_fp.lo: eina_fp.c
634@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
635@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fp.Tpo $(DEPDIR)/libeina_la-eina_fp.Plo
636@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
637@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fp.c' object='libeina_la-eina_fp.lo' libtool=yes @AMDEPBACKSLASH@
638@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
639@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
640
641libeina_la-eina_hamster.lo: eina_hamster.c
642@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
643@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hamster.Tpo $(DEPDIR)/libeina_la-eina_hamster.Plo
644@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
645@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hamster.c' object='libeina_la-eina_hamster.lo' libtool=yes @AMDEPBACKSLASH@
646@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
647@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
648
649libeina_la-eina_hash.lo: eina_hash.c
650@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
651@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hash.Tpo $(DEPDIR)/libeina_la-eina_hash.Plo
652@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
653@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hash.c' object='libeina_la-eina_hash.lo' libtool=yes @AMDEPBACKSLASH@
654@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
655@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
656
657libeina_la-eina_inarray.lo: eina_inarray.c
658@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_inarray.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_inarray.Tpo -c -o libeina_la-eina_inarray.lo `test -f 'eina_inarray.c' || echo '$(srcdir)/'`eina_inarray.c
659@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_inarray.Tpo $(DEPDIR)/libeina_la-eina_inarray.Plo
660@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
661@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_inarray.c' object='libeina_la-eina_inarray.lo' libtool=yes @AMDEPBACKSLASH@
662@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
663@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_inarray.lo `test -f 'eina_inarray.c' || echo '$(srcdir)/'`eina_inarray.c
664
665libeina_la-eina_inlist.lo: eina_inlist.c
666@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
667@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_inlist.Tpo $(DEPDIR)/libeina_la-eina_inlist.Plo
668@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
669@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_inlist.c' object='libeina_la-eina_inlist.lo' libtool=yes @AMDEPBACKSLASH@
670@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
671@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
672
673libeina_la-eina_iterator.lo: eina_iterator.c
674@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
675@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_iterator.Tpo $(DEPDIR)/libeina_la-eina_iterator.Plo
676@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
677@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_iterator.c' object='libeina_la-eina_iterator.lo' libtool=yes @AMDEPBACKSLASH@
678@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
679@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
680
681libeina_la-eina_lalloc.lo: eina_lalloc.c
682@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
683@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_lalloc.Tpo $(DEPDIR)/libeina_la-eina_lalloc.Plo
684@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
685@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_lalloc.c' object='libeina_la-eina_lalloc.lo' libtool=yes @AMDEPBACKSLASH@
686@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
687@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
688
689libeina_la-eina_list.lo: eina_list.c
690@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
691@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_list.Tpo $(DEPDIR)/libeina_la-eina_list.Plo
692@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
693@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_list.c' object='libeina_la-eina_list.lo' libtool=yes @AMDEPBACKSLASH@
694@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
695@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
696
697libeina_la-eina_log.lo: eina_log.c
698@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
699@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_log.Tpo $(DEPDIR)/libeina_la-eina_log.Plo
700@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
701@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_log.c' object='libeina_la-eina_log.lo' libtool=yes @AMDEPBACKSLASH@
702@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
703@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
704
705libeina_la-eina_magic.lo: eina_magic.c
706@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
707@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_magic.Tpo $(DEPDIR)/libeina_la-eina_magic.Plo
708@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
709@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_magic.c' object='libeina_la-eina_magic.lo' libtool=yes @AMDEPBACKSLASH@
710@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
711@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
712
713libeina_la-eina_main.lo: eina_main.c
714@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
715@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_main.Tpo $(DEPDIR)/libeina_la-eina_main.Plo
716@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
717@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_main.c' object='libeina_la-eina_main.lo' libtool=yes @AMDEPBACKSLASH@
718@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
719@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
720
721libeina_la-eina_matrixsparse.lo: eina_matrixsparse.c
722@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
723@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_matrixsparse.Tpo $(DEPDIR)/libeina_la-eina_matrixsparse.Plo
724@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
725@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_matrixsparse.c' object='libeina_la-eina_matrixsparse.lo' libtool=yes @AMDEPBACKSLASH@
726@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
727@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
728
729libeina_la-eina_mempool.lo: eina_mempool.c
730@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
731@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mempool.Tpo $(DEPDIR)/libeina_la-eina_mempool.Plo
732@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
733@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mempool.c' object='libeina_la-eina_mempool.lo' libtool=yes @AMDEPBACKSLASH@
734@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
735@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
736
737libeina_la-eina_mmap.lo: eina_mmap.c
738@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
739@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mmap.Tpo $(DEPDIR)/libeina_la-eina_mmap.Plo
740@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
741@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mmap.c' object='libeina_la-eina_mmap.lo' libtool=yes @AMDEPBACKSLASH@
742@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
743@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
744
745libeina_la-eina_model.lo: eina_model.c
746@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_model.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_model.Tpo -c -o libeina_la-eina_model.lo `test -f 'eina_model.c' || echo '$(srcdir)/'`eina_model.c
747@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_model.Tpo $(DEPDIR)/libeina_la-eina_model.Plo
748@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
749@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_model.c' object='libeina_la-eina_model.lo' libtool=yes @AMDEPBACKSLASH@
750@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
751@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_model.lo `test -f 'eina_model.c' || echo '$(srcdir)/'`eina_model.c
752
753libeina_la-eina_module.lo: eina_module.c
754@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
755@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_module.Tpo $(DEPDIR)/libeina_la-eina_module.Plo
756@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
757@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_module.c' object='libeina_la-eina_module.lo' libtool=yes @AMDEPBACKSLASH@
758@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
759@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
760
761libeina_la-eina_prefix.lo: eina_prefix.c
762@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
763@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_prefix.Tpo $(DEPDIR)/libeina_la-eina_prefix.Plo
764@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
765@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_prefix.c' object='libeina_la-eina_prefix.lo' libtool=yes @AMDEPBACKSLASH@
766@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
767@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
768
769libeina_la-eina_quadtree.lo: eina_quadtree.c
770@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
771@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_quadtree.Tpo $(DEPDIR)/libeina_la-eina_quadtree.Plo
772@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
773@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_quadtree.c' object='libeina_la-eina_quadtree.lo' libtool=yes @AMDEPBACKSLASH@
774@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
775@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
776
777libeina_la-eina_rbtree.lo: eina_rbtree.c
778@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
779@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rbtree.Tpo $(DEPDIR)/libeina_la-eina_rbtree.Plo
780@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
781@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rbtree.c' object='libeina_la-eina_rbtree.lo' libtool=yes @AMDEPBACKSLASH@
782@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
783@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
784
785libeina_la-eina_rectangle.lo: eina_rectangle.c
786@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
787@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rectangle.Tpo $(DEPDIR)/libeina_la-eina_rectangle.Plo
788@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
789@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rectangle.c' object='libeina_la-eina_rectangle.lo' libtool=yes @AMDEPBACKSLASH@
790@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
791@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
792
793libeina_la-eina_safety_checks.lo: eina_safety_checks.c
794@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
795@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_safety_checks.Tpo $(DEPDIR)/libeina_la-eina_safety_checks.Plo
796@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
797@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_safety_checks.c' object='libeina_la-eina_safety_checks.lo' libtool=yes @AMDEPBACKSLASH@
798@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
799@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
800
801libeina_la-eina_sched.lo: eina_sched.c
802@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
803@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_sched.Tpo $(DEPDIR)/libeina_la-eina_sched.Plo
804@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
805@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_sched.c' object='libeina_la-eina_sched.lo' libtool=yes @AMDEPBACKSLASH@
806@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
807@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
808
809libeina_la-eina_share_common.lo: eina_share_common.c
810@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
811@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_share_common.Tpo $(DEPDIR)/libeina_la-eina_share_common.Plo
812@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
813@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_share_common.c' object='libeina_la-eina_share_common.lo' libtool=yes @AMDEPBACKSLASH@
814@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
815@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
816
817libeina_la-eina_simple_xml_parser.lo: eina_simple_xml_parser.c
818@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
819@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_simple_xml_parser.Tpo $(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo
820@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
821@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_simple_xml_parser.c' object='libeina_la-eina_simple_xml_parser.lo' libtool=yes @AMDEPBACKSLASH@
822@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
823@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
824
825libeina_la-eina_str.lo: eina_str.c
826@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
827@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_str.Tpo $(DEPDIR)/libeina_la-eina_str.Plo
828@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
829@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_str.c' object='libeina_la-eina_str.lo' libtool=yes @AMDEPBACKSLASH@
830@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
831@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
832
833libeina_la-eina_strbuf.lo: eina_strbuf.c
834@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
835@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf.Tpo $(DEPDIR)/libeina_la-eina_strbuf.Plo
836@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
837@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf.c' object='libeina_la-eina_strbuf.lo' libtool=yes @AMDEPBACKSLASH@
838@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
839@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
840
841libeina_la-eina_strbuf_common.lo: eina_strbuf_common.c
842@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
843@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf_common.Tpo $(DEPDIR)/libeina_la-eina_strbuf_common.Plo
844@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
845@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf_common.c' object='libeina_la-eina_strbuf_common.lo' libtool=yes @AMDEPBACKSLASH@
846@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
847@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
848
849libeina_la-eina_stringshare.lo: eina_stringshare.c
850@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
851@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_stringshare.Tpo $(DEPDIR)/libeina_la-eina_stringshare.Plo
852@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
853@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_stringshare.c' object='libeina_la-eina_stringshare.lo' libtool=yes @AMDEPBACKSLASH@
854@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
855@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
856
857libeina_la-eina_tiler.lo: eina_tiler.c
858@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
859@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_tiler.Tpo $(DEPDIR)/libeina_la-eina_tiler.Plo
860@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
861@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_tiler.c' object='libeina_la-eina_tiler.lo' libtool=yes @AMDEPBACKSLASH@
862@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
863@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
864
865libeina_la-eina_unicode.lo: eina_unicode.c
866@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
867@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_unicode.Tpo $(DEPDIR)/libeina_la-eina_unicode.Plo
868@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
869@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_unicode.c' object='libeina_la-eina_unicode.lo' libtool=yes @AMDEPBACKSLASH@
870@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
871@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
872
873libeina_la-eina_ustrbuf.lo: eina_ustrbuf.c
874@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
875@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustrbuf.Tpo $(DEPDIR)/libeina_la-eina_ustrbuf.Plo
876@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
877@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustrbuf.c' object='libeina_la-eina_ustrbuf.lo' libtool=yes @AMDEPBACKSLASH@
878@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
879@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
880
881libeina_la-eina_ustringshare.lo: eina_ustringshare.c
882@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
883@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustringshare.Tpo $(DEPDIR)/libeina_la-eina_ustringshare.Plo
884@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
885@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustringshare.c' object='libeina_la-eina_ustringshare.lo' libtool=yes @AMDEPBACKSLASH@
886@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
887@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
888
889libeina_la-eina_value.lo: eina_value.c
890@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
891@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_value.Tpo $(DEPDIR)/libeina_la-eina_value.Plo
892@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
893@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_value.c' object='libeina_la-eina_value.lo' libtool=yes @AMDEPBACKSLASH@
894@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
895@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
896
897libeina_la-eina_xattr.lo: eina_xattr.c
898@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
899@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_xattr.Tpo $(DEPDIR)/libeina_la-eina_xattr.Plo
900@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
901@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_xattr.c' object='libeina_la-eina_xattr.lo' libtool=yes @AMDEPBACKSLASH@
902@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
903@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
904
905libeina_la-eina_file_win32.lo: eina_file_win32.c
906@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
907@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file_win32.Tpo $(DEPDIR)/libeina_la-eina_file_win32.Plo
908@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
909@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file_win32.c' object='libeina_la-eina_file_win32.lo' libtool=yes @AMDEPBACKSLASH@
910@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
911@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
912
913libeina_la-eina_file.lo: eina_file.c
914@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
915@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file.Tpo $(DEPDIR)/libeina_la-eina_file.Plo
916@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
917@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file.c' object='libeina_la-eina_file.lo' libtool=yes @AMDEPBACKSLASH@
918@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
919@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
920
921libeina_la-eina_buddy.lo: $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
922@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
923@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_buddy.Tpo $(DEPDIR)/libeina_la-eina_buddy.Plo
924@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
925@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c' object='libeina_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@
926@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
927@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
928
929libeina_la-eina_chained_mempool.lo: $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
930@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
931@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_chained_mempool.Tpo $(DEPDIR)/libeina_la-eina_chained_mempool.Plo
932@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
933@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@
934@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
935@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
936
937libeina_la-eina_ememoa_fixed.lo: $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
938@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
939@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_fixed.Tpo $(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo
940@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
941@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@
942@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
943@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
944
945libeina_la-eina_ememoa_unknown.lo: $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
946@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
947@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_unknown.Tpo $(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo
948@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
949@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@
950@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
951@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
952
953libeina_la-eina_fixed_bitmap.lo: $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
954@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
955@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fixed_bitmap.Tpo $(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo
956@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
957@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@
958@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
959@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
960
961libeina_la-eina_one_big.lo: $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
962@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
963@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_one_big.Tpo $(DEPDIR)/libeina_la-eina_one_big.Plo
964@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
965@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@
966@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
967@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
968
969libeina_la-eina_pass_through.lo: $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
970@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
971@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_pass_through.Tpo $(DEPDIR)/libeina_la-eina_pass_through.Plo
972@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
973@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@
974@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
975@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
976
977libeina_la-eina_amalgamation.lo: eina_amalgamation.c
978@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
979@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_amalgamation.Tpo $(DEPDIR)/libeina_la-eina_amalgamation.Plo
980@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
981@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_amalgamation.c' object='libeina_la-eina_amalgamation.lo' libtool=yes @AMDEPBACKSLASH@
982@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
983@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
984
985mostlyclean-libtool:
986 -rm -f *.lo
987
988clean-libtool:
989 -rm -rf .libs _libs
990
991ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
992 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
993 unique=`for i in $$list; do \
994 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
995 done | \
996 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
997 END { if (nonempty) { for (i in files) print i; }; }'`; \
998 mkid -fID $$unique
999tags: TAGS
1000
1001TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
1002 $(TAGS_FILES) $(LISP)
1003 set x; \
1004 here=`pwd`; \
1005 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
1006 unique=`for i in $$list; do \
1007 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
1008 done | \
1009 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
1010 END { if (nonempty) { for (i in files) print i; }; }'`; \
1011 shift; \
1012 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
1013 test -n "$$unique" || unique=$$empty_fix; \
1014 if test $$# -gt 0; then \
1015 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
1016 "$$@" $$unique; \
1017 else \
1018 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
1019 $$unique; \
1020 fi; \
1021 fi
1022ctags: CTAGS
1023CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
1024 $(TAGS_FILES) $(LISP)
1025 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
1026 unique=`for i in $$list; do \
1027 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
1028 done | \
1029 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
1030 END { if (nonempty) { for (i in files) print i; }; }'`; \
1031 test -z "$(CTAGS_ARGS)$$unique" \
1032 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
1033 $$unique
1034
1035GTAGS:
1036 here=`$(am__cd) $(top_builddir) && pwd` \
1037 && $(am__cd) $(top_srcdir) \
1038 && gtags -i $(GTAGS_ARGS) "$$here"
1039
1040distclean-tags:
1041 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
1042
1043distdir: $(DISTFILES)
1044 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
1045 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
1046 list='$(DISTFILES)'; \
1047 dist_files=`for file in $$list; do echo $$file; done | \
1048 sed -e "s|^$$srcdirstrip/||;t" \
1049 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
1050 case $$dist_files in \
1051 */*) $(MKDIR_P) `echo "$$dist_files" | \
1052 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
1053 sort -u` ;; \
1054 esac; \
1055 for file in $$dist_files; do \
1056 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
1057 if test -d $$d/$$file; then \
1058 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
1059 if test -d "$(distdir)/$$file"; then \
1060 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
1061 fi; \
1062 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
1063 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
1064 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
1065 fi; \
1066 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
1067 else \
1068 test -f "$(distdir)/$$file" \
1069 || cp -p $$d/$$file "$(distdir)/$$file" \
1070 || exit 1; \
1071 fi; \
1072 done
1073check-am: all-am
1074check: check-am
1075all-am: Makefile $(LTLIBRARIES)
1076installdirs:
1077 for dir in "$(DESTDIR)$(libdir)"; do \
1078 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
1079 done
1080install: install-am
1081install-exec: install-exec-am
1082install-data: install-data-am
1083uninstall: uninstall-am
1084
1085install-am: all-am
1086 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
1087
1088installcheck: installcheck-am
1089install-strip:
1090 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
1091 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
1092 `test -z '$(STRIP)' || \
1093 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
1094mostlyclean-generic:
1095
1096clean-generic:
1097
1098distclean-generic:
1099 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
1100 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
1101
1102maintainer-clean-generic:
1103 @echo "This command is intended for maintainers to use"
1104 @echo "it deletes files that may require special tools to rebuild."
1105 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
1106clean: clean-am
1107
1108clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
1109 mostlyclean-am
1110
1111distclean: distclean-am
1112 -rm -rf ./$(DEPDIR)
1113 -rm -f Makefile
1114distclean-am: clean-am distclean-compile distclean-generic \
1115 distclean-tags
1116
1117dvi: dvi-am
1118
1119dvi-am:
1120
1121html: html-am
1122
1123html-am:
1124
1125info: info-am
1126
1127info-am:
1128
1129install-data-am:
1130
1131install-dvi: install-dvi-am
1132
1133install-dvi-am:
1134
1135install-exec-am: install-libLTLIBRARIES
1136
1137install-html: install-html-am
1138
1139install-html-am:
1140
1141install-info: install-info-am
1142
1143install-info-am:
1144
1145install-man:
1146
1147install-pdf: install-pdf-am
1148
1149install-pdf-am:
1150
1151install-ps: install-ps-am
1152
1153install-ps-am:
1154
1155installcheck-am:
1156
1157maintainer-clean: maintainer-clean-am
1158 -rm -rf ./$(DEPDIR)
1159 -rm -f Makefile
1160maintainer-clean-am: distclean-am maintainer-clean-generic
1161
1162mostlyclean: mostlyclean-am
1163
1164mostlyclean-am: mostlyclean-compile mostlyclean-generic \
1165 mostlyclean-libtool
1166
1167pdf: pdf-am
1168
1169pdf-am:
1170
1171ps: ps-am
1172
1173ps-am:
1174
1175uninstall-am: uninstall-libLTLIBRARIES
1176
1177.MAKE: install-am install-strip
1178
1179.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
1180 clean-libLTLIBRARIES clean-libtool clean-local ctags distclean \
1181 distclean-compile distclean-generic distclean-libtool \
1182 distclean-tags distdir dvi dvi-am html html-am info info-am \
1183 install install-am install-data install-data-am install-dvi \
1184 install-dvi-am install-exec install-exec-am install-html \
1185 install-html-am install-info install-info-am \
1186 install-libLTLIBRARIES install-man install-pdf install-pdf-am \
1187 install-ps install-ps-am install-strip installcheck \
1188 installcheck-am installdirs maintainer-clean \
1189 maintainer-clean-generic mostlyclean mostlyclean-compile \
1190 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1191 tags uninstall uninstall-am uninstall-libLTLIBRARIES
1192
1193
1194@EINA_AMALGAMATION_TRUE@eina_amalgamation.c: $(base_sources) Makefile
1195@EINA_AMALGAMATION_TRUE@ -rm -f eina_amalgamation.c
1196
1197@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c
1198@EINA_AMALGAMATION_TRUE@ @echo "#include \"config.h\"" >> eina_amalgamation.c
1199@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1200
1201@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c
1202@EINA_AMALGAMATION_TRUE@ @echo "# include <alloca.h>" >> eina_amalgamation.c
1203@EINA_AMALGAMATION_TRUE@ @echo "#elif defined __GNUC__" >> eina_amalgamation.c
1204@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c
1205@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _AIX" >> eina_amalgamation.c
1206@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __alloca" >> eina_amalgamation.c
1207@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _MSC_VER" >> eina_amalgamation.c
1208@EINA_AMALGAMATION_TRUE@ @echo "# include <malloc.h>" >> eina_amalgamation.c
1209@EINA_AMALGAMATION_TRUE@ @echo "# define alloca _alloca" >> eina_amalgamation.c
1210@EINA_AMALGAMATION_TRUE@ @echo "#else" >> eina_amalgamation.c
1211@EINA_AMALGAMATION_TRUE@ @echo "# include <stddef.h>" >> eina_amalgamation.c
1212@EINA_AMALGAMATION_TRUE@ @echo "# ifdef __cplusplus" >> eina_amalgamation.c
1213@EINA_AMALGAMATION_TRUE@ @echo "#extern \"C\"" >> eina_amalgamation.c
1214@EINA_AMALGAMATION_TRUE@ @echo "# endif" >> eina_amalgamation.c
1215@EINA_AMALGAMATION_TRUE@ @echo "#void *alloca (size_t);" >> eina_amalgamation.c
1216@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1217
1218@EINA_AMALGAMATION_TRUE@ @echo "#include <stdio.h>" >> eina_amalgamation.c
1219@EINA_AMALGAMATION_TRUE@ @echo "#include <stdlib.h>" >> eina_amalgamation.c
1220@EINA_AMALGAMATION_TRUE@ @echo "#include <string.h>" >> eina_amalgamation.c
1221@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_DLOPEN" >> eina_amalgamation.c
1222@EINA_AMALGAMATION_TRUE@ @echo "# include <dlfcn.h>" >> eina_amalgamation.c
1223@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1224@EINA_AMALGAMATION_TRUE@ @echo "#include <sys/types.h>" >> eina_amalgamation.c
1225@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_DIRENT_H" >> eina_amalgamation.c
1226@EINA_AMALGAMATION_TRUE@ @echo "# include <dirent.h>" >> eina_amalgamation.c
1227@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1228@EINA_AMALGAMATION_TRUE@ @echo "#include <assert.h>" >> eina_amalgamation.c
1229@EINA_AMALGAMATION_TRUE@ @echo "#include <errno.h>" >> eina_amalgamation.c
1230@EINA_AMALGAMATION_TRUE@ @echo "#include <fnmatch.h>" >> eina_amalgamation.c
1231@EINA_AMALGAMATION_TRUE@ @echo "#include <fcntl.h>" >> eina_amalgamation.c
1232
1233@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c
1234@EINA_AMALGAMATION_TRUE@ @echo "# include <Evil.h>" >> eina_amalgamation.c
1235@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1236
1237@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_config.h\"" >> eina_amalgamation.c
1238@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_private.h\"" >> eina_amalgamation.c
1239@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c
1240@EINA_AMALGAMATION_TRUE@ @echo "#include \"Eina.h\"" >> eina_amalgamation.c
1241@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c
1242@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c
1243
1244@EINA_AMALGAMATION_TRUE@ @for f in $(base_sources); do \
1245@EINA_AMALGAMATION_TRUE@ if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \
1246@EINA_AMALGAMATION_TRUE@ file="$(srcdir)/$$f" ; \
1247@EINA_AMALGAMATION_TRUE@ else \
1248@EINA_AMALGAMATION_TRUE@ file="$$f" ; \
1249@EINA_AMALGAMATION_TRUE@ fi ; \
1250@EINA_AMALGAMATION_TRUE@ echo "/* file: $$file */" >> eina_amalgamation.c; \
1251@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; \
1252@EINA_AMALGAMATION_TRUE@ done
1253@EINA_AMALGAMATION_TRUE@ @echo "eina_amalgamation.c generated"
1254
1255clean-local:
1256 rm -rf *.gcno eina_amalgamation.c
1257
1258# Tell versions [3.59,3.63) of GNU make to not export all variables.
1259# Otherwise a system limit (for SysV at least) may be exceeded.
1260.NOEXPORT:
diff --git a/libraries/eina/src/lib/eina_accessor.c b/libraries/eina/src/lib/eina_accessor.c
deleted file mode 100644
index aec44ef..0000000
--- a/libraries/eina/src/lib/eina_accessor.c
+++ /dev/null
@@ -1,176 +0,0 @@
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
deleted file mode 100644
index 4bcab61..0000000
--- a/libraries/eina/src/lib/eina_array.c
+++ /dev/null
@@ -1,491 +0,0 @@
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(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(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
deleted file mode 100644
index 1ba2a00..0000000
--- a/libraries/eina/src/lib/eina_benchmark.c
+++ /dev/null
@@ -1,372 +0,0 @@
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
deleted file mode 100644
index 3cbebd1..0000000
--- a/libraries/eina/src/lib/eina_binbuf.c
+++ /dev/null
@@ -1,62 +0,0 @@
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
deleted file mode 100644
index 7e0c539..0000000
--- a/libraries/eina/src/lib/eina_binbuf_template_c.x
+++ /dev/null
@@ -1,153 +0,0 @@
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 _STRBUF_STRUCT_NAME *
69_FUNC_EXPAND(manage_new_length)(_STRBUF_DATA_TYPE *str, size_t length)
70{
71 _STRBUF_STRUCT_NAME *buf =
72 eina_strbuf_common_manage_new(_STRBUF_CSIZE, (void *) str, length);
73 EINA_MAGIC_SET(buf, _STRBUF_MAGIC);
74 return buf;
75}
76
77EAPI void
78_FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf)
79{
80 EINA_MAGIC_CHECK_STRBUF(buf);
81 EINA_MAGIC_SET(buf, EINA_MAGIC_NONE);
82 eina_strbuf_common_free(buf);
83}
84
85EAPI void
86_FUNC_EXPAND(reset)(_STRBUF_STRUCT_NAME *buf)
87{
88 EINA_MAGIC_CHECK_STRBUF(buf);
89 eina_strbuf_common_reset(_STRBUF_CSIZE, buf);
90}
91
92EAPI Eina_Bool
93_FUNC_EXPAND(append_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length)
94{
95 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
96 return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (const void *) str, length);
97}
98
99EAPI Eina_Bool
100_FUNC_EXPAND(insert_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length, size_t pos)
101{
102 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
103 return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, (const void *) str, length, pos);
104}
105
106EAPI Eina_Bool
107_FUNC_EXPAND(append_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c)
108{
109 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
110 return eina_strbuf_common_append_char(_STRBUF_CSIZE, buf, (const void *) &c);
111}
112
113EAPI Eina_Bool
114_FUNC_EXPAND(insert_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c, size_t pos)
115{
116 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
117 return eina_strbuf_common_insert_char(_STRBUF_CSIZE, buf, (const void *) &c, pos);
118}
119
120EAPI Eina_Bool
121_FUNC_EXPAND(remove)(_STRBUF_STRUCT_NAME *buf, size_t start, size_t end)
122{
123 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
124 return eina_strbuf_common_remove(_STRBUF_CSIZE, buf, start, end);
125}
126
127EAPI const _STRBUF_DATA_TYPE *
128_FUNC_EXPAND(string_get)(const _STRBUF_STRUCT_NAME *buf)
129{
130 EINA_MAGIC_CHECK_STRBUF(buf, NULL);
131 return (const _STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(buf);
132}
133
134EAPI _STRBUF_DATA_TYPE *
135_FUNC_EXPAND(string_steal)(_STRBUF_STRUCT_NAME *buf)
136{
137 EINA_MAGIC_CHECK_STRBUF(buf, NULL);
138 return (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_steal(_STRBUF_CSIZE, buf);
139}
140
141EAPI void
142_FUNC_EXPAND(string_free)(_STRBUF_STRUCT_NAME *buf)
143{
144 EINA_MAGIC_CHECK_STRBUF(buf);
145 eina_strbuf_common_string_free(_STRBUF_CSIZE, buf);
146}
147
148EAPI size_t
149_FUNC_EXPAND(length_get)(const _STRBUF_STRUCT_NAME *buf)
150{
151 EINA_MAGIC_CHECK_STRBUF(buf, 0);
152 return eina_strbuf_common_length_get(buf);
153}
diff --git a/libraries/eina/src/lib/eina_binshare.c b/libraries/eina/src/lib/eina_binshare.c
deleted file mode 100644
index 01e8046..0000000
--- a/libraries/eina/src/lib/eina_binshare.c
+++ /dev/null
@@ -1,182 +0,0 @@
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#ifdef HAVE_CONFIG_H
25# include "config.h"
26#endif
27
28#include "eina_config.h"
29#include "eina_private.h"
30#include "eina_unicode.h"
31#include "eina_log.h"
32#include "eina_share_common.h"
33
34/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
35#include "eina_safety_checks.h"
36#include "eina_binshare.h"
37
38/*============================================================================*
39 * Local *
40 *============================================================================*/
41
42/**
43 * @cond LOCAL
44 */
45
46#ifdef CRITICAL
47#undef CRITICAL
48#endif
49#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_binshare_log_dom, __VA_ARGS__)
50
51#ifdef ERR
52#undef ERR
53#endif
54#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_binshare_log_dom, __VA_ARGS__)
55
56#ifdef DBG
57#undef DBG
58#endif
59#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_binshare_log_dom, __VA_ARGS__)
60
61static int _eina_share_binshare_log_dom = -1;
62
63/* The actual share */
64static Eina_Share *binshare_share;
65static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node";
66
67/**
68 * @endcond
69 */
70
71/*============================================================================*
72* Global *
73*============================================================================*/
74
75/**
76 * @internal
77 * @brief Initialize the share_common module.
78 *
79 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
80 *
81 * This function sets up the share_common module of Eina. It is called by
82 * eina_init().
83 *
84 * @see eina_init()
85 */
86EAPI Eina_Bool
87eina_binshare_init(void)
88{
89 Eina_Bool ret;
90
91 if (_eina_share_binshare_log_dom < 0)
92 {
93 _eina_share_binshare_log_dom = eina_log_domain_register
94 ("eina_binshare", EINA_LOG_COLOR_DEFAULT);
95
96 if (_eina_share_binshare_log_dom < 0)
97 {
98 EINA_LOG_ERR("Could not register log domain: eina_binshare");
99 return EINA_FALSE;
100 }
101 }
102
103 ret = eina_share_common_init(&binshare_share,
104 EINA_MAGIC_BINSHARE_NODE,
105 EINA_MAGIC_BINSHARE_NODE_STR);
106
107 if (!ret)
108 {
109 eina_log_domain_unregister(_eina_share_binshare_log_dom);
110 _eina_share_binshare_log_dom = -1;
111 }
112
113 return ret;
114}
115
116/**
117 * @internal
118 * @brief Shut down the share_common module.
119 *
120 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
121 *
122 * This function shuts down the share_common module set up by
123 * eina_share_common_init(). It is called by eina_shutdown().
124 *
125 * @see eina_shutdown()
126 */
127EAPI Eina_Bool
128eina_binshare_shutdown(void)
129{
130 Eina_Bool ret;
131 ret = eina_share_common_shutdown(&binshare_share);
132
133 if (_eina_share_binshare_log_dom > 0)
134 {
135 eina_log_domain_unregister(_eina_share_binshare_log_dom);
136 _eina_share_binshare_log_dom = -1;
137 }
138
139 return ret;
140}
141
142
143/*============================================================================*
144 * API *
145 *============================================================================*/
146
147EAPI void
148eina_binshare_del(const void *obj)
149{
150 if (!obj)
151 return;
152
153 if (!eina_share_common_del(binshare_share, obj))
154 CRITICAL("EEEK trying to del non-shared binshare %p", obj);
155}
156
157EAPI const void *
158eina_binshare_add_length(const void *obj, unsigned int olen)
159{
160 return eina_share_common_add_length(binshare_share,
161 obj,
162 (olen) * sizeof(char),
163 0);
164}
165
166EAPI const void *
167eina_binshare_ref(const void *obj)
168{
169 return eina_share_common_ref(binshare_share, obj);
170}
171
172EAPI int
173eina_binshare_length(const void *obj)
174{
175 return eina_share_common_length(binshare_share, obj);
176}
177
178EAPI void
179eina_binshare_dump(void)
180{
181 eina_share_common_dump(binshare_share, NULL, 0);
182}
diff --git a/libraries/eina/src/lib/eina_convert.c b/libraries/eina/src/lib/eina_convert.c
deleted file mode 100644
index 63b6654..0000000
--- a/libraries/eina/src/lib/eina_convert.c
+++ /dev/null
@@ -1,483 +0,0 @@
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
deleted file mode 100644
index 6ca9417..0000000
--- a/libraries/eina/src/lib/eina_counter.c
+++ /dev/null
@@ -1,362 +0,0 @@
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
deleted file mode 100644
index 5b190e4..0000000
--- a/libraries/eina/src/lib/eina_cpu.c
+++ /dev/null
@@ -1,207 +0,0 @@
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 (__sun) || 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 (__sun) || 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
deleted file mode 100644
index 428c414..0000000
--- a/libraries/eina/src/lib/eina_error.c
+++ /dev/null
@@ -1,279 +0,0 @@
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
deleted file mode 100644
index c465301..0000000
--- a/libraries/eina/src/lib/eina_file.c
+++ /dev/null
@@ -1,1359 +0,0 @@
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 <stdlib.h>
42#include <string.h>
43#include <stddef.h>
44#ifdef HAVE_DIRENT_H
45# include <dirent.h>
46#endif
47#include <sys/types.h>
48#include <sys/stat.h>
49#include <unistd.h>
50#ifdef HAVE_SYS_MMAN_H
51# include <sys/mman.h>
52#endif
53#include <fcntl.h>
54
55#define PATH_DELIM '/'
56
57#include "eina_config.h"
58#include "eina_private.h"
59
60/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
61#include "eina_safety_checks.h"
62#include "eina_file.h"
63#include "eina_stringshare.h"
64#include "eina_hash.h"
65#include "eina_list.h"
66#include "eina_lock.h"
67#include "eina_mmap.h"
68#include "eina_log.h"
69#include "eina_xattr.h"
70
71#ifdef HAVE_ESCAPE_H
72# include <Escape.h>
73#endif
74
75/*============================================================================*
76 * Local *
77 *============================================================================*/
78
79/**
80 * @cond LOCAL
81 */
82
83#ifndef EINA_LOG_COLOR_DEFAULT
84#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
85#endif
86
87#ifdef ERR
88#undef ERR
89#endif
90#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__)
91
92#ifdef WRN
93#undef WRN
94#endif
95#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__)
96
97#ifdef DBG
98#undef DBG
99#endif
100#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__)
101
102#define EINA_SMALL_PAGE 4096
103# define EINA_HUGE_PAGE 16 * 1024 * 1024
104
105#ifdef HAVE_DIRENT_H
106typedef struct _Eina_File_Iterator Eina_File_Iterator;
107struct _Eina_File_Iterator
108{
109 Eina_Iterator iterator;
110
111 DIR *dirp;
112 int length;
113
114 char dir[1];
115};
116#endif
117
118struct _Eina_File
119{
120 const char *filename;
121
122 Eina_Hash *map;
123 Eina_Hash *rmap;
124 void *global_map;
125
126 Eina_Lock lock;
127
128 unsigned long long length;
129 time_t mtime;
130 ino_t inode;
131#ifdef _STAT_VER_LINUX
132 unsigned long int mtime_nsec;
133#endif
134
135 int refcount;
136 int global_refcount;
137
138 int fd;
139
140 Eina_Bool shared : 1;
141 Eina_Bool delete_me : 1;
142 Eina_Bool global_faulty : 1;
143};
144
145typedef struct _Eina_File_Map Eina_File_Map;
146struct _Eina_File_Map
147{
148 void *map;
149
150 unsigned long int offset;
151 unsigned long int length;
152
153 int refcount;
154
155 Eina_Bool hugetlb : 1;
156 Eina_Bool faulty : 1;
157};
158
159static Eina_Hash *_eina_file_cache = NULL;
160static Eina_Lock _eina_file_lock_cache;
161
162static int _eina_file_log_dom = -1;
163
164/*
165 * This complex piece of code is needed due to possible race condition.
166 * The code and description of the issue can be found at :
167 * http://womble.decadent.org.uk/readdir_r-advisory.html
168 */
169#ifdef HAVE_DIRENT_H
170static long
171_eina_name_max(DIR *dirp)
172{
173 long name_max;
174
175#if defined(HAVE_FPATHCONF) && defined(HAVE_DIRFD) && defined(_PC_NAME_MAX)
176 name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX);
177
178 if (name_max == -1)
179 {
180# if defined(NAME_MAX)
181 name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
182# else
183 name_max = PATH_MAX;
184# endif
185 }
186#else
187# if defined(NAME_MAX)
188 name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
189# else
190# ifdef _PC_NAME_MAX
191# warning "buffer size for readdir_r cannot be determined safely, best effort, but racy"
192 name_max = pathconf(dirp, _PC_NAME_MAX);
193# else
194# error "buffer size for readdir_r cannot be determined safely"
195# endif
196# endif
197#endif
198
199 return name_max;
200}
201
202static size_t
203_eina_dirent_buffer_size(DIR *dirp)
204{
205 long name_max = _eina_name_max(dirp);
206 size_t name_end;
207
208 name_end = (size_t) offsetof(struct dirent, d_name) + name_max + 1;
209
210 return (name_end > sizeof (struct dirent) ? name_end : sizeof (struct dirent));
211}
212
213static Eina_Bool
214_eina_file_ls_iterator_next(Eina_File_Iterator *it, void **data)
215{
216 struct dirent *dp;
217 char *name;
218 size_t length;
219
220 dp = alloca(_eina_dirent_buffer_size(it->dirp));
221
222 do
223 {
224 if (readdir_r(it->dirp, dp, &dp))
225 return EINA_FALSE;
226 if (dp == NULL)
227 return EINA_FALSE;
228 }
229 while ((dp->d_name[0] == '.') &&
230 ((dp->d_name[1] == '\0') ||
231 ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0'))));
232
233#ifdef _DIRENT_HAVE_D_NAMLEN
234 length = dp->d_namlen;
235#else
236 length = strlen(dp->d_name);
237#endif
238 name = alloca(length + 2 + it->length);
239
240 memcpy(name, it->dir, it->length);
241 memcpy(name + it->length, "/", 1);
242 memcpy(name + it->length + 1, dp->d_name, length + 1);
243
244 *data = (char *)eina_stringshare_add(name);
245 return EINA_TRUE;
246}
247
248static DIR *
249_eina_file_ls_iterator_container(Eina_File_Iterator *it)
250{
251 return it->dirp;
252}
253
254static void
255_eina_file_ls_iterator_free(Eina_File_Iterator *it)
256{
257 closedir(it->dirp);
258
259 EINA_MAGIC_SET(&it->iterator, 0);
260 free(it);
261}
262
263typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator;
264struct _Eina_File_Direct_Iterator
265{
266 Eina_Iterator iterator;
267
268 DIR *dirp;
269 int length;
270
271 Eina_File_Direct_Info info;
272
273 char dir[1];
274};
275
276static Eina_Bool
277_eina_file_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
278{
279 struct dirent *dp;
280 size_t length;
281
282 dp = alloca(_eina_dirent_buffer_size(it->dirp));
283
284 do
285 {
286 if (readdir_r(it->dirp, dp, &dp))
287 return EINA_FALSE;
288 if (!dp)
289 return EINA_FALSE;
290
291#ifdef _DIRENT_HAVE_D_NAMLEN
292 length = dp->d_namlen;
293#else
294 length = strlen(dp->d_name);
295#endif
296 if (it->info.name_start + length + 1 >= EINA_PATH_MAX)
297 continue;
298 }
299 while ((dp->d_name[0] == '.') &&
300 ((dp->d_name[1] == '\0') ||
301 ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0'))));
302
303 memcpy(it->info.path + it->info.name_start, dp->d_name, length);
304 it->info.name_length = length;
305 it->info.path_length = it->info.name_start + length;
306 it->info.path[it->info.path_length] = '\0';
307
308#ifdef _DIRENT_HAVE_D_TYPE
309 switch (dp->d_type)
310 {
311 case DT_FIFO:
312 it->info.type = EINA_FILE_FIFO;
313 break;
314 case DT_CHR:
315 it->info.type = EINA_FILE_CHR;
316 break;
317 case DT_DIR:
318 it->info.type = EINA_FILE_DIR;
319 break;
320 case DT_BLK:
321 it->info.type = EINA_FILE_BLK;
322 break;
323 case DT_REG:
324 it->info.type = EINA_FILE_REG;
325 break;
326 case DT_LNK:
327 it->info.type = EINA_FILE_LNK;
328 break;
329 case DT_SOCK:
330 it->info.type = EINA_FILE_SOCK;
331 break;
332 case DT_WHT:
333 it->info.type = EINA_FILE_WHT;
334 break;
335 default:
336 it->info.type = EINA_FILE_UNKNOWN;
337 break;
338 }
339#else
340 it->info.type = EINA_FILE_UNKNOWN;
341#endif
342
343 *data = &it->info;
344 return EINA_TRUE;
345}
346
347static DIR *
348_eina_file_direct_ls_iterator_container(Eina_File_Direct_Iterator *it)
349{
350 return it->dirp;
351}
352
353static void
354_eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator *it)
355{
356 closedir(it->dirp);
357
358 EINA_MAGIC_SET(&it->iterator, 0);
359 free(it);
360}
361
362static Eina_Bool
363_eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
364{
365 Eina_Stat st;
366
367 if (!_eina_file_direct_ls_iterator_next(it, data))
368 return EINA_FALSE;
369
370 if (it->info.type == EINA_FILE_UNKNOWN)
371 {
372 if (eina_file_statat(it->dirp, &it->info, &st) != 0)
373 it->info.type = EINA_FILE_UNKNOWN;
374 }
375
376 return EINA_TRUE;
377}
378#endif
379
380static void
381_eina_file_real_close(Eina_File *file)
382{
383 if (file->refcount != 0) return;
384
385 eina_hash_free(file->rmap);
386 eina_hash_free(file->map);
387
388 if (file->global_map != MAP_FAILED)
389 munmap(file->global_map, file->length);
390
391 close(file->fd);
392
393 free(file);
394}
395
396static void
397_eina_file_map_close(Eina_File_Map *map)
398{
399 munmap(map->map, map->length);
400 free(map);
401}
402
403static unsigned int
404_eina_file_map_key_length(const void *key __UNUSED__)
405{
406 return sizeof (unsigned long int) * 2;
407}
408
409static int
410_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__,
411 const unsigned long int *key2, int key2_length __UNUSED__)
412{
413 if (key1[0] - key2[0] == 0) return key1[1] - key2[1];
414 return key1[0] - key2[0];
415}
416
417static int
418_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__)
419{
420 return eina_hash_int64(&key[0], sizeof (unsigned long int))
421 ^ eina_hash_int64(&key[1], sizeof (unsigned long int));
422}
423
424#ifndef MAP_POPULATE
425static unsigned int
426_eina_file_map_populate(char *map, unsigned int size, Eina_Bool hugetlb)
427{
428 unsigned int r = 0xDEADBEEF;
429 unsigned int i;
430 unsigned int s;
431
432 s = hugetlb ? EINA_HUGE_PAGE : EINA_SMALL_PAGE;
433
434 for (i = 0; i < size; i += s)
435 r ^= map[i];
436
437 r ^= map[size];
438
439 return r;
440}
441#endif
442
443static int
444_eina_file_map_rule_apply(Eina_File_Populate rule, void *addr, unsigned long int size, Eina_Bool hugetlb)
445{
446 int tmp = 42;
447 int flag = MADV_RANDOM;
448
449 switch (rule)
450 {
451 case EINA_FILE_RANDOM: flag = MADV_RANDOM; break;
452 case EINA_FILE_SEQUENTIAL: flag = MADV_SEQUENTIAL; break;
453 case EINA_FILE_POPULATE: flag = MADV_WILLNEED; break;
454 case EINA_FILE_WILLNEED: flag = MADV_WILLNEED; break;
455 }
456
457 madvise(addr, size, flag);
458
459#ifndef MAP_POPULATE
460 if (rule == EINA_FILE_POPULATE)
461 tmp ^= _eina_file_map_populate(addr, size, hugetlb);
462#else
463 (void) hugetlb;
464#endif
465
466 return tmp;
467}
468
469static Eina_Bool
470_eina_file_timestamp_compare(Eina_File *f, struct stat *st)
471{
472 if (f->mtime != st->st_mtime) return EINA_FALSE;
473 if (f->length != (unsigned long long) st->st_size) return EINA_FALSE;
474 if (f->inode != st->st_ino) return EINA_FALSE;
475#ifdef _STAT_VER_LINUX
476# if (defined __USE_MISC && defined st_mtime)
477 if (f->mtime_nsec != (unsigned long int)st->st_mtim.tv_nsec)
478 return EINA_FALSE;
479# else
480 if (f->mtime_nsec != (unsigned long int)st->st_mtimensec)
481 return EINA_FALSE;
482# endif
483#endif
484 return EINA_TRUE;
485}
486
487static void
488slprintf(char *str, size_t size, const char *format, ...)
489{
490 va_list ap;
491
492 va_start(ap, format);
493
494 vsnprintf(str, size, format, ap);
495 str[size - 1] = 0;
496
497 va_end(ap);
498}
499
500static char *
501_eina_file_escape(const char *path, int *length)
502{
503 char *result = strdup(path ? path : "");
504 char *p = result;
505 char *q = result;
506 int len;
507
508 if (!result)
509 return NULL;
510
511 if (length) len = *length;
512 else len = strlen(result);
513
514 while ((p = strchr(p, '/')))
515 {
516 // remove double `/'
517 if (p[1] == '/')
518 {
519 memmove(p, p + 1, --len - (p - result));
520 result[len] = '\0';
521 }
522 else
523 if (p[1] == '.'
524 && p[2] == '.')
525 {
526 // remove `/../'
527 if (p[3] == '/')
528 {
529 char tmp;
530
531 len -= p + 3 - q;
532 memmove(q, p + 3, len - (q - result));
533 result[len] = '\0';
534 p = q;
535
536 /* Update q correctly. */
537 tmp = *p;
538 *p = '\0';
539 q = strrchr(result, '/');
540 if (!q) q = result;
541 *p = tmp;
542 }
543 else
544 // remove '/..$'
545 if (p[3] == '\0')
546 {
547 len -= p + 2 - q;
548 result[len] = '\0';
549 q = p;
550 ++p;
551 }
552 else
553 {
554 q = p;
555 ++p;
556 }
557 }
558 else
559 {
560 q = p;
561 ++p;
562 }
563 }
564
565 if (length)
566 *length = len;
567 return result;
568}
569
570/**
571 * @endcond
572 */
573
574/*============================================================================*
575 * Global *
576 *============================================================================*/
577
578Eina_Bool
579eina_file_init(void)
580{
581 _eina_file_log_dom = eina_log_domain_register("eina_file",
582 EINA_LOG_COLOR_DEFAULT);
583 if (_eina_file_log_dom < 0)
584 {
585 EINA_LOG_ERR("Could not register log domain: eina_file");
586 return EINA_FALSE;
587 }
588
589 _eina_file_cache = eina_hash_string_djb2_new(NULL);
590 if (!_eina_file_cache)
591 {
592 ERR("Could not create cache.");
593 eina_log_domain_unregister(_eina_file_log_dom);
594 _eina_file_log_dom = -1;
595 return EINA_FALSE;
596 }
597
598 eina_lock_new(&_eina_file_lock_cache);
599
600 return EINA_TRUE;
601}
602
603Eina_Bool
604eina_file_shutdown(void)
605{
606 if (eina_hash_population(_eina_file_cache) > 0)
607 {
608 Eina_Iterator *it;
609 const char *key;
610
611 it = eina_hash_iterator_key_new(_eina_file_cache);
612 EINA_ITERATOR_FOREACH(it, key)
613 ERR("File [%s] still open !", key);
614 eina_iterator_free(it);
615 }
616
617 eina_hash_free(_eina_file_cache);
618
619 eina_lock_free(&_eina_file_lock_cache);
620
621 eina_log_domain_unregister(_eina_file_log_dom);
622 _eina_file_log_dom = -1;
623 return EINA_TRUE;
624}
625
626void
627eina_file_mmap_faulty(void *addr, long page_size)
628{
629 Eina_File_Map *m;
630 Eina_File *f;
631 Eina_Iterator *itf;
632 Eina_Iterator *itm;
633
634 /* NOTE: I actually don't know if other thread are running, I will try to take the lock.
635 It may be possible that if other thread are not running and they were in the middle of
636 accessing an Eina_File this lock are still taken and we will result as a deadlock. */
637 eina_lock_take(&_eina_file_lock_cache);
638
639 itf = eina_hash_iterator_data_new(_eina_file_cache);
640 EINA_ITERATOR_FOREACH(itf, f)
641 {
642 Eina_Bool faulty = EINA_FALSE;
643
644 eina_lock_take(&f->lock);
645
646 if (f->global_map)
647 {
648 if ((unsigned char *) addr < (((unsigned char *)f->global_map) + f->length) &&
649 (((unsigned char *) addr) + page_size) >= (unsigned char *) f->global_map)
650 {
651 f->global_faulty = EINA_TRUE;
652 faulty = EINA_TRUE;
653 }
654 }
655
656 if (!faulty)
657 {
658 itm = eina_hash_iterator_data_new(f->map);
659 EINA_ITERATOR_FOREACH(itm, m)
660 {
661 if ((unsigned char *) addr < (((unsigned char *)m->map) + m->length) &&
662 (((unsigned char *) addr) + page_size) >= (unsigned char *) m->map)
663 {
664 m->faulty = EINA_TRUE;
665 faulty = EINA_TRUE;
666 break;
667 }
668 }
669 eina_iterator_free(itm);
670 }
671
672 eina_lock_release(&f->lock);
673
674 if (faulty) break;
675 }
676 eina_iterator_free(itf);
677
678 eina_lock_release(&_eina_file_lock_cache);
679}
680
681/*============================================================================*
682 * API *
683 *============================================================================*/
684
685EAPI char *
686eina_file_path_sanitize(const char *path)
687{
688 char *result = NULL;
689 int len;
690
691 if (!path) return NULL;
692
693 len = strlen(path);
694
695 if (*path != '/')
696 {
697 char cwd[PATH_MAX];
698 char *tmp = NULL;
699
700 tmp = getcwd(cwd, PATH_MAX);
701 if (!tmp) return NULL;
702
703 len += strlen(cwd) + 2;
704 tmp = alloca(sizeof (char) * len);
705
706 slprintf(tmp, len, "%s/%s", cwd, path);
707
708 result = tmp;
709 }
710
711 return _eina_file_escape(result ? result : path, &len);
712}
713
714EAPI Eina_Bool
715eina_file_dir_list(const char *dir,
716 Eina_Bool recursive,
717 Eina_File_Dir_List_Cb cb,
718 void *data)
719{
720 Eina_File_Direct_Info *info;
721 Eina_Iterator *it;
722
723 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
724 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE);
725 EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE);
726
727 it = eina_file_stat_ls(dir);
728 if (!it)
729 return EINA_FALSE;
730
731 EINA_ITERATOR_FOREACH(it, info)
732 {
733 cb(info->path + info->name_start, dir, data);
734
735 if (recursive == EINA_TRUE && info->type == EINA_FILE_DIR)
736 {
737 eina_file_dir_list(info->path, recursive, cb, data);
738 }
739 }
740
741 eina_iterator_free(it);
742
743 return EINA_TRUE;
744}
745
746EAPI Eina_Array *
747eina_file_split(char *path)
748{
749 Eina_Array *ea;
750 char *current;
751 size_t length;
752
753 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
754
755 ea = eina_array_new(16);
756
757 if (!ea)
758 return NULL;
759
760 for (current = strchr(path, PATH_DELIM);
761 current;
762 path = current + 1, current = strchr(path, PATH_DELIM))
763 {
764 length = current - path;
765
766 if (length <= 0)
767 continue;
768
769 eina_array_push(ea, path);
770 *current = '\0';
771 }
772
773 if (*path != '\0')
774 eina_array_push(ea, path);
775
776 return ea;
777}
778
779EAPI Eina_Iterator *
780eina_file_ls(const char *dir)
781{
782#ifdef HAVE_DIRENT_H
783 Eina_File_Iterator *it;
784 size_t length;
785
786 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
787
788 length = strlen(dir);
789 if (length < 1)
790 return NULL;
791
792 it = calloc(1, sizeof (Eina_File_Iterator) + length);
793 if (!it)
794 return NULL;
795
796 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
797
798 it->dirp = opendir(dir);
799 if (!it->dirp)
800 {
801 free(it);
802 return NULL;
803 }
804
805 memcpy(it->dir, dir, length + 1);
806 if (dir[length - 1] != '/')
807 it->length = length;
808 else
809 it->length = length - 1;
810
811 it->iterator.version = EINA_ITERATOR_VERSION;
812 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_ls_iterator_next);
813 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
814 _eina_file_ls_iterator_container);
815 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_ls_iterator_free);
816
817 return &it->iterator;
818#else
819 (void) dir;
820 return NULL;
821#endif
822}
823
824EAPI Eina_Iterator *
825eina_file_direct_ls(const char *dir)
826{
827#ifdef HAVE_DIRENT_H
828 Eina_File_Direct_Iterator *it;
829 size_t length;
830
831 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
832
833 length = strlen(dir);
834 if (length < 1)
835 return NULL;
836
837 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
838 if (!it)
839 return NULL;
840
841 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
842
843 it->dirp = opendir(dir);
844 if (!it->dirp)
845 {
846 free(it);
847 return NULL;
848 }
849
850 if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX)
851 {
852 _eina_file_direct_ls_iterator_free(it);
853 return NULL;
854 }
855
856 memcpy(it->dir, dir, length + 1);
857 it->length = length;
858
859 memcpy(it->info.path, dir, length);
860 if (dir[length - 1] == '/')
861 it->info.name_start = length;
862 else
863 {
864 it->info.path[length] = '/';
865 it->info.name_start = length + 1;
866 }
867
868 it->iterator.version = EINA_ITERATOR_VERSION;
869 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_direct_ls_iterator_next);
870 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
871 _eina_file_direct_ls_iterator_container);
872 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free);
873
874 return &it->iterator;
875#else
876 (void) dir;
877 return NULL;
878#endif
879}
880
881EAPI Eina_Iterator *
882eina_file_stat_ls(const char *dir)
883{
884#ifdef HAVE_DIRENT_H
885 Eina_File_Direct_Iterator *it;
886 size_t length;
887
888 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
889
890 length = strlen(dir);
891 if (length < 1)
892 return NULL;
893
894 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
895 if (!it)
896 return NULL;
897
898 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
899
900 it->dirp = opendir(dir);
901 if (!it->dirp)
902 {
903 free(it);
904 return NULL;
905 }
906
907 if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX)
908 {
909 _eina_file_direct_ls_iterator_free(it);
910 return NULL;
911 }
912
913 memcpy(it->dir, dir, length + 1);
914 it->length = length;
915
916 memcpy(it->info.path, dir, length);
917 if (dir[length - 1] == '/')
918 it->info.name_start = length;
919 else
920 {
921 it->info.path[length] = '/';
922 it->info.name_start = length + 1;
923 }
924
925 it->iterator.version = EINA_ITERATOR_VERSION;
926 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_stat_ls_iterator_next);
927 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
928 _eina_file_direct_ls_iterator_container);
929 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free);
930
931 return &it->iterator;
932#else
933 (void) dir;
934 return NULL;
935#endif
936}
937
938EAPI Eina_File *
939eina_file_open(const char *path, Eina_Bool shared)
940{
941 Eina_File *file;
942 Eina_File *n;
943 char *filename;
944 struct stat file_stat;
945 int fd = -1;
946#ifdef HAVE_EXECVP
947 int flags;
948#endif
949
950 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
951
952 filename = eina_file_path_sanitize(path);
953 if (!filename) return NULL;
954
955 if (shared)
956#ifdef HAVE_SHMOPEN
957 fd = shm_open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
958#else
959 goto on_error;
960#endif
961 else
962 fd = open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
963
964 if (fd < 0) goto on_error;
965
966#ifdef HAVE_EXECVP
967 flags = fcntl(fd, F_GETFD);
968 if (flags == -1)
969 goto on_error;
970
971 flags |= FD_CLOEXEC;
972 if (fcntl(fd, F_SETFD, flags) == -1)
973 goto on_error;
974#endif
975
976 if (fstat(fd, &file_stat))
977 goto on_error;
978
979 eina_lock_take(&_eina_file_lock_cache);
980
981 file = eina_hash_find(_eina_file_cache, filename);
982 if ((file) && !_eina_file_timestamp_compare(file, &file_stat))
983 {
984 file->delete_me = EINA_TRUE;
985 eina_hash_del(_eina_file_cache, file->filename, file);
986 _eina_file_real_close(file);
987 file = NULL;
988 }
989
990 if (!file)
991 {
992 n = malloc(sizeof (Eina_File) + strlen(filename) + 1);
993 if (!n)
994 {
995 eina_lock_release(&_eina_file_lock_cache);
996 goto on_error;
997 }
998
999 n->filename = (char*) (n + 1);
1000 strcpy((char*) n->filename, filename);
1001 n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length),
1002 EINA_KEY_CMP(_eina_file_map_key_cmp),
1003 EINA_KEY_HASH(_eina_file_map_key_hash),
1004 EINA_FREE_CB(_eina_file_map_close),
1005 3);
1006 n->rmap = eina_hash_pointer_new(NULL);
1007 n->global_map = MAP_FAILED;
1008 n->global_refcount = 0;
1009 n->length = file_stat.st_size;
1010 n->mtime = file_stat.st_mtime;
1011#ifdef _STAT_VER_LINUX
1012# if (defined __USE_MISC && defined st_mtime)
1013 n->mtime_nsec = (unsigned long int)file_stat.st_mtim.tv_nsec;
1014# else
1015 n->mtime_nsec = (unsigned long int)file_stat.st_mtimensec;
1016# endif
1017#endif
1018 n->inode = file_stat.st_ino;
1019 n->refcount = 0;
1020 n->fd = fd;
1021 n->shared = shared;
1022 n->delete_me = EINA_FALSE;
1023 eina_lock_new(&n->lock);
1024 eina_hash_direct_add(_eina_file_cache, n->filename, n);
1025 }
1026 else
1027 {
1028 close(fd);
1029 n = file;
1030 }
1031 eina_lock_take(&n->lock);
1032 n->refcount++;
1033 eina_lock_release(&n->lock);
1034
1035 eina_lock_release(&_eina_file_lock_cache);
1036
1037 free(filename);
1038
1039 return n;
1040
1041 on_error:
1042 free(filename);
1043 if (fd >= 0) close(fd);
1044 return NULL;
1045}
1046
1047EAPI void
1048eina_file_close(Eina_File *file)
1049{
1050 EINA_SAFETY_ON_NULL_RETURN(file);
1051
1052 eina_lock_take(&file->lock);
1053 file->refcount--;
1054 eina_lock_release(&file->lock);
1055
1056 if (file->refcount != 0) return;
1057 eina_lock_take(&_eina_file_lock_cache);
1058
1059 eina_hash_del(_eina_file_cache, file->filename, file);
1060 _eina_file_real_close(file);
1061
1062 eina_lock_release(&_eina_file_lock_cache);
1063}
1064
1065EAPI size_t
1066eina_file_size_get(Eina_File *file)
1067{
1068 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1069 return file->length;
1070}
1071
1072EAPI time_t
1073eina_file_mtime_get(Eina_File *file)
1074{
1075 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1076 return file->mtime;
1077}
1078
1079EAPI const char *
1080eina_file_filename_get(Eina_File *file)
1081{
1082 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1083 return file->filename;
1084}
1085
1086EAPI void *
1087eina_file_map_all(Eina_File *file, Eina_File_Populate rule)
1088{
1089 int flags = MAP_SHARED;
1090 void *ret = NULL;
1091
1092 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1093
1094// bsd people will lack this feature
1095#ifdef MAP_POPULATE
1096 if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE;
1097#endif
1098#ifdef MAP_HUGETLB
1099 if (file->length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB;
1100#endif
1101
1102 eina_mmap_safety_enabled_set(EINA_TRUE);
1103 eina_lock_take(&file->lock);
1104 if (file->global_map == MAP_FAILED)
1105 file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0);
1106#ifdef MAP_HUGETLB
1107 if ((file->global_map == MAP_FAILED) && (flags & MAP_HUGETLB))
1108 {
1109 flags &= ~MAP_HUGETLB;
1110 file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0);
1111 }
1112#endif
1113
1114 if (file->global_map != MAP_FAILED)
1115 {
1116 Eina_Bool hugetlb = EINA_FALSE;
1117
1118#ifdef MAP_HUGETLB
1119 hugetlb = !!(flags & MAP_HUGETLB);
1120#endif
1121 _eina_file_map_rule_apply(rule, file->global_map, file->length, hugetlb);
1122 file->global_refcount++;
1123 ret = file->global_map;
1124 }
1125
1126 eina_lock_release(&file->lock);
1127 return ret;
1128}
1129
1130EAPI void *
1131eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
1132 unsigned long int offset, unsigned long int length)
1133{
1134 Eina_File_Map *map;
1135 unsigned long int key[2];
1136
1137 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1138
1139 if (offset > file->length)
1140 return NULL;
1141 if (offset + length > file->length)
1142 return NULL;
1143
1144 if (offset == 0 && length == file->length)
1145 return eina_file_map_all(file, rule);
1146
1147 key[0] = offset;
1148 key[1] = length;
1149
1150 eina_mmap_safety_enabled_set(EINA_TRUE);
1151 eina_lock_take(&file->lock);
1152
1153 map = eina_hash_find(file->map, &key);
1154 if (!map)
1155 {
1156 int flags = MAP_SHARED;
1157
1158// bsd people will lack this feature
1159#ifdef MAP_POPULATE
1160 if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE;
1161#endif
1162#ifdef MAP_HUGETLB
1163 if (length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB;
1164#endif
1165
1166 map = malloc(sizeof (Eina_File_Map));
1167 if (!map) goto on_error;
1168
1169 map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset);
1170#ifdef MAP_HUGETLB
1171 if (map->map == MAP_FAILED && (flags & MAP_HUGETLB))
1172 {
1173 flags &= ~MAP_HUGETLB;
1174 map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset);
1175 }
1176
1177 map->hugetlb = !!(flags & MAP_HUGETLB);
1178#else
1179 map->hugetlb = EINA_FALSE;
1180#endif
1181 map->offset = offset;
1182 map->length = length;
1183 map->refcount = 0;
1184
1185 if (map->map == MAP_FAILED) goto on_error;
1186
1187 eina_hash_add(file->map, &key, map);
1188 eina_hash_direct_add(file->rmap, map->map, map);
1189 }
1190
1191 map->refcount++;
1192
1193 _eina_file_map_rule_apply(rule, map->map, length, map->hugetlb);
1194
1195 eina_lock_release(&file->lock);
1196
1197 return map->map;
1198
1199 on_error:
1200 free(map);
1201 eina_lock_release(&file->lock);
1202
1203 return NULL;
1204}
1205
1206EAPI void
1207eina_file_map_free(Eina_File *file, void *map)
1208{
1209 EINA_SAFETY_ON_NULL_RETURN(file);
1210
1211 eina_lock_take(&file->lock);
1212
1213 if (file->global_map == map)
1214 {
1215 file->global_refcount--;
1216
1217 if (file->global_refcount > 0) goto on_exit;
1218
1219 munmap(file->global_map, file->length);
1220 file->global_map = MAP_FAILED;
1221 }
1222 else
1223 {
1224 Eina_File_Map *em;
1225 unsigned long int key[2];
1226
1227 em = eina_hash_find(file->rmap, &map);
1228 if (!em) goto on_exit;
1229
1230 em->refcount--;
1231
1232 if (em->refcount > 0) goto on_exit;
1233
1234 key[0] = em->offset;
1235 key[1] = em->length;
1236
1237 eina_hash_del(file->rmap, &map, em);
1238 eina_hash_del(file->map, &key, em);
1239 }
1240
1241 on_exit:
1242 eina_lock_release(&file->lock);
1243}
1244
1245EAPI Eina_Bool
1246eina_file_map_faulted(Eina_File *file, void *map)
1247{
1248 Eina_File_Map *em;
1249 Eina_Bool r = EINA_FALSE;
1250
1251 EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
1252
1253 eina_lock_take(&file->lock);
1254
1255 if (file->global_map == map)
1256 {
1257 r = file->global_faulty;
1258 }
1259 else
1260 {
1261 em = eina_hash_find(file->rmap, &map);
1262 if (em) r = em->faulty;
1263 }
1264
1265 eina_lock_release(&file->lock);
1266
1267 return r;
1268}
1269
1270EAPI Eina_Iterator *
1271eina_file_xattr_get(Eina_File *file)
1272{
1273 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1274
1275 return eina_xattr_fd_ls(file->fd);
1276}
1277
1278EAPI Eina_Iterator *
1279eina_file_xattr_value_get(Eina_File *file)
1280{
1281 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1282
1283 return eina_xattr_value_fd_ls(file->fd);
1284}
1285
1286EAPI int
1287eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st)
1288{
1289 struct stat buf;
1290#ifdef HAVE_FSTATAT
1291 int fd;
1292#endif
1293
1294 EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1);
1295 EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1);
1296
1297#ifdef HAVE_FSTATAT
1298 fd = dirfd((DIR*) container);
1299 if (fstatat(fd, info->path + info->name_start, &buf, 0))
1300#else
1301 (void)container;
1302 if (stat(info->path, &buf))
1303#endif
1304 {
1305 if (info->type != EINA_FILE_LNK)
1306 info->type = EINA_FILE_UNKNOWN;
1307 return -1;
1308 }
1309
1310 if (info->type == EINA_FILE_UNKNOWN)
1311 {
1312 if (S_ISREG(buf.st_mode))
1313 info->type = EINA_FILE_REG;
1314 else if (S_ISDIR(buf.st_mode))
1315 info->type = EINA_FILE_DIR;
1316 else if (S_ISCHR(buf.st_mode))
1317 info->type = EINA_FILE_CHR;
1318 else if (S_ISBLK(buf.st_mode))
1319 info->type = EINA_FILE_BLK;
1320 else if (S_ISFIFO(buf.st_mode))
1321 info->type = EINA_FILE_FIFO;
1322 else if (S_ISLNK(buf.st_mode))
1323 info->type = EINA_FILE_LNK;
1324 else if (S_ISSOCK(buf.st_mode))
1325 info->type = EINA_FILE_SOCK;
1326 else
1327 info->type = EINA_FILE_UNKNOWN;
1328 }
1329
1330 st->dev = buf.st_dev;
1331 st->ino = buf.st_ino;
1332 st->mode = buf.st_mode;
1333 st->nlink = buf.st_nlink;
1334 st->uid = buf.st_uid;
1335 st->gid = buf.st_gid;
1336 st->rdev = buf.st_rdev;
1337 st->size = buf.st_size;
1338 st->blksize = buf.st_blksize;
1339 st->blocks = buf.st_blocks;
1340 st->atime = buf.st_atime;
1341 st->mtime = buf.st_mtime;
1342 st->ctime = buf.st_ctime;
1343#ifdef _STAT_VER_LINUX
1344# if (defined __USE_MISC && defined st_mtime)
1345 st->atimensec = buf.st_atim.tv_nsec;
1346 st->mtimensec = buf.st_mtim.tv_nsec;
1347 st->ctimensec = buf.st_ctim.tv_nsec;
1348# else
1349 st->atimensec = buf.st_atimensec;
1350 st->mtimensec = buf.st_mtimensec;
1351 st->ctimensec = buf.st_ctimensec;
1352# endif
1353#else
1354 st->atimensec = 0;
1355 st->mtimensec = 0;
1356 st->ctimensec = 0;
1357#endif
1358 return 0;
1359}
diff --git a/libraries/eina/src/lib/eina_file_win32.c b/libraries/eina/src/lib/eina_file_win32.c
deleted file mode 100644
index 5c20fdd..0000000
--- a/libraries/eina/src/lib/eina_file_win32.c
+++ /dev/null
@@ -1,1214 +0,0 @@
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#include <sys/types.h>
41#include <sys/stat.h>
42
43#define WIN32_LEAN_AND_MEAN
44#include <windows.h>
45#undef WIN32_LEAN_AND_MEAN
46
47#include <Evil.h>
48
49#include "eina_config.h"
50#include "eina_private.h"
51
52/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
53#include "eina_safety_checks.h"
54#include "eina_file.h"
55#include "eina_stringshare.h"
56#include "eina_hash.h"
57#include "eina_list.h"
58#include "eina_lock.h"
59#include "eina_log.h"
60
61/*============================================================================*
62 * Local *
63 *============================================================================*/
64
65/**
66 * @cond LOCAL
67 */
68
69#ifndef EINA_LOG_COLOR_DEFAULT
70#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
71#endif
72
73#ifdef ERR
74#undef ERR
75#endif
76#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__)
77
78#ifdef WRN
79#undef WRN
80#endif
81#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__)
82
83#ifdef DBG
84#undef DBG
85#endif
86#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__)
87
88#ifdef MAP_FAILED
89# undef MAP_FAILED
90#endif
91#define MAP_FAILED ((void *)-1)
92
93typedef struct _Eina_File_Iterator Eina_File_Iterator;
94typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator;
95typedef struct _Eina_File_Map Eina_File_Map;
96
97struct _Eina_File_Iterator
98{
99 Eina_Iterator iterator;
100
101 WIN32_FIND_DATA data;
102 HANDLE handle;
103 size_t length;
104 Eina_Bool is_last : 1;
105
106 char dir[1];
107};
108
109struct _Eina_File_Direct_Iterator
110{
111 Eina_Iterator iterator;
112
113 WIN32_FIND_DATA data;
114 HANDLE handle;
115 size_t length;
116 Eina_Bool is_last : 1;
117
118 Eina_File_Direct_Info info;
119
120 char dir[1];
121};
122
123struct _Eina_File
124{
125 const char *filename;
126
127 Eina_Hash *map;
128 Eina_Hash *rmap;
129 void *global_map;
130
131 Eina_Lock lock;
132
133 ULONGLONG length;
134 ULONGLONG mtime;
135
136 int refcount;
137 int global_refcount;
138
139 HANDLE handle;
140 HANDLE fm;
141
142 Eina_Bool shared : 1;
143 Eina_Bool delete_me : 1;
144};
145
146struct _Eina_File_Map
147{
148 void *map;
149
150 unsigned long int offset;
151 unsigned long int length;
152
153 int refcount;
154};
155
156static Eina_Hash *_eina_file_cache = NULL;
157static Eina_Lock _eina_file_lock_cache;
158
159static int _eina_file_log_dom = -1;
160
161static void
162_eina_file_win32_backslash_change(char *dir)
163{
164 char *tmp;
165
166 tmp = dir;
167 while (*tmp)
168 {
169 if (*tmp == '/') *tmp = '\\';
170 tmp++;
171 }
172}
173
174static Eina_Bool
175_eina_file_win32_is_dir(const char *dir)
176{
177#ifdef UNICODE
178 wchar_t *wdir = NULL;
179#endif
180 DWORD attr;
181
182 /* check if it's a directory */
183#ifdef UNICODE
184 wdir = evil_char_to_wchar(dir);
185 if (!wdir)
186 return EINA_FALSE;
187
188 attr = GetFileAttributes(wdir);
189 free(wdir);
190#else
191 attr = GetFileAttributes(dir);
192#endif
193
194 if (attr == 0xFFFFFFFF)
195 return EINA_FALSE;
196
197 if (!(attr & FILE_ATTRIBUTE_DIRECTORY))
198 return EINA_FALSE;
199
200 return EINA_TRUE;
201}
202
203static char *
204_eina_file_win32_dir_new(const char *dir)
205{
206 char *new_dir;
207 size_t length;
208
209 length = strlen(dir);
210
211 new_dir = (char *)malloc(sizeof(char) * length + 5);
212 if (!new_dir)
213 return NULL;
214
215 memcpy(new_dir, dir, length);
216 memcpy(new_dir + length, "\\*.*", 5);
217 _eina_file_win32_backslash_change(new_dir);
218
219 return new_dir;
220}
221
222static HANDLE
223_eina_file_win32_first_file(const char *dir, WIN32_FIND_DATA *fd)
224{
225 HANDLE h;
226#ifdef UNICODE
227 wchar_t *wdir = NULL;
228
229 wdir = evil_char_to_wchar(dir);
230 if (!wdir)
231 return NULL;
232
233 h = FindFirstFile(wdir, fd);
234 free(wdir);
235#else
236 h = FindFirstFile(dir, fd);
237#endif
238
239 if (!h)
240 return NULL;
241
242 while ((fd->cFileName[0] == '.') &&
243 ((fd->cFileName[1] == '\0') ||
244 ((fd->cFileName[1] == '.') && (fd->cFileName[2] == '\0'))))
245 {
246 if (!FindNextFile(h, fd))
247 return NULL;
248 }
249
250 return h;
251}
252
253static Eina_Bool
254_eina_file_win32_ls_iterator_next(Eina_File_Iterator *it, void **data)
255{
256#ifdef UNICODE
257 wchar_t *old_name;
258#else
259 char *old_name;
260#endif
261 char *name;
262 char *cname;
263 size_t length;
264 Eina_Bool is_last;
265 Eina_Bool res = EINA_TRUE;
266
267 if (it->handle == INVALID_HANDLE_VALUE)
268 return EINA_FALSE;
269
270 is_last = it->is_last;
271#ifdef UNICODE
272 old_name = _wcsdup(it->data.cFileName);
273#else
274 old_name = _strdup(it->data.cFileName);
275#endif
276 if (!old_name)
277 return EINA_FALSE;
278
279 do {
280 if (!FindNextFile(it->handle, &it->data))
281 {
282 if (GetLastError() == ERROR_NO_MORE_FILES)
283 it->is_last = EINA_TRUE;
284 else
285 res = EINA_FALSE;
286 }
287 } while ((it->data.cFileName[0] == '.') &&
288 ((it->data.cFileName[1] == '\0') ||
289 ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */
290
291#ifdef UNICODE
292 cname = evil_wchar_to_char(old_name);
293 if (!cname)
294 return EINA_FALSE;
295#else
296 cname = old_name;
297#endif
298
299 length = strlen(cname);
300 name = alloca(length + 2 + it->length);
301
302 memcpy(name, it->dir, it->length);
303 memcpy(name + it->length, "\\", 1);
304 memcpy(name + it->length + 1, cname, length + 1);
305
306 *data = (char *)eina_stringshare_add(name);
307
308#ifdef UNICODE
309 free(cname);
310#endif
311 free(old_name);
312
313 if (is_last)
314 res = EINA_FALSE;
315
316 return res;
317}
318
319static HANDLE
320_eina_file_win32_ls_iterator_container(Eina_File_Iterator *it)
321{
322 return it->handle;
323}
324
325static void
326_eina_file_win32_ls_iterator_free(Eina_File_Iterator *it)
327{
328 if (it->handle != INVALID_HANDLE_VALUE)
329 FindClose(it->handle);
330
331 EINA_MAGIC_SET(&it->iterator, 0);
332 free(it);
333}
334
335static Eina_Bool
336_eina_file_win32_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
337{
338#ifdef UNICODE
339 wchar_t *old_name;
340#else
341 char *old_name;
342#endif
343 char *cname;
344 size_t length;
345 DWORD attr;
346 Eina_Bool is_last;
347 Eina_Bool res = EINA_TRUE;
348
349 if (it->handle == INVALID_HANDLE_VALUE)
350 return EINA_FALSE;
351
352 attr = it->data.dwFileAttributes;
353 is_last = it->is_last;
354#ifdef UNICODE
355 old_name = _wcsdup(it->data.cFileName);
356#else
357 old_name = _strdup(it->data.cFileName);
358#endif
359 if (!old_name)
360 return EINA_FALSE;
361
362 do {
363 if (!FindNextFile(it->handle, &it->data))
364 {
365 if (GetLastError() == ERROR_NO_MORE_FILES)
366 it->is_last = EINA_TRUE;
367 else
368 res = EINA_FALSE;
369 }
370
371#ifdef UNICODE
372 length = wcslen(old_name);
373#else
374 length = strlen(old_name);
375#endif
376 if (it->info.name_start + length + 1 >= PATH_MAX)
377 {
378 free(old_name);
379#ifdef UNICODE
380 old_name = _wcsdup(it->data.cFileName);
381#else
382 old_name = _strdup(it->data.cFileName);
383#endif
384 continue;
385 }
386
387 } while ((it->data.cFileName[0] == '.') &&
388 ((it->data.cFileName[1] == '\0') ||
389 ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */
390
391#ifdef UNICODE
392 cname = evil_wchar_to_char(old_name);
393 if (!cname)
394 return EINA_FALSE;
395#else
396 cname = old_name;
397#endif
398
399 memcpy(it->info.path + it->info.name_start, cname, length);
400 it->info.name_length = length;
401 it->info.path_length = it->info.name_start + length;
402 it->info.path[it->info.path_length] = '\0';
403
404 if (attr & FILE_ATTRIBUTE_DIRECTORY)
405 it->info.type = EINA_FILE_DIR;
406 else if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
407 it->info.type = EINA_FILE_LNK;
408 else if (attr & (FILE_ATTRIBUTE_ARCHIVE |
409 FILE_ATTRIBUTE_COMPRESSED |
410 FILE_ATTRIBUTE_COMPRESSED |
411 FILE_ATTRIBUTE_HIDDEN |
412 FILE_ATTRIBUTE_NORMAL |
413 FILE_ATTRIBUTE_SPARSE_FILE |
414 FILE_ATTRIBUTE_TEMPORARY))
415 it->info.type = EINA_FILE_REG;
416 else
417 it->info.type = EINA_FILE_UNKNOWN;
418
419 *data = &it->info;
420
421#ifdef UNICODE
422 free(cname);
423#endif
424
425 free(old_name);
426
427 if (is_last)
428 res = EINA_FALSE;
429
430 return res;
431}
432
433static HANDLE
434_eina_file_win32_direct_ls_iterator_container(Eina_File_Direct_Iterator *it)
435{
436 return it->handle;
437}
438
439static void
440_eina_file_win32_direct_ls_iterator_free(Eina_File_Direct_Iterator *it)
441{
442 if (it->handle != INVALID_HANDLE_VALUE)
443 FindClose(it->handle);
444
445 EINA_MAGIC_SET(&it->iterator, 0);
446 free(it);
447}
448
449static void
450_eina_file_real_close(Eina_File *file)
451{
452 eina_hash_free(file->rmap);
453 eina_hash_free(file->map);
454
455 if (file->global_map != MAP_FAILED)
456 UnmapViewOfFile(file->global_map);
457
458 CloseHandle(file->fm);
459 CloseHandle(file->handle);
460
461 free(file);
462}
463
464static void
465_eina_file_map_close(Eina_File_Map *map)
466{
467 if (map->map != MAP_FAILED)
468 UnmapViewOfFile(map->map);
469 free(map);
470}
471
472static unsigned int
473_eina_file_map_key_length(const void *key __UNUSED__)
474{
475 return sizeof (unsigned long int) * 2;
476}
477
478static int
479_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__,
480 const unsigned long int *key2, int key2_length __UNUSED__)
481{
482 if (key1[0] - key2[0] == 0) return key1[1] - key2[1];
483 return key1[0] - key2[0];
484}
485
486static int
487_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__)
488{
489 return eina_hash_int64(&key[0], sizeof (unsigned long int))
490 ^ eina_hash_int64(&key[1], sizeof (unsigned long int));
491}
492
493static char *
494_eina_file_win32_escape(const char *path, size_t *length)
495{
496 char *result = strdup(path ? path : "");
497 char *p = result;
498 char *q = result;
499 size_t len;
500
501 if (!result)
502 return NULL;
503
504 if (length) len = *length;
505 else len = strlen(result);
506
507 while ((p = strchr(p, '/')))
508 {
509 // remove double `/'
510 if (p[1] == '/')
511 {
512 memmove(p, p + 1, --len - (p - result));
513 result[len] = '\0';
514 }
515 else
516 if (p[1] == '.'
517 && p[2] == '.')
518 {
519 // remove `/../'
520 if (p[3] == '/')
521 {
522 char tmp;
523
524 len -= p + 3 - q;
525 memmove(q, p + 3, len - (q - result));
526 result[len] = '\0';
527 p = q;
528
529 /* Update q correctly. */
530 tmp = *p;
531 *p = '\0';
532 q = strrchr(result, '/');
533 if (!q) q = result;
534 *p = tmp;
535 }
536 else
537 // remove '/..$'
538 if (p[3] == '\0')
539 {
540 len -= p + 2 - q;
541 result[len] = '\0';
542 q = p;
543 ++p;
544 }
545 else
546 {
547 q = p;
548 ++p;
549 }
550 }
551 else
552 {
553 q = p;
554 ++p;
555 }
556 }
557
558 if (length)
559 *length = len;
560
561 return result;
562}
563
564
565/**
566 * @endcond
567 */
568
569/*============================================================================*
570 * Global *
571 *============================================================================*/
572
573Eina_Bool
574eina_file_init(void)
575{
576 _eina_file_log_dom = eina_log_domain_register("eina_file",
577 EINA_LOG_COLOR_DEFAULT);
578 if (_eina_file_log_dom < 0)
579 {
580 EINA_LOG_ERR("Could not register log domain: eina_file");
581 return EINA_FALSE;
582 }
583
584 _eina_file_cache = eina_hash_string_djb2_new(NULL);
585 if (!_eina_file_cache)
586 {
587 ERR("Could not create cache.");
588 eina_log_domain_unregister(_eina_file_log_dom);
589 _eina_file_log_dom = -1;
590 return EINA_FALSE;
591 }
592
593 eina_lock_new(&_eina_file_lock_cache);
594
595 return EINA_TRUE;
596}
597
598Eina_Bool
599eina_file_shutdown(void)
600{
601 if (eina_hash_population(_eina_file_cache) > 0)
602 {
603 Eina_Iterator *it;
604 const char *key;
605
606 it = eina_hash_iterator_key_new(_eina_file_cache);
607 EINA_ITERATOR_FOREACH(it, key)
608 ERR("File [%s] still open !", key);
609 eina_iterator_free(it);
610 }
611
612 eina_hash_free(_eina_file_cache);
613
614 eina_lock_free(&_eina_file_lock_cache);
615
616 eina_log_domain_unregister(_eina_file_log_dom);
617 _eina_file_log_dom = -1;
618 return EINA_TRUE;
619}
620
621/*============================================================================*
622 * API *
623 *============================================================================*/
624
625
626EAPI char *
627eina_file_path_sanitize(const char *path)
628{
629 char *result = NULL;
630 size_t len;
631
632 if (!path) return NULL;
633
634 len = strlen(path);
635 if (len < 3) return NULL;
636
637 if (!evil_path_is_absolute(path))
638 {
639 DWORD l;
640
641 l = GetCurrentDirectory(0, NULL);
642 if (l > 0)
643 {
644 char *cwd;
645 DWORD l2;
646
647 cwd = alloca(sizeof(char) * (l + 1));
648 l2 = GetCurrentDirectory(l + 1, cwd);
649 if (l2 == l)
650 {
651 char *tmp;
652
653 len += l + 2;
654 tmp = alloca(sizeof (char) * len);
655 snprintf(tmp, len, "%s/%s", cwd, path);
656 tmp[len - 1] = '\0';
657 result = tmp;
658 }
659 }
660 }
661
662 return _eina_file_win32_escape(result ? result : path, &len);
663}
664
665EAPI Eina_Bool
666eina_file_dir_list(const char *dir,
667 Eina_Bool recursive,
668 Eina_File_Dir_List_Cb cb,
669 void *data)
670{
671 WIN32_FIND_DATA file;
672 HANDLE h;
673 char *new_dir;
674
675 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
676 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE);
677 EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE);
678
679 if (!_eina_file_win32_is_dir(dir))
680 return EINA_FALSE;
681
682 new_dir = _eina_file_win32_dir_new(dir);
683 if (!new_dir)
684 return EINA_FALSE;
685
686 h = _eina_file_win32_first_file(new_dir, &file);
687
688 if (h == INVALID_HANDLE_VALUE)
689 return EINA_FALSE;
690
691 do
692 {
693 char *filename;
694
695# ifdef UNICODE
696 filename = evil_wchar_to_char(file.cFileName);
697# else
698 filename = file.cFileName;
699# endif /* ! UNICODE */
700 if (!strcmp(filename, ".") || !strcmp(filename, ".."))
701 continue;
702
703 cb(filename, dir, data);
704
705 if (recursive == EINA_TRUE)
706 {
707 char *path;
708
709 path = alloca(strlen(dir) + strlen(filename) + 2);
710 strcpy(path, dir);
711 strcat(path, "/");
712 strcat(path, filename);
713
714 if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
715 continue;
716
717 eina_file_dir_list(path, recursive, cb, data);
718 }
719
720# ifdef UNICODE
721 free(filename);
722# endif /* UNICODE */
723
724 } while (FindNextFile(h, &file));
725 FindClose(h);
726
727 return EINA_TRUE;
728}
729
730EAPI Eina_Array *
731eina_file_split(char *path)
732{
733 Eina_Array *ea;
734 char *current;
735 size_t length;
736
737 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
738
739 ea = eina_array_new(16);
740
741 if (!ea)
742 return NULL;
743
744 for (current = strchr(path, '\\');
745 current;
746 path = current + 1, current = strchr(path, '\\'))
747 {
748 length = current - path;
749
750 if (length <= 0)
751 continue;
752
753 eina_array_push(ea, path);
754 *current = '\0';
755 }
756
757 if (*path != '\0')
758 eina_array_push(ea, path);
759
760 return ea;
761}
762
763EAPI Eina_Iterator *
764eina_file_ls(const char *dir)
765{
766 Eina_File_Iterator *it;
767 char *new_dir;
768 size_t length;
769
770 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
771
772 if (!dir || !*dir)
773 return NULL;
774
775 if (!_eina_file_win32_is_dir(dir))
776 return NULL;
777
778 length = strlen(dir);
779
780 it = calloc(1, sizeof (Eina_File_Iterator) + length);
781 if (!it)
782 return NULL;
783
784 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
785
786 new_dir = _eina_file_win32_dir_new(dir);
787 if (!new_dir)
788 goto free_it;
789
790 it->handle = _eina_file_win32_first_file(new_dir, &it->data);
791 free(new_dir);
792 if (it->handle == INVALID_HANDLE_VALUE)
793 goto free_it;
794
795 memcpy(it->dir, dir, length + 1);
796 if (dir[length - 1] != '\\')
797 it->length = length;
798 else
799 it->length = length - 1;
800 _eina_file_win32_backslash_change(it->dir);
801
802 it->iterator.version = EINA_ITERATOR_VERSION;
803 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_ls_iterator_next);
804 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_ls_iterator_container);
805 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_ls_iterator_free);
806
807 return &it->iterator;
808
809 free_it:
810 free(it);
811
812 return NULL;
813}
814
815EAPI Eina_Iterator *
816eina_file_direct_ls(const char *dir)
817{
818 Eina_File_Direct_Iterator *it;
819 char *new_dir;
820 size_t length;
821
822 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
823
824 if (!dir || !*dir)
825 return NULL;
826
827 length = strlen(dir);
828
829 if (length + 12 + 2 >= MAX_PATH)
830 return NULL;
831
832 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
833 if (!it)
834 return NULL;
835
836 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
837
838 new_dir = _eina_file_win32_dir_new(dir);
839 if (!new_dir)
840 goto free_it;
841
842 it->handle = _eina_file_win32_first_file(new_dir, &it->data);
843 free(new_dir);
844 if (it->handle == INVALID_HANDLE_VALUE)
845 goto free_it;
846
847 memcpy(it->dir, dir, length + 1);
848 it->length = length;
849 _eina_file_win32_backslash_change(it->dir);
850
851 memcpy(it->info.path, dir, length);
852 if (dir[length - 1] == '\\')
853 it->info.name_start = length;
854 else
855 {
856 it->info.path[length] = '\\';
857 it->info.name_start = length + 1;
858 }
859 _eina_file_win32_backslash_change(it->info.path);
860
861 it->iterator.version = EINA_ITERATOR_VERSION;
862 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_direct_ls_iterator_next);
863 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_direct_ls_iterator_container);
864 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_direct_ls_iterator_free);
865
866 return &it->iterator;
867
868 free_it:
869 free(it);
870
871 return NULL;
872}
873
874EAPI Eina_Iterator *
875eina_file_stat_ls(const char *dir)
876{
877 return eina_file_direct_ls(dir);
878}
879
880EAPI Eina_File *
881eina_file_open(const char *path, Eina_Bool shared)
882{
883 Eina_File *file;
884 Eina_File *n;
885 char *filename;
886 HANDLE handle;
887 HANDLE fm;
888 WIN32_FILE_ATTRIBUTE_DATA fad;
889 ULARGE_INTEGER length;
890 ULARGE_INTEGER mtime;
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 /* FIXME: how to emulate shm_open ? Just OpenFileMapping ? */
898#if 0
899 if (shared)
900 handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
901 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY,
902 NULL);
903 else
904#endif
905 handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
906 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY,
907 NULL);
908
909 if (handle == INVALID_HANDLE_VALUE)
910 return NULL;
911
912 fm = CreateFileMapping(handle, NULL, PAGE_READONLY, 0, 0, NULL);
913 if (!fm)
914 goto close_handle;
915
916 if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad))
917 goto close_fm;
918
919 length.u.LowPart = fad.nFileSizeLow;
920 length.u.HighPart = fad.nFileSizeHigh;
921 mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime;
922 mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime;
923
924 eina_lock_take(&_eina_file_lock_cache);
925
926 file = eina_hash_find(_eina_file_cache, filename);
927 if (file &&
928 (file->mtime != mtime.QuadPart || file->length != length.QuadPart))
929 {
930 file->delete_me = EINA_TRUE;
931 eina_hash_del(_eina_file_cache, file->filename, file);
932 _eina_file_real_close(file);
933 file = NULL;
934 }
935
936 if (!file)
937 {
938 n = malloc(sizeof (Eina_File) + strlen(filename) + 1);
939 if (!n)
940 {
941 eina_lock_release(&_eina_file_lock_cache);
942 goto close_fm;
943 }
944
945 n->filename = (char*) (n + 1);
946 strcpy((char*) n->filename, filename);
947 n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length),
948 EINA_KEY_CMP(_eina_file_map_key_cmp),
949 EINA_KEY_HASH(_eina_file_map_key_hash),
950 EINA_FREE_CB(_eina_file_map_close),
951 3);
952 n->rmap = eina_hash_pointer_new(NULL);
953 n->global_map = MAP_FAILED;
954 n->global_refcount = 0;
955 n->length = length.QuadPart;
956 n->mtime = mtime.QuadPart;
957 n->refcount = 0;
958 n->handle = handle;
959 n->fm = fm;
960 n->shared = shared;
961 n->delete_me = EINA_FALSE;
962 eina_lock_new(&n->lock);
963 eina_hash_direct_add(_eina_file_cache, n->filename, n);
964 }
965 else
966 {
967 CloseHandle(fm);
968 CloseHandle(handle);
969
970 n = file;
971 }
972 eina_lock_take(&n->lock);
973 n->refcount++;
974 eina_lock_release(&n->lock);
975
976 eina_lock_release(&_eina_file_lock_cache);
977
978 free(filename);
979
980 return n;
981
982 close_fm:
983 CloseHandle(fm);
984 close_handle:
985 CloseHandle(handle);
986
987 return NULL;
988}
989
990EAPI void
991eina_file_close(Eina_File *file)
992{
993 EINA_SAFETY_ON_NULL_RETURN(file);
994
995 eina_lock_take(&file->lock);
996 file->refcount--;
997 eina_lock_release(&file->lock);
998
999 if (file->refcount != 0) return ;
1000 eina_lock_take(&_eina_file_lock_cache);
1001
1002 eina_hash_del(_eina_file_cache, file->filename, file);
1003 _eina_file_real_close(file);
1004
1005 eina_lock_release(&_eina_file_lock_cache);
1006}
1007
1008EAPI size_t
1009eina_file_size_get(Eina_File *file)
1010{
1011 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1012 return file->length;
1013}
1014
1015EAPI time_t
1016eina_file_mtime_get(Eina_File *file)
1017{
1018 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1019 return file->mtime;
1020}
1021
1022EAPI const char *
1023eina_file_filename_get(Eina_File *file)
1024{
1025 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1026 return file->filename;
1027}
1028
1029EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file __UNUSED__)
1030{
1031 return NULL;
1032}
1033
1034EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file __UNUSED__)
1035{
1036 return NULL;
1037}
1038
1039EAPI void *
1040eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__)
1041{
1042 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1043
1044 eina_lock_take(&file->lock);
1045 if (file->global_map == MAP_FAILED)
1046 {
1047 void *data;
1048
1049 data = MapViewOfFile(file->fm, FILE_MAP_READ,
1050 0, 0, file->length);
1051 if (!data)
1052 file->global_map = MAP_FAILED;
1053 else
1054 file->global_map = data;
1055 }
1056
1057 if (file->global_map != MAP_FAILED)
1058 {
1059 file->global_refcount++;
1060 return file->global_map;
1061 }
1062
1063 eina_lock_release(&file->lock);
1064 return NULL;
1065}
1066
1067EAPI void *
1068eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
1069 unsigned long int offset, unsigned long int length)
1070{
1071 Eina_File_Map *map;
1072 unsigned long int key[2];
1073
1074 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1075
1076 if (offset > file->length)
1077 return NULL;
1078 if (offset + length > file->length)
1079 return NULL;
1080
1081 if (offset == 0 && length == file->length)
1082 return eina_file_map_all(file, rule);
1083
1084 key[0] = offset;
1085 key[1] = length;
1086
1087 eina_lock_take(&file->lock);
1088
1089 map = eina_hash_find(file->map, &key);
1090 if (!map)
1091 {
1092 void *data;
1093
1094 map = malloc(sizeof (Eina_File_Map));
1095 if (!map)
1096 {
1097 eina_lock_release(&file->lock);
1098 return NULL;
1099 }
1100
1101 data = MapViewOfFile(file->fm, FILE_MAP_READ,
1102 offset & 0xffff0000,
1103 offset & 0x0000ffff,
1104 length);
1105 if (!data)
1106 map->map = MAP_FAILED;
1107 else
1108 map->map = data;
1109
1110 map->offset = offset;
1111 map->length = length;
1112 map->refcount = 0;
1113
1114 if (map->map == MAP_FAILED)
1115 {
1116 free(map);
1117 eina_lock_release(&file->lock);
1118 return NULL;
1119 }
1120
1121 eina_hash_add(file->map, &key, map);
1122 eina_hash_direct_add(file->rmap, map->map, map);
1123 }
1124
1125 map->refcount++;
1126
1127 eina_lock_release(&file->lock);
1128
1129 return map->map;
1130}
1131
1132EAPI void
1133eina_file_map_free(Eina_File *file, void *map)
1134{
1135 EINA_SAFETY_ON_NULL_RETURN(file);
1136
1137 eina_lock_take(&file->lock);
1138
1139 if (file->global_map == map)
1140 {
1141 file->global_refcount--;
1142
1143 if (file->global_refcount > 0) goto on_exit;
1144
1145 UnmapViewOfFile(file->global_map);
1146 file->global_map = MAP_FAILED;
1147 }
1148 else
1149 {
1150 Eina_File_Map *em;
1151 unsigned long int key[2];
1152
1153 em = eina_hash_find(file->rmap, &map);
1154 if (!em) goto on_exit;
1155
1156 em->refcount--;
1157
1158 if (em->refcount > 0) goto on_exit;
1159
1160 key[0] = em->offset;
1161 key[1] = em->length;
1162
1163 eina_hash_del(file->rmap, &map, em);
1164 eina_hash_del(file->map, &key, em);
1165 }
1166
1167 on_exit:
1168 eina_lock_release(&file->lock);
1169}
1170
1171EAPI int
1172eina_file_statat(void *container __UNUSED__, Eina_File_Direct_Info *info, Eina_Stat *st)
1173{
1174 struct __stat64 buf;
1175
1176 EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1);
1177 EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1);
1178
1179 if (stat64(info->path, &buf))
1180 {
1181 if (info->type != EINA_FILE_LNK)
1182 info->type = EINA_FILE_UNKNOWN;
1183 return -1;
1184 }
1185
1186 if (info->type == EINA_FILE_UNKNOWN)
1187 {
1188 if (S_ISREG(buf.st_mode))
1189 info->type = EINA_FILE_REG;
1190 else if (S_ISDIR(buf.st_mode))
1191 info->type = EINA_FILE_DIR;
1192 else
1193 info->type = EINA_FILE_UNKNOWN;
1194 }
1195
1196 st->dev = buf.st_dev;
1197 st->ino = buf.st_ino;
1198 st->mode = buf.st_mode;
1199 st->nlink = buf.st_nlink;
1200 st->uid = buf.st_uid;
1201 st->gid = buf.st_gid;
1202 st->rdev = buf.st_rdev;
1203 st->size = buf.st_size;
1204 st->blksize = 0;
1205 st->blocks = 0;
1206 st->atime = buf.st_atime;
1207 st->mtime = buf.st_mtime;
1208 st->ctime = buf.st_ctime;
1209 st->atimensec = 0;
1210 st->mtimensec = 0;
1211 st->ctimensec = 0;
1212
1213 return 0;
1214}
diff --git a/libraries/eina/src/lib/eina_fp.c b/libraries/eina/src/lib/eina_fp.c
deleted file mode 100644
index 8984b49..0000000
--- a/libraries/eina/src/lib/eina_fp.c
+++ /dev/null
@@ -1,532 +0,0 @@
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
deleted file mode 100644
index cebc10b..0000000
--- a/libraries/eina/src/lib/eina_hamster.c
+++ /dev/null
@@ -1,113 +0,0 @@
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
deleted file mode 100644
index 5196894..0000000
--- a/libraries/eina/src/lib/eina_hash.c
+++ /dev/null
@@ -1,1377 +0,0 @@
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 if (!hash) return ;
858
859 EINA_MAGIC_CHECK_HASH(hash);
860
861 if (hash->buckets)
862 {
863 for (i = 0; i < hash->size; i++)
864 eina_rbtree_delete(hash->buckets[i], EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash);
865 free(hash->buckets);
866 }
867 free(hash);
868}
869
870EAPI void
871eina_hash_free_buckets(Eina_Hash *hash)
872{
873 int i;
874
875 if (!hash) return ;
876
877 EINA_MAGIC_CHECK_HASH(hash);
878
879 if (hash->buckets)
880 {
881 for (i = 0; i < hash->size; i++)
882 eina_rbtree_delete(hash->buckets[i],
883 EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash);
884 free(hash->buckets);
885 hash->buckets = NULL;
886 hash->population = 0;
887 }
888}
889
890EAPI Eina_Bool
891eina_hash_add_by_hash(Eina_Hash *hash,
892 const void *key,
893 int key_length,
894 int key_hash,
895 const void *data)
896{
897 return eina_hash_add_alloc_by_hash(hash,
898 key,
899 key_length,
900 key_length,
901 key_hash,
902 data);
903}
904
905EAPI Eina_Bool
906eina_hash_direct_add_by_hash(Eina_Hash *hash,
907 const void *key,
908 int key_length,
909 int key_hash,
910 const void *data)
911{
912 return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
913}
914
915EAPI Eina_Bool
916eina_hash_add(Eina_Hash *hash, const void *key, const void *data)
917{
918 unsigned int key_length;
919 int key_hash;
920
921 EINA_MAGIC_CHECK_HASH(hash);
922 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
923 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
924 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
925 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
926
927 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
928 key_hash = hash->key_hash_cb(key, key_length);
929
930 return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data);
931}
932
933EAPI Eina_Bool
934eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data)
935{
936 int key_length;
937 int key_hash;
938
939 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
940 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
941 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
942 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
943 EINA_MAGIC_CHECK_HASH(hash);
944
945 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
946 key_hash = hash->key_hash_cb(key, key_length);
947
948 return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
949}
950
951EAPI Eina_Bool
952eina_hash_del_by_key_hash(Eina_Hash *hash,
953 const void *key,
954 int key_length,
955 int key_hash)
956{
957 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
958 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
959
960 return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, NULL);
961}
962
963EAPI Eina_Bool
964eina_hash_del_by_key(Eina_Hash *hash, const void *key)
965{
966 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
967 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
968
969 return _eina_hash_del_by_key(hash, key, NULL);
970}
971
972EAPI Eina_Bool
973eina_hash_del_by_data(Eina_Hash *hash, const void *data)
974{
975 Eina_Hash_Element *hash_element;
976 Eina_Hash_Head *hash_head;
977 int key_hash;
978
979 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
980 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
981 EINA_MAGIC_CHECK_HASH(hash);
982
983 hash_element = _eina_hash_find_by_data(hash, data, &key_hash, &hash_head);
984 if (!hash_element)
985 goto error;
986
987 if (hash_element->tuple.data != data)
988 goto error;
989
990 return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash);
991
992error:
993 return EINA_FALSE;
994}
995
996EAPI Eina_Bool
997eina_hash_del_by_hash(Eina_Hash *hash,
998 const void *key,
999 int key_length,
1000 int key_hash,
1001 const void *data)
1002{
1003 Eina_Bool ret;
1004
1005 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1006 EINA_MAGIC_CHECK_HASH(hash);
1007
1008 if (key)
1009 ret = _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data);
1010 else
1011 ret = eina_hash_del_by_data(hash, data);
1012
1013 return ret;
1014}
1015
1016EAPI Eina_Bool
1017eina_hash_del(Eina_Hash *hash, const void *key, const void *data)
1018{
1019 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1020 EINA_MAGIC_CHECK_HASH(hash);
1021
1022 if (!key)
1023 return eina_hash_del_by_data(hash, data);
1024
1025 return _eina_hash_del_by_key(hash, key, data);
1026}
1027
1028EAPI void *
1029eina_hash_find_by_hash(const Eina_Hash *hash,
1030 const void *key,
1031 int key_length,
1032 int key_hash)
1033{
1034 Eina_Hash_Head *hash_head;
1035 Eina_Hash_Element *hash_element;
1036 Eina_Hash_Tuple tuple;
1037
1038 if (!hash)
1039 return NULL;
1040
1041 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1042 EINA_MAGIC_CHECK_HASH(hash);
1043
1044 tuple.key = key;
1045 tuple.key_length = key_length;
1046 tuple.data = NULL;
1047
1048 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1049 if (hash_element)
1050 return hash_element->tuple.data;
1051
1052 return NULL;
1053}
1054
1055EAPI void *
1056eina_hash_find(const Eina_Hash *hash, const void *key)
1057{
1058 int key_length;
1059 int hash_num;
1060
1061 if (!hash)
1062 return NULL;
1063
1064 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1065 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1066 EINA_MAGIC_CHECK_HASH(hash);
1067
1068 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1069 hash_num = hash->key_hash_cb(key, key_length);
1070
1071 return eina_hash_find_by_hash(hash, key, key_length, hash_num);
1072}
1073
1074EAPI void *
1075eina_hash_modify_by_hash(Eina_Hash *hash,
1076 const void *key,
1077 int key_length,
1078 int key_hash,
1079 const void *data)
1080{
1081 Eina_Hash_Head *hash_head;
1082 Eina_Hash_Element *hash_element;
1083 void *old_data = NULL;
1084 Eina_Hash_Tuple tuple;
1085
1086 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1087 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1088 EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
1089 EINA_MAGIC_CHECK_HASH(hash);
1090
1091 tuple.key = key;
1092 tuple.key_length = key_length;
1093 tuple.data = NULL;
1094
1095 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1096 if (hash_element)
1097 {
1098 old_data = hash_element->tuple.data;
1099 hash_element->tuple.data = (void *)data;
1100 }
1101
1102 return old_data;
1103}
1104
1105EAPI void *
1106eina_hash_set(Eina_Hash *hash, const void *key, const void *data)
1107{
1108 Eina_Hash_Tuple tuple;
1109 Eina_Hash_Head *hash_head;
1110 Eina_Hash_Element *hash_element;
1111 int key_length;
1112 int key_hash;
1113
1114 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1115 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1116 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1117 EINA_MAGIC_CHECK_HASH(hash);
1118
1119 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1120 key_hash = hash->key_hash_cb(key, key_length);
1121
1122 tuple.key = key;
1123 tuple.key_length = key_length;
1124 tuple.data = NULL;
1125
1126 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1127 if (hash_element)
1128 {
1129 void *old_data = NULL;
1130
1131 old_data = hash_element->tuple.data;
1132
1133 if (data)
1134 {
1135 hash_element->tuple.data = (void *)data;
1136 }
1137 else
1138 {
1139 _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash);
1140 }
1141
1142 return old_data;
1143 }
1144
1145 if (!data) return NULL;
1146
1147 eina_hash_add_alloc_by_hash(hash,
1148 key,
1149 key_length,
1150 key_length,
1151 key_hash,
1152 data);
1153 return NULL;
1154}
1155EAPI void *
1156eina_hash_modify(Eina_Hash *hash, const void *key, const void *data)
1157{
1158 int key_length;
1159 int hash_num;
1160
1161 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1162 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1163 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1164 EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
1165 EINA_MAGIC_CHECK_HASH(hash);
1166
1167 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1168 hash_num = hash->key_hash_cb(key, key_length);
1169
1170 return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data);
1171}
1172
1173EAPI Eina_Bool
1174eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key)
1175{
1176 Eina_Free_Cb hash_free_cb;
1177 const void *data;
1178 Eina_Bool result = EINA_FALSE;
1179
1180 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1181 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
1182 EINA_SAFETY_ON_NULL_RETURN_VAL(old_key, EINA_FALSE);
1183 EINA_SAFETY_ON_NULL_RETURN_VAL(new_key, EINA_FALSE);
1184 EINA_MAGIC_CHECK_HASH(hash);
1185
1186 data = eina_hash_find(hash, old_key);
1187 if (!data) goto error;
1188
1189 hash_free_cb = hash->data_free_cb;
1190 hash->data_free_cb = NULL;
1191
1192 eina_hash_del(hash, old_key, data);
1193 result = eina_hash_add(hash, new_key, data);
1194
1195 hash->data_free_cb = hash_free_cb;
1196
1197error:
1198 return result;
1199}
1200
1201/*============================================================================*
1202* Iterator *
1203*============================================================================*/
1204
1205EAPI void
1206eina_hash_foreach(const Eina_Hash *hash,
1207 Eina_Hash_Foreach func,
1208 const void *fdata)
1209{
1210 Eina_Iterator *it;
1211 Eina_Hash_Foreach_Data foreach;
1212
1213 EINA_MAGIC_CHECK_HASH(hash);
1214 EINA_SAFETY_ON_NULL_RETURN(hash);
1215 EINA_SAFETY_ON_NULL_RETURN(func);
1216
1217 foreach.cb = func;
1218 foreach.fdata = fdata;
1219
1220 it = eina_hash_iterator_tuple_new(hash);
1221 if (!it)
1222 return;
1223 eina_iterator_foreach(it, EINA_EACH_CB(_eina_foreach_cb), &foreach);
1224
1225 eina_iterator_free(it);
1226}
1227
1228EAPI Eina_Iterator *
1229eina_hash_iterator_data_new(const Eina_Hash *hash)
1230{
1231 Eina_Iterator_Hash *it;
1232
1233 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1234 EINA_MAGIC_CHECK_HASH(hash);
1235
1236 eina_error_set(0);
1237 it = calloc(1, sizeof (Eina_Iterator_Hash));
1238 if (!it)
1239 {
1240 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1241 return NULL;
1242 }
1243
1244 it->hash = hash;
1245 it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
1246
1247 it->iterator.version = EINA_ITERATOR_VERSION;
1248 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1249 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1250 _eina_hash_iterator_get_container);
1251 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1252
1253 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1254 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1255
1256 return &it->iterator;
1257}
1258
1259EAPI Eina_Iterator *
1260eina_hash_iterator_key_new(const Eina_Hash *hash)
1261{
1262 Eina_Iterator_Hash *it;
1263
1264 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1265 EINA_MAGIC_CHECK_HASH(hash);
1266
1267 eina_error_set(0);
1268 it = calloc(1, sizeof (Eina_Iterator_Hash));
1269 if (!it)
1270 {
1271 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1272 return NULL;
1273 }
1274
1275 it->hash = hash;
1276 it->get_content = FUNC_ITERATOR_GET_CONTENT(
1277 _eina_hash_iterator_key_get_content);
1278
1279 it->iterator.version = EINA_ITERATOR_VERSION;
1280 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1281 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1282 _eina_hash_iterator_get_container);
1283 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1284
1285 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1286 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1287
1288 return &it->iterator;
1289}
1290
1291EAPI Eina_Iterator *
1292eina_hash_iterator_tuple_new(const Eina_Hash *hash)
1293{
1294 Eina_Iterator_Hash *it;
1295
1296 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1297 EINA_MAGIC_CHECK_HASH(hash);
1298
1299 eina_error_set(0);
1300 it = calloc(1, sizeof (Eina_Iterator_Hash));
1301 if (!it)
1302 {
1303 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1304 return NULL;
1305 }
1306
1307 it->hash = hash;
1308 it->get_content = FUNC_ITERATOR_GET_CONTENT(
1309 _eina_hash_iterator_tuple_get_content);
1310
1311 it->iterator.version = EINA_ITERATOR_VERSION;
1312 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1313 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1314 _eina_hash_iterator_get_container);
1315 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1316
1317 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1318 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1319
1320 return &it->iterator;
1321}
1322
1323/* Common hash functions */
1324
1325/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html)
1326 used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */
1327EAPI int
1328eina_hash_superfast(const char *key, int len)
1329{
1330 int hash = len, tmp;
1331 int rem;
1332
1333 rem = len & 3;
1334 len >>= 2;
1335
1336 /* Main loop */
1337 for (; len > 0; len--)
1338 {
1339 hash += get16bits(key);
1340 tmp = (get16bits(key + 2) << 11) ^ hash;
1341 hash = (hash << 16) ^ tmp;
1342 key += 2 * sizeof (uint16_t);
1343 hash += hash >> 11;
1344 }
1345
1346 /* Handle end cases */
1347 switch (rem)
1348 {
1349 case 3:
1350 hash += get16bits(key);
1351 hash ^= hash << 16;
1352 hash ^= key[sizeof (uint16_t)] << 18;
1353 hash += hash >> 11;
1354 break;
1355
1356 case 2:
1357 hash += get16bits(key);
1358 hash ^= hash << 11;
1359 hash += hash >> 17;
1360 break;
1361
1362 case 1:
1363 hash += *key;
1364 hash ^= hash << 10;
1365 hash += hash >> 1;
1366 }
1367
1368 /* Force "avalanching" of final 127 bits */
1369 hash ^= hash << 3;
1370 hash += hash >> 5;
1371 hash ^= hash << 4;
1372 hash += hash >> 17;
1373 hash ^= hash << 25;
1374 hash += hash >> 6;
1375
1376 return hash;
1377}
diff --git a/libraries/eina/src/lib/eina_inarray.c b/libraries/eina/src/lib/eina_inarray.c
deleted file mode 100644
index dc95bc6..0000000
--- a/libraries/eina/src/lib/eina_inarray.c
+++ /dev/null
@@ -1,777 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 - 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#include <stdlib.h>
24#include <string.h>
25
26#include "eina_config.h"
27#include "eina_private.h"
28#include "eina_error.h"
29#include "eina_log.h"
30
31/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
32#include "eina_safety_checks.h"
33#include "eina_inarray.h"
34
35/*============================================================================*
36* Local *
37*============================================================================*/
38
39/**
40 * @cond LOCAL
41 */
42
43static const char EINA_MAGIC_INARRAY_STR[] = "Eina Inline Array";
44static const char EINA_MAGIC_INARRAY_ITERATOR_STR[] = "Eina Inline Array Iterator";
45static const char EINA_MAGIC_INARRAY_ACCESSOR_STR[] = "Eina Inline Array Accessor";
46
47typedef struct _Eina_Iterator_Inarray Eina_Iterator_Inarray;
48typedef struct _Eina_Accessor_Inarray Eina_Accessor_Inarray;
49
50struct _Eina_Iterator_Inarray
51{
52 Eina_Iterator iterator;
53 const Eina_Inarray *array;
54 unsigned int pos;
55 EINA_MAGIC
56};
57
58struct _Eina_Accessor_Inarray
59{
60 Eina_Accessor accessor;
61 const Eina_Inarray *array;
62 EINA_MAGIC
63};
64
65static int _eina_inarray_log_dom = -1;
66
67#ifdef ERR
68#undef ERR
69#endif
70#define ERR(...) EINA_LOG_DOM_ERR(_eina_inarray_log_dom, __VA_ARGS__)
71
72#ifdef DBG
73#undef DBG
74#endif
75#define DBG(...) EINA_LOG_DOM_DBG(_eina_inarray_log_dom, __VA_ARGS__)
76
77#define EINA_MAGIC_CHECK_INARRAY(d, ...) \
78 do \
79 { \
80 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_INARRAY)) \
81 { \
82 EINA_MAGIC_FAIL(d, EINA_MAGIC_INARRAY); \
83 return __VA_ARGS__; \
84 } \
85 eina_error_set(0); \
86 } \
87 while(0)
88
89#define EINA_MAGIC_CHECK_INARRAY_ITERATOR(d, ...) \
90 do \
91 { \
92 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_INARRAY_ITERATOR)) \
93 { \
94 EINA_MAGIC_FAIL(d, EINA_MAGIC_INARRAY_ITERATOR); \
95 return __VA_ARGS__; \
96 } \
97 eina_error_set(0); \
98 } \
99 while(0)
100
101#define EINA_MAGIC_CHECK_INARRAY_ACCESSOR(d, ...) \
102 do \
103 { \
104 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_INARRAY_ACCESSOR)) \
105 { \
106 EINA_MAGIC_FAIL(d, EINA_MAGIC_INARRAY_ACCESSOR); \
107 return __VA_ARGS__; \
108 } \
109 eina_error_set(0); \
110 } \
111 while(0)
112
113static void
114_eina_inarray_setup(Eina_Inarray *array, unsigned int member_size, unsigned int step)
115{
116 EINA_MAGIC_SET(array, EINA_MAGIC_INARRAY);
117 array->member_size = member_size;
118 array->len = 0;
119 array->max = 0;
120 array->step = (step > 0) ? step : 32;
121 array->members = NULL;
122}
123
124static Eina_Bool
125_eina_inarray_resize(Eina_Inarray *array, unsigned int new_size)
126{
127 unsigned int new_max;
128 void *tmp;
129
130 if (new_size < array->max)
131 return EINA_TRUE;
132
133 if (new_size % array->step == 0)
134 new_max = new_size;
135 else
136 new_max = ((new_size / array->step) + 1) * array->step;
137
138 tmp = realloc(array->members, new_max * array->member_size);
139 if ((!tmp) && (new_max > 0))
140 {
141 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
142 return EINA_FALSE;
143 }
144
145 array->members = tmp;
146 array->max = new_max;
147 return EINA_TRUE;
148}
149
150static inline void *
151_eina_inarray_get(const Eina_Inarray *array, unsigned int position)
152{
153 unsigned int offset = position * array->member_size;
154 return (unsigned char *)array->members + offset;
155}
156
157static int
158_eina_inarray_search(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
159{
160 const unsigned char *start, *found;
161 start = array->members;
162 found = bsearch(data, start, array->len, array->member_size, compare);
163 if (!found)
164 return -1;
165 return (found - start) / array->member_size;
166}
167
168static unsigned int
169_eina_inarray_search_sorted_near(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare, int *cmp)
170{
171 unsigned int start, last, middle;
172
173 if (array->len == 0)
174 {
175 *cmp = -1;
176 return 0;
177 }
178 else if (array->len == 1)
179 {
180 *cmp = compare(data, array->members);
181 return 0;
182 }
183
184 start = 0;
185 last = array->len - 1; /* inclusive */
186 do
187 {
188 void *p;
189 middle = start + (last - start) / 2; /* avoid overflow */
190 p = _eina_inarray_get(array, middle);
191 *cmp = compare(data, p);
192 if (*cmp == 0)
193 return middle;
194 else if (*cmp > 0)
195 start = middle + 1;
196 else if (middle > 0)
197 last = middle - 1;
198 else
199 break;
200 }
201 while (start <= last);
202 return middle;
203}
204
205
206static Eina_Bool
207_eina_inarray_iterator_next(Eina_Iterator_Inarray *it, void **data)
208{
209 EINA_MAGIC_CHECK_INARRAY_ITERATOR(it, EINA_FALSE);
210
211 if (it->pos >= it->array->len)
212 return EINA_FALSE;
213
214 *data = _eina_inarray_get(it->array, it->pos);
215 it->pos++;
216
217 return EINA_TRUE;
218}
219
220static Eina_Bool
221_eina_inarray_iterator_prev(Eina_Iterator_Inarray *it, void **data)
222{
223 EINA_MAGIC_CHECK_INARRAY_ITERATOR(it, EINA_FALSE);
224
225 if (it->pos == 0)
226 return EINA_FALSE;
227
228 it->pos--;
229 *data = _eina_inarray_get(it->array, it->pos);
230
231 return EINA_TRUE;
232}
233
234static Eina_Inarray *
235_eina_inarray_iterator_get_container(Eina_Iterator_Inarray *it)
236{
237 EINA_MAGIC_CHECK_INARRAY_ITERATOR(it, NULL);
238 return (Eina_Inarray *)it->array;
239}
240
241static void
242_eina_inarray_iterator_free(Eina_Iterator_Inarray *it)
243{
244 EINA_MAGIC_CHECK_INARRAY_ITERATOR(it);
245 MAGIC_FREE(it);
246}
247
248static Eina_Bool
249_eina_inarray_accessor_get_at(Eina_Accessor_Inarray *it, unsigned int pos, void **data)
250{
251 EINA_MAGIC_CHECK_INARRAY_ACCESSOR(it, EINA_FALSE);
252
253 if (pos >= it->array->len)
254 return EINA_FALSE;
255
256 *data = _eina_inarray_get(it->array, pos);
257 return EINA_TRUE;
258}
259
260static Eina_Inarray *
261_eina_inarray_accessor_get_container(Eina_Accessor_Inarray *it)
262{
263 EINA_MAGIC_CHECK_INARRAY_ACCESSOR(it, NULL);
264 return (Eina_Inarray *)it->array;
265}
266
267static void
268_eina_inarray_accessor_free(Eina_Accessor_Inarray *it)
269{
270 EINA_MAGIC_CHECK_INARRAY_ACCESSOR(it);
271 MAGIC_FREE(it);
272}
273
274/**
275 * @endcond
276 */
277
278
279/*============================================================================*
280* Global *
281*============================================================================*/
282
283/**
284 * @internal
285 * @brief Initialize the inline array module.
286 *
287 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
288 *
289 * This function sets up the inline array module of Eina. It is called
290 * by eina_init().
291 *
292 * @see eina_init()
293 */
294Eina_Bool
295eina_inarray_init(void)
296{
297 _eina_inarray_log_dom = eina_log_domain_register("eina_inarray",
298 EINA_LOG_COLOR_DEFAULT);
299 if (_eina_inarray_log_dom < 0)
300 {
301 EINA_LOG_ERR("Could not register log domain: eina_inarray");
302 return EINA_FALSE;
303 }
304
305#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
306 EMS(EINA_MAGIC_INARRAY);
307 EMS(EINA_MAGIC_INARRAY_ITERATOR);
308 EMS(EINA_MAGIC_INARRAY_ACCESSOR);
309#undef EMS
310
311 return EINA_TRUE;
312}
313
314/**
315 * @internal
316 * @brief Shut down the inline array module.
317 *
318 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
319 *
320 * This function shuts down the inline array module set up by
321 * eina_inarray_init(). It is called by eina_shutdown().
322 *
323 * @see eina_shutdown()
324 */
325Eina_Bool
326eina_inarray_shutdown(void)
327{
328 eina_log_domain_unregister(_eina_inarray_log_dom);
329 _eina_inarray_log_dom = -1;
330 return EINA_TRUE;
331}
332
333/*============================================================================*
334* API *
335*============================================================================*/
336EAPI Eina_Inarray *
337eina_inarray_new(unsigned int member_size, unsigned int step)
338{
339 Eina_Inarray *ret;
340
341 EINA_SAFETY_ON_TRUE_RETURN_VAL(member_size == 0, NULL);
342
343 ret = malloc(sizeof(*ret));
344 if (!ret)
345 {
346 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
347 return NULL;
348 }
349 eina_error_set(0);
350 _eina_inarray_setup(ret, member_size, step);
351 return ret;
352}
353
354EAPI void
355eina_inarray_free(Eina_Inarray *array)
356{
357 EINA_MAGIC_CHECK_INARRAY(array);
358 free(array->members);
359 free(array);
360}
361
362EAPI void
363eina_inarray_setup(Eina_Inarray *array, unsigned int member_size, unsigned int step)
364{
365 EINA_SAFETY_ON_NULL_RETURN(array);
366 EINA_SAFETY_ON_TRUE_RETURN(member_size == 0);
367 _eina_inarray_setup(array, member_size, step);
368}
369
370EAPI void
371eina_inarray_flush(Eina_Inarray *array)
372{
373 EINA_MAGIC_CHECK_INARRAY(array);
374 free(array->members);
375 array->len = 0;
376 array->max = 0;
377 array->members = NULL;
378}
379
380EAPI int
381eina_inarray_append(Eina_Inarray *array, const void *data)
382{
383 void *p;
384
385 EINA_MAGIC_CHECK_INARRAY(array, -1);
386 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
387
388 if (!_eina_inarray_resize(array, array->len + 1))
389 return -1;
390
391 p = _eina_inarray_get(array, array->len);
392 memcpy(p, data, array->member_size);
393
394 array->len++;
395 return array->len - 1;
396}
397
398EAPI int
399eina_inarray_insert(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
400{
401 const unsigned char *itr, *itr_end;
402 unsigned int sz;
403
404 EINA_MAGIC_CHECK_INARRAY(array, -1);
405 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
406 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, -1);
407
408 sz = array->member_size;
409 itr = array->members;
410 itr_end = itr + array->len * sz;
411 for (; itr < itr_end; itr += sz)
412 {
413 unsigned int offset, position;
414 int cmp = compare(itr, data);
415 if (cmp <= 0)
416 continue;
417
418 offset = itr - (unsigned char *)array->members;
419 position = offset / sz;
420 if (!eina_inarray_insert_at(array, position, data))
421 return -1;
422 return position;
423 }
424 return eina_inarray_append(array, data);
425}
426
427EAPI int
428eina_inarray_insert_sorted(Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
429{
430 unsigned int pos;
431 int cmp;
432
433 EINA_MAGIC_CHECK_INARRAY(array, -1);
434 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
435 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, -1);
436
437 pos = _eina_inarray_search_sorted_near(array, data, compare, &cmp);
438 if (cmp > 0)
439 pos++;
440
441 if (!eina_inarray_insert_at(array, pos, data))
442 return -1;
443 return pos;
444}
445
446EAPI int
447eina_inarray_remove(Eina_Inarray *array, const void *data)
448{
449 const unsigned char *itr, *itr_end;
450 unsigned int position, sz;
451
452 EINA_MAGIC_CHECK_INARRAY(array, -1);
453 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
454
455 sz = array->member_size;
456 if ((data >= array->members) &&
457 (data < _eina_inarray_get(array, array->len)))
458 {
459 unsigned int offset = ((unsigned char *)data -
460 (unsigned char *)array->members);
461 position = offset / sz;
462 goto found;
463 }
464
465 itr = array->members;
466 itr_end = itr + array->len * sz;
467 for (; itr < itr_end; itr += sz)
468 {
469 if (memcmp(data, itr, sz) == 0)
470 {
471 unsigned int offset = itr - (unsigned char *)array->members;
472 position = offset / sz;
473 goto found;
474 }
475 }
476 return -1;
477
478found:
479 if (!eina_inarray_remove_at(array, position))
480 return -1;
481 return position;
482}
483
484EAPI int
485eina_inarray_pop(Eina_Inarray *array)
486{
487 EINA_MAGIC_CHECK_INARRAY(array, -1);
488 EINA_SAFETY_ON_TRUE_RETURN_VAL(array->len == 0, -1);
489 if (!_eina_inarray_resize(array, array->len - 1))
490 return -1;
491 array->len--;
492 return array->len + 1;
493}
494
495EAPI void *
496eina_inarray_nth(const Eina_Inarray *array, unsigned int position)
497{
498 EINA_MAGIC_CHECK_INARRAY(array, NULL);
499 EINA_SAFETY_ON_TRUE_RETURN_VAL(position >= array->len, NULL);
500 return _eina_inarray_get(array, position);
501}
502
503EAPI Eina_Bool
504eina_inarray_insert_at(Eina_Inarray *array, unsigned int position, const void *data)
505{
506 unsigned int sz;
507 unsigned char *p;
508
509 EINA_MAGIC_CHECK_INARRAY(array, EINA_FALSE);
510 EINA_SAFETY_ON_TRUE_RETURN_VAL(position > array->len, EINA_FALSE);
511
512 if (!_eina_inarray_resize(array, array->len + 1))
513 return EINA_FALSE;
514
515 p = _eina_inarray_get(array, position);
516 sz = array->member_size;
517 if (array->len > position)
518 memmove(p + sz, p, (array->len - position) * sz);
519 memcpy(p, data, sz);
520
521 array->len++;
522 return EINA_TRUE;
523}
524
525EAPI void *
526eina_inarray_alloc_at(Eina_Inarray *array, unsigned int position, unsigned int member_count)
527{
528 unsigned int sz;
529 unsigned char *p;
530
531 EINA_MAGIC_CHECK_INARRAY(array, NULL);
532 EINA_SAFETY_ON_TRUE_RETURN_VAL(position > array->len, NULL);
533 EINA_SAFETY_ON_TRUE_RETURN_VAL(member_count == 0, NULL);
534
535 if (!_eina_inarray_resize(array, array->len + member_count))
536 return NULL;
537
538 p = _eina_inarray_get(array, position);
539 sz = array->member_size;
540 if (array->len > position)
541 memmove(p + member_count * sz, p, (array->len - position) * sz);
542
543 array->len += member_count;
544 return p;
545}
546
547EAPI Eina_Bool
548eina_inarray_replace_at(Eina_Inarray *array, unsigned int position, const void *data)
549{
550 unsigned char *p;
551
552 EINA_MAGIC_CHECK_INARRAY(array, EINA_FALSE);
553 EINA_SAFETY_ON_TRUE_RETURN_VAL(position >= array->len, EINA_FALSE);
554
555 p = _eina_inarray_get(array, position);
556 memcpy(p, data, array->member_size);
557
558 return EINA_TRUE;
559}
560
561EAPI Eina_Bool
562eina_inarray_remove_at(Eina_Inarray *array, unsigned int position)
563{
564 EINA_MAGIC_CHECK_INARRAY(array, EINA_FALSE);
565 EINA_SAFETY_ON_TRUE_RETURN_VAL(position >= array->len, EINA_FALSE);
566
567 if (position + 1 < array->len)
568 {
569 unsigned int sz = array->member_size;
570 unsigned char *p = _eina_inarray_get(array, position);
571 memmove(p, p + sz, (array->len - position - 1) * sz);
572 }
573
574 _eina_inarray_resize(array, array->len - 1);
575 array->len--;
576 return EINA_TRUE;
577}
578
579EAPI void
580eina_inarray_reverse(Eina_Inarray *array)
581{
582 size_t sz;
583 unsigned char *fwd, *rev, *fwd_end;
584 void *tmp;
585
586 EINA_MAGIC_CHECK_INARRAY(array);
587
588 if (array->len < 2)
589 return;
590
591 sz = array->member_size;
592
593 tmp = alloca(sz);
594 EINA_SAFETY_ON_NULL_RETURN(tmp);
595
596 fwd = array->members;
597 fwd_end = fwd + (array->len / 2) * sz;
598
599 rev = fwd + (array->len - 1) * sz;
600
601 for (; fwd < fwd_end; fwd += sz, rev -= sz)
602 {
603 memcpy(tmp, fwd, sz);
604 memcpy(fwd, rev, sz);
605 memcpy(rev, tmp, sz);
606 }
607}
608
609EAPI void
610eina_inarray_sort(Eina_Inarray *array, Eina_Compare_Cb compare)
611{
612 EINA_MAGIC_CHECK_INARRAY(array);
613 EINA_SAFETY_ON_NULL_RETURN(compare);
614 qsort(array->members, array->len, array->member_size, compare);
615}
616
617EAPI int
618eina_inarray_search(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
619{
620 EINA_MAGIC_CHECK_INARRAY(array, -1);
621 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
622 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, -1);
623 return _eina_inarray_search(array, data, compare);
624}
625
626EAPI int
627eina_inarray_search_sorted(const Eina_Inarray *array, const void *data, Eina_Compare_Cb compare)
628{
629 unsigned int pos;
630 int cmp;
631
632 EINA_MAGIC_CHECK_INARRAY(array, -1);
633 EINA_SAFETY_ON_NULL_RETURN_VAL(data, -1);
634 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, -1);
635
636 pos = _eina_inarray_search_sorted_near(array, data, compare, &cmp);
637 if (cmp == 0)
638 return pos;
639 return -1;
640}
641
642EAPI Eina_Bool
643eina_inarray_foreach(const Eina_Inarray *array, Eina_Each_Cb function, const void *user_data)
644{
645 unsigned char *itr, *itr_end;
646 unsigned int sz;
647 Eina_Bool ret = EINA_TRUE;
648
649 EINA_MAGIC_CHECK_INARRAY(array, EINA_FALSE);
650 EINA_SAFETY_ON_NULL_RETURN_VAL(function, EINA_FALSE);
651
652 sz = array->member_size;
653 itr = array->members;
654 itr_end = itr + array->len * sz;
655 for (; (itr < itr_end) && (ret); itr += sz)
656 ret = function(array, itr, (void *)user_data);
657 return ret;
658}
659
660EAPI int
661eina_inarray_foreach_remove(Eina_Inarray *array, Eina_Each_Cb match, const void *user_data)
662{
663 unsigned int i = 0, count = 0;
664
665 EINA_MAGIC_CHECK_INARRAY(array, -1);
666 EINA_SAFETY_ON_NULL_RETURN_VAL(match, -1);
667
668 while (i < array->len)
669 {
670 void *p = _eina_inarray_get(array, i);
671 if (match(array, p, (void *)user_data) == EINA_FALSE)
672 {
673 i++;
674 continue;
675 }
676
677 eina_inarray_remove_at(array, i);
678 count++;
679 }
680
681 return count;
682}
683
684EAPI unsigned int
685eina_inarray_count(const Eina_Inarray *array)
686{
687 EINA_MAGIC_CHECK_INARRAY(array, 0);
688 return array->len;
689}
690
691EAPI Eina_Iterator *
692eina_inarray_iterator_new(const Eina_Inarray *array)
693{
694 Eina_Iterator_Inarray *it;
695
696 EINA_MAGIC_CHECK_INARRAY(array, NULL);
697
698 eina_error_set(0);
699 it = calloc(1, sizeof(Eina_Iterator_Inarray));
700 if (!it)
701 {
702 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
703 return NULL;
704 }
705
706 EINA_MAGIC_SET(it, EINA_MAGIC_INARRAY_ITERATOR);
707 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
708
709 it->array = array;
710
711 it->iterator.version = EINA_ITERATOR_VERSION;
712 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_inarray_iterator_next);
713 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER
714 (_eina_inarray_iterator_get_container);
715 it->iterator.free = FUNC_ITERATOR_FREE(_eina_inarray_iterator_free);
716
717 return &it->iterator;
718}
719
720EAPI Eina_Iterator *
721eina_inarray_iterator_reversed_new(const Eina_Inarray *array)
722{
723 Eina_Iterator_Inarray *it;
724
725 EINA_MAGIC_CHECK_INARRAY(array, NULL);
726
727 eina_error_set(0);
728 it = calloc(1, sizeof(Eina_Iterator_Inarray));
729 if (!it)
730 {
731 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
732 return NULL;
733 }
734
735 EINA_MAGIC_SET(it, EINA_MAGIC_INARRAY_ITERATOR);
736 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
737
738 it->array = array;
739 it->pos = array->len;
740
741 it->iterator.version = EINA_ITERATOR_VERSION;
742 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_inarray_iterator_prev);
743 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER
744 (_eina_inarray_iterator_get_container);
745 it->iterator.free = FUNC_ITERATOR_FREE(_eina_inarray_iterator_free);
746
747 return &it->iterator;
748}
749
750EAPI Eina_Accessor *
751eina_inarray_accessor_new(const Eina_Inarray *array)
752{
753 Eina_Accessor_Inarray *ac;
754
755 EINA_MAGIC_CHECK_INARRAY(array, NULL);
756
757 eina_error_set(0);
758 ac = calloc(1, sizeof(Eina_Accessor_Inarray));
759 if (!ac)
760 {
761 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
762 return NULL;
763 }
764
765 EINA_MAGIC_SET(ac, EINA_MAGIC_INARRAY_ACCESSOR);
766 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
767
768 ac->array = array;
769
770 ac->accessor.version = EINA_ACCESSOR_VERSION;
771 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(_eina_inarray_accessor_get_at);
772 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER
773 (_eina_inarray_accessor_get_container);
774 ac->accessor.free = FUNC_ACCESSOR_FREE(_eina_inarray_accessor_free);
775
776 return &ac->accessor;
777}
diff --git a/libraries/eina/src/lib/eina_inlist.c b/libraries/eina/src/lib/eina_inlist.c
deleted file mode 100644
index c80f87b..0000000
--- a/libraries/eina/src/lib/eina_inlist.c
+++ /dev/null
@@ -1,914 +0,0 @@
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 EINA_SAFETY_ON_NULL_RETURN_VAL(item, NULL);
434
435 for (l = list; l; l = l->next) {
436 if (l == item)
437 return item;
438 }
439 return NULL;
440}
441
442EAPI unsigned int
443eina_inlist_count(const Eina_Inlist *list)
444{
445 const Eina_Inlist *l;
446 unsigned int i = 0;
447
448 for (l = list; l; l = l->next)
449 i++;
450
451 return i;
452}
453
454EAPI int
455eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list)
456{
457 Eina_Inlist *ct = NULL;
458 int count = 0;
459 int jump_count = 1;
460
461 /*
462 * prepare a jump table to avoid doing unnecessary rewalk
463 * of the inlist as much as possible.
464 */
465 for (ct = list; ct; ct = ct->next, jump_count++, count++)
466 {
467 if (jump_count == state->jump_div)
468 {
469 if (state->jump_limit == EINA_INLIST_JUMP_SIZE)
470 {
471 _eina_inlist_sorted_state_compact(state);
472 }
473
474 state->jump_table[state->jump_limit] = ct;
475 state->jump_limit++;
476 jump_count = 0;
477 }
478 }
479
480 state->inserted = count;
481 return count;
482}
483
484EAPI Eina_Inlist_Sorted_State *
485eina_inlist_sorted_state_new(void)
486{
487 Eina_Inlist_Sorted_State *r;
488
489 r = calloc(1, sizeof (Eina_Inlist_Sorted_State));
490 if (!r) return NULL;
491
492 r->jump_div = 1;
493
494 return r;
495}
496
497EAPI void
498eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state)
499{
500 free(state);
501}
502
503static void
504_eina_inlist_sorted_state_insert(Eina_Inlist_Sorted_State *state,
505 unsigned short idx,
506 int offset)
507{
508 Eina_Inlist *last;
509 int jump_count;
510 int start;
511
512 state->inserted++;
513
514 if (offset != 0) idx++;
515 for (; idx < state->jump_limit; idx++)
516 {
517 state->jump_table[idx] = state->jump_table[idx]->prev;
518 }
519
520 start = state->jump_limit - 3;
521 if (start < 0)
522 start = 0;
523
524 last = state->jump_table[start];
525 start++;
526
527 /* Correctly rebuild end of list */
528 for (jump_count = 0; last->next != NULL; last = last->next, jump_count++)
529 {
530 if (jump_count == state->jump_div)
531 {
532 if (state->jump_limit == start)
533 {
534 if (state->jump_limit == EINA_INLIST_JUMP_SIZE)
535 {
536 _eina_inlist_sorted_state_compact(state);
537 start = state->jump_limit - 1;
538 continue ;
539 }
540 else
541 {
542 state->jump_limit++;
543 }
544 }
545
546 state->jump_table[start++] = last;
547 jump_count = 0;
548 }
549 }
550}
551
552EAPI Eina_Inlist *
553eina_inlist_sorted_insert(Eina_Inlist *list,
554 Eina_Inlist *item,
555 Eina_Compare_Cb func)
556{
557 Eina_Inlist *ct = NULL;
558 Eina_Inlist_Sorted_State state;
559 int cmp = 0;
560 int inf, sup;
561 int cur = 0;
562 int count;
563
564 EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
565 EINA_SAFETY_ON_NULL_RETURN_VAL(func, list);
566
567 if (!list) return eina_inlist_append(NULL, item);
568
569 if (!list->next)
570 {
571 cmp = func(list, item);
572
573 if (cmp < 0)
574 return eina_inlist_append(list, item);
575 return eina_inlist_prepend(list, item);
576 }
577
578 state.jump_div = 1;
579 state.jump_limit = 0;
580 count = eina_inlist_sorted_state_init(&state, list);
581
582 /*
583 * now do a dychotomic search directly inside the jump_table.
584 */
585 inf = 0;
586 sup = state.jump_limit - 1;
587 cur = 0;
588 ct = state.jump_table[cur];
589 cmp = func(ct, item);
590
591 while (inf <= sup)
592 {
593 cur = inf + ((sup - inf) >> 1);
594 ct = state.jump_table[cur];
595
596 cmp = func(ct, item);
597 if (cmp == 0)
598 break ;
599 else if (cmp < 0)
600 inf = cur + 1;
601 else if (cmp > 0)
602 {
603 if (cur > 0)
604 sup = cur - 1;
605 else
606 break;
607 }
608 else
609 break;
610 }
611
612 /* If at the beginning of the table and cmp < 0,
613 * insert just after the head */
614 if (cur == 0 && cmp > 0)
615 return eina_inlist_prepend_relative(list, item, ct);
616
617 /* If at the end of the table and cmp >= 0,
618 * just append the item to the list */
619 if (cmp < 0 && ct == list->last)
620 return eina_inlist_append(list, item);
621
622 /*
623 * Now do a dychotomic search between two entries inside the jump_table
624 */
625 cur *= state.jump_div;
626 inf = cur - state.jump_div - 1;
627 sup = cur + state.jump_div + 1;
628
629 if (sup > count - 1) sup = count - 1;
630 if (inf < 0) inf = 0;
631
632 while (inf <= sup)
633 {
634 int tmp = cur;
635
636 cur = inf + ((sup - inf) >> 1);
637 if (tmp < cur)
638 for (; tmp != cur; tmp++, ct = ct->next);
639 else if (tmp > cur)
640 for (; tmp != cur; tmp--, ct = ct->prev);
641
642 cmp = func(ct, item);
643 if (cmp == 0)
644 break ;
645 else if (cmp < 0)
646 inf = cur + 1;
647 else if (cmp > 0)
648 {
649 if (cur > 0)
650 sup = cur - 1;
651 else
652 break;
653 }
654 else
655 break;
656 }
657
658 if (cmp <= 0)
659 return eina_inlist_append_relative(list, item, ct);
660 return eina_inlist_prepend_relative(list, item, ct);
661}
662
663EAPI Eina_Inlist *
664eina_inlist_sorted_state_insert(Eina_Inlist *list,
665 Eina_Inlist *item,
666 Eina_Compare_Cb func,
667 Eina_Inlist_Sorted_State *state)
668{
669 Eina_Inlist *ct = NULL;
670 int cmp = 0;
671 int inf, sup;
672 int cur = 0;
673 int count;
674 unsigned short head;
675 unsigned int offset;
676
677 if (!list)
678 {
679 state->inserted = 1;
680 state->jump_limit = 1;
681 state->jump_table[0] = item;
682 return eina_inlist_append(NULL, item);
683 }
684
685 if (!list->next)
686 {
687 cmp = func(list, item);
688
689 state->jump_limit = 2;
690 state->inserted = 2;
691
692 if (cmp < 0)
693 {
694 state->jump_table[1] = item;
695 return eina_inlist_append(list, item);
696 }
697 state->jump_table[1] = state->jump_table[0];
698 state->jump_table[0] = item;
699 return eina_inlist_prepend(list, item);
700 }
701
702 count = state->inserted;
703
704 /*
705 * now do a dychotomic search directly inside the jump_table.
706 */
707 inf = 0;
708 sup = state->jump_limit - 1;
709 cur = 0;
710 ct = state->jump_table[cur];
711 cmp = func(ct, item);
712
713 while (inf <= sup)
714 {
715 cur = inf + ((sup - inf) >> 1);
716 ct = state->jump_table[cur];
717
718 cmp = func(ct, item);
719 if (cmp == 0)
720 break ;
721 else if (cmp < 0)
722 inf = cur + 1;
723 else if (cmp > 0)
724 {
725 if (cur > 0)
726 sup = cur - 1;
727 else
728 break;
729 }
730 else
731 break;
732 }
733
734 /* If at the beginning of the table and cmp < 0,
735 * insert just after the head */
736 if (cur == 0 && cmp > 0)
737 {
738 ct = eina_inlist_prepend_relative(list, item, ct);
739 _eina_inlist_sorted_state_insert(state, 0, 0);
740 return ct;
741 }
742
743 /* If at the end of the table and cmp >= 0,
744 * just append the item to the list */
745 if (cmp < 0 && ct == list->last)
746 {
747 ct = eina_inlist_append(list, item);
748 _eina_inlist_sorted_state_insert(state, state->jump_limit - 1, 1);
749 return ct;
750 }
751
752 /*
753 * Now do a dychotomic search between two entries inside the jump_table
754 */
755 cur *= state->jump_div;
756 inf = cur - state->jump_div - 1;
757 sup = cur + state->jump_div + 1;
758
759 if (sup > count - 1) sup = count - 1;
760 if (inf < 0) inf = 0;
761
762 while (inf <= sup)
763 {
764 int tmp = cur;
765
766 cur = inf + ((sup - inf) >> 1);
767 if (tmp < cur)
768 for (; tmp != cur; tmp++, ct = ct->next);
769 else if (tmp > cur)
770 for (; tmp != cur; tmp--, ct = ct->prev);
771
772 cmp = func(ct, item);
773 if (cmp == 0)
774 break ;
775 else if (cmp < 0)
776 inf = cur + 1;
777 else if (cmp > 0)
778 {
779 if (cur > 0)
780 sup = cur - 1;
781 else
782 break;
783 }
784 else
785 break;
786 }
787
788 if (cmp <= 0)
789 {
790 cur++;
791
792 ct = eina_inlist_append_relative(list, item, ct);
793 }
794 else
795 {
796 ct = eina_inlist_prepend_relative(list, item, ct);
797 }
798
799 head = cur / state->jump_div;
800 offset = cur % state->jump_div;
801
802 _eina_inlist_sorted_state_insert(state, head, offset);
803 return ct;
804}
805
806EAPI Eina_Inlist *
807eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func)
808{
809 unsigned int i = 0;
810 unsigned int n = 0;
811 Eina_Inlist *tail = head;
812 Eina_Inlist *unsort = NULL;
813 Eina_Inlist *stack[EINA_INLIST_SORT_STACK_SIZE];
814
815 EINA_SAFETY_ON_NULL_RETURN_VAL(head, NULL);
816 EINA_SAFETY_ON_NULL_RETURN_VAL(func, head);
817
818 while (tail)
819 {
820 unsigned int idx, tmp;
821
822 Eina_Inlist *a = tail;
823 Eina_Inlist *b = tail->next;
824
825 if (!b)
826 {
827 stack[i++] = a;
828 break;
829 }
830
831 tail = b->next;
832
833 if (func(a, b) < 0)
834 ((stack[i++] = a)->next = b)->next = 0;
835 else
836 ((stack[i++] = b)->next = a)->next = 0;
837
838 tmp = n++;
839 for (idx = n ^ tmp; idx &= idx - 1; i--)
840 stack[i - 2] = eina_inlist_sort_merge(stack[i - 2], stack[i - 1], func);
841 }
842
843 while (i-- > 1)
844 stack[i - 1] = eina_inlist_sort_merge(stack[i - 1], stack[i], func);
845
846 head = stack[0];
847 tail = eina_inlist_sort_rebuild_prev(head);
848
849 if (unsort)
850 {
851 tail->next = unsort;
852 unsort->prev = tail;
853 }
854
855 head->last = tail;
856
857 return head;
858
859}
860
861EAPI Eina_Iterator *
862eina_inlist_iterator_new(const Eina_Inlist *list)
863{
864 Eina_Iterator_Inlist *it;
865
866 eina_error_set(0);
867 it = calloc(1, sizeof (Eina_Iterator_Inlist));
868 if (!it)
869 {
870 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
871 return NULL;
872 }
873
874 it->head = list;
875 it->current = list;
876
877 it->iterator.version = EINA_ITERATOR_VERSION;
878 it->iterator.next = FUNC_ITERATOR_NEXT(eina_inlist_iterator_next);
879 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
880 eina_inlist_iterator_get_container);
881 it->iterator.free = FUNC_ITERATOR_FREE(eina_inlist_iterator_free);
882
883 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
884
885 return &it->iterator;
886}
887
888EAPI Eina_Accessor *
889eina_inlist_accessor_new(const Eina_Inlist *list)
890{
891 Eina_Accessor_Inlist *ac;
892
893 eina_error_set(0);
894 ac = calloc(1, sizeof (Eina_Accessor_Inlist));
895 if (!ac)
896 {
897 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
898 return NULL;
899 }
900
901 ac->head = list;
902 ac->current = list;
903 ac->index = 0;
904
905 ac->accessor.version = EINA_ACCESSOR_VERSION;
906 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_inlist_accessor_get_at);
907 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
908 eina_inlist_accessor_get_container);
909 ac->accessor.free = FUNC_ACCESSOR_FREE(eina_inlist_accessor_free);
910
911 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
912
913 return &ac->accessor;
914}
diff --git a/libraries/eina/src/lib/eina_iterator.c b/libraries/eina/src/lib/eina_iterator.c
deleted file mode 100644
index 0721066..0000000
--- a/libraries/eina/src/lib/eina_iterator.c
+++ /dev/null
@@ -1,172 +0,0 @@
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
deleted file mode 100644
index b1e62b7..0000000
--- a/libraries/eina/src/lib/eina_lalloc.c
+++ /dev/null
@@ -1,158 +0,0 @@
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
deleted file mode 100644
index c85855f..0000000
--- a/libraries/eina/src/lib/eina_list.c
+++ /dev/null
@@ -1,1491 +0,0 @@
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 limit, 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 limit, sort the whole list */
1044 if ((limit == 0) ||
1045 (limit > list->accounting->count))
1046 limit = list->accounting->count;
1047
1048 if (limit != list->accounting->count)
1049 {
1050 unsort = eina_list_nth_list(list, limit);
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 next->accounting->count = 0;
1176 *right = next;
1177
1178 itr = next;
1179 do
1180 {
1181 itr->accounting = next->accounting;
1182 next->accounting->count++;
1183 itr = itr->next;
1184 }
1185 while (itr);
1186
1187 relative->next = NULL;
1188 list->accounting->last = relative;
1189 list->accounting->count = list->accounting->count - next->accounting->count;
1190
1191 return list;
1192}
1193
1194EAPI Eina_List *
1195eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
1196{
1197 Eina_List *ret;
1198 Eina_List *current;
1199
1200 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1201
1202 if (!left)
1203 return right;
1204
1205 if (!right)
1206 return left;
1207
1208 if (func(left->data, right->data) < 0)
1209 {
1210 ret = left;
1211 current = left;
1212 left = left->next;
1213 ret->accounting->count += right->accounting->count;
1214
1215 _eina_list_mempool_accounting_free(right->accounting);
1216 }
1217 else
1218 {
1219 ret = right;
1220 current = right;
1221 right = right->next;
1222 ret->accounting->count += left->accounting->count;
1223
1224 _eina_list_mempool_accounting_free(left->accounting);
1225 }
1226
1227 while (left && right)
1228 {
1229 if (func(left->data, right->data) < 0)
1230 {
1231 current->next = left;
1232 left->prev = current;
1233 left = left->next;
1234 }
1235 else
1236 {
1237 current->next = right;
1238 right->prev = current;
1239 right = right->next;
1240 }
1241
1242 current = current->next;
1243 current->accounting = ret->accounting;
1244 }
1245
1246 if (left)
1247 {
1248 current->next = left;
1249 left->prev = current;
1250 current->accounting = ret->accounting;
1251 }
1252
1253 if (right)
1254 {
1255 current->next = right;
1256 right->prev = current;
1257 current->accounting = ret->accounting;
1258 }
1259
1260 while (current->next)
1261 {
1262 current = current->next;
1263 current->accounting = ret->accounting;
1264 }
1265
1266 ret->accounting->last = current;
1267
1268 return ret;
1269}
1270
1271EAPI Eina_List *
1272eina_list_search_sorted_near_list(const Eina_List *list,
1273 Eina_Compare_Cb func,
1274 const void *data,
1275 int *result_cmp)
1276{
1277 const Eina_List *ct;
1278 unsigned int inf, sup, cur;
1279 int cmp;
1280
1281 if (!list)
1282 {
1283 if (result_cmp)
1284 *result_cmp = 0;
1285
1286 return NULL;
1287 }
1288
1289 if (list->accounting->count == 1)
1290 {
1291 if (result_cmp)
1292 *result_cmp = func(list->data, data);
1293
1294 return (Eina_List *)list;
1295 }
1296
1297 /* list walk is expensive, do quick check: tail */
1298 ct = list->accounting->last;
1299 cmp = func(ct->data, data);
1300 if (cmp <= 0)
1301 goto end;
1302
1303 /* list walk is expensive, do quick check: head */
1304 ct = list;
1305 cmp = func(ct->data, data);
1306 if (cmp >= 0)
1307 goto end;
1308
1309 /* inclusive bounds */
1310 inf = 1;
1311 sup = list->accounting->count - 2;
1312 cur = 1;
1313 ct = list->next;
1314
1315 /* no loop, just compare if comparison value is important to caller */
1316 if (inf > sup)
1317 {
1318 if (result_cmp)
1319 cmp = func(ct->data, data);
1320
1321 goto end;
1322 }
1323
1324 while (inf <= sup)
1325 {
1326 unsigned int tmp = cur;
1327 cur = inf + ((sup - inf) >> 1);
1328 if (tmp < cur)
1329 for (; tmp != cur; tmp++, ct = ct->next) ;
1330 else if (tmp > cur)
1331 for (; tmp != cur; tmp--, ct = ct->prev) ;
1332
1333 cmp = func(ct->data, data);
1334 if (cmp == 0)
1335 break;
1336 else if (cmp < 0)
1337 inf = cur + 1;
1338 else if (cmp > 0)
1339 {
1340 if (cur > 0)
1341 sup = cur - 1;
1342 else
1343 break;
1344 }
1345 else
1346 break;
1347 }
1348
1349end:
1350 if (result_cmp)
1351 *result_cmp = cmp;
1352
1353 return (Eina_List *)ct;
1354}
1355
1356EAPI Eina_List *
1357eina_list_search_sorted_list(const Eina_List *list,
1358 Eina_Compare_Cb func,
1359 const void *data)
1360{
1361 Eina_List *lnear;
1362 int cmp;
1363
1364 lnear = eina_list_search_sorted_near_list(list, func, data, &cmp);
1365 if (!lnear)
1366 return NULL;
1367
1368 if (cmp == 0)
1369 return lnear;
1370
1371 return NULL;
1372}
1373
1374
1375EAPI void *
1376eina_list_search_sorted(const Eina_List *list,
1377 Eina_Compare_Cb func,
1378 const void *data)
1379{
1380 return eina_list_data_get(eina_list_search_sorted_list(list, func, data));
1381}
1382
1383EAPI Eina_List *
1384eina_list_search_unsorted_list(const Eina_List *list,
1385 Eina_Compare_Cb func,
1386 const void *data)
1387{
1388 const Eina_List *l;
1389 void *d;
1390
1391 EINA_LIST_FOREACH(list, l, d)
1392 {
1393 if (!func(d, data))
1394 return (Eina_List *)l;
1395 }
1396 return NULL;
1397}
1398
1399EAPI void *
1400eina_list_search_unsorted(const Eina_List *list,
1401 Eina_Compare_Cb func,
1402 const void *data)
1403{
1404 return eina_list_data_get(eina_list_search_unsorted_list(list, func, data));
1405}
1406
1407
1408EAPI Eina_Iterator *
1409eina_list_iterator_new(const Eina_List *list)
1410{
1411 Eina_Iterator_List *it;
1412
1413 eina_error_set(0);
1414 it = calloc(1, sizeof (Eina_Iterator_List));
1415 if (!it)
1416 {
1417 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1418 return NULL;
1419 }
1420
1421 EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR);
1422 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1423
1424 it->head = list;
1425 it->current = list;
1426
1427 it->iterator.version = EINA_ITERATOR_VERSION;
1428 it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_next);
1429 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1430 eina_list_iterator_get_container);
1431 it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free);
1432
1433 return &it->iterator;
1434}
1435
1436EAPI Eina_Iterator *
1437eina_list_iterator_reversed_new(const Eina_List *list)
1438{
1439 Eina_Iterator_List *it;
1440
1441 eina_error_set(0);
1442 it = calloc(1, sizeof (Eina_Iterator_List));
1443 if (!it)
1444 {
1445 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1446 return NULL;
1447 }
1448
1449 EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR);
1450 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1451
1452 it->head = eina_list_last(list);
1453 it->current = it->head;
1454
1455 it->iterator.version = EINA_ITERATOR_VERSION;
1456 it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_prev);
1457 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1458 eina_list_iterator_get_container);
1459 it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free);
1460
1461 return &it->iterator;
1462}
1463
1464EAPI Eina_Accessor *
1465eina_list_accessor_new(const Eina_List *list)
1466{
1467 Eina_Accessor_List *ac;
1468
1469 eina_error_set(0);
1470 ac = calloc(1, sizeof (Eina_Accessor_List));
1471 if (!ac)
1472 {
1473 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1474 return NULL;
1475 }
1476
1477 EINA_MAGIC_SET(ac, EINA_MAGIC_LIST_ACCESSOR);
1478 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
1479
1480 ac->head = list;
1481 ac->current = list;
1482 ac->index = 0;
1483
1484 ac->accessor.version = EINA_ACCESSOR_VERSION;
1485 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_list_accessor_get_at);
1486 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
1487 eina_list_accessor_get_container);
1488 ac->accessor.free = FUNC_ACCESSOR_FREE(eina_list_accessor_free);
1489
1490 return &ac->accessor;
1491}
diff --git a/libraries/eina/src/lib/eina_log.c b/libraries/eina/src/lib/eina_log.c
deleted file mode 100644
index 4e2bb6d..0000000
--- a/libraries/eina/src/lib/eina_log.c
+++ /dev/null
@@ -1,1993 +0,0 @@
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#ifdef EINA_ENABLE_LOG
75
76// Structure for storing domain level settings passed from the command line
77// that will be matched with application-defined domains.
78typedef struct _Eina_Log_Domain_Level_Pending Eina_Log_Domain_Level_Pending;
79struct _Eina_Log_Domain_Level_Pending
80{
81 EINA_INLIST;
82 unsigned int level;
83 size_t namelen;
84 char name[];
85};
86
87/*
88 * List of levels for domains set by the user before the domains are registered,
89 * updates the domain levels on the first log and clears itself.
90 */
91static Eina_Inlist *_pending_list = NULL;
92static Eina_Inlist *_glob_list = NULL;
93
94// Disable color flag (can be changed through the env var
95// EINA_LOG_ENV_COLOR_DISABLE).
96static Eina_Bool _disable_color = EINA_FALSE;
97static Eina_Bool _disable_file = EINA_FALSE;
98static Eina_Bool _disable_function = EINA_FALSE;
99static Eina_Bool _abort_on_critical = EINA_FALSE;
100static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL;
101
102#ifdef EFL_HAVE_THREADS
103
104static Eina_Bool _threads_enabled = EINA_FALSE;
105static Eina_Bool _threads_inited = EINA_FALSE;
106
107# ifdef EFL_HAVE_POSIX_THREADS
108
109typedef pthread_t Thread;
110
111static pthread_t _main_thread;
112
113# define SELF() pthread_self()
114# define IS_MAIN(t) pthread_equal(t, _main_thread)
115# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t))
116# define CHECK_MAIN(...) \
117 do { \
118 if (!IS_MAIN(pthread_self())) { \
119 fprintf(stderr, \
120 "ERR: not main thread! current=%lu, main=%lu\n", \
121 (unsigned long)pthread_self(), \
122 (unsigned long)_main_thread); \
123 return __VA_ARGS__; \
124 } \
125 } while (0)
126
127# ifdef EFL_HAVE_POSIX_THREADS_SPINLOCK
128
129static pthread_spinlock_t _log_lock;
130
131static Eina_Bool _eina_log_spinlock_init(void)
132{
133 if (pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE) == 0)
134 return EINA_TRUE;
135
136 fprintf(stderr,
137 "ERROR: pthread_spin_init(%p, PTHREAD_PROCESS_PRIVATE): %s\n",
138 &_log_lock, strerror(errno));
139 return EINA_FALSE;
140}
141
142# define LOG_LOCK() \
143 if (_threads_enabled) \
144 do { \
145 if (0) { \
146 fprintf(stderr, "+++LOG LOG_LOCKED! [%s, %lu]\n", \
147 __FUNCTION__, (unsigned long)pthread_self()); } \
148 if (EINA_UNLIKELY(_threads_enabled)) { \
149 pthread_spin_lock(&_log_lock); } \
150 } while (0)
151# define LOG_UNLOCK() \
152 if (_threads_enabled) \
153 do { \
154 if (EINA_UNLIKELY(_threads_enabled)) { \
155 pthread_spin_unlock(&_log_lock); } \
156 if (0) { \
157 fprintf(stderr, \
158 "---LOG LOG_UNLOCKED! [%s, %lu]\n", \
159 __FUNCTION__, (unsigned long)pthread_self()); } \
160 } while (0)
161# define INIT() _eina_log_spinlock_init()
162# define SHUTDOWN() pthread_spin_destroy(&_log_lock)
163
164# else /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */
165
166static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER;
167# define LOG_LOCK() if(_threads_enabled) {pthread_mutex_lock(&_log_mutex); }
168# define LOG_UNLOCK() if(_threads_enabled) {pthread_mutex_unlock(&_log_mutex); }
169# define INIT() (1)
170# define SHUTDOWN() do {} while (0)
171
172# endif /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */
173
174# else /* EFL_HAVE_WIN32_THREADS */
175
176typedef DWORD Thread;
177
178static DWORD _main_thread;
179
180# define SELF() GetCurrentThreadId()
181# define IS_MAIN(t) (t == _main_thread)
182# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t))
183# define CHECK_MAIN(...) \
184 do { \
185 if (!IS_MAIN(GetCurrentThreadId())) { \
186 fprintf(stderr, \
187 "ERR: not main thread! current=%lu, main=%lu\n", \
188 GetCurrentThreadId(), _main_thread); \
189 return __VA_ARGS__; \
190 } \
191 } while (0)
192
193static HANDLE _log_mutex = NULL;
194
195# define LOG_LOCK() if(_threads_enabled) WaitForSingleObject(_log_mutex, INFINITE)
196# define LOG_UNLOCK() if(_threads_enabled) ReleaseMutex(_log_mutex)
197# define INIT() ((_log_mutex = CreateMutex(NULL, FALSE, NULL)) ? 1 : 0)
198# define SHUTDOWN() if (_log_mutex) CloseHandle(_log_mutex)
199
200# endif /* EFL_HAVE_WIN32_THREADS */
201
202#else /* ! EFL_HAVE_THREADS */
203
204# define LOG_LOCK() do {} while (0)
205# define LOG_UNLOCK() do {} while (0)
206# define IS_MAIN(t) (1)
207# define IS_OTHER(t) (0)
208# define CHECK_MAIN(...) do {} while (0)
209# define INIT() (1)
210# define SHUTDOWN() do {} while (0)
211
212#endif /* ! EFL_HAVE_THREADS */
213
214
215// List of domains registered
216static Eina_Log_Domain *_log_domains = NULL;
217static unsigned int _log_domains_count = 0;
218static size_t _log_domains_allocated = 0;
219
220// Default function for printing on domains
221static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stderr;
222static void *_print_cb_data = NULL;
223
224#ifdef DEBUG
225static Eina_Log_Level _log_level = EINA_LOG_LEVEL_DBG;
226#elif DEBUG_CRITICAL
227static Eina_Log_Level _log_level = EINA_LOG_LEVEL_CRITICAL;
228#else
229static Eina_Log_Level _log_level = EINA_LOG_LEVEL_ERR;
230#endif
231
232/* NOTE: if you change this, also change:
233 * eina_log_print_level_name_get()
234 * eina_log_print_level_name_color_get()
235 */
236static const char *_names[] = {
237 "CRI",
238 "ERR",
239 "WRN",
240 "INF",
241 "DBG",
242};
243
244#ifdef _WIN32
245static int
246eina_log_win32_color_get(const char *domain_str)
247{
248 char *str;
249 char *tmp;
250 char *tmp2;
251 int code = -1;
252 int lighted = 0;
253 int ret = 0;
254
255 str = strdup(domain_str);
256 if (!str)
257 return 0;
258
259 /* this should not append */
260 if (str[0] != '\033')
261 {
262 free(str);
263 return 0;
264 }
265
266 /* we skip the first char and the [ */
267 tmp = tmp2 = str + 2;
268 while (*tmp != 'm')
269 {
270 if (*tmp == ';')
271 {
272 *tmp = '\0';
273 code = atol(tmp2);
274 tmp++;
275 tmp2 = tmp;
276 }
277
278 tmp++;
279 }
280 *tmp = '\0';
281 if (code < 0)
282 code = atol(tmp2);
283 else
284 lighted = atol(tmp2);
285
286 free(str);
287
288 if (code < lighted)
289 {
290 int c;
291
292 c = code;
293 code = lighted;
294 lighted = c;
295 }
296
297 if (lighted)
298 ret = FOREGROUND_INTENSITY;
299
300 if (code == 31)
301 ret |= FOREGROUND_RED;
302 else if (code == 32)
303 ret |= FOREGROUND_GREEN;
304 else if (code == 33)
305 ret |= FOREGROUND_RED | FOREGROUND_GREEN;
306 else if (code == 34)
307 ret |= FOREGROUND_BLUE;
308 else if (code == 36)
309 ret |= FOREGROUND_GREEN | FOREGROUND_BLUE;
310 else if (code == 37)
311 ret |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
312
313 return ret;
314}
315#endif
316
317static inline unsigned int
318eina_log_pid_get(void)
319{
320 return (unsigned int)getpid();
321}
322
323static inline void
324eina_log_print_level_name_get(int level, const char **p_name)
325{
326 static char buf[4];
327 /* NOTE: if you change this, also change
328 * eina_log_print_level_name_color_get()
329 * eina_log_level_name_get() (at eina_inline_log.x)
330 */
331 if (EINA_UNLIKELY(level < 0))
332 {
333 snprintf(buf, sizeof(buf), "%03d", level);
334 *p_name = buf;
335 }
336 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
337 {
338 snprintf(buf, sizeof(buf), "%03d", level);
339 *p_name = buf;
340 }
341 else
342 *p_name = _names[level];
343}
344
345#ifdef _WIN32
346static inline void
347eina_log_print_level_name_color_get(int level,
348 const char **p_name,
349 int *p_color)
350{
351 static char buf[4];
352 /* NOTE: if you change this, also change:
353 * eina_log_print_level_name_get()
354 */
355 if (EINA_UNLIKELY(level < 0))
356 {
357 snprintf(buf, sizeof(buf), "%03d", level);
358 *p_name = buf;
359 }
360 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
361 {
362 snprintf(buf, sizeof(buf), "%03d", level);
363 *p_name = buf;
364 }
365 else
366 *p_name = _names[level];
367
368 *p_color = eina_log_win32_color_get(eina_log_level_color_get(level));
369}
370#else
371static inline void
372eina_log_print_level_name_color_get(int level,
373 const char **p_name,
374 const char **p_color)
375{
376 static char buf[4];
377 /* NOTE: if you change this, also change:
378 * eina_log_print_level_name_get()
379 */
380 if (EINA_UNLIKELY(level < 0))
381 {
382 snprintf(buf, sizeof(buf), "%03d", level);
383 *p_name = buf;
384 }
385 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
386 {
387 snprintf(buf, sizeof(buf), "%03d", level);
388 *p_name = buf;
389 }
390 else
391 *p_name = _names[level];
392
393 *p_color = eina_log_level_color_get(level);
394}
395#endif
396
397#define DECLARE_LEVEL_NAME(level) const char *name; \
398 eina_log_print_level_name_get(level, &name)
399#ifdef _WIN32
400# define DECLARE_LEVEL_NAME_COLOR(level) const char *name; int color; \
401 eina_log_print_level_name_color_get(level, &name, &color)
402#else
403# define DECLARE_LEVEL_NAME_COLOR(level) const char *name, *color; \
404 eina_log_print_level_name_color_get(level, &name, &color)
405#endif
406
407/** No threads, No color */
408static void
409eina_log_print_prefix_NOthreads_NOcolor_file_func(FILE *fp,
410 const Eina_Log_Domain *d,
411 Eina_Log_Level level,
412 const char *file,
413 const char *fnc,
414 int line)
415{
416 DECLARE_LEVEL_NAME(level);
417 fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(),
418 d->domain_str, file, line, fnc);
419}
420
421static void
422eina_log_print_prefix_NOthreads_NOcolor_NOfile_func(FILE *fp,
423 const Eina_Log_Domain *d,
424 Eina_Log_Level level,
425 const char *file __UNUSED__,
426 const char *fnc,
427 int line __UNUSED__)
428{
429 DECLARE_LEVEL_NAME(level);
430 fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str,
431 fnc);
432}
433
434static void
435eina_log_print_prefix_NOthreads_NOcolor_file_NOfunc(FILE *fp,
436 const Eina_Log_Domain *d,
437 Eina_Log_Level level,
438 const char *file,
439 const char *fnc __UNUSED__,
440 int line)
441{
442 DECLARE_LEVEL_NAME(level);
443 fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str,
444 file, line);
445}
446
447/* No threads, color */
448static void
449eina_log_print_prefix_NOthreads_color_file_func(FILE *fp,
450 const Eina_Log_Domain *d,
451 Eina_Log_Level level,
452 const char *file,
453 const char *fnc,
454 int line)
455{
456 DECLARE_LEVEL_NAME_COLOR(level);
457#ifdef _WIN32_WCE
458 fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(),
459 d->domain_str, file, line, fnc);
460#elif _WIN32
461 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
462 color);
463 fprintf(fp, "%s", name);
464 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
465 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
466 fprintf(fp, ":");
467 SetConsoleTextAttribute(GetStdHandle(
468 STD_OUTPUT_HANDLE),
469 eina_log_win32_color_get(d->domain_str));
470 fprintf(fp, "%s", d->name);
471 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
472 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
473 fprintf(fp, " %s:%d ", file, line);
474 SetConsoleTextAttribute(GetStdHandle(
475 STD_OUTPUT_HANDLE),
476 FOREGROUND_INTENSITY | FOREGROUND_RED |
477 FOREGROUND_GREEN | FOREGROUND_BLUE);
478 fprintf(fp, "%s()", fnc);
479 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
480 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
481 fprintf(fp, " ");
482#else
483 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d "
484 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
485 color, name, eina_log_pid_get(), d->domain_str, file, line, fnc);
486#endif
487}
488
489static void
490eina_log_print_prefix_NOthreads_color_NOfile_func(FILE *fp,
491 const Eina_Log_Domain *d,
492 Eina_Log_Level level,
493 const char *file __UNUSED__,
494 const char *fnc,
495 int line __UNUSED__)
496{
497 DECLARE_LEVEL_NAME_COLOR(level);
498#ifdef _WIN32_WCE
499 fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str,
500 fnc);
501#elif _WIN32
502 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
503 color);
504 fprintf(fp, "%s", name);
505 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
506 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
507 fprintf(fp, ":");
508 SetConsoleTextAttribute(GetStdHandle(
509 STD_OUTPUT_HANDLE),
510 eina_log_win32_color_get(d->domain_str));
511 fprintf(fp, "%s", d->name);
512 SetConsoleTextAttribute(GetStdHandle(
513 STD_OUTPUT_HANDLE),
514 FOREGROUND_INTENSITY | FOREGROUND_RED |
515 FOREGROUND_GREEN | FOREGROUND_BLUE);
516 fprintf(fp, "%s()", fnc);
517 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
518 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
519 fprintf(fp, " ");
520#else
521 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s "
522 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
523 color, name, eina_log_pid_get(), d->domain_str, fnc);
524#endif
525}
526
527static void
528eina_log_print_prefix_NOthreads_color_file_NOfunc(FILE *fp,
529 const Eina_Log_Domain *d,
530 Eina_Log_Level level,
531 const char *file,
532 const char *fnc __UNUSED__,
533 int line)
534{
535 DECLARE_LEVEL_NAME_COLOR(level);
536#ifdef _WIN32_WCE
537 fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str,
538 file, line);
539#elif _WIN32
540 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
541 color);
542 fprintf(fp, "%s", name);
543 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
544 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
545 fprintf(fp, ":");
546 SetConsoleTextAttribute(GetStdHandle(
547 STD_OUTPUT_HANDLE),
548 eina_log_win32_color_get(d->domain_str));
549 fprintf(fp, "%s", d->name);
550 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
551 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
552 fprintf(fp, " %s:%d ", file, line);
553#else
554 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d ",
555 color, name, eina_log_pid_get(), d->domain_str, file, line);
556#endif
557}
558
559/** threads, No color */
560#ifdef EFL_HAVE_THREADS
561static void
562eina_log_print_prefix_threads_NOcolor_file_func(FILE *fp,
563 const Eina_Log_Domain *d,
564 Eina_Log_Level level,
565 const char *file,
566 const char *fnc,
567 int line)
568{
569 Thread cur;
570
571 DECLARE_LEVEL_NAME(level);
572 cur = SELF();
573 if (IS_OTHER(cur))
574 {
575 fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d %s() ",
576 name, eina_log_pid_get(), d->domain_str,
577 (unsigned long)cur, file, line, fnc);
578 return;
579 }
580 fprintf(fp, "%s<%u>:%s %s:%d %s() ",
581 name, eina_log_pid_get(), d->domain_str, file, line, fnc);
582}
583
584static void
585eina_log_print_prefix_threads_NOcolor_NOfile_func(FILE *fp,
586 const Eina_Log_Domain *d,
587 Eina_Log_Level level,
588 const char *file __UNUSED__,
589 const char *fnc,
590 int line __UNUSED__)
591{
592 Thread cur;
593
594 DECLARE_LEVEL_NAME(level);
595 cur = SELF();
596 if (IS_OTHER(cur))
597 {
598 fprintf(fp, "%s<%u>:%s[T:%lu] %s() ",
599 name, eina_log_pid_get(), d->domain_str,
600 (unsigned long)cur, fnc);
601 return;
602 }
603 fprintf(fp, "%s<%u>:%s %s() ",
604 name, eina_log_pid_get(), d->domain_str, fnc);
605}
606
607static void
608eina_log_print_prefix_threads_NOcolor_file_NOfunc(FILE *fp,
609 const Eina_Log_Domain *d,
610 Eina_Log_Level level,
611 const char *file,
612 const char *fnc __UNUSED__,
613 int line)
614{
615 Thread cur;
616
617 DECLARE_LEVEL_NAME(level);
618 cur = SELF();
619 if (IS_OTHER(cur))
620 {
621 fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d ",
622 name, eina_log_pid_get(), d->domain_str, (unsigned long)cur,
623 file, line);
624 return;
625 }
626
627 fprintf(fp, "%s<%u>:%s %s:%d ",
628 name, eina_log_pid_get(), d->domain_str, file, line);
629}
630
631/* threads, color */
632static void
633eina_log_print_prefix_threads_color_file_func(FILE *fp,
634 const Eina_Log_Domain *d,
635 Eina_Log_Level level,
636 const char *file,
637 const char *fnc,
638 int line)
639{
640 Thread cur;
641
642 DECLARE_LEVEL_NAME_COLOR(level);
643 cur = SELF();
644 if (IS_OTHER(cur))
645 {
646# ifdef _WIN32
647 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
648 color);
649 fprintf(fp, "%s", name);
650 SetConsoleTextAttribute(GetStdHandle(
651 STD_OUTPUT_HANDLE),
652 FOREGROUND_RED | FOREGROUND_GREEN |
653 FOREGROUND_BLUE);
654 fprintf(fp, ":");
655 SetConsoleTextAttribute(GetStdHandle(
656 STD_OUTPUT_HANDLE),
657 eina_log_win32_color_get(d->domain_str));
658 fprintf(fp, "%s[T:", d->name);
659 SetConsoleTextAttribute(GetStdHandle(
660 STD_OUTPUT_HANDLE),
661 FOREGROUND_RED | FOREGROUND_GREEN |
662 FOREGROUND_BLUE);
663 fprintf(fp, "[T:");
664 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
665 FOREGROUND_GREEN | FOREGROUND_BLUE);
666 fprintf(fp, "%lu", (unsigned long)cur);
667 SetConsoleTextAttribute(GetStdHandle(
668 STD_OUTPUT_HANDLE),
669 FOREGROUND_RED | FOREGROUND_GREEN |
670 FOREGROUND_BLUE);
671 fprintf(fp, "] %s:%d ", file, line);
672 SetConsoleTextAttribute(GetStdHandle(
673 STD_OUTPUT_HANDLE),
674 FOREGROUND_INTENSITY | FOREGROUND_RED |
675 FOREGROUND_GREEN | FOREGROUND_BLUE);
676 fprintf(fp, "%s()", fnc);
677 SetConsoleTextAttribute(GetStdHandle(
678 STD_OUTPUT_HANDLE),
679 FOREGROUND_RED | FOREGROUND_GREEN |
680 FOREGROUND_BLUE);
681 fprintf(fp, " ");
682# else
683 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
684 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d "
685 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
686 color, name, eina_log_pid_get() ,d->domain_str,
687 (unsigned long)cur, file, line, fnc);
688# endif
689 return;
690 }
691
692# ifdef _WIN32
693 eina_log_print_prefix_NOthreads_color_file_func(fp,
694 d,
695 level,
696 file,
697 fnc,
698 line);
699# else
700 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d "
701 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
702 color, name, eina_log_pid_get(), d->domain_str, file, line, fnc);
703# endif
704}
705
706static void
707eina_log_print_prefix_threads_color_NOfile_func(FILE *fp,
708 const Eina_Log_Domain *d,
709 Eina_Log_Level level,
710 const char *file __UNUSED__,
711 const char *fnc,
712 int line __UNUSED__)
713{
714 Thread cur;
715
716 DECLARE_LEVEL_NAME_COLOR(level);
717 cur = SELF();
718 if (IS_OTHER(cur))
719 {
720# ifdef _WIN32
721 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
722 color);
723 fprintf(fp, "%s", name);
724 SetConsoleTextAttribute(GetStdHandle(
725 STD_OUTPUT_HANDLE),
726 FOREGROUND_RED | FOREGROUND_GREEN |
727 FOREGROUND_BLUE);
728 fprintf(fp, ":");
729 SetConsoleTextAttribute(GetStdHandle(
730 STD_OUTPUT_HANDLE),
731 eina_log_win32_color_get(d->domain_str));
732 fprintf(fp, "%s[T:", d->name);
733 SetConsoleTextAttribute(GetStdHandle(
734 STD_OUTPUT_HANDLE),
735 FOREGROUND_RED | FOREGROUND_GREEN |
736 FOREGROUND_BLUE);
737 fprintf(fp, "[T:");
738 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
739 FOREGROUND_GREEN | FOREGROUND_BLUE);
740 fprintf(fp, "%lu", (unsigned long)cur);
741 SetConsoleTextAttribute(GetStdHandle(
742 STD_OUTPUT_HANDLE),
743 FOREGROUND_INTENSITY | FOREGROUND_RED |
744 FOREGROUND_GREEN | FOREGROUND_BLUE);
745 fprintf(fp, "%s()", fnc);
746 SetConsoleTextAttribute(GetStdHandle(
747 STD_OUTPUT_HANDLE),
748 FOREGROUND_RED | FOREGROUND_GREEN |
749 FOREGROUND_BLUE);
750 fprintf(fp, " ");
751# else
752 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
753 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] "
754 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
755 color, name, eina_log_pid_get(), d->domain_str,
756 (unsigned long)cur, fnc);
757# endif
758 return;
759 }
760
761# ifdef _WIN32
762 eina_log_print_prefix_NOthreads_color_NOfile_func(fp,
763 d,
764 level,
765 file,
766 fnc,
767 line);
768# else
769 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s "
770 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
771 color, name, eina_log_pid_get(), d->domain_str, fnc);
772# endif
773}
774
775static void
776eina_log_print_prefix_threads_color_file_NOfunc(FILE *fp,
777 const Eina_Log_Domain *d,
778 Eina_Log_Level level,
779 const char *file,
780 const char *fnc __UNUSED__,
781 int line)
782{
783 Thread cur;
784
785 DECLARE_LEVEL_NAME_COLOR(level);
786 cur = SELF();
787 if (IS_OTHER(cur))
788 {
789# ifdef _WIN32
790 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
791 color);
792 fprintf(fp, "%s", name);
793 SetConsoleTextAttribute(GetStdHandle(
794 STD_OUTPUT_HANDLE),
795 FOREGROUND_RED | FOREGROUND_GREEN |
796 FOREGROUND_BLUE);
797 fprintf(fp, ":");
798 SetConsoleTextAttribute(GetStdHandle(
799 STD_OUTPUT_HANDLE),
800 eina_log_win32_color_get(d->domain_str));
801 fprintf(fp, "%s[T:", d->name);
802 SetConsoleTextAttribute(GetStdHandle(
803 STD_OUTPUT_HANDLE),
804 FOREGROUND_RED | FOREGROUND_GREEN |
805 FOREGROUND_BLUE);
806 fprintf(fp, "[T:");
807 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
808 FOREGROUND_GREEN | FOREGROUND_BLUE);
809 fprintf(fp, "%lu", (unsigned long)cur);
810 SetConsoleTextAttribute(GetStdHandle(
811 STD_OUTPUT_HANDLE),
812 FOREGROUND_RED | FOREGROUND_GREEN |
813 FOREGROUND_BLUE);
814 fprintf(fp, "] %s:%d ", file, line);
815# else
816 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
817 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d ",
818 color, name, eina_log_pid_get(), d->domain_str,
819 (unsigned long)cur, file, line);
820# endif
821 return;
822 }
823
824# ifdef _WIN32
825 eina_log_print_prefix_NOthreads_color_file_NOfunc(fp,
826 d,
827 level,
828 file,
829 fnc,
830 line);
831# else
832 fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d ",
833 color, name, d->domain_str, file, line);
834# endif
835}
836#endif /* EFL_HAVE_THREADS */
837
838static void (*_eina_log_print_prefix)(FILE *fp, const Eina_Log_Domain *d,
839 Eina_Log_Level level, const char *file,
840 const char *fnc,
841 int line) =
842 eina_log_print_prefix_NOthreads_color_file_func;
843
844static inline void
845eina_log_print_prefix_update(void)
846{
847 if (_disable_file && _disable_function)
848 {
849 fprintf(stderr, "ERROR: cannot have " EINA_LOG_ENV_FILE_DISABLE " and "
850 EINA_LOG_ENV_FUNCTION_DISABLE " set at the same time, will "
851 "just disable function.\n");
852 _disable_file = 0;
853 }
854
855#define S(NOthread, NOcolor, NOfile, NOfunc) \
856 _eina_log_print_prefix = \
857 eina_log_print_prefix_ ## NOthread ## threads_ ## NOcolor ## color_ ## \
858 NOfile \
859 ## file_ ## NOfunc ## func
860
861#ifdef EFL_HAVE_THREADS
862 if (_threads_enabled)
863 {
864 if (_disable_color)
865 {
866 if (_disable_file)
867 S(,NO,NO,);
868 else if (_disable_function)
869 S(,NO,,NO);
870 else
871 S(,NO,,);
872 }
873 else
874 {
875 if (_disable_file)
876 S(,,NO,);
877 else if (_disable_function)
878 S(,,,NO);
879 else
880 S(,,,);
881 }
882
883 return;
884 }
885
886#endif
887
888 if (_disable_color)
889 {
890 if (_disable_file)
891 S(NO,NO,NO,);
892 else if (_disable_function)
893 S(NO,NO,,NO);
894 else
895 S(NO,NO,,);
896 }
897 else
898 {
899 if (_disable_file)
900 S(NO,,NO,);
901 else if (_disable_function)
902 S(NO,,,NO);
903 else
904 S(NO,,,);
905 }
906
907#undef S
908}
909
910/*
911 * Creates a colored domain name string.
912 */
913static const char *
914eina_log_domain_str_get(const char *name, const char *color)
915{
916 const char *d;
917
918 if (color)
919 {
920 size_t name_len;
921 size_t color_len;
922
923 name_len = strlen(name);
924 color_len = strlen(color);
925 d =
926 malloc(sizeof(char) *
927 (color_len + name_len + strlen(EINA_COLOR_RESET) + 1));
928 if (!d)
929 return NULL;
930
931 memcpy((char *)d, color, color_len);
932 memcpy((char *)(d + color_len), name, name_len);
933 memcpy((char *)(d + color_len + name_len), EINA_COLOR_RESET,
934 strlen(EINA_COLOR_RESET));
935 ((char *)d)[color_len + name_len + strlen(EINA_COLOR_RESET)] = '\0';
936 }
937 else
938 d = strdup(name);
939
940 return d;
941}
942
943/*
944 * Setups a new logging domain to the name and color specified. Note that this
945 * constructor acts upon an pre-allocated object.
946 */
947static Eina_Log_Domain *
948eina_log_domain_new(Eina_Log_Domain *d, const char *name, const char *color)
949{
950 EINA_SAFETY_ON_NULL_RETURN_VAL(d, NULL);
951 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
952
953 d->level = EINA_LOG_LEVEL_UNKNOWN;
954 d->deleted = EINA_FALSE;
955
956 if ((color) && (!_disable_color))
957 d->domain_str = eina_log_domain_str_get(name, color);
958 else
959 d->domain_str = eina_log_domain_str_get(name, NULL);
960
961 d->name = strdup(name);
962 d->namelen = strlen(name);
963
964 return d;
965}
966
967/*
968 * Frees internal strings of a log domain, keeping the log domain itself as a
969 * slot for next domain registers.
970 */
971static void
972eina_log_domain_free(Eina_Log_Domain *d)
973{
974 EINA_SAFETY_ON_NULL_RETURN(d);
975
976 if (d->domain_str)
977 free((char *)d->domain_str);
978
979 if (d->name)
980 free((char *)d->name);
981}
982
983/*
984 * Parses domain levels passed through the env var.
985 */
986static void
987eina_log_domain_parse_pendings(void)
988{
989 const char *start;
990
991 if (!(start = getenv(EINA_LOG_ENV_LEVELS)))
992 return;
993
994 // name1:level1,name2:level2,name3:level3,...
995 while (1)
996 {
997 Eina_Log_Domain_Level_Pending *p;
998 char *end = NULL;
999 char *tmp = NULL;
1000 long int level;
1001
1002 end = strchr(start, ':');
1003 if (!end)
1004 break;
1005
1006 // Parse level, keep going if failed
1007 level = strtol((char *)(end + 1), &tmp, 10);
1008 if (tmp == (end + 1))
1009 goto parse_end;
1010
1011 // Parse name
1012 p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1);
1013 if (!p)
1014 break;
1015
1016 p->namelen = end - start;
1017 memcpy((char *)p->name, start, end - start);
1018 ((char *)p->name)[end - start] = '\0';
1019 p->level = level;
1020
1021 _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(p));
1022
1023parse_end:
1024 start = strchr(tmp, ',');
1025 if (start)
1026 start++;
1027 else
1028 break;
1029 }
1030}
1031
1032static void
1033eina_log_domain_parse_pending_globs(void)
1034{
1035 const char *start;
1036
1037 if (!(start = getenv(EINA_LOG_ENV_LEVELS_GLOB)))
1038 return;
1039
1040 // name1:level1,name2:level2,name3:level3,...
1041 while (1)
1042 {
1043 Eina_Log_Domain_Level_Pending *p;
1044 char *end = NULL;
1045 char *tmp = NULL;
1046 long int level;
1047
1048 end = strchr(start, ':');
1049 if (!end)
1050 break;
1051
1052 // Parse level, keep going if failed
1053 level = strtol((char *)(end + 1), &tmp, 10);
1054 if (tmp == (end + 1))
1055 goto parse_end;
1056
1057 // Parse name
1058 p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1);
1059 if (!p)
1060 break;
1061
1062 p->namelen = 0; /* not that useful */
1063 memcpy((char *)p->name, start, end - start);
1064 ((char *)p->name)[end - start] = '\0';
1065 p->level = level;
1066
1067 _glob_list = eina_inlist_append(_glob_list, EINA_INLIST_GET(p));
1068
1069parse_end:
1070 start = strchr(tmp, ',');
1071 if (start)
1072 start++;
1073 else
1074 break;
1075 }
1076}
1077
1078static inline int
1079eina_log_domain_register_unlocked(const char *name, const char *color)
1080{
1081 Eina_Log_Domain_Level_Pending *pending = NULL;
1082 size_t namelen;
1083 unsigned int i;
1084
1085 for (i = 0; i < _log_domains_count; i++)
1086 {
1087 if (_log_domains[i].deleted)
1088 {
1089 // Found a flagged slot, free domain_str and replace slot
1090 eina_log_domain_new(&_log_domains[i], name, color);
1091 goto finish_register;
1092 }
1093 }
1094
1095 if (_log_domains_count >= _log_domains_allocated)
1096 {
1097 Eina_Log_Domain *tmp;
1098 size_t size;
1099
1100 if (!_log_domains)
1101 // special case for init, eina itself will allocate a dozen of domains
1102 size = 24;
1103 else
1104 // grow 8 buckets to minimize reallocs
1105 size = _log_domains_allocated + 8;
1106
1107 tmp = realloc(_log_domains, sizeof(Eina_Log_Domain) * size);
1108
1109 if (tmp)
1110 {
1111 // Success!
1112 _log_domains = tmp;
1113 _log_domains_allocated = size;
1114 }
1115 else
1116 return -1;
1117 }
1118
1119 // Use an allocated slot
1120 eina_log_domain_new(&_log_domains[i], name, color);
1121 _log_domains_count++;
1122
1123finish_register:
1124 namelen = _log_domains[i].namelen;
1125
1126 EINA_INLIST_FOREACH(_pending_list, pending)
1127 {
1128 if ((namelen == pending->namelen) && (strcmp(pending->name, name) == 0))
1129 {
1130 _log_domains[i].level = pending->level;
1131 _pending_list =
1132 eina_inlist_remove(_pending_list, EINA_INLIST_GET(pending));
1133 free(pending);
1134 break;
1135 }
1136 }
1137
1138 if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN)
1139 {
1140 EINA_INLIST_FOREACH(_glob_list, pending)
1141 {
1142 if (!fnmatch(pending->name, name, 0))
1143 {
1144 _log_domains[i].level = pending->level;
1145 break;
1146 }
1147 }
1148 }
1149
1150 // Check if level is still UNKNOWN, set it to global
1151 if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN)
1152 _log_domains[i].level = _log_level;
1153
1154 return i;
1155}
1156
1157static inline Eina_Bool
1158eina_log_term_color_supported(const char *term)
1159{
1160 const char *tail;
1161
1162 if (!term)
1163 return EINA_FALSE;
1164
1165 tail = term + 1;
1166 switch (term[0])
1167 {
1168 /* list of known to support color terminals,
1169 * take from gentoo's portage.
1170 */
1171
1172 case 'x': /* xterm and xterm-color */
1173 return ((strncmp(tail, "term", sizeof("term") - 1) == 0) &&
1174 ((tail[sizeof("term") - 1] == '\0') ||
1175 (strcmp(tail + sizeof("term") - 1, "-color") == 0)));
1176
1177 case 'E': /* Eterm */
1178 case 'a': /* aterm */
1179 case 'k': /* kterm */
1180 return (strcmp(tail, "term") == 0);
1181
1182 case 'r': /* xrvt or rxvt-unicode */
1183 return ((strncmp(tail, "xvt", sizeof("xvt") - 1) == 0) &&
1184 ((tail[sizeof("xvt") - 1] == '\0') ||
1185 (strcmp(tail + sizeof("xvt") - 1, "-unicode") == 0)));
1186
1187 case 's': /* screen */
1188 return (strcmp(tail, "creen") == 0);
1189
1190 case 'g': /* gnome */
1191 return (strcmp(tail, "nome") == 0);
1192
1193 case 'i': /* interix */
1194 return (strcmp(tail, "nterix") == 0);
1195
1196 default:
1197 return EINA_FALSE;
1198 }
1199}
1200
1201static inline void
1202eina_log_domain_unregister_unlocked(int domain)
1203{
1204 Eina_Log_Domain *d;
1205
1206 if ((unsigned int)domain >= _log_domains_count)
1207 return;
1208
1209 d = &_log_domains[domain];
1210 eina_log_domain_free(d);
1211 d->deleted = 1;
1212}
1213
1214static inline void
1215eina_log_print_unlocked(int domain,
1216 Eina_Log_Level level,
1217 const char *file,
1218 const char *fnc,
1219 int line,
1220 const char *fmt,
1221 va_list args)
1222{
1223 Eina_Log_Domain *d;
1224
1225#ifdef EINA_SAFETY_CHECKS
1226 if (EINA_UNLIKELY((unsigned int)domain >= _log_domains_count) ||
1227 EINA_UNLIKELY(domain < 0))
1228 {
1229 if (file && fnc && fmt)
1230 fprintf(
1231 stderr,
1232 "CRI: %s:%d %s() eina_log_print() unknown domain %d, original message format '%s'\n",
1233 file,
1234 line,
1235 fnc,
1236 domain,
1237 fmt);
1238 else
1239 fprintf(
1240 stderr,
1241 "CRI: eina_log_print() unknown domain %d, original message format '%s'\n",
1242 domain,
1243 fmt ? fmt : "");
1244
1245 if (_abort_on_critical)
1246 abort();
1247
1248 return;
1249 }
1250
1251#endif
1252 d = _log_domains + domain;
1253#ifdef EINA_SAFETY_CHECKS
1254 if (EINA_UNLIKELY(d->deleted))
1255 {
1256 fprintf(stderr,
1257 "ERR: eina_log_print() domain %d is deleted\n",
1258 domain);
1259 return;
1260 }
1261
1262#endif
1263
1264 if (level > d->level)
1265 return;
1266
1267#ifdef _WIN32
1268 {
1269 char *wfmt;
1270 char *tmp;
1271
1272 wfmt = strdup(fmt);
1273 if (!wfmt)
1274 {
1275 fprintf(stderr, "ERR: %s: can not allocate memory\n", __FUNCTION__);
1276 return;
1277 }
1278
1279 tmp = wfmt;
1280 while (strchr(tmp, '%'))
1281 {
1282 tmp++;
1283 if (*tmp == 'z')
1284 *tmp = 'I';
1285 }
1286 _print_cb(d, level, file, fnc, line, wfmt, _print_cb_data, args);
1287 free(wfmt);
1288 }
1289#else
1290 _print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args);
1291#endif
1292
1293 if (EINA_UNLIKELY(_abort_on_critical) &&
1294 EINA_UNLIKELY(level <= _abort_level_on_critical))
1295 abort();
1296}
1297
1298#endif
1299
1300/**
1301 * @endcond
1302 */
1303
1304
1305/*============================================================================*
1306* Global *
1307*============================================================================*/
1308
1309/**
1310 * @internal
1311 * @brief Initialize the log module.
1312 *
1313 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1314 *
1315 * This function sets up the log module of Eina. It is called by
1316 * eina_init().
1317 *
1318 * @see eina_init()
1319 *
1320 * @warning Not-MT: just call this function from main thread! The
1321 * place where this function was called the first time is
1322 * considered the main thread.
1323 */
1324Eina_Bool
1325eina_log_init(void)
1326{
1327#ifdef EINA_ENABLE_LOG
1328 const char *level, *tmp;
1329 int color_disable;
1330
1331 assert((sizeof(_names) / sizeof(_names[0])) == EINA_LOG_LEVELS);
1332
1333 if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE)))
1334 color_disable = atoi(tmp);
1335 else
1336 color_disable = -1;
1337
1338 /* Check if color is explicitly disabled */
1339 if (color_disable == 1)
1340 _disable_color = EINA_TRUE;
1341
1342#ifndef _WIN32
1343 /* color was not explicitly disabled or enabled, guess it */
1344 else if (color_disable == -1)
1345 {
1346 if (!eina_log_term_color_supported(getenv("TERM")))
1347 _disable_color = EINA_TRUE;
1348 else
1349 {
1350 /* if not a terminal, but redirected to a file, disable color */
1351 int fd;
1352
1353 if (_print_cb == eina_log_print_cb_stderr)
1354 fd = STDERR_FILENO;
1355 else if (_print_cb == eina_log_print_cb_stdout)
1356 fd = STDOUT_FILENO;
1357 else
1358 fd = -1;
1359
1360 if ((fd >= 0) && (!isatty(fd)))
1361 _disable_color = EINA_TRUE;
1362 }
1363 }
1364#endif
1365
1366 if ((tmp = getenv(EINA_LOG_ENV_FILE_DISABLE)) && (atoi(tmp) == 1))
1367 _disable_file = EINA_TRUE;
1368
1369 if ((tmp = getenv(EINA_LOG_ENV_FUNCTION_DISABLE)) && (atoi(tmp) == 1))
1370 _disable_function = EINA_TRUE;
1371
1372 if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1))
1373 _abort_on_critical = EINA_TRUE;
1374
1375 if ((tmp = getenv(EINA_LOG_ENV_ABORT_LEVEL)))
1376 _abort_level_on_critical = atoi(tmp);
1377
1378 eina_log_print_prefix_update();
1379
1380 // Global log level
1381 if ((level = getenv(EINA_LOG_ENV_LEVEL)))
1382 _log_level = atoi(level);
1383
1384 // Register UNKNOWN domain, the default logger
1385 EINA_LOG_DOMAIN_GLOBAL = eina_log_domain_register("", NULL);
1386
1387 if (EINA_LOG_DOMAIN_GLOBAL < 0)
1388 {
1389 fprintf(stderr, "Failed to create global logging domain.\n");
1390 return EINA_FALSE;
1391 }
1392
1393 // Parse pending domains passed through EINA_LOG_LEVELS_GLOB
1394 eina_log_domain_parse_pending_globs();
1395
1396 // Parse pending domains passed through EINA_LOG_LEVELS
1397 eina_log_domain_parse_pendings();
1398
1399#endif
1400 return EINA_TRUE;
1401}
1402
1403/**
1404 * @internal
1405 * @brief Shut down the log module.
1406 *
1407 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1408 *
1409 * This function shuts down the log module set up by
1410 * eina_log_init(). It is called by eina_shutdown().
1411 *
1412 * @see eina_shutdown()
1413 *
1414 * @warning Not-MT: just call this function from main thread! The
1415 * place where eina_log_init() (eina_init()) was called the
1416 * first time is considered the main thread.
1417 */
1418Eina_Bool
1419eina_log_shutdown(void)
1420{
1421#ifdef EINA_ENABLE_LOG
1422 Eina_Inlist *tmp;
1423
1424 while (_log_domains_count--)
1425 {
1426 if (_log_domains[_log_domains_count].deleted)
1427 continue;
1428
1429 eina_log_domain_free(&_log_domains[_log_domains_count]);
1430 }
1431
1432 free(_log_domains);
1433
1434 _log_domains = NULL;
1435 _log_domains_count = 0;
1436 _log_domains_allocated = 0;
1437
1438 while (_glob_list)
1439 {
1440 tmp = _glob_list;
1441 _glob_list = _glob_list->next;
1442 free(tmp);
1443 }
1444
1445 while (_pending_list)
1446 {
1447 tmp = _pending_list;
1448 _pending_list = _pending_list->next;
1449 free(tmp);
1450 }
1451
1452#endif
1453 return EINA_TRUE;
1454}
1455
1456#ifdef EFL_HAVE_THREADS
1457
1458/**
1459 * @internal
1460 * @brief Activate the log mutex.
1461 *
1462 * This function activate the mutex in the eina log module. It is called by
1463 * eina_threads_init().
1464 *
1465 * @see eina_threads_init()
1466 */
1467void
1468eina_log_threads_init(void)
1469{
1470#ifdef EINA_ENABLE_LOG
1471 if (_threads_inited) return;
1472 _main_thread = SELF();
1473 if (!INIT()) return;
1474 _threads_inited = EINA_TRUE;
1475#endif
1476}
1477
1478/**
1479 * @internal
1480 * @brief Shut down the log mutex.
1481 *
1482 * This function shuts down the mutex in the log module.
1483 * It is called by eina_threads_shutdown().
1484 *
1485 * @see eina_threads_shutdown()
1486 */
1487void
1488eina_log_threads_shutdown(void)
1489{
1490#ifdef EINA_ENABLE_LOG
1491 if (!_threads_inited) return;
1492 CHECK_MAIN();
1493 SHUTDOWN();
1494 _threads_enabled = EINA_FALSE;
1495 _threads_inited = EINA_FALSE;
1496#endif
1497}
1498
1499#endif
1500
1501/*============================================================================*
1502* API *
1503*============================================================================*/
1504
1505/**
1506 * @cond LOCAL
1507 */
1508
1509EAPI int EINA_LOG_DOMAIN_GLOBAL = 0;
1510
1511/**
1512 * @endcond
1513 */
1514
1515EAPI void
1516eina_log_threads_enable(void)
1517{
1518#if defined (EFL_HAVE_THREADS) && defined (EINA_ENABLE_LOG)
1519 if (_threads_enabled) return;
1520 if (!_threads_inited) eina_log_threads_init();
1521 _threads_enabled = EINA_TRUE;
1522 eina_log_print_prefix_update();
1523#endif
1524}
1525
1526EAPI void
1527eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
1528{
1529#ifdef EINA_ENABLE_LOG
1530 LOG_LOCK();
1531 _print_cb = cb;
1532 _print_cb_data = data;
1533 eina_log_print_prefix_update();
1534 LOG_UNLOCK();
1535#else
1536 (void) cb;
1537 (void) data;
1538#endif
1539}
1540
1541EAPI void
1542eina_log_level_set(int level)
1543{
1544#ifdef EINA_ENABLE_LOG
1545 _log_level = level;
1546 if (EINA_LIKELY((EINA_LOG_DOMAIN_GLOBAL >= 0) &&
1547 ((unsigned int)EINA_LOG_DOMAIN_GLOBAL < _log_domains_count)))
1548 _log_domains[EINA_LOG_DOMAIN_GLOBAL].level = level;
1549#else
1550 (void) level;
1551#endif
1552}
1553
1554EAPI int
1555eina_log_level_get(void)
1556{
1557#ifdef EINA_ENABLE_LOG
1558 return _log_level;
1559#else
1560 return 0;
1561#endif
1562}
1563
1564EAPI Eina_Bool
1565eina_log_main_thread_check(void)
1566{
1567#if defined (EFL_HAVE_THREADS) && defined (EINA_ENABLE_LOG)
1568 return ((!_threads_enabled) || IS_MAIN(SELF()));
1569#else
1570 return EINA_TRUE;
1571#endif
1572}
1573
1574EAPI void
1575eina_log_color_disable_set(Eina_Bool disabled)
1576{
1577#ifdef EINA_ENABLE_LOG
1578 _disable_color = disabled;
1579#else
1580 (void) disabled;
1581#endif
1582}
1583
1584EAPI Eina_Bool
1585eina_log_color_disable_get(void)
1586{
1587#ifdef EINA_ENABLE_LOG
1588 return _disable_color;
1589#else
1590 return EINA_TRUE;
1591#endif
1592}
1593
1594EAPI void
1595eina_log_file_disable_set(Eina_Bool disabled)
1596{
1597#ifdef EINA_ENABLE_LOG
1598 _disable_file = disabled;
1599#else
1600 (void) disabled;
1601#endif
1602}
1603
1604EAPI Eina_Bool
1605eina_log_file_disable_get(void)
1606{
1607#ifdef EINA_ENABLE_LOG
1608 return _disable_file;
1609#else
1610 return EINA_TRUE;
1611#endif
1612}
1613
1614EAPI void
1615eina_log_function_disable_set(Eina_Bool disabled)
1616{
1617#ifdef EINA_ENABLE_LOG
1618 _disable_function = disabled;
1619#else
1620 (void) disabled;
1621#endif
1622}
1623
1624EAPI Eina_Bool
1625eina_log_function_disable_get(void)
1626{
1627#ifdef EINA_ENABLE_LOG
1628 return _disable_function;
1629#else
1630 return EINA_TRUE;
1631#endif
1632}
1633
1634EAPI void
1635eina_log_abort_on_critical_set(Eina_Bool abort_on_critical)
1636{
1637#ifdef EINA_ENABLE_LOG
1638 _abort_on_critical = abort_on_critical;
1639#else
1640 (void) abort_on_critical;
1641#endif
1642}
1643
1644EAPI Eina_Bool
1645eina_log_abort_on_critical_get(void)
1646{
1647#ifdef EINA_ENABLE_LOG
1648 return _abort_on_critical;
1649#else
1650 return EINA_FALSE;
1651#endif
1652}
1653
1654EAPI void
1655eina_log_abort_on_critical_level_set(int critical_level)
1656{
1657#ifdef EINA_ENABLE_LOG
1658 _abort_level_on_critical = critical_level;
1659#else
1660 (void) critical_level;
1661#endif
1662}
1663
1664EAPI int
1665eina_log_abort_on_critical_level_get(void)
1666{
1667#ifdef EINA_ENABLE_LOG
1668 return _abort_level_on_critical;
1669#else
1670 return 0;
1671#endif
1672}
1673
1674EAPI int
1675eina_log_domain_register(const char *name, const char *color)
1676{
1677#ifdef EINA_ENABLE_LOG
1678 int r;
1679
1680 EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1);
1681
1682 LOG_LOCK();
1683 r = eina_log_domain_register_unlocked(name, color);
1684 LOG_UNLOCK();
1685 return r;
1686#else
1687 (void) name;
1688 (void) color;
1689 return 0;
1690#endif
1691}
1692
1693EAPI void
1694eina_log_domain_unregister(int domain)
1695{
1696#ifdef EINA_ENABLE_LOG
1697 EINA_SAFETY_ON_FALSE_RETURN(domain >= 0);
1698 LOG_LOCK();
1699 eina_log_domain_unregister_unlocked(domain);
1700 LOG_UNLOCK();
1701#else
1702 (void) domain;
1703#endif
1704}
1705
1706EAPI void
1707eina_log_domain_level_set(const char *domain_name, int level)
1708{
1709#ifdef EINA_ENABLE_LOG
1710 Eina_Log_Domain_Level_Pending *pending;
1711 size_t namelen;
1712 unsigned int i;
1713
1714 EINA_SAFETY_ON_NULL_RETURN(domain_name);
1715
1716 namelen = strlen(domain_name);
1717
1718 for (i = 0; i < _log_domains_count; i++)
1719 {
1720 if (_log_domains[i].deleted)
1721 continue;
1722
1723 if ((namelen != _log_domains[i].namelen) ||
1724 (strcmp(_log_domains[i].name, domain_name) != 0))
1725 continue;
1726
1727 _log_domains[i].level = level;
1728 return;
1729 }
1730
1731 EINA_INLIST_FOREACH(_pending_list, pending)
1732 {
1733 if ((namelen == pending->namelen) &&
1734 (strcmp(pending->name, domain_name) == 0))
1735 {
1736 pending->level = level;
1737 return;
1738 }
1739 }
1740
1741 pending = malloc(sizeof(Eina_Log_Domain_Level_Pending) + namelen + 1);
1742 if (!pending)
1743 return;
1744
1745 pending->level = level;
1746 pending->namelen = namelen;
1747 memcpy(pending->name, domain_name, namelen + 1);
1748
1749 _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(pending));
1750#else
1751 (void) domain_name;
1752 (void) level;
1753#endif
1754}
1755
1756EAPI int
1757eina_log_domain_level_get(const char *domain_name)
1758{
1759#ifdef EINA_ENABLE_LOG
1760 Eina_Log_Domain_Level_Pending *pending;
1761 size_t namelen;
1762 unsigned int i;
1763
1764 EINA_SAFETY_ON_NULL_RETURN_VAL(domain_name, EINA_LOG_LEVEL_UNKNOWN);
1765
1766 namelen = strlen(domain_name);
1767
1768 for (i = 0; i < _log_domains_count; i++)
1769 {
1770 if (_log_domains[i].deleted)
1771 continue;
1772
1773 if ((namelen != _log_domains[i].namelen) ||
1774 (strcmp(_log_domains[i].name, domain_name) != 0))
1775 continue;
1776
1777 return _log_domains[i].level;
1778 }
1779
1780 EINA_INLIST_FOREACH(_pending_list, pending)
1781 {
1782 if ((namelen == pending->namelen) &&
1783 (strcmp(pending->name, domain_name) == 0))
1784 return pending->level;
1785 }
1786
1787 EINA_INLIST_FOREACH(_glob_list, pending)
1788 {
1789 if (!fnmatch(pending->name, domain_name, 0))
1790 return pending->level;
1791 }
1792
1793 return _log_level;
1794#else
1795 (void) domain_name;
1796 return 0;
1797#endif
1798}
1799
1800EAPI int
1801eina_log_domain_registered_level_get(int domain)
1802{
1803#ifdef EINA_ENABLE_LOG
1804 EINA_SAFETY_ON_FALSE_RETURN_VAL(domain >= 0, EINA_LOG_LEVEL_UNKNOWN);
1805 EINA_SAFETY_ON_FALSE_RETURN_VAL((unsigned int)domain < _log_domains_count,
1806 EINA_LOG_LEVEL_UNKNOWN);
1807 EINA_SAFETY_ON_TRUE_RETURN_VAL(_log_domains[domain].deleted,
1808 EINA_LOG_LEVEL_UNKNOWN);
1809 return _log_domains[domain].level;
1810#else
1811 (void) domain;
1812 return 0;
1813#endif
1814}
1815
1816EAPI void
1817eina_log_print_cb_stderr(const Eina_Log_Domain *d,
1818 Eina_Log_Level level,
1819 const char *file,
1820 const char *fnc,
1821 int line,
1822 const char *fmt,
1823 __UNUSED__ void *data,
1824 va_list args)
1825{
1826#ifdef EINA_ENABLE_LOG
1827 _eina_log_print_prefix(stderr, d, level, file, fnc, line);
1828 vfprintf(stderr, fmt, args);
1829 putc('\n', stderr);
1830#else
1831 (void) d;
1832 (void) level;
1833 (void) file;
1834 (void) fnc;
1835 (void) line;
1836 (void) fmt;
1837 (void) data;
1838 (void) args;
1839#endif
1840}
1841
1842EAPI void
1843eina_log_print_cb_stdout(const Eina_Log_Domain *d,
1844 Eina_Log_Level level,
1845 const char *file,
1846 const char *fnc,
1847 int line,
1848 const char *fmt,
1849 __UNUSED__ void *data,
1850 va_list args)
1851{
1852#ifdef EINA_ENABLE_LOG
1853 _eina_log_print_prefix(stdout, d, level, file, fnc, line);
1854 vprintf(fmt, args);
1855 putchar('\n');
1856#else
1857 (void) d;
1858 (void) level;
1859 (void) file;
1860 (void) fnc;
1861 (void) line;
1862 (void) fmt;
1863 (void) data;
1864 (void) args;
1865#endif
1866}
1867
1868EAPI void
1869eina_log_print_cb_file(const Eina_Log_Domain *d,
1870 __UNUSED__ Eina_Log_Level level,
1871 const char *file,
1872 const char *fnc,
1873 int line,
1874 const char *fmt,
1875 void *data,
1876 va_list args)
1877{
1878#ifdef EINA_ENABLE_LOG
1879 FILE *f = data;
1880#ifdef EFL_HAVE_THREADS
1881 if (_threads_enabled)
1882 {
1883 Thread cur;
1884
1885 cur = SELF();
1886 if (IS_OTHER(cur))
1887 {
1888 fprintf(f, "%s[T:%lu] %s:%d %s() ", d->name, (unsigned long)cur,
1889 file, line, fnc);
1890 goto end;
1891 }
1892 }
1893
1894#endif
1895 fprintf(f, "%s<%u> %s:%d %s() ", d->name, eina_log_pid_get(),
1896 file, line, fnc);
1897#ifdef EFL_HAVE_THREADS
1898end:
1899#endif
1900 vfprintf(f, fmt, args);
1901 putc('\n', f);
1902#else
1903 (void) d;
1904 (void) file;
1905 (void) fnc;
1906 (void) line;
1907 (void) fmt;
1908 (void) data;
1909 (void) args;
1910#endif
1911}
1912
1913EAPI void
1914eina_log_print(int domain, Eina_Log_Level level, const char *file,
1915 const char *fnc, int line, const char *fmt, ...)
1916{
1917#ifdef EINA_ENABLE_LOG
1918 va_list args;
1919
1920#ifdef EINA_SAFETY_CHECKS
1921 if (EINA_UNLIKELY(!file))
1922 {
1923 fputs("ERR: eina_log_print() file == NULL\n", stderr);
1924 return;
1925 }
1926
1927 if (EINA_UNLIKELY(!fnc))
1928 {
1929 fputs("ERR: eina_log_print() fnc == NULL\n", stderr);
1930 return;
1931 }
1932
1933 if (EINA_UNLIKELY(!fmt))
1934 {
1935 fputs("ERR: eina_log_print() fmt == NULL\n", stderr);
1936 return;
1937 }
1938
1939#endif
1940 va_start(args, fmt);
1941 LOG_LOCK();
1942 eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
1943 LOG_UNLOCK();
1944 va_end(args);
1945#else
1946 (void) domain;
1947 (void) level;
1948 (void) file;
1949 (void) fnc;
1950 (void) line;
1951 (void) fmt;
1952#endif
1953}
1954
1955EAPI void
1956eina_log_vprint(int domain, Eina_Log_Level level, const char *file,
1957 const char *fnc, int line, const char *fmt, va_list args)
1958{
1959#ifdef EINA_ENABLE_LOG
1960
1961#ifdef EINA_SAFETY_CHECKS
1962 if (EINA_UNLIKELY(!file))
1963 {
1964 fputs("ERR: eina_log_print() file == NULL\n", stderr);
1965 return;
1966 }
1967
1968 if (EINA_UNLIKELY(!fnc))
1969 {
1970 fputs("ERR: eina_log_print() fnc == NULL\n", stderr);
1971 return;
1972 }
1973
1974 if (EINA_UNLIKELY(!fmt))
1975 {
1976 fputs("ERR: eina_log_print() fmt == NULL\n", stderr);
1977 return;
1978 }
1979
1980#endif
1981 LOG_LOCK();
1982 eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
1983 LOG_UNLOCK();
1984#else
1985 (void) domain;
1986 (void) level;
1987 (void) file;
1988 (void) fnc;
1989 (void) line;
1990 (void) fmt;
1991 (void) args;
1992#endif
1993}
diff --git a/libraries/eina/src/lib/eina_magic.c b/libraries/eina/src/lib/eina_magic.c
deleted file mode 100644
index a42db2d..0000000
--- a/libraries/eina/src/lib/eina_magic.c
+++ /dev/null
@@ -1,322 +0,0 @@
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)(size_t)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 ERR("could not realloc magic_strings from %zu to %zu buckets.",
106 _eina_magic_strings_allocated, size);
107 return NULL;
108 }
109
110 _eina_magic_strings = tmp;
111 _eina_magic_strings_allocated = size;
112 }
113
114 idx = _eina_magic_strings_count;
115 _eina_magic_strings_count++;
116 return _eina_magic_strings + idx;
117}
118
119/**
120 * @endcond
121 */
122
123/*============================================================================*
124* Global *
125*============================================================================*/
126
127EAPI Eina_Error EINA_ERROR_MAGIC_FAILED = 0;
128
129static const char EINA_ERROR_MAGIC_FAILED_STR[] = "Magic check failed.";
130
131/**
132 * @internal
133 * @brief Initialize the magic string module.
134 *
135 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
136 *
137 * This function sets up the magic string module of Eina. It is called by
138 * eina_init().
139 *
140 * @see eina_init()
141 */
142Eina_Bool
143eina_magic_string_init(void)
144{
145 _eina_magic_string_log_dom = eina_log_domain_register
146 ("eina_magic_string", EINA_LOG_COLOR_DEFAULT);
147 if (_eina_magic_string_log_dom < 0)
148 {
149 EINA_LOG_ERR("Could not register log domain: eina_magic_string");
150 return EINA_FALSE;
151 }
152 EINA_ERROR_MAGIC_FAILED = eina_error_msg_static_register(
153 EINA_ERROR_MAGIC_FAILED_STR);
154
155 return EINA_TRUE;
156}
157
158/**
159 * @internal
160 * @brief Shut down the magic string module.
161 *
162 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
163 *
164 * This function shuts down the magic string module set up by
165 * eina_magic string_init(). It is called by eina_shutdown().
166 *
167 * @see eina_shutdown()
168 */
169Eina_Bool
170eina_magic_string_shutdown(void)
171{
172 Eina_Magic_String *ems, *ems_end;
173
174 ems = _eina_magic_strings;
175 ems_end = ems + _eina_magic_strings_count;
176
177 for (; ems < ems_end; ems++)
178 if (ems->string_allocated)
179 free((char *)ems->string);
180
181 free(_eina_magic_strings);
182 _eina_magic_strings = NULL;
183 _eina_magic_strings_count = 0;
184 _eina_magic_strings_allocated = 0;
185
186 eina_log_domain_unregister(_eina_magic_string_log_dom);
187 _eina_magic_string_log_dom = -1;
188
189 return EINA_TRUE;
190}
191
192/*============================================================================*
193* API *
194*============================================================================*/
195EAPI const char *
196eina_magic_string_get(Eina_Magic magic)
197{
198 Eina_Magic_String *ems;
199
200 if (!_eina_magic_strings)
201 return "(none)";
202
203 if (_eina_magic_strings_dirty)
204 {
205 qsort(_eina_magic_strings, _eina_magic_strings_count,
206 sizeof(Eina_Magic_String), _eina_magic_strings_sort_cmp);
207 _eina_magic_strings_dirty = 0;
208 }
209
210 ems = bsearch((void *)(size_t)magic, _eina_magic_strings,
211 _eina_magic_strings_count, sizeof(Eina_Magic_String),
212 _eina_magic_strings_find_cmp);
213 if (ems)
214 return ems->string ? ems->string : "(undefined)";
215
216 return "(unknown)";
217}
218
219EAPI Eina_Bool
220eina_magic_string_set(Eina_Magic magic, const char *magic_name)
221{
222 Eina_Magic_String *ems;
223
224 EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE);
225
226 ems = _eina_magic_strings_alloc();
227 if (!ems)
228 return EINA_FALSE;
229
230 ems->magic = magic;
231 ems->string_allocated = EINA_TRUE;
232 ems->string = strdup(magic_name);
233 if (!ems->string)
234 {
235 ERR("could not allocate string '%s'", magic_name);
236 _eina_magic_strings_count--;
237 return EINA_FALSE;
238 }
239
240 _eina_magic_strings_dirty = 1;
241 return EINA_TRUE;
242}
243
244EAPI Eina_Bool
245eina_magic_string_static_set(Eina_Magic magic, const char *magic_name)
246{
247 Eina_Magic_String *ems;
248
249 EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE);
250
251 ems = _eina_magic_strings_alloc();
252 if (!ems)
253 return EINA_FALSE;
254
255 ems->magic = magic;
256 ems->string_allocated = EINA_FALSE;
257 ems->string = magic_name;
258
259 _eina_magic_strings_dirty = 1;
260 return EINA_TRUE;
261}
262
263#ifdef eina_magic_fail
264# undef eina_magic_fail
265#endif
266
267EAPI void
268eina_magic_fail(void *d,
269 Eina_Magic m,
270 Eina_Magic req_m,
271 const char *file,
272 const char *fnc,
273 int line)
274{
275 eina_error_set(EINA_ERROR_MAGIC_FAILED);
276 if (!d)
277 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
278 file, fnc, line,
279 "*** Eina Magic Check Failed !!!\n"
280 " Input handle pointer is NULL !\n"
281 "*** NAUGHTY PROGRAMMER!!!\n"
282 "*** SPANK SPANK SPANK!!!\n"
283 "*** Now go fix your code. Tut tut tut!\n"
284 "\n");
285 else
286 if (m == EINA_MAGIC_NONE)
287 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
288 file, fnc, line,
289 "*** Eina Magic Check Failed !!!\n"
290 " Input handle has already been freed!\n"
291 "*** NAUGHTY PROGRAMMER!!!\n"
292 "*** SPANK SPANK SPANK!!!\n"
293 "*** Now go fix your code. Tut tut tut!\n"
294 "\n");
295 else
296 if (m != req_m)
297 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
298 file, fnc, line,
299 "*** Eina Magic Check Failed !!!\n"
300 " Input handle is wrong type\n"
301 " Expected: %08x - %s\n"
302 " Supplied: %08x - %s\n"
303 "*** NAUGHTY PROGRAMMER!!!\n"
304 "*** SPANK SPANK SPANK!!!\n"
305 "*** Now go fix your code. Tut tut tut!\n"
306 "\n",
307 req_m, eina_magic_string_get(req_m),
308 m, eina_magic_string_get(m));
309 else
310 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
311 file, fnc, line,
312 "*** Eina Magic Check Failed !!!\n"
313 " Why did you call me !\n"
314 "*** NAUGHTY PROGRAMMER!!!\n"
315 "*** SPANK SPANK SPANK!!!\n"
316 "*** Now go fix your code. Tut tut tut!\n"
317 "\n");
318}
319
320/**
321 * @}
322 */
diff --git a/libraries/eina/src/lib/eina_main.c b/libraries/eina/src/lib/eina_main.c
deleted file mode 100644
index f233929..0000000
--- a/libraries/eina/src/lib/eina_main.c
+++ /dev/null
@@ -1,440 +0,0 @@
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#include "eina_inarray.h"
71#include "eina_value.h"
72#include "eina_model.h"
73
74/*============================================================================*
75* Local *
76*============================================================================*/
77
78/**
79 * @cond LOCAL
80 */
81
82static Eina_Version _version = { VMAJ, VMIN, VMIC, VREV };
83
84static int _eina_main_count = 0;
85#ifdef EFL_HAVE_THREADS
86static int _eina_main_thread_count = 0;
87#endif
88static int _eina_log_dom = -1;
89
90#ifdef ERR
91#undef ERR
92#endif
93#define ERR(...) EINA_LOG_DOM_ERR(_eina_log_dom, __VA_ARGS__)
94
95#ifdef DBG
96#undef DBG
97#endif
98#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__)
99
100EAPI Eina_Bool _eina_threads_activated = EINA_FALSE;
101EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
102
103static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed.";
104
105#ifdef EFL_HAVE_THREADS
106# ifdef _WIN32
107EAPI DWORD _eina_main_loop;
108# else
109EAPI pthread_t _eina_main_loop;
110# endif
111static pid_t _eina_pid;
112#endif
113
114#ifdef MT
115static int _mt_enabled = 0;
116#endif
117
118#ifdef EFL_HAVE_THREADS
119EAPI int _eina_threads_debug = 0;
120# if !defined(_WIN32_WCE) && !defined(_WIN32)
121EAPI pthread_mutex_t _eina_tracking_lock;
122EAPI Eina_Inlist *_eina_tracking = NULL;
123# endif
124#endif
125
126/* place module init/shutdown functions here to avoid other modules
127 * calling them by mistake.
128 */
129#define S(x) extern Eina_Bool eina_ ## x ## _init(void); \
130 extern Eina_Bool eina_ ## x ## _shutdown(void)
131 S(log);
132 S(error);
133 S(safety_checks);
134 S(magic_string);
135 S(iterator);
136 S(accessor);
137 S(inarray);
138 S(array);
139 S(module);
140 S(mempool);
141 S(list);
142 S(binshare);
143 S(stringshare);
144 S(ustringshare);
145 S(matrixsparse);
146 S(convert);
147 S(counter);
148 S(benchmark);
149 S(rectangle);
150 S(strbuf);
151 S(ustrbuf);
152 S(quadtree);
153 S(simple_xml);
154 S(file);
155 S(prefix);
156 S(value);
157 S(model);
158#undef S
159
160struct eina_desc_setup
161{
162 const char *name;
163 Eina_Bool (*init)(void);
164 Eina_Bool (*shutdown)(void);
165};
166
167static const struct eina_desc_setup _eina_desc_setup[] = {
168#define S(x) {# x, eina_ ## x ## _init, eina_ ## x ## _shutdown}
169 /* log is a special case as it needs printf */
170 S(stringshare),
171 S(error),
172 S(safety_checks),
173 S(magic_string),
174 S(iterator),
175 S(accessor),
176 S(inarray),
177 S(array),
178 S(module),
179 S(mempool),
180 S(list),
181 S(binshare),
182 S(ustringshare),
183 S(matrixsparse),
184 S(convert),
185 S(counter),
186 S(benchmark),
187 S(rectangle),
188 S(strbuf),
189 S(ustrbuf),
190 S(quadtree),
191 S(simple_xml),
192 S(file),
193 S(prefix),
194 S(value),
195 S(model)
196#undef S
197};
198static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) /
199 sizeof(_eina_desc_setup[0]);
200
201static void
202_eina_shutdown_from_desc(const struct eina_desc_setup *itr)
203{
204 for (itr--; itr >= _eina_desc_setup; itr--)
205 {
206 if (!itr->shutdown())
207 ERR("Problems shutting down eina module '%s', ignored.", itr->name);
208 }
209
210 eina_log_domain_unregister(_eina_log_dom);
211 _eina_log_dom = -1;
212 eina_log_shutdown();
213}
214
215/**
216 * @endcond
217 */
218
219/*============================================================================*
220* Global *
221*============================================================================*/
222
223
224/*============================================================================*
225* API *
226*============================================================================*/
227
228/**
229 * @var eina_version
230 * @brief Eina version (defined at configuration time)
231 */
232EAPI Eina_Version *eina_version = &_version;
233
234EAPI int
235eina_init(void)
236{
237 const struct eina_desc_setup *itr, *itr_end;
238
239 if (EINA_LIKELY(_eina_main_count > 0))
240 return ++_eina_main_count;
241
242#ifdef MT
243 if ((getenv("EINA_MTRACE")) && (getenv("MALLOC_TRACE")))
244 {
245 _mt_enabled = 1;
246 mtrace();
247 }
248#endif
249
250 if (!eina_log_init())
251 {
252 fprintf(stderr, "Could not initialize eina logging system.\n");
253 return 0;
254 }
255
256 _eina_log_dom = eina_log_domain_register("eina", EINA_LOG_COLOR_DEFAULT);
257 if (_eina_log_dom < 0)
258 {
259 EINA_LOG_ERR("Could not register log domain: eina");
260 eina_log_shutdown();
261 return 0;
262 }
263
264 EINA_ERROR_NOT_MAIN_LOOP = eina_error_msg_static_register(
265 EINA_ERROR_NOT_MAIN_LOOP_STR);
266
267#ifdef EFL_HAVE_THREADS
268# ifdef _WIN32
269 _eina_main_loop = GetCurrentThreadId();
270# else
271 _eina_main_loop = pthread_self();
272# endif
273 _eina_pid = getpid();
274#endif
275
276#ifdef EINA_HAVE_DEBUG_THREADS
277 pthread_mutex_init(&_eina_tracking_lock, NULL);
278
279 if (getenv("EINA_DEBUG_THREADS"))
280 _eina_threads_debug = atoi(getenv("EINA_DEBUG_THREADS"));
281#endif
282
283 itr = _eina_desc_setup;
284 itr_end = itr + _eina_desc_setup_len;
285 for (; itr < itr_end; itr++)
286 {
287 if (!itr->init())
288 {
289 ERR("Could not initialize eina module '%s'.", itr->name);
290 _eina_shutdown_from_desc(itr);
291 return 0;
292 }
293 }
294
295 _eina_main_count = 1;
296 return 1;
297}
298
299EAPI int
300eina_shutdown(void)
301{
302 _eina_main_count--;
303 if (EINA_UNLIKELY(_eina_main_count == 0))
304 {
305 _eina_shutdown_from_desc(_eina_desc_setup + _eina_desc_setup_len);
306
307#ifdef EINA_HAVE_DEBUG_THREADS
308 pthread_mutex_destroy(&_eina_tracking_lock);
309#endif
310#ifdef MT
311 if (_mt_enabled)
312 {
313 muntrace();
314 _mt_enabled = 0;
315 }
316#endif
317 }
318
319 return _eina_main_count;
320}
321
322
323EAPI int
324eina_threads_init(void)
325{
326#ifdef EFL_HAVE_THREADS
327 int ret;
328
329#ifdef EINA_HAVE_DEBUG_THREADS
330 assert(pthread_equal(_eina_main_loop, pthread_self()));
331#endif
332
333 ++_eina_main_thread_count;
334 ret = _eina_main_thread_count;
335
336 if(_eina_main_thread_count > 1)
337 return ret;
338
339 eina_share_common_threads_init();
340 eina_log_threads_init();
341 _eina_threads_activated = EINA_TRUE;
342
343 return ret;
344#else
345 return 0;
346#endif
347}
348
349EAPI int
350eina_threads_shutdown(void)
351{
352#ifdef EFL_HAVE_THREADS
353 int ret;
354
355#ifdef EINA_HAVE_DEBUG_THREADS
356 const Eina_Lock *lk;
357
358 assert(pthread_equal(_eina_main_loop, pthread_self()));
359 assert(_eina_main_thread_count > 0);
360#endif
361
362 ret = --_eina_main_thread_count;
363 if(_eina_main_thread_count > 0)
364 return ret;
365
366#ifdef EINA_HAVE_DEBUG_THREADS
367 pthread_mutex_lock(&_eina_tracking_lock);
368 if (_eina_tracking)
369 {
370 fprintf(stderr, "*************************\n");
371 fprintf(stderr, "* The IMPOSSIBLE HAPPEN *\n");
372 fprintf(stderr, "* LOCK STILL TAKEN : *\n");
373 fprintf(stderr, "*************************\n");
374 EINA_INLIST_FOREACH(_eina_tracking, lk)
375 eina_lock_debug(lk);
376 fprintf(stderr, "*************************\n");
377 abort();
378 }
379 pthread_mutex_unlock(&_eina_tracking_lock);
380#endif
381
382 eina_share_common_threads_shutdown();
383 eina_log_threads_shutdown();
384
385 _eina_threads_activated = EINA_FALSE;
386
387 return ret;
388#else
389 return 0;
390#endif
391}
392
393EAPI Eina_Bool
394eina_main_loop_is(void)
395{
396#ifdef EFL_HAVE_THREADS
397 pid_t pid = getpid();
398
399# ifdef _WIN32
400 if (pid != _eina_pid)
401 {
402 _eina_pid = pid;
403 _eina_main_loop = GetCurrentThreadId();
404 return EINA_TRUE;
405 }
406 if (_eina_main_loop == GetCurrentThreadId())
407 return EINA_TRUE;
408# else
409 if (pid != _eina_pid)
410 {
411 /* This is in case of a fork, but don't like the solution */
412 _eina_pid = pid;
413 _eina_main_loop = pthread_self();
414 return EINA_TRUE;
415 }
416
417 if (pthread_equal(_eina_main_loop, pthread_self()))
418 return EINA_TRUE;
419# endif
420#endif
421 return EINA_FALSE;
422}
423
424/** The purpose of this API should not be documented, it is used only by the one who know what they are doing. */
425EAPI void
426eina_main_loop_define(void)
427{
428#ifdef EFL_HAVE_THREADS
429 _eina_pid = getpid();
430# ifdef _WIN32
431 _eina_main_loop = GetCurrentThreadId();
432# else
433 _eina_main_loop = pthread_self();
434# endif
435#endif
436}
437
438/**
439 * @}
440 */
diff --git a/libraries/eina/src/lib/eina_matrixsparse.c b/libraries/eina/src/lib/eina_matrixsparse.c
deleted file mode 100644
index 59cd66b..0000000
--- a/libraries/eina/src/lib/eina_matrixsparse.c
+++ /dev/null
@@ -1,1423 +0,0 @@
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 if ((update_last_used_row) && (m->last_used == r_aux))
1082 m->last_used = r;
1083 }
1084 else
1085 {
1086 if (c != r->last_col)
1087 {
1088 c->next = NULL;
1089 r->last_col = c;
1090 }
1091
1092 if (update_last_used_col)
1093 r->last_used = r->last_col;
1094
1095 r = r->next;
1096 }
1097 }
1098
1099 update_last_used_row = 0;
1100 if (m->last_used)
1101 {
1102 if (m->last_row)
1103 update_last_used_row = m->last_used->row > m->last_row->row;
1104 else
1105 update_last_used_row = 1;
1106 }
1107
1108 if (update_last_used_row)
1109 m->last_used = m->last_row;
1110
1111 m->size.rows = rows;
1112 m->size.cols = cols;
1113 return 1;
1114}
1115
1116EAPI Eina_Bool
1117eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m,
1118 unsigned long row,
1119 unsigned long col,
1120 Eina_Matrixsparse_Cell **cell)
1121{
1122 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1123 EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0);
1124 *cell = NULL;
1125 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1126 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1127 *cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1128 return 1;
1129}
1130
1131EAPI void *
1132eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell)
1133{
1134 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, NULL);
1135 return cell->data;
1136}
1137
1138EAPI void *
1139eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m,
1140 unsigned long row,
1141 unsigned long col)
1142{
1143 Eina_Matrixsparse_Cell *c;
1144 EINA_MAGIC_CHECK_MATRIXSPARSE(m, NULL);
1145 c = _eina_matrixsparse_cell_idx_get(m, row, col);
1146 if (c)
1147 return c->data;
1148 else
1149 return NULL;
1150}
1151
1152EAPI Eina_Bool
1153eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell,
1154 unsigned long *row,
1155 unsigned long *col)
1156{
1157 if (row)
1158 *row = 0;
1159
1160 if (col)
1161 *col = 0;
1162
1163 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1164 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1165 if (row)
1166 *row = cell->parent->row;
1167
1168 if (col)
1169 *col = cell->col;
1170
1171 return 1;
1172}
1173
1174EAPI Eina_Bool
1175eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell,
1176 const void *data,
1177 void **p_old)
1178{
1179 if (p_old)
1180 *p_old = NULL;
1181
1182 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1183
1184 if (p_old)
1185 *p_old = cell->data;
1186
1187 cell->data = (void *)data;
1188 return 1;
1189}
1190
1191EAPI Eina_Bool
1192eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data)
1193{
1194 Eina_Matrixsparse *m;
1195
1196 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1197 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1198 EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0);
1199
1200 m = cell->parent->parent;
1201
1202 if (m->free.func)
1203 m->free.func(m->free.user_data, cell->data);
1204
1205 cell->data = (void *)data;
1206 return 1;
1207}
1208
1209EAPI Eina_Bool
1210eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m,
1211 unsigned long row,
1212 unsigned long col,
1213 const void *data,
1214 void **p_old)
1215{
1216 Eina_Matrixsparse_Cell *cell;
1217
1218 if (p_old)
1219 *p_old = NULL;
1220
1221 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1222 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1223 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1224
1225 cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1226 if (cell)
1227 {
1228 if (p_old)
1229 *p_old = cell->data;
1230
1231 cell->data = (void *)data;
1232 return 1;
1233 }
1234
1235 return _eina_matrixsparse_cell_idx_add(m, row, col, data);
1236}
1237
1238EAPI Eina_Bool
1239eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m,
1240 unsigned long row,
1241 unsigned long col,
1242 const void *data)
1243{
1244 Eina_Matrixsparse_Cell *cell;
1245
1246 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1247 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1248 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1249
1250 cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1251 if (cell)
1252 {
1253 if (m->free.func)
1254 m->free.func(m->free.user_data, cell->data);
1255
1256 cell->data = (void *)data;
1257 return 1;
1258 }
1259
1260 return _eina_matrixsparse_cell_idx_add(m, row, col, data);
1261}
1262
1263EAPI Eina_Bool
1264eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row)
1265{
1266 Eina_Matrixsparse_Row *r;
1267
1268 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1269 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1270
1271 r = _eina_matrixsparse_row_idx_get(m, row);
1272 if (!r)
1273 return 1;
1274
1275 _eina_matrixsparse_row_unlink(r);
1276 _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data);
1277
1278 return 1;
1279}
1280
1281EAPI Eina_Bool
1282eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col)
1283{
1284 Eina_Matrixsparse_Row *r;
1285 void (*free_func)(void *, void *);
1286 void *user_data;
1287
1288 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1289 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1290
1291 free_func = m->free.func;
1292 user_data = m->free.user_data;
1293
1294 for (r = m->rows; r; )
1295 {
1296 Eina_Matrixsparse_Row *r_aux = r;
1297 Eina_Matrixsparse_Cell *c;
1298
1299 c = _eina_matrixsparse_row_cell_idx_get(r, col);
1300 r = r->next;
1301
1302 if (!c)
1303 continue;
1304
1305 if ((r_aux->cols != c) || (r_aux->last_col != c))
1306 {
1307 _eina_matrixsparse_cell_unlink(c);
1308 _eina_matrixsparse_cell_free(c, free_func, user_data);
1309 }
1310 else
1311 {
1312 _eina_matrixsparse_row_unlink(r_aux);
1313 _eina_matrixsparse_row_free(r_aux, free_func, user_data);
1314 }
1315 }
1316
1317 return 1;
1318}
1319
1320EAPI Eina_Bool
1321eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m,
1322 unsigned long row,
1323 unsigned long col)
1324{
1325 Eina_Matrixsparse_Cell *c;
1326
1327 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1328 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1329 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1330
1331 c = _eina_matrixsparse_cell_idx_get(m, row, col);
1332 if (!c)
1333 return 1;
1334
1335 _eina_matrixsparse_cell_unlink(c);
1336 _eina_matrixsparse_cell_free(c, m->free.func, m->free.user_data);
1337
1338 return 1;
1339}
1340
1341EAPI Eina_Bool
1342eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell)
1343{
1344 Eina_Matrixsparse *m;
1345
1346 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1347 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1348 EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0);
1349
1350 m = cell->parent->parent;
1351
1352 _eina_matrixsparse_cell_unlink(cell);
1353 _eina_matrixsparse_cell_free(cell, m->free.func, m->free.user_data);
1354 return 1;
1355}
1356
1357EAPI Eina_Iterator *
1358eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m)
1359{
1360 Eina_Matrixsparse_Iterator *it;
1361
1362 it = calloc(1, sizeof(*it));
1363 if (!it)
1364 {
1365 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1366 return NULL;
1367 }
1368
1369 EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR);
1370 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1371
1372 it->m = m;
1373 it->ref.row = m->rows;
1374 it->ref.col = m->rows ? m->rows->cols : NULL;
1375
1376 it->iterator.version = EINA_ITERATOR_VERSION;
1377 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_matrixsparse_iterator_next);
1378 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1379 _eina_matrixsparse_iterator_get_container);
1380 it->iterator.free = FUNC_ITERATOR_FREE(_eina_matrixsparse_iterator_free);
1381 return &it->iterator;
1382}
1383
1384EAPI Eina_Iterator *
1385eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m)
1386{
1387 Eina_Matrixsparse_Iterator_Complete *it;
1388
1389 it = calloc(1, sizeof(*it));
1390 if (!it)
1391 {
1392 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1393 return NULL;
1394 }
1395
1396 EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR);
1397 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1398
1399 it->m = m;
1400 it->idx.row = 0;
1401 it->idx.col = 0;
1402 it->ref.row = m->rows;
1403 it->ref.col = m->rows ? m->rows->cols : NULL;
1404
1405 it->dummy.row.next = it->dummy.row.prev = NULL;
1406 it->dummy.row.cols = it->dummy.row.last_col = it->dummy.row.last_used = NULL;
1407 it->dummy.row.parent = (Eina_Matrixsparse *)m;
1408 EINA_MAGIC_SET(&it->dummy.row, EINA_MAGIC_MATRIXSPARSE_ROW);
1409
1410 it->dummy.col.next = it->dummy.col.prev = NULL;
1411 it->dummy.col.data = NULL;
1412 it->dummy.col.parent = &it->dummy.row;
1413 EINA_MAGIC_SET(&it->dummy.col, EINA_MAGIC_MATRIXSPARSE_CELL);
1414
1415 it->iterator.version = EINA_ITERATOR_VERSION;
1416 it->iterator.next = FUNC_ITERATOR_NEXT(
1417 _eina_matrixsparse_iterator_complete_next);
1418 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1419 _eina_matrixsparse_iterator_complete_get_container);
1420 it->iterator.free = FUNC_ITERATOR_FREE(
1421 _eina_matrixsparse_iterator_complete_free);
1422 return &it->iterator;
1423}
diff --git a/libraries/eina/src/lib/eina_mempool.c b/libraries/eina/src/lib/eina_mempool.c
deleted file mode 100644
index 065532e..0000000
--- a/libraries/eina/src/lib/eina_mempool.c
+++ /dev/null
@@ -1,387 +0,0 @@
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
deleted file mode 100644
index 7929f0e..0000000
--- a/libraries/eina/src/lib/eina_mmap.c
+++ /dev/null
@@ -1,190 +0,0 @@
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 /* Look into mmaped Eina_File if it was one of them, just to remember for later request */
114 eina_file_mmap_faulty(addr, _eina_mmap_pagesize);
115 /* restore previous errno */
116 errno = perrno;
117}
118#endif
119
120/*============================================================================*
121 * API *
122 *============================================================================*/
123
124EAPI Eina_Bool
125eina_mmap_safety_enabled_set(Eina_Bool enabled)
126{
127#ifndef HAVE_SIGINFO_T
128 (void) enabled;
129 return EINA_FALSE;
130#else
131 if (_eina_mmap_log_dom < 0)
132 {
133 _eina_mmap_log_dom = eina_log_domain_register("eina_mmap",
134 EINA_LOG_COLOR_DEFAULT);
135 if (_eina_mmap_log_dom < 0)
136 {
137 EINA_LOG_ERR("Could not register log domain: eina_mmap");
138 return EINA_FALSE;
139 }
140 }
141
142 enabled = !!enabled;
143
144 if (mmap_safe == enabled) return mmap_safe;
145 if (enabled)
146 {
147 struct sigaction sa;
148
149 /* find out system page size the cleanest way we can */
150#ifdef _SC_PAGESIZE
151 _eina_mmap_pagesize = sysconf(_SC_PAGESIZE);
152 if (_eina_mmap_pagesize <= 0) return EINA_FALSE;
153#else
154 _eina_mmap_pagesize = 4096;
155#endif
156 /* no zero page device - open it */
157 if (_eina_mmap_zero_fd < 0)
158 {
159 _eina_mmap_zero_fd = open("/dev/zero", O_RDWR);
160 /* if we don;'t have one - fail to set up mmap safety */
161 if (_eina_mmap_zero_fd < 0) return EINA_FALSE;
162 }
163 /* set up signal handler for SIGBUS */
164 sa.sa_sigaction = _eina_mmap_safe_sigbus;
165 sa.sa_flags = SA_RESTART | SA_SIGINFO;
166 sigemptyset(&sa.sa_mask);
167 /* FIXME: This is rubbish. We return EINA_FALSE whether sigaction
168 * fails or not. And we never set mmap_safe, so we always hit this
169 * code path. */
170 if (sigaction(SIGBUS, &sa, NULL) == 0) return EINA_FALSE;
171 /* setup of SIGBUS handler failed, lets close zero page dev and fail */
172 close(_eina_mmap_zero_fd);
173 _eina_mmap_zero_fd = -1;
174 return EINA_FALSE;
175 }
176 else
177 {
178 /* reset signal handler to default for SIGBUS */
179 signal(SIGBUS, SIG_DFL);
180 }
181 mmap_safe = enabled;
182 return mmap_safe;
183#endif
184}
185
186EAPI Eina_Bool
187eina_mmap_safety_enabled_get(void)
188{
189 return mmap_safe;
190}
diff --git a/libraries/eina/src/lib/eina_model.c b/libraries/eina/src/lib/eina_model.c
deleted file mode 100644
index ae06c1b..0000000
--- a/libraries/eina/src/lib/eina_model.c
+++ /dev/null
@@ -1,5548 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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 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#ifdef HAVE_EXECINFO_H
41#include <execinfo.h>
42#endif
43
44#include "eina_config.h"
45#include "eina_private.h"
46#include "eina_error.h"
47#include "eina_log.h"
48#include "eina_mempool.h"
49#include "eina_lock.h"
50#include "eina_inlist.h"
51#include "eina_strbuf.h"
52
53/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
54#include "eina_safety_checks.h"
55#include "eina_value.h" /* eina-safety used in inline.x */
56#include "eina_model.h"
57
58/*============================================================================*
59 * Local *
60 *============================================================================*/
61
62/**
63 * @cond LOCAL
64 */
65
66static Eina_Mempool *_eina_model_mp = NULL;
67static Eina_Hash *_eina_model_inner_mps = NULL;
68static Eina_Lock _eina_model_inner_mps_lock;
69static char *_eina_model_mp_choice = NULL;
70static Eina_Hash *_eina_model_descriptions = NULL;
71static Eina_Lock _eina_model_descriptions_lock;
72static int _eina_model_log_dom = -1;
73static enum {
74 EINA_MODEL_DEBUG_NONE = 0,
75 EINA_MODEL_DEBUG_CHECK = 1,
76 EINA_MODEL_DEBUG_BACKTRACE = 2,
77} _eina_model_debug = EINA_MODEL_DEBUG_NONE;
78static Eina_Lock _eina_model_debug_list_lock;
79static Eina_List *_eina_model_debug_list = NULL;
80
81static const char _eina_model_str_deleted[] = "deleted";
82static const char _eina_model_str_freed[] = "freed";
83static const char _eina_model_str_property_set[] = "property,set";
84static const char _eina_model_str_property_del[] = "property,deleted";
85static const char _eina_model_str_children_changed[] = "children,changed";
86static const char _eina_model_str_child_inserted[] = "child,inserted";
87static const char _eina_model_str_child_set[] = "child,set";
88static const char _eina_model_str_child_del[] = "child,deleted";
89static const char _eina_model_str_loaded[] = "loaded";
90static const char _eina_model_str_unloaded[] = "unloaded";
91static const char _eina_model_str_properties_loaded[] = "properties,loaded";
92static const char _eina_model_str_properties_unloaded[] = "properties,unloaded";
93static const char _eina_model_str_children_loaded[] = "children,loaded";
94static const char _eina_model_str_children_unloaded[] = "children,unloaded";
95
96#ifdef CRITICAL
97#undef CRITICAL
98#endif
99#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_model_log_dom, __VA_ARGS__)
100
101#ifdef ERR
102#undef ERR
103#endif
104#define ERR(...) EINA_LOG_DOM_ERR(_eina_model_log_dom, __VA_ARGS__)
105
106#ifdef WRN
107#undef WRN
108#endif
109#define WRN(...) EINA_LOG_DOM_WARN(_eina_model_log_dom, __VA_ARGS__)
110
111#ifdef INF
112#undef INF
113#endif
114#define INF(...) EINA_LOG_DOM_INFO(_eina_model_log_dom, __VA_ARGS__)
115
116#ifdef DBG
117#undef DBG
118#endif
119#define DBG(...) EINA_LOG_DOM_DBG(_eina_model_log_dom, __VA_ARGS__)
120
121
122/* convenience sort array of Eina_Model* giving compare Eina_Model* instead of
123 * Eina_Model**
124 */
125static unsigned int
126_eina_model_array_partition(Eina_Model **array, unsigned int start, unsigned int last, unsigned int pivot, Eina_Compare_Cb compare)
127{
128 Eina_Model **itr, **itr_end, *tmp, *pivot_value;
129
130 pivot_value = tmp = array[pivot];
131 array[pivot] = array[last];
132 array[last] = tmp;
133
134 pivot = start;
135 itr = array + start;
136 itr_end = array + last;
137 for (; itr < itr_end; itr++)
138 {
139 if (compare(*itr, pivot_value) < 0)
140 {
141 tmp = *itr;
142 *itr = array[pivot];
143 array[pivot] = tmp;
144 pivot++;
145 }
146 }
147
148 tmp = array[last];
149 array[last] = array[pivot];
150 array[pivot] = tmp;
151
152 return pivot;
153}
154
155static void
156_eina_model_array_sort(Eina_Model **array, unsigned int start, unsigned int last, Eina_Compare_Cb compare)
157{
158 unsigned int pivot, new_pivot;
159
160 if (last <= start)
161 return;
162
163 pivot = start + (last - start) / 2; /* avoid overflow */
164 new_pivot = _eina_model_array_partition(array, start, last, pivot, compare);
165
166 if (start + 1 < new_pivot)
167 _eina_model_array_sort(array, start, new_pivot - 1, compare);
168
169 if (new_pivot + 1 < last)
170 _eina_model_array_sort(array, new_pivot + 1, last, compare);
171}
172
173/*
174 * Most of inner allocations are made with internal mempools, types
175 * and thus instace private data will repeat and it's good to use them.
176 *
177 * To save on the number of mempools, they are kept per size, not per
178 * type.
179 *
180 * This is done by means of _eina_model_inner_alloc() and
181 * _eina_model_inner_free(), both at thread safe.
182 *
183 */
184typedef struct _Eina_Model_Inner_Mp Eina_Model_Inner_Mp;
185struct _Eina_Model_Inner_Mp
186{
187 Eina_Mempool *mempool;
188 int refcount;
189};
190
191static inline void
192_eina_model_inner_mp_dispose(int size, Eina_Model_Inner_Mp *imp)
193{
194 EINA_SAFETY_ON_FALSE_RETURN(imp->refcount == 0);
195
196 eina_hash_del_by_key(_eina_model_inner_mps, &size);
197 eina_mempool_del(imp->mempool);
198 free(imp);
199}
200
201static inline Eina_Model_Inner_Mp *
202_eina_model_inner_mp_get(int size)
203{
204 Eina_Model_Inner_Mp *imp = eina_hash_find(_eina_model_inner_mps, &size);
205 if (imp) return imp;
206
207 imp = malloc(sizeof(Eina_Model_Inner_Mp));
208 if (!imp)
209 return NULL;
210
211 imp->refcount = 0;
212
213 imp->mempool = eina_mempool_add(_eina_model_mp_choice,
214 "Eina_Model_Inner_Mp", NULL, size, 128);
215 if (!imp->mempool)
216 {
217 free(imp);
218 return NULL;
219 }
220
221 if (!eina_hash_add(_eina_model_inner_mps, &size, imp))
222 {
223 eina_mempool_del(imp->mempool);
224 free(imp);
225 return NULL;
226 }
227
228 return imp;
229}
230
231static inline void *
232_eina_model_inner_alloc_internal(int size)
233{
234 Eina_Model_Inner_Mp *imp;
235 void *mem;
236
237 imp = _eina_model_inner_mp_get(size);
238 if (!imp) return NULL;
239
240 mem = eina_mempool_malloc(imp->mempool, size);
241 if (mem) imp->refcount++;
242 else if (imp->refcount == 0) _eina_model_inner_mp_dispose(size, imp);
243
244 return mem;
245}
246
247static inline void
248_eina_model_inner_free_internal(int size, void *mem)
249{
250 Eina_Model_Inner_Mp *imp = eina_hash_find(_eina_model_inner_mps, &size);
251 EINA_SAFETY_ON_NULL_RETURN(imp);
252
253 eina_mempool_free(imp->mempool, mem);
254
255 imp->refcount--;
256 if (imp->refcount > 0) return;
257 _eina_model_inner_mp_dispose(size, imp);
258}
259
260static void *
261_eina_model_inner_alloc(size_t size)
262{
263 void *mem;
264
265 if (size > 512) return malloc(size);
266
267 eina_lock_take(&_eina_model_inner_mps_lock);
268 mem = _eina_model_inner_alloc_internal(size);
269 eina_lock_release(&_eina_model_inner_mps_lock);
270
271 return mem;
272}
273
274static void
275_eina_model_inner_free(size_t size, void *mem)
276{
277 if (size > 512)
278 {
279 free(mem);
280 return;
281 }
282
283 eina_lock_take(&_eina_model_inner_mps_lock);
284 _eina_model_inner_free_internal(size, mem);
285 eina_lock_release(&_eina_model_inner_mps_lock);
286}
287
288
289typedef union _Eina_Model_Provider Eina_Model_Provider;
290union _Eina_Model_Provider
291{
292 const Eina_Model_Type *type;
293 const Eina_Model_Interface *iface;
294};
295
296/* store event name to aid searching */
297typedef struct _Eina_Model_Event_Description_Cache Eina_Model_Event_Description_Cache;
298struct _Eina_Model_Event_Description_Cache
299{
300 const char *name;
301 const Eina_Model_Event_Description *desc;
302 Eina_Model_Provider provider;
303};
304
305/* description is an optimized structure for type. It's built at runtime
306 * to avoid user input errors and help declaration.
307 *
308 * lookups (ifaces, events) are sorted for binary search.
309 *
310 * recursion is avoided by expansion of every possible value in "cache"
311 * struct.
312 *
313 * the first usable operation is stopred for type at "ops" struct,
314 * avoiding usage of _eina_model_type_find_offset().
315 *
316 * Get a model type description using _eina_model_description_get(),
317 * when it's not used anymore use
318 * _eina_model_description_dispose(). These operations are thread
319 * safe.
320 */
321typedef struct _Eina_Model_Description Eina_Model_Description;
322struct _Eina_Model_Description
323{
324 struct {
325 const Eina_Model_Type **types; /* size = total.types */
326 const Eina_Model_Interface **ifaces; /* sorted, size = total.ifaces */
327 Eina_Model_Provider *privates; /* size = total.privates (types + ifaces) */
328 Eina_Model_Event_Description_Cache *events; /* size = total.events */
329 } cache;
330 struct {
331 /* ops are the topmost operation to use for type/interface */
332 struct {
333 Eina_Bool (*setup)(Eina_Model *model);
334 Eina_Bool (*flush)(Eina_Model *model);
335 Eina_Bool (*constructor)(Eina_Model *model);
336 Eina_Bool (*destructor)(Eina_Model *model);
337 Eina_Bool (*copy)(const Eina_Model *src, Eina_Model *dst);
338 Eina_Bool (*deep_copy)(const Eina_Model *src, Eina_Model *dst);
339 Eina_Bool (*compare)(const Eina_Model *a, const Eina_Model *b, int *cmp);
340 Eina_Bool (*load)(Eina_Model *model);
341 Eina_Bool (*unload)(Eina_Model *model);
342 Eina_Bool (*property_get)(const Eina_Model *model, const char *name, Eina_Value *value);
343 Eina_Bool (*property_set)(Eina_Model *model, const char *name, const Eina_Value *value);
344 Eina_Bool (*property_del)(Eina_Model *model, const char *name);
345 Eina_List *(*properties_names_list_get)(const Eina_Model *model);
346 int (*child_count)(const Eina_Model *model);
347 Eina_Model *(*child_get)(const Eina_Model *model, unsigned int position);
348 Eina_Bool (*child_set)(Eina_Model *model, unsigned int position, Eina_Model *child);
349 Eina_Bool (*child_del)(Eina_Model *model, unsigned int position);
350 Eina_Bool (*child_insert_at)(Eina_Model *model, unsigned int position, Eina_Model *child);
351 int (*child_find)(const Eina_Model *model, unsigned int start_position, const Eina_Model *other);
352 int (*child_criteria_match)(const Eina_Model *model, unsigned int start_position, Eina_Each_Cb match, const void *data);
353 void (*child_sort)(Eina_Model *model, Eina_Compare_Cb compare);
354 Eina_Iterator *(*child_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count);
355 Eina_Iterator *(*child_reversed_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count);
356 Eina_Iterator *(*child_sorted_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count, Eina_Compare_Cb compare);
357 Eina_Iterator *(*child_filtered_iterator_get)(Eina_Model *model, unsigned int start, unsigned int count, Eina_Each_Cb match, const void *data);
358 char *(*to_string)(const Eina_Model *model); /**< used to represent model as string, usually for debug purposes or user convenience */
359 const void **extension;
360 } type;
361 } ops;
362 struct {
363 unsigned int types;
364 unsigned int ifaces;
365 unsigned int privates;
366 unsigned int size; /* sum of all private sizes */
367 unsigned int events;
368 } total;
369 int refcount;
370};
371
372static Eina_Bool
373_eina_model_description_type_fill(Eina_Model_Description *desc, const Eina_Model_Type *type)
374{
375 const Eina_Model_Type *itr, *last_itr = NULL;
376 unsigned int count, child_size = 0;
377
378 for (count = 0, itr = type; itr != NULL; itr = itr->parent, count++)
379 {
380 if (itr->version != EINA_MODEL_TYPE_VERSION)
381 {
382 CRITICAL("Type %p version is %u, expected %u instead.",
383 itr, itr->version, EINA_MODEL_TYPE_VERSION);
384 return EINA_FALSE;
385 }
386 if (!itr->name)
387 {
388 CRITICAL("Type %p provides no name!", itr);
389 return EINA_FALSE;
390 }
391 if (itr->type_size < sizeof(Eina_Model_Type))
392 {
393 CRITICAL("Type %p %s size must be >= sizeof(Eina_Model_Type)!",
394 itr, itr->name);
395 return EINA_FALSE;
396 }
397 if (child_size == 0) child_size = itr->type_size;
398 else if (child_size < itr->type_size)
399 {
400 CRITICAL("Type %p %s size is bigger than its child type %p %s!",
401 itr, itr->name, last_itr, last_itr->name);
402 return EINA_FALSE;
403 }
404 last_itr = itr;
405
406#define DEF_METH(meth) \
407 if (!desc->ops.type.meth) desc->ops.type.meth = itr->meth
408 DEF_METH(setup);
409 DEF_METH(flush);
410 DEF_METH(constructor);
411 DEF_METH(destructor);
412 DEF_METH(copy);
413 DEF_METH(deep_copy);
414 DEF_METH(compare);
415 DEF_METH(load);
416 DEF_METH(unload);
417 DEF_METH(property_get);
418 DEF_METH(property_set);
419 DEF_METH(property_del);
420 DEF_METH(properties_names_list_get);
421 DEF_METH(child_count);
422 DEF_METH(child_get);
423 DEF_METH(child_set);
424 DEF_METH(child_del);
425 DEF_METH(child_insert_at);
426 DEF_METH(child_find);
427 DEF_METH(child_criteria_match);
428 DEF_METH(child_sort);
429 DEF_METH(child_iterator_get);
430 DEF_METH(child_reversed_iterator_get);
431 DEF_METH(child_sorted_iterator_get);
432 DEF_METH(child_filtered_iterator_get);
433 DEF_METH(to_string);
434#undef DEF_METH
435
436 if ((!itr->parent) && (itr != EINA_MODEL_TYPE_BASE))
437 {
438 CRITICAL("Type %p (%s) does not inherit from EINA_MODEL_TYPE_BASE!",
439 type, type->name);
440 return EINA_FALSE;
441 }
442 }
443
444#define CK_METH(meth) \
445 if (!desc->ops.type.meth) \
446 { \
447 CRITICAL("Mandatory method "#meth \
448 "() was not provided by type %p (%s).", \
449 type, type->name); \
450 return EINA_FALSE; \
451 }
452 CK_METH(setup);
453 CK_METH(flush);
454 CK_METH(constructor);
455 CK_METH(destructor);
456 CK_METH(property_get);
457#undef CK_METH
458
459 if (child_size <= sizeof(Eina_Model_Type))
460 desc->ops.type.extension = NULL;
461 else
462 {
463 unsigned ext_size = child_size - sizeof(Eina_Model_Type);
464 unsigned ext_count = ext_size / sizeof(void *);
465
466 if (ext_size % sizeof(void *) != 0)
467 {
468 CRITICAL("Extension size %u is not multiple of sizeof(void*)",
469 ext_size);
470 return EINA_FALSE;
471 }
472
473 desc->ops.type.extension = calloc(ext_count, sizeof(void *));
474 EINA_SAFETY_ON_NULL_RETURN_VAL(desc->ops.type.extension, EINA_FALSE);
475
476 for (itr = type; itr != NULL; itr = itr->parent)
477 {
478 unsigned cur_size = itr->type_size - sizeof(Eina_Model_Type);
479 unsigned i, cur_count = cur_size / sizeof(void *);
480 const void * const *ptr = (const void **)((const char *)itr + sizeof(Eina_Model_Type));
481
482 if (cur_size == 0) break;
483
484 for (i = 0; i < cur_count; i++)
485 {
486 if (desc->ops.type.extension[i]) continue;
487 desc->ops.type.extension[i] = ptr[i];
488 }
489 }
490 }
491
492 desc->cache.types = malloc(count * sizeof(Eina_Model_Type *));
493 EINA_SAFETY_ON_NULL_GOTO(desc->cache.types, cache_types_failed);
494 desc->total.types = count;
495
496 for (count = 0, itr = type; itr != NULL; itr = itr->parent, count++)
497 desc->cache.types[count] = itr;
498
499 return EINA_TRUE;
500
501 cache_types_failed:
502 free(desc->ops.type.extension);
503 return EINA_FALSE;
504}
505
506static inline Eina_Bool
507_eina_model_interface_implements(const Eina_Model_Interface *iface, const Eina_Model_Interface *query)
508{
509 const Eina_Model_Interface **itr;
510
511 if (iface == query)
512 return EINA_TRUE;
513
514 if (!iface->interfaces)
515 return EINA_FALSE;
516
517 for (itr = iface->interfaces; *itr != NULL; itr++)
518 if (_eina_model_interface_implements(*itr, query))
519 return EINA_TRUE;
520
521 return EINA_FALSE;
522}
523
524/* apply topological sort and remove duplicates */
525/*
526 * TODO: Topological sort will only work for linked interfaces, but
527 * will ignore original ordering provided by types. Consider the
528 * following:
529 *
530 * - A_Type -> X_Iface (name: "MyIface")
531 * - B_Type -> Y_Iface (name: "MyIface")
532 *
533 * Both X_Iface and Y_Iface are different implementations of the
534 * "MyIface".
535 *
536 * B_Type inherits from A_Type, then Y_Iface must be looked up
537 * first, even though there is no link between Y_Iface and
538 * X_Iface.
539 *
540 * However, the way the current topological sort behaves, the
541 * roots may come out in any order. We need a stable version
542 * that sorts roots before removing them from graph.
543 *
544 * Thanks to Tasn to report it :-)
545 */
546static Eina_Bool
547_eina_model_description_ifaces_fix(Eina_Model_Description *desc)
548{
549 struct node {
550 const Eina_Model_Interface *iface;
551 unsigned int users;
552 Eina_List *deps;
553 } *nodes, **pending, **roots;
554 unsigned int n_nodes = desc->total.ifaces, n_pending = 0, n_roots = 0, i, j;
555 Eina_Bool ret = EINA_TRUE;
556
557 nodes = alloca(n_nodes * sizeof(struct node));
558 pending = alloca(n_nodes * sizeof(struct node *));
559 roots = alloca(n_nodes * sizeof(struct node *));
560
561 /* populate */
562 for (i = 0, j = 0; i < n_nodes; i++)
563 {
564 unsigned int k;
565 for (k = 0; k < j; k++)
566 {
567 if (nodes[k].iface == desc->cache.ifaces[i])
568 break;
569 }
570 if (k < j)
571 continue; /* already exists */
572
573 nodes[j].iface = desc->cache.ifaces[i];
574 nodes[j].users = 0;
575 nodes[j].deps = NULL;
576 j++;
577 }
578 n_nodes = j;
579
580 for (i = 0; i < n_nodes; i++)
581 {
582 for (j = 0; j < n_nodes; j++)
583 {
584 if (i == j) continue;
585 if (!_eina_model_interface_implements(nodes[j].iface,
586 nodes[i].iface))
587 continue;
588
589 nodes[i].users++;
590 nodes[j].deps = eina_list_append(nodes[j].deps, nodes + i);
591 }
592 }
593 for (i = 0; i < n_nodes; i++)
594 {
595 if (nodes[i].users == 0)
596 {
597 roots[n_roots] = nodes + i;
598 n_roots++;
599 }
600 else
601 {
602 pending[n_pending] = nodes + i;
603 n_pending++;
604 }
605 }
606
607 /* topological sort */
608 desc->total.ifaces = 0;
609 while (n_roots > 0)
610 {
611 struct node *r, *d;
612
613 /* TODO: sort roots using input order? Or at least study if
614 * it's enough to change roots append to prepend.
615 *
616 * See comments above.
617 */
618 n_roots--;
619 r = roots[n_roots];
620
621 desc->cache.ifaces[desc->total.ifaces] = r->iface;
622 desc->total.ifaces++;
623
624 EINA_LIST_FREE(r->deps, d)
625 {
626 d->users--;
627 if (d->users > 0) continue;
628
629 roots[n_roots] = d;
630 n_roots++;
631
632 /* remove node, it became a root */
633 for (j = 0; j < n_pending; j++)
634 {
635 if (pending[j] == d)
636 {
637 n_pending--;
638 if (j < n_pending)
639 pending[j] = pending[n_pending];
640 break;
641 }
642 }
643 }
644 }
645
646 if (n_pending > 0)
647 {
648 ERR("Dependency loop found for interfaces!");
649 for (i = 0; i < n_pending; i++)
650 ERR("%p (%s) is part of dependency loop!",
651 pending[i]->iface, pending[i]->iface->name);
652 CRITICAL("Cannot use type %p (%s) with broken interfaces!",
653 desc->cache.types[0], desc->cache.types[0]->name);
654 free(desc->cache.ifaces);
655 ret = EINA_FALSE;
656 }
657
658 /* likely from still pending (dependency loops) */
659 for (i = 0; i < n_nodes; i++)
660 eina_list_free(nodes[i].deps);
661
662 return ret;
663}
664
665static Eina_Bool
666_eina_model_description_ifaces_validate_and_count(const Eina_Model_Interface *iface, unsigned int *count)
667{
668 if (iface->version != EINA_MODEL_INTERFACE_VERSION)
669 {
670 CRITICAL("Interface %p version is %u, expected %u instead.",
671 iface, iface->version, EINA_MODEL_INTERFACE_VERSION);
672 return EINA_FALSE;
673 }
674
675 if (!iface->name)
676 {
677 CRITICAL("Interface %p provides no name!", iface);
678 return EINA_FALSE;
679 }
680
681 if (iface->interfaces)
682 {
683 const Eina_Model_Interface **itr = iface->interfaces;
684 for (; *itr != NULL; itr++)
685 if (!_eina_model_description_ifaces_validate_and_count(*itr, count))
686 return EINA_FALSE;
687 }
688
689 (*count)++;
690 return EINA_TRUE;
691}
692
693static void
694_eina_model_description_ifaces_populate(Eina_Model_Description *desc, const Eina_Model_Interface *iface)
695{
696 desc->cache.ifaces[desc->total.ifaces] = iface;
697 desc->total.ifaces++;
698
699 if (iface->interfaces)
700 {
701 const Eina_Model_Interface **itr = iface->interfaces;
702 for (; *itr != NULL; itr++)
703 _eina_model_description_ifaces_populate(desc, *itr);
704 }
705}
706
707static Eina_Bool
708_eina_model_description_ifaces_fill(Eina_Model_Description *desc)
709{
710 const Eina_Model_Type **titr, **titr_end;
711 unsigned int count;
712
713 titr = desc->cache.types;
714 titr_end = titr + desc->total.types;
715
716 /* naively count all interfaces, remove duplicates later */
717 for (count = 0; titr < titr_end; titr++)
718 {
719 const Eina_Model_Type *type = *titr;
720 const Eina_Model_Interface **iitr = type->interfaces;
721 if (!type->interfaces) continue;
722
723 for (; *iitr != NULL; iitr++)
724 if (!_eina_model_description_ifaces_validate_and_count(*iitr, &count))
725 return EINA_FALSE;
726 }
727 if (count == 0)
728 {
729 desc->cache.ifaces = NULL;
730 desc->total.ifaces = 0;
731 return EINA_TRUE;
732 }
733
734 desc->cache.ifaces = malloc(count * sizeof(Eina_Model_Interface *));
735 EINA_SAFETY_ON_NULL_RETURN_VAL(desc->cache.ifaces, EINA_FALSE);
736
737 titr = desc->cache.types;
738 desc->total.ifaces = 0;
739 for (; titr < titr_end; titr++)
740 {
741 const Eina_Model_Type *type = *titr;
742 const Eina_Model_Interface **iitr = type->interfaces;
743
744 if (!type->interfaces) continue;
745
746 for (; *iitr != NULL; iitr++)
747 _eina_model_description_ifaces_populate(desc, *iitr);
748 }
749
750 return _eina_model_description_ifaces_fix(desc);
751}
752
753static Eina_Bool
754_eina_model_description_privates_fill(Eina_Model_Description *desc)
755{
756 unsigned int i;
757
758 desc->total.privates = desc->total.types + desc->total.ifaces;
759 desc->cache.privates = malloc(desc->total.privates *
760 sizeof(Eina_Model_Provider));
761 EINA_SAFETY_ON_NULL_RETURN_VAL(desc->cache.privates, EINA_FALSE);
762
763 desc->total.size = 0;
764
765 for (i = 0; i < desc->total.types; i++)
766 {
767 const Eina_Model_Type *type = desc->cache.types[i];
768 desc->cache.privates[i].type = type;
769 if (type->private_size > 0)
770 {
771 unsigned int size = type->private_size;
772 if (size % sizeof(void *) != 0)
773 size += sizeof(void *) - (size % sizeof(void *));
774 desc->total.size += size;
775 }
776 }
777
778 for (i = 0; i < desc->total.ifaces; i++)
779 {
780 const Eina_Model_Interface *iface = desc->cache.ifaces[i];
781 desc->cache.privates[desc->total.types + i].iface = iface;
782 if (iface->private_size > 0)
783 {
784 unsigned int size = iface->private_size;
785 if (size % sizeof(void *) != 0)
786 size += sizeof(void *) - (size % sizeof(void *));
787 desc->total.size += size;
788 }
789 }
790
791 return EINA_TRUE;
792}
793
794static int
795_eina_model_description_events_cmp(const void *pa, const void *pb)
796{
797 const Eina_Model_Event_Description_Cache *a = pa, *b = pb;
798 return strcmp(a->name, b->name);
799}
800
801static int
802_eina_model_description_events_find(const Eina_Model_Description *desc, const Eina_Model_Event_Description *query)
803{
804 unsigned int i;
805 for (i = 0; i < desc->total.events; i++)
806 {
807 const Eina_Model_Event_Description_Cache *itr = desc->cache.events + i;
808 if ((itr->name == query->name) || (strcmp(itr->name, query->name) == 0))
809 return i;
810 }
811
812 return -1;
813}
814
815/* warn and remove duplicates, sort items to speed up lookups */
816static Eina_Bool
817_eina_model_description_events_fill(Eina_Model_Description *desc)
818{
819 unsigned int i, count = 0, type_events;
820
821 for (i = 0; i < desc->total.types; i++)
822 {
823 const Eina_Model_Event_Description *itr = desc->cache.types[i]->events;
824 if (!itr) continue;
825 for (; itr->name != NULL; itr++)
826 {
827 count++;
828 }
829 }
830 type_events = count;
831
832 for (i = 0; i < desc->total.ifaces; i++)
833 {
834 const Eina_Model_Event_Description *itr = desc->cache.ifaces[i]->events;
835 if (!itr) continue;
836 for (; itr->name != NULL; itr++)
837 count++;
838 }
839
840 if (count == 0)
841 {
842 desc->cache.events = NULL;
843 desc->total.events = 0;
844 return EINA_TRUE;
845 }
846
847 desc->cache.events = malloc(count *
848 sizeof(Eina_Model_Event_Description_Cache));
849 EINA_SAFETY_ON_NULL_RETURN_VAL(desc->cache.events, EINA_FALSE);
850 desc->total.events = 0;
851
852 for (i = 0; i < desc->total.types; i++)
853 {
854 const Eina_Model_Type *mtype = desc->cache.types[i];
855 const Eina_Model_Event_Description *itr = mtype->events;
856 if (!itr) continue;
857 for (; itr->name != NULL; itr++)
858 {
859 int j = _eina_model_description_events_find(desc, itr);
860 if (j >= 0)
861 {
862 const Eina_Model_Event_Description_Cache *o = desc->cache.events + j;
863 const Eina_Model_Type *omtype = o->provider.type;
864 WRN("Ignored duplicated event '%s' (type: '%s') from "
865 "model type %p (%s): already exists with type '%s' "
866 "from model type %p (%s)",
867 itr->name,
868 itr->type ? itr->type : "",
869 mtype, mtype->name,
870 o->desc->type ? o->desc->type : "",
871 omtype, omtype->name);
872 continue;
873 }
874
875 desc->cache.events[desc->total.events].name = itr->name;
876 desc->cache.events[desc->total.events].desc = itr;
877 desc->cache.events[desc->total.events].provider.type = mtype;
878 desc->total.events++;
879 }
880 }
881
882 for (i = 0; i < desc->total.ifaces; i++)
883 {
884 const Eina_Model_Interface *miface = desc->cache.ifaces[i];
885 const Eina_Model_Event_Description *itr = desc->cache.ifaces[i]->events;
886 if (!itr) continue;
887 for (; itr->name != NULL; itr++)
888 {
889 int j = _eina_model_description_events_find(desc, itr);
890 if (j >= 0)
891 {
892 const Eina_Model_Event_Description_Cache *o = desc->cache.events + j;
893 if ((unsigned)j < type_events)
894 {
895 const Eina_Model_Type *omtype = o->provider.type;
896 WRN("Ignored duplicated event '%s' (type: '%s') from "
897 "model interface %p (%s): already exists with "
898 "type '%s' from model interface %p (%s)",
899 itr->name,
900 itr->type ? itr->type : "",
901 miface, miface->name,
902 o->desc->type ? o->desc->type : "",
903 omtype, omtype->name);
904 }
905 else
906 {
907 const Eina_Model_Interface *omiface = o->provider.iface;
908 WRN("Ignored duplicated event '%s' (iface: '%s') from "
909 "model interface %p (%s): already exists with "
910 "interface '%s' from model interface %p (%s)",
911 itr->name,
912 itr->type ? itr->type : "",
913 miface, miface->name,
914 o->desc->type ? o->desc->type : "",
915 omiface, omiface->name);
916 }
917 continue;
918 }
919
920 desc->cache.events[desc->total.events].name = itr->name;
921 desc->cache.events[desc->total.events].desc = itr;
922 desc->cache.events[desc->total.events].provider.iface = miface;
923 desc->total.events++;
924 }
925 }
926
927 qsort(desc->cache.events, desc->total.events,
928 sizeof(Eina_Model_Event_Description_Cache),
929 _eina_model_description_events_cmp);
930
931 return EINA_TRUE;
932}
933
934static const Eina_Model_Description *
935_eina_model_description_get_internal(const Eina_Model_Type *type)
936{
937 Eina_Model_Description *desc;
938
939 desc = eina_hash_find(_eina_model_descriptions, &type);
940 if (desc)
941 {
942 desc->refcount++;
943 return desc;
944 }
945
946 desc = calloc(1, sizeof(Eina_Model_Description));
947 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
948
949 if (!_eina_model_description_type_fill(desc, type)) goto failed_type;
950 if (!_eina_model_description_ifaces_fill(desc)) goto failed_ifaces;
951 if (!_eina_model_description_privates_fill(desc)) goto failed_privates;
952 if (!_eina_model_description_events_fill(desc)) goto failed_events;
953 if (!eina_hash_add(_eina_model_descriptions, &type, desc)) goto failed_hash;
954
955 desc->refcount = 1;
956 return desc;
957
958 failed_hash:
959 free(desc->cache.events);
960 failed_events:
961 free(desc->cache.privates);
962 failed_privates:
963 free(desc->cache.ifaces);
964 failed_ifaces:
965 free(desc->cache.types);
966 free(desc->ops.type.extension);
967 failed_type:
968 free(desc);
969 return NULL;
970}
971
972static void
973_eina_model_description_dispose_internal(Eina_Model_Description *desc)
974{
975 const Eina_Model_Type *type;
976
977 EINA_SAFETY_ON_FALSE_RETURN(desc->refcount > 0);
978 desc->refcount--;
979 if (desc->refcount > 0) return;
980
981 type = desc->cache.types[0];
982 if (!eina_hash_del_by_key(_eina_model_descriptions, &type))
983 ERR("Cannot find type %p (%s) in descriptions hash!",
984 type, type->name);
985
986 INF("Disposed model description for type %p (%s)", type, type->name);
987
988 free(desc->ops.type.extension);
989 free(desc->cache.types);
990 free(desc->cache.ifaces);
991 free(desc->cache.privates);
992 free(desc->cache.events);
993 free(desc);
994}
995
996static const Eina_Model_Description *
997_eina_model_description_get(const Eina_Model_Type *type)
998{
999 const Eina_Model_Description *desc;
1000
1001 eina_lock_take(&_eina_model_descriptions_lock);
1002 desc = _eina_model_description_get_internal(type);
1003 eina_lock_release(&_eina_model_descriptions_lock);
1004
1005 return desc;
1006}
1007
1008static void
1009_eina_model_description_dispose(const Eina_Model_Description *desc)
1010{
1011 eina_lock_take(&_eina_model_descriptions_lock);
1012 _eina_model_description_dispose_internal((Eina_Model_Description *)desc);
1013 eina_lock_release(&_eina_model_descriptions_lock);
1014}
1015
1016static inline int
1017_eina_model_description_event_id_find(const Eina_Model_Description *desc, const char *event_name)
1018{
1019 const Eina_Model_Event_Description_Cache *cache;
1020 Eina_Model_Event_Description_Cache criteria_match;
1021
1022 criteria_match.name = event_name;
1023 cache = bsearch(&criteria_match, desc->cache.events, desc->total.events,
1024 sizeof(Eina_Model_Event_Description_Cache),
1025 _eina_model_description_events_cmp);
1026 if (!cache)
1027 {
1028 ERR("No event named %s for type %p (%s)", event_name,
1029 desc->cache.types[0], desc->cache.types[0]->name);
1030 return -1;
1031 }
1032
1033 return cache - desc->cache.events;
1034}
1035
1036/*
1037 * Model management and book keeping
1038 */
1039typedef struct _Eina_Model_Event_Listener Eina_Model_Event_Listener;
1040struct _Eina_Model_Event_Listener
1041{
1042 EINA_INLIST;
1043 Eina_Model_Event_Cb cb;
1044 const void *data;
1045 Eina_Bool deleted:1;
1046};
1047
1048struct _Eina_Model
1049{
1050 const Eina_Model_Description *desc; /**< optimized model description */
1051 struct {
1052 Eina_Inlist **entries; /**< connected/listeners for each event, array of lists of Eina_Model_Event_Listener */
1053 Eina_List **deleted; /**< deleted listeners while was walking. array of lists of Eina_Model_Event_Listener with deleted flag */
1054 int *freeze; /**< freeze count for each event */
1055 int walking; /**< increased while walking entries lists */
1056 } listeners;
1057 void **privates; /**< private data per type and interface, each level gets its own stuff */
1058 Eina_Inlist *xrefs; /**< if EINA_MODEL_DEBUG and eina_model_xref() is used */
1059 int refcount; /**< number of users of this model instance */
1060 Eina_Bool deleted:1; /**< if deleted but still have references */
1061 EINA_MAGIC
1062};
1063
1064static inline Eina_Bool
1065_eina_model_type_check(const Eina_Model_Type *type)
1066{
1067 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
1068 EINA_SAFETY_ON_FALSE_RETURN_VAL(type->version == EINA_MODEL_TYPE_VERSION,
1069 EINA_FALSE);
1070 return EINA_TRUE;
1071}
1072
1073/* find in type hierarchy the first one that the given offset is not a null
1074 * pointer. Use this to discover which method to call on a parent.
1075 */
1076static const void *
1077_eina_model_type_find_offset(const Eina_Model_Type *type, unsigned int offset)
1078{
1079 const unsigned char *ptr = (const unsigned char *)type;
1080 const void **addr = (const void **)(ptr + offset);
1081
1082 if (*addr) return *addr;
1083 if (!type->parent) return NULL;
1084 return _eina_model_type_find_offset(type->parent, offset);
1085}
1086
1087/* find in interface hierarchy the first one that the given offset is
1088 * not a null pointer. Use this to discover which method to call on a
1089 * parent.
1090 *
1091 * TODO: Keep Eina_Model_Interface_Description with topological sorted
1092 * entries for each interface?
1093 * I smell problems with the current code in more complex
1094 * situations (k-s)
1095 *
1096 * iface1
1097 * ^
1098 * |
1099 * .---------+---------.
1100 * | | |
1101 * iface2 iface3 iface4
1102 * ^ ^ ^
1103 * | | |
1104 * `---------+---------'
1105 * |
1106 * iface5
1107 *
1108 * It should look: iface5 -> iface2 -> iface3 -> iface4 -> iface1
1109 * Now it does: iface5 -> iface2 -> iface1 -> iface3 -> iface1 -> iface4 -> iface1
1110 *
1111 *
1112 * iface1
1113 * ^
1114 * |
1115 * iface2
1116 * ^
1117 * |
1118 * .---------+---------.
1119 * | |
1120 * iface3 iface4
1121 * ^ ^
1122 * | |
1123 * `---------+---------'
1124 * |
1125 * iface5
1126 *
1127 * It should look: iface5 -> iface3 -> iface4 -> iface2 -> iface1
1128 * Now it does: iface5 -> iface3 -> iface2 -> iface1 -> iface4 -> iface2 -> iface1
1129 *
1130 *
1131 * iface1 iface2
1132 * ^ ^
1133 * | |
1134 * `---------+---------'
1135 * |
1136 * iface3
1137 *
1138 * It should look: iface3 -> iface1 -> iface2
1139 * Now it does: iface3 -> iface1 -> iface2
1140 *
1141 * For the common case it should work, let's see.
1142 */
1143static const void *
1144_eina_model_interface_find_offset(const Eina_Model_Interface *iface, unsigned int offset)
1145{
1146 const Eina_Model_Interface **itr;
1147 const unsigned char *ptr = (const unsigned char *)iface;
1148 const void **addr = (const void **)(ptr + offset);
1149
1150 if (offset + sizeof(void *) > iface->interface_size) return NULL;
1151
1152 if (*addr) return *addr;
1153 if (!iface->interfaces) return NULL;
1154
1155 for (itr = iface->interfaces; *itr != NULL; itr++)
1156 {
1157 const void *r = _eina_model_interface_find_offset(*itr, offset);
1158 if (r)
1159 return r;
1160 }
1161
1162 return NULL;
1163}
1164
1165static void
1166_eina_model_event_callback_free_deleted(Eina_Model *model)
1167{
1168 unsigned int i;
1169
1170 for (i = 0; i < model->desc->total.events; i++)
1171 {
1172 Eina_Model_Event_Listener *el;
1173 EINA_LIST_FREE(model->listeners.deleted[i], el)
1174 {
1175 model->listeners.entries[i] = eina_inlist_remove
1176 (model->listeners.entries[i], EINA_INLIST_GET(el));
1177 _eina_model_inner_free(sizeof(Eina_Model_Event_Listener), el);
1178 }
1179 }
1180
1181 _eina_model_inner_free(model->desc->total.events * sizeof(Eina_List *),
1182 model->listeners.deleted);
1183 model->listeners.deleted = NULL;
1184}
1185
1186static inline Eina_Bool
1187_eina_model_event_callback_call(Eina_Model *model, const char *name, const void *event_info)
1188{
1189 Eina_Inlist *lst;
1190 Eina_Model_Event_Listener *el;
1191 const Eina_Model_Event_Description *ev_desc;
1192 int event_id = _eina_model_description_event_id_find(model->desc, name);
1193
1194 if (event_id < 0) return EINA_FALSE;
1195 if (!model->listeners.entries) return EINA_TRUE;
1196
1197 if ((model->listeners.freeze) && (model->listeners.freeze[event_id]))
1198 {
1199 DBG("Ignored event callback '%s' of model %p (%s): frozen",
1200 name, model, model->desc->cache.types[0]->name);
1201 return EINA_TRUE;
1202 }
1203
1204 lst = model->listeners.entries[event_id];
1205 if (!lst) return EINA_TRUE;
1206
1207 ev_desc = model->desc->cache.events[event_id].desc;
1208
1209 model->listeners.walking++;
1210 EINA_INLIST_FOREACH(lst, el)
1211 {
1212 if (el->deleted) continue;
1213 el->cb((void *)el->data, model, ev_desc, (void *)event_info);
1214 }
1215 model->listeners.walking--;
1216
1217 if ((model->listeners.walking == 0) && (model->listeners.deleted))
1218 _eina_model_event_callback_free_deleted(model);
1219
1220 return EINA_FALSE;
1221}
1222
1223static const char EINA_ERROR_MODEL_FAILED_STR[] = "Model check failed.";
1224static const char EINA_ERROR_MODEL_METHOD_MISSING_STR[] = "Model method is missing.";
1225static const char EINA_MAGIC_MODEL_STR[] = "Eina Model";
1226
1227static void _eina_model_unref(Eina_Model *model);
1228
1229/**
1230 * @endcond
1231 */
1232
1233/* EINA_MODEL_TYPE_BASE: base of all other types **********************/
1234
1235static Eina_Bool
1236_eina_model_type_base_setup(Eina_Model *model)
1237{
1238 DBG("base setup of %p", model);
1239 return EINA_TRUE;
1240}
1241
1242static Eina_Bool
1243_eina_model_type_base_flush(Eina_Model *model)
1244{
1245 DBG("base flush of %p", model);
1246 return EINA_TRUE;
1247}
1248
1249static Eina_Bool
1250_eina_model_type_base_constructor(Eina_Model *model)
1251{
1252 DBG("base constructor of %p", model);
1253 return EINA_TRUE;
1254}
1255
1256static Eina_Bool
1257_eina_model_type_base_destructor(Eina_Model *model)
1258{
1259 DBG("base destructor of %p", model);
1260 return EINA_TRUE;
1261}
1262
1263static Eina_Bool
1264_eina_model_type_base_properties_copy(const Eina_Model *model, Eina_Model *copy)
1265{
1266 Eina_List *l, *props = eina_model_properties_names_list_get(model);
1267 const char *name;
1268 EINA_LIST_FOREACH(props, l, name)
1269 {
1270 Eina_Value tmp;
1271 if (!eina_model_property_get(model, name, &tmp))
1272 {
1273 ERR("Could not get property %s from model %p (%s)",
1274 name, model, model->desc->cache.types[0]->name);
1275 eina_model_properties_names_list_free(props);
1276 return EINA_FALSE;
1277 }
1278 if (!eina_model_property_set(copy, name, &tmp))
1279 {
1280 ERR("Could not set property %s on model %p (%s)",
1281 name, copy, copy->desc->cache.types[0]->name);
1282 eina_value_flush(&tmp);
1283 eina_model_properties_names_list_free(props);
1284 return EINA_FALSE;
1285 }
1286 eina_value_flush(&tmp);
1287 }
1288 eina_model_properties_names_list_free(props);
1289 return EINA_TRUE;
1290}
1291
1292static Eina_Bool
1293_eina_model_type_base_children_copy(const Eina_Model *model, Eina_Model *copy)
1294{
1295 int i, count = eina_model_child_count(model);
1296
1297 if (count < 0)
1298 {
1299 ERR("Could not get children count of model %p (%s)",
1300 model, model->desc->cache.types[0]->name);
1301 return EINA_FALSE;
1302 }
1303
1304 for (i = 0; i < count; i++)
1305 {
1306 Eina_Model *child = eina_model_child_get(model, i);
1307 Eina_Bool ret;
1308
1309 if (!child)
1310 {
1311 ERR("Could not get child #%d from model %p (%s)",
1312 i, model, model->desc->cache.types[0]->name);
1313 return EINA_FALSE;
1314 }
1315
1316 ret = eina_model_child_insert_at(copy, i, child);
1317 _eina_model_unref(child);
1318
1319 if (!ret)
1320 {
1321 ERR("Could not set child #%d on model %p (%s)",
1322 i, copy, copy->desc->cache.types[0]->name);
1323 return EINA_FALSE;
1324 }
1325 }
1326
1327 return EINA_TRUE;
1328}
1329
1330static Eina_Bool
1331_eina_model_type_base_copy(const Eina_Model *model, Eina_Model *copy)
1332{
1333 DBG("base copy of %p to %p", model, copy);
1334
1335 return _eina_model_type_base_properties_copy(model, copy) &&
1336 _eina_model_type_base_children_copy(model, copy);
1337}
1338
1339static Eina_Bool
1340_eina_model_type_base_children_deep_copy(const Eina_Model *model, Eina_Model *copy)
1341{
1342 int i, count = eina_model_child_count(model);
1343
1344 if (count < 0)
1345 {
1346 ERR("Could not get children count of model %p (%s)",
1347 model, model->desc->cache.types[0]->name);
1348 return EINA_FALSE;
1349 }
1350
1351 for (i = 0; i < count; i++)
1352 {
1353 Eina_Model *child_copy, *child = eina_model_child_get(model, i);
1354 Eina_Bool ret;
1355
1356 if (!child)
1357 {
1358 ERR("Could not get child #%d from model %p (%s)",
1359 i, model, model->desc->cache.types[0]->name);
1360 return EINA_FALSE;
1361 }
1362
1363 child_copy = eina_model_deep_copy(child);
1364 if (!child_copy)
1365 {
1366 ERR("Could not deep copy child #%d %p (%s) from model %p (%s)", i,
1367 child, child->desc->cache.types[0]->name,
1368 model, model->desc->cache.types[0]->name);
1369 _eina_model_unref(child);
1370 return EINA_FALSE;
1371 }
1372 _eina_model_unref(child);
1373
1374 ret = eina_model_child_insert_at(copy, i, child_copy);
1375 _eina_model_unref(child_copy);
1376
1377 if (!ret)
1378 {
1379 ERR("Could not set child #%d on model %p (%s)",
1380 i, copy, copy->desc->cache.types[0]->name);
1381 return EINA_FALSE;
1382 }
1383 }
1384
1385 return EINA_TRUE;
1386}
1387
1388static Eina_Bool
1389_eina_model_type_base_deep_copy(const Eina_Model *model, Eina_Model *copy)
1390{
1391 DBG("base deep copy of %p to %p", model, copy);
1392
1393 return _eina_model_type_base_properties_copy(model, copy) &&
1394 _eina_model_type_base_children_deep_copy(model, copy);
1395}
1396
1397static Eina_Bool
1398_eina_model_type_base_properties_compare(const Eina_Model *a, const Eina_Model *b, int *cmp)
1399{
1400 Eina_List *al, *aprops = eina_model_properties_names_list_get(a);
1401 Eina_List *bl, *bprops = eina_model_properties_names_list_get(b);
1402 Eina_List *l, *props = NULL;
1403 const char *aname, *bname, *name;
1404 Eina_Bool ret = EINA_TRUE;
1405
1406 EINA_LIST_FOREACH(aprops, al, aname)
1407 {
1408 EINA_LIST_FOREACH(bprops, bl, bname)
1409 if (strcmp(aname, bname) == 0)
1410 {
1411 props = eina_list_append(props, aname);
1412 break;
1413 }
1414 }
1415
1416 *cmp = 0;
1417 EINA_LIST_FOREACH(props, l, name)
1418 {
1419 Eina_Value atmp, btmp;
1420
1421 if (!eina_model_property_get(a, name, &atmp))
1422 {
1423 ERR("Could not get property %s from model %p (%s)",
1424 name, a, a->desc->cache.types[0]->name);
1425 ret = EINA_FALSE;
1426 *cmp = -1;
1427 break;
1428 }
1429
1430 if (!eina_model_property_get(b, name, &btmp))
1431 {
1432 ERR("Could not get property %s from model %p (%s)",
1433 name, b, b->desc->cache.types[0]->name);
1434 ret = EINA_FALSE;
1435 *cmp = -1;
1436 eina_value_flush(&atmp);
1437 break;
1438 }
1439
1440 *cmp = eina_value_compare(&atmp, &btmp);
1441 if (eina_error_get() != 0)
1442 {
1443 char *astr = eina_value_to_string(&atmp);
1444 char *bstr = eina_value_to_string(&btmp);
1445 ERR("Could not compare property %s: %s=%s, %s=%s", name,
1446 eina_value_type_name_get(eina_value_type_get(&atmp)), astr,
1447 eina_value_type_name_get(eina_value_type_get(&btmp)), bstr);
1448 free(astr);
1449 free(bstr);
1450 ret = EINA_FALSE;
1451 *cmp = -1;
1452 }
1453
1454 eina_value_flush(&atmp);
1455 eina_value_flush(&btmp);
1456
1457 if ((!ret) || (*cmp != 0))
1458 break;
1459 }
1460
1461 if ((ret) && (*cmp == 0))
1462 {
1463 int acount = eina_list_count(aprops);
1464 int bcount = eina_list_count(bprops);
1465
1466 if (acount < bcount)
1467 *cmp = -1;
1468 else if (acount > bcount)
1469 *cmp = 1;
1470 }
1471
1472 eina_model_properties_names_list_free(aprops);
1473 eina_model_properties_names_list_free(bprops);
1474 eina_list_free(props);
1475 return ret;
1476}
1477
1478static Eina_Bool
1479_eina_model_type_base_children_compare(const Eina_Model *a, const Eina_Model *b, int *cmp)
1480{
1481 int acount = eina_model_child_count(a);
1482 int bcount = eina_model_child_count(b);
1483 int i, count;
1484 Eina_Bool ret = EINA_TRUE;
1485
1486 if (acount < 0)
1487 {
1488 ERR("Could not get children count of model %p (%s)",
1489 a, a->desc->cache.types[0]->name);
1490 return EINA_FALSE;
1491 }
1492 if (bcount < 0)
1493 {
1494 ERR("Could not get children count of model %p (%s)",
1495 b, b->desc->cache.types[0]->name);
1496 return EINA_FALSE;
1497 }
1498
1499 if (acount < bcount)
1500 count = acount;
1501 else
1502 count = bcount;
1503
1504 for (i = 0; i < count; i++)
1505 {
1506 Eina_Model *achild, *bchild;
1507
1508 achild = eina_model_child_get(a, i);
1509 if (!achild)
1510 {
1511 ERR("Could not get child #%d from model %p (%s)",
1512 i, a, a->desc->cache.types[0]->name);
1513 *cmp = -1;
1514 return EINA_FALSE;
1515 }
1516
1517 bchild = eina_model_child_get(b, i);
1518 if (!bchild)
1519 {
1520 ERR("Could not get child #%d from model %p (%s)",
1521 i, b, b->desc->cache.types[0]->name);
1522 *cmp = -1;
1523 _eina_model_unref(achild);
1524 return EINA_FALSE;
1525 }
1526
1527 *cmp = eina_model_compare(achild, bchild);
1528 if (eina_error_get())
1529 {
1530 ERR("Could not compare children #%d %p (%s) and %p (%s) "
1531 "from models %p (%s) and %p (%s)", i,
1532 achild,
1533 eina_model_type_name_get(eina_model_type_get(achild)),
1534 bchild,
1535 eina_model_type_name_get(eina_model_type_get(bchild)),
1536 a, a->desc->cache.types[0]->name,
1537 b, b->desc->cache.types[0]->name);
1538 ret = EINA_FALSE;
1539 }
1540 _eina_model_unref(achild);
1541 _eina_model_unref(bchild);
1542
1543 if ((!ret) || (*cmp != 0))
1544 break;
1545 }
1546
1547 if ((ret) && (*cmp == 0))
1548 {
1549 if (acount < bcount)
1550 *cmp = -1;
1551 else if (acount > bcount)
1552 *cmp = 1;
1553 }
1554
1555 return ret;
1556}
1557
1558static Eina_Bool
1559_eina_model_type_base_compare(const Eina_Model *a, const Eina_Model *b, int *cmp)
1560{
1561 *cmp = 0;
1562 DBG("base compare of %p and %p", a, b);
1563
1564 if (!_eina_model_type_base_properties_compare(a, b, cmp))
1565 return EINA_FALSE;
1566
1567 if (*cmp != 0)
1568 return EINA_TRUE;
1569
1570 return _eina_model_type_base_children_compare(a, b, cmp);
1571}
1572
1573static int
1574_eina_model_type_base_child_count(const Eina_Model *model)
1575{
1576 DBG("base child_count of %p", model);
1577 return 0;
1578}
1579
1580static int
1581_eina_model_type_base_child_find(const Eina_Model *model, unsigned int start_position, const Eina_Model *other)
1582{
1583 int x = eina_model_child_count(model);
1584 unsigned int i, count;
1585
1586 DBG("base child_find of %p, %d children", model, x);
1587
1588 if (x < 0)
1589 return -1;
1590
1591 count = x;
1592 for (i = start_position; i < count; i++)
1593 {
1594 Eina_Model *current = eina_model_child_get(model, i);
1595 if (current)
1596 {
1597 _eina_model_unref(current); /* we'll not use it's value anyway */
1598 if (current == other)
1599 return i;
1600 }
1601 }
1602
1603 return -1;
1604}
1605
1606static int
1607_eina_model_type_base_child_criteria_match(const Eina_Model *model, unsigned int start_position, Eina_Each_Cb match, const void *user_data)
1608{
1609 int x = eina_model_child_count(model);
1610 unsigned int i, count;
1611
1612 DBG("base child_criteria_match of %p, %d children", model, x);
1613
1614 if (x < 0)
1615 return -1;
1616
1617 count = x;
1618 for (i = start_position; i < count; i++)
1619 {
1620 Eina_Model *current = eina_model_child_get(model, i);
1621 if (current)
1622 {
1623 Eina_Bool r = match(model, current, (void *)user_data);
1624 _eina_model_unref(current);
1625 if (r)
1626 return i;
1627 }
1628 }
1629
1630 return -1;
1631}
1632
1633typedef struct _Eina_Iterator_Model_Base Eina_Iterator_Model_Base;
1634struct _Eina_Iterator_Model_Base
1635{
1636 Eina_Iterator base;
1637 Eina_Model *model;
1638 unsigned int current;
1639 unsigned int end;
1640};
1641
1642static Eina_Bool
1643_eina_model_type_base_child_iterator_next(Eina_Iterator *base, void **data)
1644{
1645 Eina_Iterator_Model_Base *it;
1646
1647 it = (Eina_Iterator_Model_Base *)base;
1648 if (it->current >= it->end)
1649 return EINA_FALSE;
1650
1651 *data = eina_model_child_get(it->model, it->current);
1652 if (!*data)
1653 return EINA_FALSE;
1654
1655 it->current++;
1656 return EINA_TRUE;
1657}
1658
1659static void *
1660_eina_model_type_base_child_iterator_get_container(Eina_Iterator *base)
1661{
1662 Eina_Iterator_Model_Base *it;
1663 it = (Eina_Iterator_Model_Base *)base;
1664 return it->model;
1665}
1666
1667static void
1668_eina_model_type_base_child_iterator_free(Eina_Iterator *base)
1669{
1670 Eina_Iterator_Model_Base *it;
1671 it = (Eina_Iterator_Model_Base *)base;
1672 eina_model_xunref(it->model, it);
1673 free(it);
1674}
1675
1676static Eina_Iterator *
1677_eina_model_type_base_child_iterator_get(Eina_Model *model, unsigned int start, unsigned int count)
1678{
1679 Eina_Iterator_Model_Base *it = calloc(1, sizeof(*it));
1680 EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
1681
1682 EINA_MAGIC_SET(&it->base, EINA_MAGIC_ITERATOR);
1683 it->base.version = EINA_ITERATOR_VERSION;
1684 it->base.next = _eina_model_type_base_child_iterator_next;
1685 it->base.get_container = _eina_model_type_base_child_iterator_get_container;
1686 it->base.free = _eina_model_type_base_child_iterator_free;
1687
1688 it->model = eina_model_xref(model, it, "eina_model_child_slice_iterator_get");
1689 it->current = start;
1690 it->end = start + count;
1691
1692 return &it->base;
1693}
1694
1695typedef struct _Eina_Iterator_Model_Base_Reversed Eina_Iterator_Model_Base_Reversed;
1696struct _Eina_Iterator_Model_Base_Reversed
1697{
1698 Eina_Iterator base;
1699 Eina_Model *model;
1700 unsigned int current;
1701 unsigned int end;
1702};
1703
1704static Eina_Bool
1705_eina_model_type_base_child_reversed_iterator_next(Eina_Iterator *base, void **data)
1706{
1707 Eina_Iterator_Model_Base_Reversed *it;
1708
1709 it = (Eina_Iterator_Model_Base_Reversed *)base;
1710 if (it->current == it->end)
1711 return EINA_FALSE;
1712
1713 it->current--;
1714 *data = eina_model_child_get(it->model, it->current);
1715 if (!*data)
1716 return EINA_FALSE;
1717
1718 return EINA_TRUE;
1719}
1720
1721static void *
1722_eina_model_type_base_child_reversed_iterator_get_container(Eina_Iterator *base)
1723{
1724 Eina_Iterator_Model_Base_Reversed *it;
1725 it = (Eina_Iterator_Model_Base_Reversed *)base;
1726 return it->model;
1727}
1728
1729static void
1730_eina_model_type_base_child_reversed_iterator_free(Eina_Iterator *base)
1731{
1732 Eina_Iterator_Model_Base_Reversed *it;
1733 it = (Eina_Iterator_Model_Base_Reversed *)base;
1734 eina_model_xunref(it->model, it);
1735 free(it);
1736}
1737
1738static Eina_Iterator *
1739_eina_model_type_base_child_reversed_iterator_get(Eina_Model *model, unsigned int start, unsigned int count)
1740{
1741 Eina_Iterator_Model_Base_Reversed *it;
1742 int children_count;
1743
1744 children_count = eina_model_child_count(model);
1745 if (children_count < 0)
1746 return NULL;
1747
1748 if (start + count > (unsigned int)children_count)
1749 {
1750 if (start >= (unsigned int)children_count)
1751 count = 0;
1752 else
1753 count = children_count - start;
1754 }
1755
1756 it = calloc(1, sizeof(*it));
1757 EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
1758 EINA_MAGIC_SET(&it->base, EINA_MAGIC_ITERATOR);
1759 it->base.version = EINA_ITERATOR_VERSION;
1760 it->base.next = _eina_model_type_base_child_reversed_iterator_next;
1761 it->base.get_container = _eina_model_type_base_child_reversed_iterator_get_container;
1762 it->base.free = _eina_model_type_base_child_reversed_iterator_free;
1763
1764 it->model = eina_model_xref(model, it, "eina_model_child_slice_reversed_iterator_get");
1765 it->current = start + count;
1766 it->end = start;
1767
1768 return &it->base;
1769}
1770
1771typedef struct _Eina_Iterator_Model_Base_Sorted Eina_Iterator_Model_Base_Sorted;
1772struct _Eina_Iterator_Model_Base_Sorted
1773{
1774 Eina_Iterator base;
1775 Eina_Model *model;
1776 unsigned int current;
1777 unsigned int count;
1778 Eina_Model *elements[];
1779};
1780
1781static Eina_Bool
1782_eina_model_type_base_child_sorted_iterator_next(Eina_Iterator *base, void **data)
1783{
1784 Eina_Iterator_Model_Base_Sorted *it;
1785
1786 it = (Eina_Iterator_Model_Base_Sorted *)base;
1787 if (it->current == it->count)
1788 return EINA_FALSE;
1789
1790 *data = eina_model_ref(it->elements[it->current]);
1791 it->current++;
1792 return EINA_TRUE;
1793}
1794
1795static void *
1796_eina_model_type_base_child_sorted_iterator_get_container(Eina_Iterator *base)
1797{
1798 Eina_Iterator_Model_Base_Sorted *it;
1799 it = (Eina_Iterator_Model_Base_Sorted *)base;
1800 return it->model;
1801}
1802
1803static void
1804_eina_model_type_base_child_sorted_iterator_free(Eina_Iterator *base)
1805{
1806 Eina_Iterator_Model_Base_Sorted *it;
1807 unsigned int i;
1808 it = (Eina_Iterator_Model_Base_Sorted *)base;
1809 eina_model_xunref(it->model, it);
1810
1811 for (i = 0; i < it->count; i++)
1812 _eina_model_unref(it->elements[i]);
1813
1814 free(it);
1815}
1816
1817static Eina_Iterator *
1818_eina_model_type_base_child_sorted_iterator_get(Eina_Model *model, unsigned int start, unsigned int count, Eina_Compare_Cb compare)
1819{
1820 Eina_Iterator_Model_Base_Sorted *it;
1821 int children_count;
1822 unsigned int i;
1823
1824 children_count = eina_model_child_count(model);
1825 if (children_count < 0)
1826 return NULL;
1827
1828 if (start + count > (unsigned int)children_count)
1829 {
1830 if (start >= (unsigned int)children_count)
1831 count = 0;
1832 else
1833 count = children_count - start;
1834 }
1835
1836 it = calloc(1, sizeof(*it) + count * sizeof(Eina_Model *));
1837 EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
1838 EINA_MAGIC_SET(&it->base, EINA_MAGIC_ITERATOR);
1839 it->base.version = EINA_ITERATOR_VERSION;
1840 it->base.next = _eina_model_type_base_child_sorted_iterator_next;
1841 it->base.get_container = _eina_model_type_base_child_sorted_iterator_get_container;
1842 it->base.free = _eina_model_type_base_child_sorted_iterator_free;
1843
1844 it->model = eina_model_xref(model, it, "eina_model_child_slice_sorted_iterator_get");
1845 it->current = 0;
1846 it->count = count;
1847
1848 for (i = 0; i < count; i++)
1849 {
1850 it->elements[i] = eina_model_child_get(model, i + start);
1851 if (!it->elements[i])
1852 {
1853 ERR("Failed to get child %u of model %p (%s)",
1854 i + start, model, model->desc->cache.types[0]->name);
1855 free(it);
1856 return NULL;
1857 }
1858 }
1859
1860 if (count > 1)
1861 _eina_model_array_sort(it->elements, 0, count - 1, compare);
1862
1863 return &it->base;
1864}
1865
1866typedef struct _Eina_Iterator_Model_Base_Filtered Eina_Iterator_Model_Base_Filtered;
1867struct _Eina_Iterator_Model_Base_Filtered
1868{
1869 Eina_Iterator base;
1870 Eina_Model *model;
1871 Eina_Each_Cb match;
1872 const void *data;
1873 unsigned int current;
1874 unsigned int count;
1875};
1876
1877static Eina_Bool
1878_eina_model_type_base_child_filtered_iterator_next(Eina_Iterator *base, void **data)
1879{
1880 Eina_Iterator_Model_Base_Filtered *it;
1881 unsigned int *ret;
1882 int i;
1883
1884 it = (Eina_Iterator_Model_Base_Filtered *)base;
1885 if (it->count == 0) return EINA_FALSE;
1886
1887 i = eina_model_child_criteria_match(it->model, it->current, it->match, it->data);
1888 if (i < 0) return EINA_FALSE;
1889
1890 it->current = i + 1;
1891 it->count--;
1892 ret = (unsigned int *)data;
1893 *ret = i;
1894 return EINA_TRUE;
1895}
1896
1897static void *
1898_eina_model_type_base_child_filtered_iterator_get_container(Eina_Iterator *base)
1899{
1900 Eina_Iterator_Model_Base_Filtered *it;
1901 it = (Eina_Iterator_Model_Base_Filtered *)base;
1902 return it->model;
1903}
1904
1905static void
1906_eina_model_type_base_child_filtered_iterator_free(Eina_Iterator *base)
1907{
1908 Eina_Iterator_Model_Base_Filtered *it;
1909 it = (Eina_Iterator_Model_Base_Filtered *)base;
1910 eina_model_xunref(it->model, it);
1911 free(it);
1912}
1913
1914static Eina_Iterator *
1915_eina_model_type_base_child_filtered_iterator_get(Eina_Model *model, unsigned int start, unsigned int count, Eina_Each_Cb match, const void *data)
1916{
1917 Eina_Iterator_Model_Base_Filtered *it = calloc(1, sizeof(*it));
1918 EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
1919
1920 EINA_MAGIC_SET(&it->base, EINA_MAGIC_ITERATOR);
1921 it->base.version = EINA_ITERATOR_VERSION;
1922 it->base.next = _eina_model_type_base_child_filtered_iterator_next;
1923 it->base.get_container = _eina_model_type_base_child_filtered_iterator_get_container;
1924 it->base.free = _eina_model_type_base_child_filtered_iterator_free;
1925
1926 it->model = eina_model_xref(model, it, "eina_model_child_slice_filtered_iterator_get");
1927 it->match = match;
1928 it->data = data;
1929 it->current = start;
1930 it->count = count;
1931
1932 return &it->base;
1933}
1934
1935static char *
1936_eina_model_type_base_to_string(const Eina_Model *model)
1937{
1938 Eina_List *l, *props;
1939 const char *name;
1940 Eina_Strbuf *str;
1941 Eina_Bool first;
1942 int i, count;
1943 char *ret;
1944
1945 str = eina_strbuf_new();
1946 EINA_SAFETY_ON_NULL_RETURN_VAL(str, NULL);
1947
1948 eina_strbuf_append_printf(str, "%s({", model->desc->cache.types[0]->name);
1949
1950 props = eina_model_properties_names_list_get(model);
1951 props = eina_list_sort(props, 0, EINA_COMPARE_CB(strcmp));
1952
1953 first = EINA_TRUE;
1954 EINA_LIST_FOREACH(props, l, name)
1955 {
1956 Eina_Value val;
1957
1958 if (!first)
1959 eina_strbuf_append_printf(str, ", %s: ", name);
1960 else
1961 {
1962 eina_strbuf_append_printf(str, "%s: ", name);
1963 first = EINA_FALSE;
1964 }
1965
1966 if (!eina_model_property_get(model, name, &val))
1967 eina_strbuf_append_char(str, '?');
1968 else
1969 {
1970 char *tmp = eina_value_to_string(&val);
1971 eina_strbuf_append(str, tmp ? tmp : "?");
1972 free(tmp);
1973 eina_value_flush(&val);
1974 }
1975 }
1976 eina_list_free(props);
1977
1978 eina_strbuf_append(str, "}, [");
1979
1980 count = eina_model_child_count(model);
1981 first = EINA_TRUE;
1982 for (i = 0; i < count; i++)
1983 {
1984 Eina_Model *c = eina_model_child_get(model, i);
1985 if (!c)
1986 {
1987 if (!first)
1988 eina_strbuf_append(str, ", ?");
1989 else
1990 {
1991 eina_strbuf_append_char(str, '?');
1992 first = EINA_FALSE;
1993 }
1994 }
1995 else
1996 {
1997 char *tmp = eina_model_to_string(c);
1998 if (!first)
1999 eina_strbuf_append_printf(str, ", %s", tmp ? tmp : "?");
2000 else
2001 {
2002 eina_strbuf_append(str, tmp ? tmp : "?");
2003 first = EINA_FALSE;
2004 }
2005 free(tmp);
2006 _eina_model_unref(c);
2007 }
2008 }
2009
2010 eina_strbuf_append(str, "])");
2011
2012 ret = eina_strbuf_string_steal(str);
2013 eina_strbuf_free(str);
2014
2015 return ret;
2016}
2017
2018static const Eina_Model_Event_Description _eina_model_type_base_events[] = {
2019 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_deleted, "", "model was deleted"),
2020 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_freed, "", "model memory was released"),
2021 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_property_set, "s", "model data was set, data name given as event information."),
2022 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_property_del, "s", "model data was deleted, data name given as event information."),
2023 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_children_changed, "", "model children changed (deleted, inserted)."),
2024 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_child_inserted, "u", "model child was inserted, child position is given."),
2025 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_child_set, "u", "model child was set, child position is given."),
2026 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_child_del, "u", "model child was deleted, child position is given."),
2027 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_loaded, "", "model was loaded"),
2028 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_unloaded, "", "model was unloaded"),
2029 EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
2030};
2031
2032static const Eina_Model_Type _EINA_MODEL_TYPE_BASE = {
2033 EINA_MODEL_TYPE_VERSION,
2034 0, /* there is no private data */
2035 sizeof(Eina_Model_Type),
2036 "Eina_Model_Type_Base",
2037 NULL, /* should be the only type with NULL here! */
2038 NULL, /* no interfaces implemented */
2039 _eina_model_type_base_events,
2040 _eina_model_type_base_setup,
2041 _eina_model_type_base_flush,
2042 _eina_model_type_base_constructor,
2043 _eina_model_type_base_destructor,
2044 _eina_model_type_base_copy,
2045 _eina_model_type_base_deep_copy,
2046 _eina_model_type_base_compare,
2047 NULL, /* no load */
2048 NULL, /* no unload */
2049 NULL, /* no property value get */
2050 NULL, /* no property value set */
2051 NULL, /* no property del */
2052 NULL, /* no properties names list */
2053 _eina_model_type_base_child_count,
2054 NULL, /* no child get */
2055 NULL, /* no child set */
2056 NULL, /* no child del */
2057 NULL, /* no child insert */
2058 _eina_model_type_base_child_find,
2059 _eina_model_type_base_child_criteria_match,
2060 NULL, /* no child sort */
2061 _eina_model_type_base_child_iterator_get,
2062 _eina_model_type_base_child_reversed_iterator_get,
2063 _eina_model_type_base_child_sorted_iterator_get,
2064 _eina_model_type_base_child_filtered_iterator_get,
2065 _eina_model_type_base_to_string,
2066 NULL, /* extension pointer */
2067 NULL, /* extension pointer */
2068 NULL, /* extension pointer */
2069 NULL /* extension pointer */
2070};
2071
2072/*
2073 * EINA_MODEL_TYPE_MIXIN:
2074 *
2075 * Mix-in is a type that uses 2 interfaces, one for properties,
2076 * another for children. Users should inherit this model and implement
2077 * at least onf of the interfaces to get an usable model without
2078 * defining the methods.
2079 */
2080
2081static const char _EINA_MODEL_INTERFACE_NAME_PROPERTIES[] = "Eina_Model_Interface_Properties";
2082static const char _EINA_MODEL_INTERFACE_NAME_CHILDREN[] = "Eina_Model_Interface_Children";
2083
2084typedef struct _Eina_Model_Type_Mixin_Data Eina_Model_Type_Mixin_Data;
2085struct _Eina_Model_Type_Mixin_Data
2086{
2087 /* just keep interfaces to avoid lookups */
2088 const Eina_Model_Interface *if_properties;
2089 const Eina_Model_Interface *if_children;
2090};
2091
2092static Eina_Bool
2093_eina_model_type_mixin_setup(Eina_Model *model)
2094{
2095 DBG("mix-in setup of %p", model);
2096 return EINA_TRUE;
2097}
2098
2099static Eina_Bool
2100_eina_model_type_mixin_flush(Eina_Model *model)
2101{
2102 DBG("mix-in flush of %p", model);
2103 return EINA_TRUE;
2104}
2105
2106static Eina_Bool
2107_eina_model_type_mixin_constructor(Eina_Model *model)
2108{
2109 Eina_Model_Type_Mixin_Data *priv = eina_model_type_private_data_get
2110 (model, EINA_MODEL_TYPE_MIXIN);
2111
2112 DBG("mix-in constructor of %p (priv=%p)", model, priv);
2113
2114 priv->if_properties = eina_model_interface_get
2115 (model, EINA_MODEL_INTERFACE_NAME_PROPERTIES);
2116 if (priv->if_properties)
2117 {
2118 if (!eina_model_interface_constructor(priv->if_properties, model))
2119 {
2120 ERR("Could not construct properties interface %p of %p (%s)",
2121 model, priv->if_properties, model->desc->cache.types[0]->name);
2122 return EINA_FALSE;
2123 }
2124 }
2125
2126 priv->if_children = eina_model_interface_get
2127 (model, EINA_MODEL_INTERFACE_NAME_CHILDREN);
2128 if (priv->if_children)
2129 {
2130 if (!eina_model_interface_constructor(priv->if_children, model))
2131 {
2132 ERR("Could not construct children interface %p of %p (%s)",
2133 model, priv->if_children, model->desc->cache.types[0]->name);
2134 return EINA_FALSE;
2135 }
2136 }
2137
2138 if ((!priv->if_properties) && (!priv->if_children))
2139 {
2140 ERR("Mix-in model %p (%s) does not implement properties or children "
2141 "interfaces!",
2142 model, model->desc->cache.types[0]->name);
2143 return EINA_FALSE;
2144 }
2145
2146 return EINA_TRUE;
2147}
2148
2149#define EINA_MODEL_TYPE_MIXIN_GET(model) \
2150 Eina_Model_Type_Mixin_Data *priv = eina_model_type_private_data_get \
2151 (model, EINA_MODEL_TYPE_MIXIN)
2152
2153static Eina_Bool
2154_eina_model_type_mixin_destructor(Eina_Model *model)
2155{
2156 EINA_MODEL_TYPE_MIXIN_GET(model);
2157
2158 DBG("mixin destructor of %p", model);
2159
2160 if (priv->if_properties)
2161 eina_model_interface_destructor(priv->if_properties, model);
2162
2163 if (priv->if_children)
2164 eina_model_interface_destructor(priv->if_children, model);
2165
2166 return EINA_TRUE;
2167}
2168
2169static Eina_Bool
2170_eina_model_type_mixin_compare(const Eina_Model *a, const Eina_Model *b, int *cmp)
2171{
2172 Eina_Bool ret = EINA_TRUE, did_prop = EINA_FALSE, did_child = EINA_FALSE;
2173
2174 *cmp = 0;
2175
2176 EINA_MODEL_TYPE_MIXIN_GET(a);
2177
2178 if (priv->if_properties)
2179 {
2180 Eina_Bool (*compare)(const Eina_Model*, const Eina_Model*, int *) =
2181 _eina_model_interface_find_offset
2182 (priv->if_properties,
2183 offsetof(Eina_Model_Interface_Properties, compare));
2184
2185 if (compare)
2186 {
2187 ret &= compare(a, b, cmp);
2188 did_prop = EINA_TRUE;
2189 }
2190 }
2191
2192 if ((ret) && (*cmp == 0))
2193 {
2194 if (priv->if_children)
2195 {
2196 Eina_Bool (*compare)(const Eina_Model*, const Eina_Model*, int *) =
2197 _eina_model_interface_find_offset
2198 (priv->if_children,
2199 offsetof(Eina_Model_Interface_Children, compare));
2200
2201 if (compare)
2202 {
2203 ret &= compare(a, b, cmp);
2204 did_child = EINA_TRUE;
2205 }
2206 }
2207 }
2208
2209 if ((!did_prop) && (!did_child))
2210 return eina_model_type_compare(EINA_MODEL_TYPE_BASE, a, b, cmp);
2211
2212 return ret;
2213}
2214
2215static Eina_Bool
2216_eina_model_type_mixin_load(Eina_Model *model)
2217{
2218 Eina_Bool ret = EINA_TRUE;
2219
2220 EINA_MODEL_TYPE_MIXIN_GET(model);
2221
2222 if (priv->if_properties)
2223 ret &= eina_model_interface_properties_load(priv->if_properties, model);
2224
2225 if (priv->if_children)
2226 ret &= eina_model_interface_children_load(priv->if_children, model);
2227
2228 return ret;
2229}
2230
2231static Eina_Bool
2232_eina_model_type_mixin_unload(Eina_Model *model)
2233{
2234 Eina_Bool ret = EINA_TRUE;
2235
2236 EINA_MODEL_TYPE_MIXIN_GET(model);
2237
2238 if (priv->if_properties)
2239 ret &= eina_model_interface_properties_unload(priv->if_properties, model);
2240
2241 if (priv->if_children)
2242 ret &= eina_model_interface_children_unload(priv->if_children, model);
2243
2244 return ret;
2245}
2246
2247static Eina_Bool
2248_eina_model_type_mixin_property_get(const Eina_Model *model, const char *name, Eina_Value *value)
2249{
2250 Eina_Bool ret = EINA_FALSE;
2251
2252 EINA_MODEL_TYPE_MIXIN_GET(model);
2253
2254 if (priv->if_properties)
2255 ret = eina_model_interface_properties_get
2256 (priv->if_properties, model, name, value);
2257
2258 return ret;
2259}
2260
2261static Eina_Bool
2262_eina_model_type_mixin_property_set(Eina_Model *model, const char *name, const Eina_Value *value)
2263{
2264 Eina_Bool ret = EINA_FALSE;
2265
2266 EINA_MODEL_TYPE_MIXIN_GET(model);
2267
2268 if (priv->if_properties)
2269 ret = eina_model_interface_properties_set
2270 (priv->if_properties, model, name, value);
2271
2272 return ret;
2273}
2274
2275static Eina_Bool
2276_eina_model_type_mixin_property_del(Eina_Model *model, const char *name)
2277{
2278 Eina_Bool ret = EINA_FALSE;
2279
2280 EINA_MODEL_TYPE_MIXIN_GET(model);
2281
2282 if (priv->if_properties)
2283 ret = eina_model_interface_properties_del
2284 (priv->if_properties, model, name);
2285
2286 return ret;
2287}
2288
2289static Eina_List *
2290_eina_model_type_mixin_properties_names_list_get(const Eina_Model *model)
2291{
2292 Eina_List *ret = NULL;
2293
2294 EINA_MODEL_TYPE_MIXIN_GET(model);
2295
2296 if (priv->if_properties)
2297 ret = eina_model_interface_properties_names_list_get
2298 (priv->if_properties, model);
2299
2300 return ret;
2301}
2302
2303static int
2304_eina_model_type_mixin_child_count(const Eina_Model *model)
2305{
2306 EINA_MODEL_TYPE_MIXIN_GET(model);
2307
2308 if (!priv->if_children)
2309 return 0;
2310
2311 return eina_model_interface_children_count(priv->if_children, model);
2312}
2313
2314static Eina_Model *
2315_eina_model_type_mixin_child_get(const Eina_Model *model, unsigned int position)
2316{
2317 EINA_MODEL_TYPE_MIXIN_GET(model);
2318
2319 if (!priv->if_children)
2320 return 0;
2321
2322 return eina_model_interface_children_get(priv->if_children, model, position);
2323}
2324
2325static Eina_Bool
2326_eina_model_type_mixin_child_set(Eina_Model *model, unsigned int position, Eina_Model *child)
2327{
2328 EINA_MODEL_TYPE_MIXIN_GET(model);
2329
2330 if (!priv->if_children)
2331 return 0;
2332
2333 return eina_model_interface_children_set
2334 (priv->if_children, model, position, child);
2335}
2336
2337static Eina_Bool
2338_eina_model_type_mixin_child_del(Eina_Model *model, unsigned int position)
2339{
2340 EINA_MODEL_TYPE_MIXIN_GET(model);
2341
2342 if (!priv->if_children)
2343 return 0;
2344
2345 return eina_model_interface_children_del
2346 (priv->if_children, model, position);
2347}
2348
2349static Eina_Bool
2350_eina_model_type_mixin_child_insert_at(Eina_Model *model, unsigned int position, Eina_Model *child)
2351{
2352 EINA_MODEL_TYPE_MIXIN_GET(model);
2353
2354 if (!priv->if_children)
2355 return 0;
2356
2357 return eina_model_interface_children_insert_at
2358 (priv->if_children, model, position, child);
2359}
2360
2361static void
2362_eina_model_type_mixin_child_sort(Eina_Model *model, Eina_Compare_Cb compare)
2363{
2364 EINA_MODEL_TYPE_MIXIN_GET(model);
2365
2366 if (!priv->if_children)
2367 return;
2368 eina_model_interface_children_sort(priv->if_children, model, compare);
2369}
2370
2371static const Eina_Model_Type _EINA_MODEL_TYPE_MIXIN = {
2372 EINA_MODEL_TYPE_VERSION,
2373 sizeof(Eina_Model_Type_Mixin_Data),
2374 sizeof(Eina_Model_Type),
2375 "Eina_Model_Type_Mixin",
2376 &_EINA_MODEL_TYPE_BASE,
2377 NULL, /* no interfaces implemented */
2378 NULL, /* no extra events */
2379 _eina_model_type_mixin_setup,
2380 _eina_model_type_mixin_flush,
2381 _eina_model_type_mixin_constructor,
2382 _eina_model_type_mixin_destructor,
2383 NULL, /* no copy, as interface is called automatically */
2384 NULL, /* no deep copy, as interface is called automatically */
2385 _eina_model_type_mixin_compare,
2386 _eina_model_type_mixin_load,
2387 _eina_model_type_mixin_unload,
2388 _eina_model_type_mixin_property_get,
2389 _eina_model_type_mixin_property_set,
2390 _eina_model_type_mixin_property_del,
2391 _eina_model_type_mixin_properties_names_list_get,
2392 _eina_model_type_mixin_child_count,
2393 _eina_model_type_mixin_child_get,
2394 _eina_model_type_mixin_child_set,
2395 _eina_model_type_mixin_child_del,
2396 _eina_model_type_mixin_child_insert_at,
2397 NULL, /* use default find */
2398 NULL, /* use default criteria_match */
2399 _eina_model_type_mixin_child_sort,
2400 NULL, /* use default iterator get */
2401 NULL, /* use default reversed iterator get */
2402 NULL, /* use default sorted iterator get */
2403 NULL, /* use default filtered iterator get */
2404 NULL, /* use default to string */
2405 NULL, /* extension pointer */
2406 NULL, /* extension pointer */
2407 NULL, /* extension pointer */
2408 NULL /* extension pointer */
2409};
2410#undef EINA_MODEL_TYPE_MIXIN_GET
2411
2412/* Events for all Properties interface */
2413static const Eina_Model_Event_Description _eina_model_interface_properties_events[] = {
2414 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_properties_loaded, "", "model properties were loaded"),
2415 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_properties_unloaded, "", "model properties were unloaded"),
2416 EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
2417};
2418
2419/* EINA_MODEL_INTERFACE_PROPERTIES_HASH ******************************/
2420
2421#define EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model) \
2422 Eina_Hash *priv = *(Eina_Hash **)eina_model_interface_private_data_get \
2423 (model, EINA_MODEL_INTERFACE_PROPERTIES_HASH)
2424
2425static Eina_Bool
2426_eina_model_interface_properties_hash_setup(Eina_Model *model)
2427{
2428 Eina_Hash **p_priv = eina_model_interface_private_data_get
2429 (model, EINA_MODEL_INTERFACE_PROPERTIES_HASH);
2430
2431 DBG("setup interface properties (hash) at %p model %p (%s)",
2432 p_priv, model, model->desc->cache.types[0]->name);
2433
2434 *p_priv = eina_hash_string_small_new(NULL);
2435 return !!*p_priv;
2436}
2437
2438static Eina_Bool
2439_eina_model_interface_properties_hash_flush(Eina_Model *model)
2440{
2441 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2442
2443 DBG("flush interface properties (hash) at %p model %p (%s)",
2444 priv, model, model->desc->cache.types[0]->name);
2445
2446 if (priv)
2447 {
2448 ERR("interface properties flushed with values! priv=%p, model %p (%s)",
2449 priv, model, model->desc->cache.types[0]->name);
2450 eina_hash_free(priv);
2451 }
2452
2453 return EINA_TRUE;
2454}
2455
2456static Eina_Bool
2457_eina_model_interface_properties_hash_constructor(Eina_Model *model)
2458{
2459 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2460
2461 DBG("construct interface properties (hash) at %p model %p (%s)",
2462 priv, model, model->desc->cache.types[0]->name);
2463
2464 return EINA_TRUE;
2465}
2466
2467static Eina_Bool
2468_eina_model_interface_properties_hash_destructor_foreach(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED__, void *data, void *fdata __UNUSED__)
2469{
2470 eina_value_free(data);
2471 return EINA_TRUE;
2472}
2473
2474static Eina_Bool
2475_eina_model_interface_properties_hash_destructor(Eina_Model *model)
2476{
2477 Eina_Hash **p_priv = eina_model_interface_private_data_get
2478 (model, EINA_MODEL_INTERFACE_PROPERTIES_HASH);
2479 int count = eina_hash_population(*p_priv);
2480
2481 DBG("destroy interface properties (hash) at %p model %p (%s). %d values.",
2482 *p_priv, model, model->desc->cache.types[0]->name, count);
2483
2484 eina_hash_foreach
2485 (*p_priv, _eina_model_interface_properties_hash_destructor_foreach, NULL);
2486 eina_hash_free(*p_priv);
2487 *p_priv = NULL;
2488
2489 return EINA_TRUE;
2490}
2491
2492static Eina_Bool
2493_eina_model_interface_properties_hash_get(const Eina_Model *model, const char *name, Eina_Value *value)
2494{
2495 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2496 const Eina_Value *prop = eina_hash_find(priv, name);
2497 EINA_SAFETY_ON_NULL_RETURN_VAL(prop, EINA_FALSE);
2498 return eina_value_copy(prop, value);
2499}
2500
2501static Eina_Bool
2502_eina_model_interface_properties_hash_set(Eina_Model *model, const char *name, const Eina_Value *value)
2503{
2504 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2505 Eina_Value *prop, *old = eina_hash_find(priv, name);
2506
2507 prop = eina_value_new(eina_value_type_get(value));
2508 EINA_SAFETY_ON_NULL_RETURN_VAL(prop, EINA_FALSE);
2509
2510 eina_value_flush(prop);
2511 if (!eina_value_copy(value, prop))
2512 {
2513 ERR("Could not copy value '%s' from %p to %p", name, value, prop);
2514 eina_value_free(prop);
2515 return EINA_FALSE;
2516 }
2517
2518 if (!old)
2519 {
2520 if (!eina_hash_add(priv, name, prop))
2521 {
2522 ERR("Could not add value %p to hash as key '%s'", prop, name);
2523 eina_value_free(prop);
2524 return EINA_FALSE;
2525 }
2526 }
2527 else
2528 {
2529 eina_value_free(old);
2530 if (!eina_hash_modify(priv, name, prop))
2531 {
2532 ERR("Could not modify hash key '%s' value from %p to %p",
2533 name, old, prop);
2534 eina_hash_del_by_key(priv, name);
2535 eina_value_free(prop);
2536 return EINA_FALSE;
2537 }
2538 }
2539
2540 return EINA_TRUE;
2541}
2542
2543static Eina_Bool
2544_eina_model_interface_properties_hash_del(Eina_Model *model, const char *name)
2545{
2546 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2547 Eina_Value *old = eina_hash_find(priv, name);
2548 EINA_SAFETY_ON_NULL_RETURN_VAL(old, EINA_FALSE);
2549 eina_value_free(old);
2550 return eina_hash_del_by_key(priv, name);
2551}
2552
2553static Eina_Bool
2554_eina_model_interface_properties_hash_names_list_foreach(const Eina_Hash *hash __UNUSED__, const void *key, void *data __UNUSED__, void *fdata)
2555{
2556 Eina_List **p_list = fdata;
2557 *p_list = eina_list_append(*p_list, eina_stringshare_add(key));
2558 return EINA_TRUE;
2559}
2560
2561static Eina_List *
2562_eina_model_interface_properties_hash_names_list(const Eina_Model *model)
2563{
2564 EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET(model);
2565 Eina_List *list = NULL;
2566 eina_hash_foreach
2567 (priv, _eina_model_interface_properties_hash_names_list_foreach, &list);
2568 return list;
2569}
2570#undef EINA_MODEL_INTERFACE_PROPERTIES_HASH_GET
2571
2572static const Eina_Model_Interface_Properties _EINA_MODEL_INTERFACE_PROPERTIES_HASH = {
2573 {
2574 EINA_MODEL_INTERFACE_VERSION,
2575 sizeof(Eina_Hash *),
2576 sizeof(Eina_Model_Interface_Properties),
2577 _EINA_MODEL_INTERFACE_NAME_PROPERTIES,
2578 NULL, /* no parent interfaces */
2579 _eina_model_interface_properties_events,
2580 _eina_model_interface_properties_hash_setup,
2581 _eina_model_interface_properties_hash_flush,
2582 _eina_model_interface_properties_hash_constructor,
2583 _eina_model_interface_properties_hash_destructor,
2584 NULL,
2585 NULL,
2586 NULL,
2587 NULL,
2588 NULL,
2589 NULL
2590 },
2591 EINA_MODEL_INTERFACE_PROPERTIES_VERSION,
2592 NULL, /* no compare */
2593 NULL, /* no load */
2594 NULL, /* no unload */
2595 _eina_model_interface_properties_hash_get,
2596 _eina_model_interface_properties_hash_set,
2597 _eina_model_interface_properties_hash_del,
2598 _eina_model_interface_properties_hash_names_list
2599};
2600
2601/* EINA_MODEL_INTERFACE_PROPERTIES_STRUCT ******************************/
2602
2603static Eina_Value_Struct *
2604_eina_model_interface_properties_struct_private_get(const Eina_Model *model)
2605{
2606 Eina_Value *val = eina_model_interface_private_data_get
2607 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2608 return eina_value_memory_get(val);
2609}
2610
2611#define EINA_MODEL_INTERFACE_PROPERTIES_STRUCT_GET(model) \
2612 Eina_Value_Struct *priv = \
2613 _eina_model_interface_properties_struct_private_get(model)
2614
2615static Eina_Bool
2616_eina_model_interface_properties_struct_setup(Eina_Model *model)
2617{
2618 Eina_Value *val = eina_model_interface_private_data_get
2619 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2620
2621 DBG("setup interface properties (struct) at %p model %p (%s)",
2622 val, model, model->desc->cache.types[0]->name);
2623
2624 return eina_value_setup(val, EINA_VALUE_TYPE_STRUCT);
2625}
2626
2627static Eina_Bool
2628_eina_model_interface_properties_struct_flush(Eina_Model *model)
2629{
2630 Eina_Value *val = eina_model_interface_private_data_get
2631 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2632
2633 DBG("flush interface properties (struct) at %p model %p (%s)",
2634 val, model, model->desc->cache.types[0]->name);
2635
2636 if (val->type)
2637 {
2638 ERR("interface properties flushed with values! val=%p, model %p (%s)",
2639 val, model, model->desc->cache.types[0]->name);
2640 eina_value_flush(val);
2641 }
2642
2643 return EINA_TRUE;
2644}
2645
2646static Eina_Bool
2647_eina_model_interface_properties_struct_constructor(Eina_Model *model)
2648{
2649 EINA_MODEL_INTERFACE_PROPERTIES_STRUCT_GET(model);
2650
2651 DBG("construct interface properties (struct) at %p model %p (%s)",
2652 priv, model, model->desc->cache.types[0]->name);
2653
2654 return EINA_TRUE;
2655}
2656
2657static Eina_Bool
2658_eina_model_interface_properties_struct_destructor(Eina_Model *model)
2659{
2660 Eina_Value *val = eina_model_interface_private_data_get
2661 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2662
2663 DBG("destroy interface properties (struct) at %p model %p (%s)",
2664 val, model, model->desc->cache.types[0]->name);
2665
2666 eina_value_flush(val);
2667 val->type = NULL;
2668
2669 return EINA_TRUE;
2670}
2671
2672static Eina_Bool
2673_eina_model_interface_properties_struct_get(const Eina_Model *model, const char *name, Eina_Value *val)
2674{
2675 const Eina_Value *v = eina_model_interface_private_data_get
2676 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2677 return eina_value_struct_value_get(v, name, val);
2678}
2679
2680static Eina_Bool
2681_eina_model_interface_properties_struct_set(Eina_Model *model, const char *name, const Eina_Value *val)
2682{
2683 Eina_Value *v = eina_model_interface_private_data_get
2684 (model, EINA_MODEL_INTERFACE_PROPERTIES_STRUCT);
2685 return eina_value_struct_value_set(v, name, val);
2686}
2687
2688static Eina_Bool
2689_eina_model_interface_properties_struct_del(Eina_Model *model __UNUSED__, const char *name __UNUSED__)
2690{
2691 return EINA_FALSE; /* not allowed */
2692}
2693
2694static Eina_List *
2695_eina_model_interface_properties_struct_names_list(const Eina_Model *model)
2696{
2697 EINA_MODEL_INTERFACE_PROPERTIES_STRUCT_GET(model);
2698 const Eina_Value_Struct_Member *itr;
2699 Eina_List *list = NULL;
2700
2701 EINA_SAFETY_ON_NULL_RETURN_VAL(priv, NULL);
2702 EINA_SAFETY_ON_NULL_RETURN_VAL(priv->desc, NULL);
2703 EINA_SAFETY_ON_NULL_RETURN_VAL(priv->desc->members, NULL);
2704
2705 itr = priv->desc->members;
2706 if (priv->desc->member_count)
2707 {
2708 const Eina_Value_Struct_Member *end = itr + priv->desc->member_count;
2709 for (; itr < end; itr++)
2710 list = eina_list_append(list, eina_stringshare_add(itr->name));
2711 }
2712 else
2713 {
2714 for (; itr->name != NULL; itr++)
2715 list = eina_list_append(list, eina_stringshare_add(itr->name));
2716 }
2717
2718 return list;
2719}
2720#undef EINA_MODEL_INTERFACE_PROPERTIES_STRUCT_GET
2721
2722static const Eina_Model_Interface_Properties _EINA_MODEL_INTERFACE_PROPERTIES_STRUCT = {
2723 {
2724 EINA_MODEL_INTERFACE_VERSION,
2725 sizeof(Eina_Value),
2726 sizeof(Eina_Model_Interface_Properties),
2727 _EINA_MODEL_INTERFACE_NAME_PROPERTIES,
2728 NULL, /* no parent interfaces */
2729 _eina_model_interface_properties_events,
2730 _eina_model_interface_properties_struct_setup,
2731 _eina_model_interface_properties_struct_flush,
2732 _eina_model_interface_properties_struct_constructor,
2733 _eina_model_interface_properties_struct_destructor,
2734 NULL,
2735 NULL,
2736 NULL,
2737 NULL,
2738 NULL,
2739 NULL
2740 },
2741 EINA_MODEL_INTERFACE_PROPERTIES_VERSION,
2742 NULL, /* no compare */
2743 NULL, /* no load */
2744 NULL, /* no unload */
2745 _eina_model_interface_properties_struct_get,
2746 _eina_model_interface_properties_struct_set,
2747 _eina_model_interface_properties_struct_del,
2748 _eina_model_interface_properties_struct_names_list
2749};
2750
2751/* Events for all Children interface */
2752static const Eina_Model_Event_Description _eina_model_interface_children_events[] = {
2753 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_children_loaded, "", "model children were loaded"),
2754 EINA_MODEL_EVENT_DESCRIPTION(_eina_model_str_children_unloaded, "", "model children were unloaded"),
2755 EINA_MODEL_EVENT_DESCRIPTION_SENTINEL
2756};
2757
2758/* EINA_MODEL_INTERFACE_CHILDREN_INARRAY ******************************/
2759
2760#define EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model) \
2761 Eina_Inarray *priv = eina_model_interface_private_data_get \
2762 (model, EINA_MODEL_INTERFACE_CHILDREN_INARRAY)
2763
2764static Eina_Bool
2765_eina_model_interface_children_inarray_setup(Eina_Model *model)
2766{
2767 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2768
2769 DBG("setup interface children (inarray) at %p model %p (%s)",
2770 priv, model, model->desc->cache.types[0]->name);
2771
2772 eina_inarray_setup(priv, sizeof(Eina_Model *), 0);
2773 return EINA_TRUE;
2774}
2775
2776static Eina_Bool
2777_eina_model_interface_children_inarray_flush(Eina_Model *model)
2778{
2779 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2780 int count;
2781
2782 DBG("flush interface children (inarray) at %p model %p (%s)",
2783 priv, model, model->desc->cache.types[0]->name);
2784
2785 count = eina_inarray_count(priv);
2786 if (count > 0)
2787 ERR("interface children flushed with %d members! priv=%p, model %p (%s)",
2788 count, priv, model, model->desc->cache.types[0]->name);
2789
2790 eina_inarray_flush(priv);
2791 return EINA_TRUE;
2792}
2793
2794static Eina_Bool
2795_eina_model_interface_children_inarray_constructor(Eina_Model *model)
2796{
2797 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2798
2799 DBG("construct interface children (inarray) at %p model %p (%s)",
2800 priv, model, model->desc->cache.types[0]->name);
2801
2802 return EINA_TRUE;
2803}
2804
2805static Eina_Bool
2806_eina_model_interface_children_inarray_destructor(Eina_Model *model)
2807{
2808 Eina_Model **itr, **itr_end;
2809 int count;
2810
2811 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2812
2813 count = eina_inarray_count(priv);
2814
2815 DBG("destroy interface children (inarray) at %p model %p (%s). %d members.",
2816 priv, model, model->desc->cache.types[0]->name, count);
2817
2818 itr = priv->members;
2819 itr_end = itr + count;
2820 for (; itr < itr_end; itr++)
2821 eina_model_xunref(*itr, EINA_MODEL_INTERFACE_CHILDREN_INARRAY);
2822 eina_inarray_flush(priv);
2823
2824 return EINA_TRUE;
2825}
2826
2827static int
2828_eina_model_interface_children_inarray_count(const Eina_Model *model)
2829{
2830 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2831 return eina_inarray_count(priv);
2832}
2833
2834static Eina_Model *
2835_eina_model_interface_children_inarray_get(const Eina_Model *model, unsigned int position)
2836{
2837 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2838 Eina_Model **child = eina_inarray_nth(priv, position);
2839 if (!child)
2840 return NULL;
2841 return eina_model_ref(*child);
2842}
2843
2844static Eina_Bool
2845_eina_model_interface_children_inarray_set(Eina_Model *model, unsigned int position, Eina_Model *child)
2846{
2847 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2848 Eina_Model **p_old = eina_inarray_nth(priv, position);
2849 Eina_Model *old;
2850
2851 if (!p_old)
2852 return EINA_FALSE;
2853
2854 old = *p_old;
2855 if (!eina_inarray_replace_at(priv, position, &child))
2856 return EINA_FALSE;
2857
2858 eina_model_xref(child, EINA_MODEL_INTERFACE_CHILDREN_INARRAY,
2859 "eina_model_child_set");
2860 eina_model_xunref(old, EINA_MODEL_INTERFACE_CHILDREN_INARRAY);
2861 return EINA_TRUE;
2862}
2863
2864static Eina_Bool
2865_eina_model_interface_children_inarray_del(Eina_Model *model, unsigned int position)
2866{
2867 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2868 Eina_Model **p_old = eina_inarray_nth(priv, position);
2869 Eina_Model *old;
2870
2871 if (!p_old)
2872 return EINA_FALSE;
2873
2874 old = *p_old;
2875 if (!eina_inarray_remove_at(priv, position))
2876 return EINA_FALSE;
2877
2878 eina_model_xunref(old, EINA_MODEL_INTERFACE_CHILDREN_INARRAY);
2879 return EINA_TRUE;
2880}
2881
2882static Eina_Bool
2883_eina_model_interface_children_inarray_insert_at(Eina_Model *model, unsigned int position, Eina_Model *child)
2884{
2885 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2886
2887 if (!eina_inarray_insert_at(priv, position, &child))
2888 return EINA_FALSE;
2889
2890 eina_model_xref(child, EINA_MODEL_INTERFACE_CHILDREN_INARRAY,
2891 "eina_model_child_insert_at");
2892 return EINA_TRUE;
2893}
2894
2895static void
2896_eina_model_interface_children_inarray_sort(Eina_Model *model, Eina_Compare_Cb compare)
2897{
2898 EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET(model);
2899 int count = eina_inarray_count(priv);
2900 EINA_SAFETY_ON_FALSE_RETURN(count >= 0);
2901
2902 if (count > 1)
2903 _eina_model_array_sort(priv->members, 0, count - 1, compare);
2904}
2905#undef EINA_MODEL_INTERFACE_CHILDREN_INARRAY_GET
2906
2907static const Eina_Model_Interface_Children _EINA_MODEL_INTERFACE_CHILDREN_INARRAY = {
2908 {
2909 EINA_MODEL_INTERFACE_VERSION,
2910 sizeof(Eina_Inarray),
2911 sizeof(Eina_Model_Interface_Children),
2912 _EINA_MODEL_INTERFACE_NAME_CHILDREN,
2913 NULL, /* no parent interfaces */
2914 _eina_model_interface_children_events,
2915 _eina_model_interface_children_inarray_setup,
2916 _eina_model_interface_children_inarray_flush,
2917 _eina_model_interface_children_inarray_constructor,
2918 _eina_model_interface_children_inarray_destructor,
2919 NULL,
2920 NULL,
2921 NULL,
2922 NULL,
2923 NULL,
2924 NULL
2925 },
2926 EINA_MODEL_INTERFACE_CHILDREN_VERSION,
2927 NULL, /* no compare */
2928 NULL, /* no load */
2929 NULL, /* no unload */
2930 _eina_model_interface_children_inarray_count,
2931 _eina_model_interface_children_inarray_get,
2932 _eina_model_interface_children_inarray_set,
2933 _eina_model_interface_children_inarray_del,
2934 _eina_model_interface_children_inarray_insert_at,
2935 _eina_model_interface_children_inarray_sort
2936};
2937
2938/* EINA_MODEL_TYPE_GENERIC ********************************************/
2939
2940static const Eina_Model_Interface *_EINA_MODEL_TYPE_GENERIC_IFACES[] = {
2941 &_EINA_MODEL_INTERFACE_PROPERTIES_HASH.base,
2942 &_EINA_MODEL_INTERFACE_CHILDREN_INARRAY.base,
2943 NULL
2944};
2945
2946static const Eina_Model_Type _EINA_MODEL_TYPE_GENERIC =
2947 EINA_MODEL_TYPE_INIT_NOPRIVATE("Eina_Model_Type_Generic",
2948 Eina_Model_Type,
2949 &_EINA_MODEL_TYPE_MIXIN,
2950 _EINA_MODEL_TYPE_GENERIC_IFACES,
2951 NULL);
2952
2953/* EINA_MODEL_TYPE_STRUCT ********************************************/
2954
2955static const Eina_Model_Interface *_EINA_MODEL_TYPE_STRUCT_IFACES[] = {
2956 &_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base,
2957 &_EINA_MODEL_INTERFACE_CHILDREN_INARRAY.base,
2958 NULL
2959};
2960
2961static const Eina_Model_Type _EINA_MODEL_TYPE_STRUCT =
2962 EINA_MODEL_TYPE_INIT_NOPRIVATE("Eina_Model_Type_Struct",
2963 Eina_Model_Type,
2964 &_EINA_MODEL_TYPE_MIXIN,
2965 _EINA_MODEL_TYPE_STRUCT_IFACES,
2966 NULL);
2967
2968/**
2969 */
2970
2971/**
2972 * @internal
2973 * @brief Initialize the model module.
2974 *
2975 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
2976 *
2977 * This function sets up the model module of Eina. It is called
2978 * by eina_init().
2979 *
2980 * @see eina_init()
2981 */
2982Eina_Bool
2983eina_model_init(void)
2984{
2985 const char *choice, *tmp;
2986
2987 _eina_model_log_dom = eina_log_domain_register("eina_model",
2988 EINA_LOG_COLOR_DEFAULT);
2989 if (_eina_model_log_dom < 0)
2990 {
2991 EINA_LOG_ERR("Could not register log domain: eina_model");
2992 return EINA_FALSE;
2993 }
2994
2995 choice = getenv("EINA_MODEL_DEBUG");
2996 if (choice)
2997 {
2998 if (strcmp(choice, "1") == 0)
2999 _eina_model_debug = EINA_MODEL_DEBUG_CHECK;
3000 else if (strcmp(choice, "backtrace") == 0)
3001 _eina_model_debug = EINA_MODEL_DEBUG_BACKTRACE;
3002 }
3003
3004#ifdef EINA_DEFAULT_MEMPOOL
3005 choice = "pass_through";
3006#else
3007 choice = "chained_mempool";
3008#endif
3009 tmp = getenv("EINA_MEMPOOL");
3010 if (tmp && tmp[0])
3011 choice = tmp;
3012
3013 if (choice)
3014 _eina_model_mp_choice = strdup(choice);
3015
3016 _eina_model_mp = eina_mempool_add
3017 (_eina_model_mp_choice, "model", NULL, sizeof(Eina_Model), 320);
3018 if (!_eina_model_mp)
3019 {
3020 ERR("Mempool for model cannot be allocated in model init.");
3021 goto on_init_fail_mp;
3022 }
3023
3024 if (!eina_lock_new(&_eina_model_inner_mps_lock))
3025 {
3026 ERR("Cannot create inner mempools lock in model init.");
3027 goto on_init_fail_lock_mp;
3028 }
3029 _eina_model_inner_mps = eina_hash_int32_new(NULL);
3030 if (!_eina_model_inner_mps)
3031 {
3032 ERR("Cannot create hash for inner mempools in model init.");
3033 goto on_init_fail_hash_mp;
3034 }
3035
3036 if (!eina_lock_new(&_eina_model_descriptions_lock))
3037 {
3038 ERR("Cannot create model descriptions lock in model init.");
3039 goto on_init_fail_lock_desc;
3040 }
3041 _eina_model_descriptions = eina_hash_pointer_new(NULL);
3042 if (!_eina_model_descriptions)
3043 {
3044 ERR("Cannot create model descriptions hash in model init.");
3045 goto on_init_fail_hash_desc;
3046 }
3047
3048 if (!eina_lock_new(&_eina_model_debug_list_lock))
3049 {
3050 ERR("Cannot create model debug list lock in model init.");
3051 goto on_init_fail_lock_debug;
3052 }
3053
3054 EINA_ERROR_MODEL_FAILED = eina_error_msg_static_register(
3055 EINA_ERROR_MODEL_FAILED_STR);
3056 EINA_ERROR_MODEL_METHOD_MISSING = eina_error_msg_static_register(
3057 EINA_ERROR_MODEL_METHOD_MISSING_STR);
3058
3059 EINA_MODEL_TYPE_BASE = &_EINA_MODEL_TYPE_BASE;
3060 EINA_MODEL_TYPE_MIXIN = &_EINA_MODEL_TYPE_MIXIN;
3061 EINA_MODEL_TYPE_GENERIC = &_EINA_MODEL_TYPE_GENERIC;
3062 EINA_MODEL_TYPE_STRUCT = &_EINA_MODEL_TYPE_STRUCT;
3063
3064 EINA_MODEL_INTERFACE_PROPERTIES_HASH = &_EINA_MODEL_INTERFACE_PROPERTIES_HASH.base;
3065 EINA_MODEL_INTERFACE_PROPERTIES_STRUCT = &_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base;
3066
3067 EINA_MODEL_INTERFACE_CHILDREN_INARRAY = &_EINA_MODEL_INTERFACE_CHILDREN_INARRAY.base;
3068
3069 EINA_MODEL_INTERFACE_NAME_PROPERTIES = _EINA_MODEL_INTERFACE_NAME_PROPERTIES;
3070 EINA_MODEL_INTERFACE_NAME_CHILDREN = _EINA_MODEL_INTERFACE_NAME_CHILDREN;
3071
3072 eina_magic_string_static_set(EINA_MAGIC_MODEL, EINA_MAGIC_MODEL_STR);
3073
3074 return EINA_TRUE;
3075
3076 on_init_fail_lock_debug:
3077 eina_hash_free(_eina_model_descriptions);
3078 on_init_fail_hash_desc:
3079 eina_lock_free(&_eina_model_descriptions_lock);
3080 on_init_fail_lock_desc:
3081 eina_hash_free(_eina_model_inner_mps);
3082 _eina_model_inner_mps = NULL;
3083 on_init_fail_hash_mp:
3084 eina_lock_free(&_eina_model_inner_mps_lock);
3085 on_init_fail_lock_mp:
3086 eina_mempool_del(_eina_model_mp);
3087 on_init_fail_mp:
3088 free(_eina_model_mp_choice);
3089 _eina_model_mp_choice = NULL;
3090 eina_log_domain_unregister(_eina_model_log_dom);
3091 _eina_model_log_dom = -1;
3092 return EINA_FALSE;
3093}
3094
3095/**
3096 * @internal
3097 * @brief Shut down the model module.
3098 *
3099 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
3100 *
3101 * This function shuts down the model module set up by
3102 * eina_model_init(). It is called by eina_shutdown().
3103 *
3104 * @see eina_shutdown()
3105 */
3106Eina_Bool
3107eina_model_shutdown(void)
3108{
3109 eina_lock_take(&_eina_model_debug_list_lock);
3110 if (eina_list_count(_eina_model_debug_list) > 0)
3111 ERR("%d models are still alive!", eina_list_count(_eina_model_debug_list));
3112 eina_lock_release(&_eina_model_debug_list_lock);
3113 eina_lock_free(&_eina_model_debug_list_lock);
3114
3115 eina_lock_take(&_eina_model_inner_mps_lock);
3116 if (eina_hash_population(_eina_model_inner_mps) != 0)
3117 ERR("Cannot free eina_model internal memory pools -- still in use!");
3118 else
3119 eina_hash_free(_eina_model_inner_mps);
3120 eina_lock_release(&_eina_model_inner_mps_lock);
3121 eina_lock_free(&_eina_model_inner_mps_lock);
3122
3123 eina_lock_take(&_eina_model_descriptions_lock);
3124 if (eina_hash_population(_eina_model_descriptions) != 0)
3125 ERR("Cannot free eina_model internal descriptions -- still in use!");
3126 else
3127 eina_hash_free(_eina_model_descriptions);
3128 eina_lock_release(&_eina_model_descriptions_lock);
3129 eina_lock_free(&_eina_model_descriptions_lock);
3130
3131 free(_eina_model_mp_choice);
3132 _eina_model_mp_choice = NULL;
3133 eina_mempool_del(_eina_model_mp);
3134 eina_log_domain_unregister(_eina_model_log_dom);
3135 _eina_model_log_dom = -1;
3136 return EINA_TRUE;
3137}
3138
3139/*============================================================================*
3140 * Global *
3141 *============================================================================*/
3142
3143/*============================================================================*
3144 * API *
3145 *============================================================================*/
3146
3147
3148EAPI Eina_Error EINA_ERROR_MODEL_FAILED = 0;
3149EAPI Eina_Error EINA_ERROR_MODEL_METHOD_MISSING = 0;
3150
3151EAPI const Eina_Model_Type *EINA_MODEL_TYPE_BASE = NULL;
3152EAPI const Eina_Model_Type *EINA_MODEL_TYPE_MIXIN = NULL;
3153EAPI const Eina_Model_Type *EINA_MODEL_TYPE_GENERIC = NULL;
3154EAPI const Eina_Model_Type *EINA_MODEL_TYPE_STRUCT = NULL;
3155
3156EAPI const Eina_Model_Interface *EINA_MODEL_INTERFACE_PROPERTIES_HASH = NULL;
3157EAPI const Eina_Model_Interface *EINA_MODEL_INTERFACE_PROPERTIES_STRUCT = NULL;
3158EAPI const Eina_Model_Interface *EINA_MODEL_INTERFACE_CHILDREN_INARRAY = NULL;
3159
3160EAPI const char *EINA_MODEL_INTERFACE_NAME_PROPERTIES = "Eina_Model_Interface_Properties";
3161EAPI const char *EINA_MODEL_INTERFACE_NAME_CHILDREN = "Eina_Model_Interface_Children";
3162
3163EAPI Eina_Model *
3164eina_model_new(const Eina_Model_Type *type)
3165{
3166 const Eina_Model_Description *desc;
3167 Eina_Model *model;
3168 unsigned int i;
3169
3170 EINA_SAFETY_ON_NULL_RETURN_VAL(type, NULL);
3171 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_model_type_check(type), NULL);
3172
3173 desc = _eina_model_description_get(type);
3174 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
3175
3176 model = eina_mempool_malloc(_eina_model_mp, sizeof(Eina_Model));
3177 EINA_SAFETY_ON_NULL_GOTO(model, failed_model);
3178
3179 model->desc = desc;
3180 model->listeners.entries = NULL;
3181 model->listeners.deleted = NULL;
3182 model->listeners.freeze = NULL;
3183 model->listeners.walking = 0;
3184
3185 if (desc->total.size == 0)
3186 model->privates = NULL;
3187 else
3188 {
3189 unsigned char *ptr;
3190
3191 model->privates = _eina_model_inner_alloc
3192 (desc->total.privates * sizeof(void *) +
3193 desc->total.size);
3194 EINA_SAFETY_ON_NULL_GOTO(model->privates, failed_privates);
3195
3196 ptr = (unsigned char *)(model->privates + desc->total.privates);
3197 for (i = 0; i < desc->total.privates; i++)
3198 {
3199 unsigned int size;
3200 if (i < desc->total.types)
3201 size = desc->cache.privates[i].type->private_size;
3202 else
3203 size = desc->cache.privates[i].iface->private_size;
3204
3205 if (size == 0)
3206 {
3207 model->privates[i] = NULL;
3208 continue;
3209 }
3210
3211 model->privates[i] = ptr;
3212 memset(ptr, 0, size);
3213
3214 if (size % sizeof(void *) != 0)
3215 size += sizeof(void *) - (size % sizeof(void *));
3216 ptr += size;
3217 }
3218 }
3219
3220 model->refcount = 1;
3221 model->xrefs = NULL;
3222 model->deleted = EINA_FALSE;
3223 EINA_MAGIC_SET(model, EINA_MAGIC_MODEL);
3224
3225 /* call setup of every type in the reverse order,
3226 * they should not call parent's setup.
3227 */
3228 for (i = desc->total.types; i > 0; i--)
3229 {
3230 if (desc->cache.types[i - 1]->setup)
3231 {
3232 if (!desc->cache.types[i - 1]->setup(model))
3233 {
3234 ERR("Failed to setup model %p at type %p (%s)",
3235 model, desc->cache.types[i - 1],
3236 desc->cache.types[i - 1]->name);
3237 goto failed_types;
3238 }
3239 }
3240 }
3241
3242 /* call setup of every interface in the reverse order,
3243 * they should not call parent's setup.
3244 */
3245 for (i = desc->total.ifaces; i > 0; i--)
3246 {
3247 if (desc->cache.ifaces[i - 1]->setup)
3248 {
3249 if (!desc->cache.ifaces[i - 1]->setup(model))
3250 {
3251 ERR("Failed to setup model %p at interface %p (%s)",
3252 model, desc->cache.ifaces[i - 1],
3253 desc->cache.ifaces[i - 1]->name);
3254 goto failed_ifaces;
3255 }
3256 }
3257 }
3258
3259 if (!desc->ops.type.constructor(model))
3260 {
3261 ERR("Failed to construct model %p, type %p (%s)",
3262 model, desc->cache.types[0], desc->cache.types[0]->name);
3263 goto failed_constructor;
3264 }
3265
3266 if (EINA_UNLIKELY(_eina_model_debug))
3267 {
3268 eina_lock_take(&_eina_model_debug_list_lock);
3269 _eina_model_debug_list = eina_list_append
3270 (_eina_model_debug_list, model);
3271 eina_lock_release(&_eina_model_debug_list_lock);
3272 }
3273
3274 return model;
3275
3276 failed_constructor:
3277 i = 0;
3278 failed_ifaces:
3279 /* flush every setup interface, natural order */
3280 for (; i < desc->total.ifaces; i++)
3281 desc->cache.ifaces[i]->flush(model);
3282 i = 0;
3283 failed_types:
3284 /* flush every setup type, natural order */
3285 for (; i < desc->total.types; i++)
3286 desc->cache.types[i]->flush(model);
3287
3288 if (model->privates)
3289 _eina_model_inner_free(desc->total.privates * sizeof(void *) +
3290 desc->total.size,
3291 model->privates);
3292
3293 failed_privates:
3294 EINA_MAGIC_SET(model, EINA_MAGIC_NONE);
3295 eina_mempool_free(_eina_model_mp, model);
3296 failed_model:
3297 _eina_model_description_dispose(desc);
3298 return NULL;
3299}
3300
3301static void
3302_eina_model_free(Eina_Model *model)
3303{
3304 const Eina_Model_Description *desc = model->desc;
3305 unsigned int i;
3306
3307 DBG("model %p (%s) refcount=%d deleted=%hhu",
3308 model, model->desc->cache.types[0]->name,
3309 model->refcount, model->deleted);
3310
3311 if (EINA_UNLIKELY(_eina_model_debug))
3312 {
3313 if (model->xrefs)
3314 {
3315 ERR("Model %p (%s) released with references pending:",
3316 model, model->desc->cache.types[0]->name);
3317 while (model->xrefs)
3318 {
3319 Eina_Model_XRef *ref = (Eina_Model_XRef *)model->xrefs;
3320 model->xrefs = eina_inlist_remove(model->xrefs, model->xrefs);
3321
3322 ERR("xref: %p '%s'", ref->id, ref->label);
3323 free(ref);
3324 }
3325 }
3326
3327 eina_lock_take(&_eina_model_debug_list_lock);
3328 _eina_model_debug_list = eina_list_remove
3329 (_eina_model_debug_list, model);
3330 eina_lock_release(&_eina_model_debug_list_lock);
3331 }
3332
3333 /* flush every interface, natural order */
3334 for (i = 0; i < desc->total.ifaces; i++)
3335 if (desc->cache.ifaces[i]->flush)
3336 desc->cache.ifaces[i]->flush(model);
3337
3338 /* flush every type, natural order */
3339 for (i = 0; i < desc->total.types; i++)
3340 if (desc->cache.types[i]->flush)
3341 desc->cache.types[i]->flush(model);
3342
3343 model->refcount--;
3344 _eina_model_event_callback_call(model, _eina_model_str_freed, NULL);
3345
3346 if (model->privates)
3347 _eina_model_inner_free(desc->total.privates * sizeof(void *) +
3348 desc->total.size,
3349 model->privates);
3350
3351 if (model->listeners.deleted)
3352 _eina_model_event_callback_free_deleted(model);
3353
3354 if (model->listeners.entries)
3355 {
3356 for (i = 0; i < desc->total.events; i++)
3357 {
3358 Eina_Inlist *lst = model->listeners.entries[i];
3359 while (lst)
3360 {
3361 void *tmp = lst;
3362 lst = lst->next;
3363 _eina_model_inner_free(sizeof(Eina_Model_Event_Listener),
3364 tmp);
3365 }
3366 }
3367
3368 _eina_model_inner_free(desc->total.events * sizeof(Eina_Inlist *),
3369 model->listeners.entries);
3370 }
3371
3372 if (model->listeners.freeze)
3373 _eina_model_inner_free(model->desc->total.events * sizeof(int),
3374 model->listeners.freeze);
3375
3376 EINA_MAGIC_SET(model, EINA_MAGIC_NONE);
3377 eina_mempool_free(_eina_model_mp, model);
3378
3379 _eina_model_description_dispose(desc);
3380}
3381
3382static void
3383_eina_model_del(Eina_Model *model)
3384{
3385 const Eina_Model_Description *desc = model->desc;
3386
3387 DBG("model %p (%s) refcount=%d deleted=%hhu",
3388 model, model->desc->cache.types[0]->name,
3389 model->refcount, model->deleted);
3390
3391 EINA_SAFETY_ON_TRUE_RETURN(model->deleted);
3392
3393 model->deleted = EINA_TRUE;
3394 _eina_model_event_callback_call(model, _eina_model_str_deleted, NULL);
3395
3396 if (!desc->ops.type.destructor(model))
3397 ERR("Failed to destroy model %p, type %p (%s)",
3398 model, desc->cache.types[0], desc->cache.types[0]->name);
3399}
3400
3401static void
3402_eina_model_unref(Eina_Model *model)
3403{
3404 DBG("model %p (%s) refcount=%d deleted=%hhu",
3405 model, model->desc->cache.types[0]->name,
3406 model->refcount, model->deleted);
3407
3408 if (model->refcount > 1)
3409 {
3410 model->refcount--;
3411 return;
3412 }
3413
3414 if (!model->deleted) _eina_model_del(model);
3415 _eina_model_free(model);
3416}
3417
3418#define EINA_MODEL_INSTANCE_CHECK_VAL(inst, retval) \
3419 do \
3420 { \
3421 if (!EINA_MAGIC_CHECK(inst, EINA_MAGIC_MODEL)) \
3422 { \
3423 EINA_MAGIC_FAIL(inst, EINA_MAGIC_MODEL); \
3424 return retval; \
3425 } \
3426 EINA_SAFETY_ON_NULL_RETURN_VAL(inst->desc, retval); \
3427 EINA_SAFETY_ON_FALSE_RETURN_VAL(inst->refcount > 0, retval); \
3428 EINA_SAFETY_ON_FALSE_RETURN_VAL(inst->desc->refcount > 0, retval); \
3429 } \
3430 while (0)
3431
3432#define EINA_MODEL_INSTANCE_CHECK(inst) \
3433 do \
3434 { \
3435 if (!EINA_MAGIC_CHECK(inst, EINA_MAGIC_MODEL)) \
3436 { \
3437 EINA_MAGIC_FAIL(inst, EINA_MAGIC_MODEL); \
3438 return; \
3439 } \
3440 EINA_SAFETY_ON_NULL_RETURN(inst->desc); \
3441 EINA_SAFETY_ON_FALSE_RETURN(inst->refcount > 0); \
3442 EINA_SAFETY_ON_FALSE_RETURN(inst->desc->refcount > 0); \
3443 } \
3444 while (0)
3445
3446#define EINA_MODEL_TYPE_CALL_OPTIONAL_RETURN(model, method, def_retval, ...) \
3447 do \
3448 { \
3449 eina_error_set(0); \
3450 if (model->desc->ops.type.method) \
3451 return model->desc->ops.type.method(model, ## __VA_ARGS__); \
3452 DBG("Optional method" # method "() not implemented for model %p (%s)", \
3453 model, model->desc->cache.types[0]->name); \
3454 return def_retval; \
3455 } \
3456 while (0)
3457
3458#define EINA_MODEL_TYPE_CALL_OPTIONAL(model, method, ...) \
3459 do \
3460 { \
3461 eina_error_set(0); \
3462 if (model->desc->ops.type.method) \
3463 model->desc->ops.type.method(model, ## __VA_ARGS__); \
3464 else \
3465 DBG("Optional method" # method "() not implemented for model %p (%s)", \
3466 model, model->desc->cache.types[0]->name); \
3467 } \
3468 while (0)
3469
3470#define EINA_MODEL_TYPE_CALL_MANDATORY_RETURN(model, method, def_retval, ...) \
3471 do \
3472 { \
3473 eina_error_set(0); \
3474 if (model->desc->ops.type.method) \
3475 return model->desc->ops.type.method(model, ## __VA_ARGS__); \
3476 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING); \
3477 CRITICAL("Mandatory method" # method "() not implemented for model %p (%s)", \
3478 model, model->desc->cache.types[0]->name); \
3479 return def_retval; \
3480 } \
3481 while (0)
3482
3483#define EINA_MODEL_TYPE_CALL_MANDATORY(model, method, ...) \
3484 do \
3485 { \
3486 eina_error_set(0); \
3487 if (model->desc->ops.type.method) \
3488 model->desc->ops.type.method(model, ## __VA_ARGS__); \
3489 else \
3490 { \
3491 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING); \
3492 CRITICAL("Mandatory method" # method "() not implemented for model %p (%s)", \
3493 model, model->desc->cache.types[0]->name); \
3494 } \
3495 } \
3496 while (0)
3497
3498
3499#define EINA_MODEL_TYPE_CALL_RETURN(model, method, def_retval, ...) \
3500 do \
3501 { \
3502 eina_error_set(0); \
3503 if (model->desc->ops.type.method) \
3504 return model->desc->ops.type.method(model, ## __VA_ARGS__); \
3505 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING); \
3506 ERR("Method" # method "() not implemented for model %p (%s)", \
3507 model, model->desc->cache.types[0]->name); \
3508 return def_retval; \
3509 } \
3510 while (0)
3511
3512#define EINA_MODEL_TYPE_CALL(model, method, ...) \
3513 do \
3514 { \
3515 eina_error_set(0); \
3516 if (model->desc->ops.type.method) \
3517 model->desc->ops.type.method(model, ## __VA_ARGS__); \
3518 else \
3519 { \
3520 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING); \
3521 ERR("Method" # method "() not implemented for model %p (%s)", \
3522 model, model->desc->cache.types[0]->name); \
3523 } \
3524 } \
3525 while (0)
3526
3527EAPI void
3528eina_model_del(Eina_Model *model)
3529{
3530 EINA_MODEL_INSTANCE_CHECK(model);
3531 _eina_model_del(model);
3532 _eina_model_unref(model);
3533}
3534
3535EAPI const Eina_Model_Type *
3536eina_model_type_get(const Eina_Model *model)
3537{
3538 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3539 return model->desc->cache.types[0];
3540}
3541
3542EAPI const Eina_Model_Interface *
3543eina_model_interface_get(const Eina_Model *model, const char *name)
3544{
3545 const Eina_Model_Description *desc;
3546 const Eina_Model_Interface **itr, **itr_end;
3547
3548 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3549 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
3550
3551 desc = model->desc;
3552 itr = desc->cache.ifaces;
3553 itr_end = itr + desc->total.ifaces;
3554
3555 /* fallback to strcmp if user is lazy about speed */
3556 for (; itr < itr_end; itr++)
3557 if (strcmp((*itr)->name, name) == 0)
3558 return *itr;
3559
3560 return NULL;
3561}
3562
3563static Eina_Bool
3564_eina_model_instance_check(const Eina_Model *model, const Eina_Model_Type *type)
3565{
3566 const Eina_Model_Type **itr, **itr_end;
3567
3568 itr = model->desc->cache.types;
3569 itr_end = itr + model->desc->total.types;
3570
3571 for (; itr < itr_end; itr++)
3572 if (*itr == type)
3573 return EINA_TRUE;
3574
3575 return EINA_FALSE;
3576}
3577
3578EAPI Eina_Bool
3579eina_model_instance_check(const Eina_Model *model, const Eina_Model_Type *type)
3580{
3581 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
3582 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
3583 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), EINA_FALSE);
3584 return _eina_model_instance_check(model, type);
3585}
3586
3587EAPI Eina_Model *
3588eina_model_ref(Eina_Model *model)
3589{
3590 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3591 DBG("model %p (%s) refcount=%d deleted=%hhu",
3592 model, model->desc->cache.types[0]->name,
3593 model->refcount, model->deleted);
3594 model->refcount++;
3595 return model;
3596}
3597
3598static Eina_Model *
3599_eina_model_xref_add(Eina_Model *model, const void *id, const char *label)
3600{
3601 Eina_Model_XRef *ref;
3602 void *bt[256];
3603 int btlen, labellen;
3604
3605 labellen = label ? strlen(label): 0;
3606 btlen = 0;
3607
3608#ifdef HAVE_BACKTRACE
3609 if (_eina_model_debug == EINA_MODEL_DEBUG_BACKTRACE)
3610 btlen = backtrace(bt, EINA_C_ARRAY_LENGTH(bt));
3611#endif
3612
3613 ref = calloc(1, sizeof(*ref) + (btlen * sizeof(void *)) + (labellen + 1));
3614 EINA_SAFETY_ON_NULL_RETURN_VAL(ref, NULL);
3615
3616 ref->id = id;
3617 memcpy(ref->label, label, labellen);
3618 ref->label[labellen] = '\0';
3619 ref->backtrace.count = btlen;
3620 if (btlen == 0) ref->backtrace.symbols = NULL;
3621 else
3622 {
3623 void *ptr = (unsigned char *)ref + sizeof(*ref) + (labellen + 1);
3624 ref->backtrace.symbols = ptr;
3625 memcpy(ptr, bt, btlen * sizeof(void *));
3626 }
3627
3628 model->xrefs = eina_inlist_append(model->xrefs, EINA_INLIST_GET(ref));
3629 return model;
3630}
3631
3632EAPI Eina_Model *
3633eina_model_xref(Eina_Model *model, const void *id, const char *label)
3634{
3635 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3636 DBG("model %p (%s) refcount=%d deleted=%hhu id=%p label=%s",
3637 model, model->desc->cache.types[0]->name,
3638 model->refcount, model->deleted, id, label ? label : "");
3639
3640 model->refcount++;
3641
3642 if (EINA_LIKELY(!_eina_model_debug))
3643 return model;
3644
3645 return _eina_model_xref_add(model, id, label);
3646}
3647
3648EAPI void
3649eina_model_unref(Eina_Model *model)
3650{
3651 EINA_MODEL_INSTANCE_CHECK(model);
3652 _eina_model_unref(model);
3653}
3654
3655EAPI void
3656eina_model_xunref(Eina_Model *model, const void *id)
3657{
3658 Eina_Model_XRef *ref;
3659 EINA_MODEL_INSTANCE_CHECK(model);
3660
3661 if (EINA_LIKELY(!_eina_model_debug))
3662 {
3663 _eina_model_unref(model);
3664 return;
3665 }
3666
3667 EINA_INLIST_FOREACH(model->xrefs, ref)
3668 {
3669 if (ref->id != id) continue;
3670
3671 model->xrefs = eina_inlist_remove(model->xrefs, EINA_INLIST_GET(ref));
3672 free(ref);
3673 _eina_model_unref(model);
3674 return;
3675 }
3676
3677 ERR("Could not find existing reference %p to model %p", id, model);
3678}
3679
3680EAPI int
3681eina_model_refcount(const Eina_Model *model)
3682{
3683 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
3684 return model->refcount;
3685}
3686
3687EAPI const Eina_Inlist *
3688eina_model_xrefs_get(const Eina_Model *model)
3689{
3690 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3691 return model->xrefs;
3692}
3693
3694EAPI Eina_Bool
3695eina_model_event_callback_add(Eina_Model *model, const char *event_name, Eina_Model_Event_Cb cb, const void *data)
3696{
3697 const Eina_Model_Description *desc;
3698 Eina_Model_Event_Listener *el;
3699 int event_id;
3700
3701 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
3702 EINA_SAFETY_ON_NULL_RETURN_VAL(event_name, EINA_FALSE);
3703 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
3704
3705 desc = model->desc;
3706 event_id = _eina_model_description_event_id_find(desc, event_name);
3707 if (event_id < 0)
3708 {
3709 ERR("No event named %s for model %p (%s)",
3710 event_name, model, model->desc->cache.types[0]->name);
3711 return EINA_FALSE;
3712 }
3713
3714 if (!model->listeners.entries)
3715 {
3716 model->listeners.entries = _eina_model_inner_alloc
3717 (desc->total.events * sizeof(Eina_Inlist *));
3718 EINA_SAFETY_ON_NULL_RETURN_VAL(model->listeners.entries, EINA_FALSE);
3719 memset(model->listeners.entries, 0,
3720 desc->total.events * sizeof(Eina_Inlist *));
3721 }
3722
3723 el = _eina_model_inner_alloc(sizeof(Eina_Model_Event_Listener));
3724 EINA_SAFETY_ON_NULL_RETURN_VAL(el, EINA_FALSE);
3725
3726 el->cb = cb;
3727 el->data = data;
3728 el->deleted = EINA_FALSE;
3729 model->listeners.entries[event_id] = eina_inlist_append
3730 (model->listeners.entries[event_id], EINA_INLIST_GET(el));
3731
3732 return EINA_TRUE;
3733}
3734
3735EAPI Eina_Bool
3736eina_model_event_callback_del(Eina_Model *model, const char *event_name, Eina_Model_Event_Cb cb, const void *data)
3737{
3738 int event_id;
3739 Eina_Inlist *lst;
3740 Eina_Model_Event_Listener *el;
3741
3742 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
3743 EINA_SAFETY_ON_NULL_RETURN_VAL(event_name, EINA_FALSE);
3744 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
3745
3746 if (!model->listeners.entries)
3747 {
3748 ERR("No event callbacks for model %p (%s)",
3749 model, model->desc->cache.types[0]->name);
3750 return EINA_FALSE;
3751 }
3752
3753 event_id = _eina_model_description_event_id_find(model->desc, event_name);
3754 if (event_id < 0)
3755 {
3756 ERR("No event named %s for model %p (%s)",
3757 event_name, model, model->desc->cache.types[0]->name);
3758 return EINA_FALSE;
3759 }
3760
3761 lst = model->listeners.entries[event_id];
3762 EINA_INLIST_FOREACH(lst, el)
3763 {
3764 if (el->cb != cb) continue;
3765 if ((data) && (el->data != data)) continue;
3766
3767 if (model->listeners.walking == 0)
3768 {
3769 model->listeners.entries[event_id] = eina_inlist_remove
3770 (model->listeners.entries[event_id], EINA_INLIST_GET(el));
3771 _eina_model_inner_free(sizeof(Eina_Model_Event_Listener), el);
3772 }
3773 else
3774 {
3775 el->deleted = EINA_TRUE;
3776 if (!model->listeners.deleted)
3777 {
3778 model->listeners.deleted = _eina_model_inner_alloc
3779 (model->desc->total.events * sizeof(Eina_List *));
3780 EINA_SAFETY_ON_NULL_RETURN_VAL(model->listeners.deleted,
3781 EINA_FALSE);
3782
3783 memset(model->listeners.deleted, 0,
3784 model->desc->total.events * sizeof(Eina_List *));
3785
3786 }
3787 model->listeners.deleted[event_id] = eina_list_append
3788 (model->listeners.deleted[event_id], el);
3789 }
3790 return EINA_TRUE;
3791 }
3792
3793 ERR("No callback %p data %p found for event named %s for model %p (%s)",
3794 cb, data, event_name, model, model->desc->cache.types[0]->name);
3795 return EINA_FALSE;
3796}
3797
3798EAPI const Eina_Model_Event_Description *
3799eina_model_event_description_get(const Eina_Model *model, const char *event_name)
3800{
3801 const Eina_Model_Description *desc;
3802 int event_id;
3803
3804 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3805 EINA_SAFETY_ON_NULL_RETURN_VAL(event_name, NULL);
3806
3807 desc = model->desc;
3808 event_id = _eina_model_description_event_id_find(desc, event_name);
3809 if (event_id < 0)
3810 return NULL;
3811
3812 return desc->cache.events[event_id].desc;
3813}
3814
3815EAPI Eina_List *
3816eina_model_event_names_list_get(const Eina_Model *model)
3817{
3818 const Eina_Model_Event_Description_Cache *itr, *itr_end;
3819 Eina_List *lst = NULL;
3820
3821 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3822
3823 itr = model->desc->cache.events;
3824 itr_end = itr + model->desc->total.events;
3825
3826 for (; itr < itr_end; itr++)
3827 lst = eina_list_append(lst, eina_stringshare_add(itr->name));
3828
3829 return lst;
3830}
3831
3832EAPI void
3833eina_model_event_names_list_free(Eina_List *list)
3834{
3835 const char *str;
3836 EINA_LIST_FREE(list, str)
3837 eina_stringshare_del(str);
3838}
3839
3840EAPI Eina_Bool
3841eina_model_event_callback_call(Eina_Model *model, const char *name, const void *event_info)
3842{
3843 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
3844 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
3845 return _eina_model_event_callback_call(model, name, event_info);
3846}
3847
3848EAPI int
3849eina_model_event_callback_freeze(Eina_Model *model, const char *name)
3850{
3851 int event_id;
3852
3853 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
3854 EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1);
3855
3856 event_id = _eina_model_description_event_id_find(model->desc, name);
3857 if (event_id < 0) return -1;
3858
3859 if (!model->listeners.freeze)
3860 {
3861 model->listeners.freeze = _eina_model_inner_alloc
3862 (model->desc->total.events * sizeof(int));
3863 EINA_SAFETY_ON_NULL_RETURN_VAL(model->listeners.freeze, -1);
3864
3865 memset(model->listeners.freeze, 0,
3866 model->desc->total.events * sizeof(int));
3867 }
3868
3869 if (model->listeners.freeze[event_id] == 0)
3870 DBG("model %p (%s) event %s frozen",
3871 model, model->desc->cache.types[0]->name, name);
3872
3873 model->listeners.freeze[event_id]++;
3874 return model->listeners.freeze[event_id];
3875}
3876
3877EAPI int
3878eina_model_event_callback_thaw(Eina_Model *model, const char *name)
3879{
3880 int event_id;
3881
3882 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
3883 EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1);
3884 EINA_SAFETY_ON_NULL_RETURN_VAL(model->listeners.freeze, -1);
3885
3886 event_id = _eina_model_description_event_id_find(model->desc, name);
3887 if (event_id < 0) return -1;
3888
3889 model->listeners.freeze[event_id]--;
3890 if (model->listeners.freeze[event_id] == 0)
3891 DBG("model %p (%s) event %s unfrozen",
3892 model, model->desc->cache.types[0]->name, name);
3893 return model->listeners.freeze[event_id];
3894}
3895
3896EAPI Eina_Model *
3897eina_model_copy(const Eina_Model *model)
3898{
3899 const Eina_Model_Description *desc;
3900 Eina_Model *copy;
3901 unsigned int i;
3902
3903 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3904 desc = model->desc;
3905 copy = eina_model_new(desc->cache.types[0]);
3906 EINA_SAFETY_ON_NULL_RETURN_VAL(copy, NULL);
3907
3908 /* call copy of every type in the reverse order,
3909 * they should not call parent's copy.
3910 */
3911 for (i = desc->total.types; i > 0; i--)
3912 {
3913 if (desc->cache.types[i - 1]->copy)
3914 {
3915 if (!desc->cache.types[i - 1]->copy(model, copy))
3916 goto failed;
3917 }
3918 }
3919
3920 /* call copy of every interface in the reverse order,
3921 * they should not call parent's copy.
3922 */
3923 for (i = desc->total.ifaces; i > 0; i--)
3924 {
3925 if (desc->cache.ifaces[i - 1]->copy)
3926 {
3927 if (!desc->cache.ifaces[i - 1]->copy(model, copy))
3928 goto failed;
3929 }
3930 }
3931
3932 return copy;
3933
3934 failed:
3935 ERR("Failed to copy model %p %s", model, desc->cache.types[0]->name);
3936 eina_model_del(copy);
3937 return NULL;
3938}
3939
3940EAPI Eina_Model *
3941eina_model_deep_copy(const Eina_Model *model)
3942{
3943 const Eina_Model_Description *desc;
3944 Eina_Model *deep_copy;
3945 unsigned int i;
3946
3947 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
3948 desc = model->desc;
3949 deep_copy = eina_model_new(desc->cache.types[0]);
3950 EINA_SAFETY_ON_NULL_RETURN_VAL(deep_copy, NULL);
3951
3952 /* call deep_copy of every type in the reverse order,
3953 * they should not call parent's deep_copy.
3954 */
3955 for (i = desc->total.types; i > 0; i--)
3956 {
3957 if (desc->cache.types[i - 1]->deep_copy)
3958 {
3959 if (!desc->cache.types[i - 1]->deep_copy(model, deep_copy))
3960 goto failed;
3961 }
3962 }
3963
3964 /* call deep_copy of every interface in the reverse order,
3965 * they should not call parent's deep_copy.
3966 */
3967 for (i = desc->total.ifaces; i > 0; i--)
3968 {
3969 if (desc->cache.ifaces[i - 1]->deep_copy)
3970 {
3971 if (!desc->cache.ifaces[i - 1]->deep_copy(model, deep_copy))
3972 goto failed;
3973 }
3974 }
3975
3976 return deep_copy;
3977
3978 failed:
3979 ERR("Failed to deep copy model %p %s", model, desc->cache.types[0]->name);
3980 eina_model_del(deep_copy);
3981 return NULL;
3982}
3983
3984EAPI int
3985eina_model_compare(const Eina_Model *a, const Eina_Model *b)
3986{
3987 const Eina_Model_Description *desc_a, *desc_b;
3988 Eina_Bool ok;
3989 int cmp = -1;
3990
3991 EINA_MODEL_INSTANCE_CHECK_VAL(a, -1);
3992 EINA_MODEL_INSTANCE_CHECK_VAL(b, -1);
3993 desc_a = a->desc;
3994 desc_b = b->desc;
3995
3996 if ((!desc_a->ops.type.compare) && (!desc_b->ops.type.compare))
3997 {
3998 ERR("Models %p (%s) and %p (%s) can't compare",
3999 a, desc_a->cache.types[0]->name,
4000 b, desc_b->cache.types[0]->name);
4001 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4002 return -1;
4003 }
4004 else if ((desc_a->ops.type.compare) && (desc_b->ops.type.compare))
4005 {
4006 ok = desc_a->ops.type.compare(a, b, &cmp);
4007 if (!ok)
4008 {
4009 ok = desc_b->ops.type.compare(b, a, &cmp);
4010 if (ok)
4011 cmp = -cmp; /* swapped sides! */
4012 }
4013 }
4014 else if (desc_a->ops.type.compare)
4015 ok = desc_a->ops.type.compare(a, b, &cmp);
4016 else
4017 {
4018 ok = desc_b->ops.type.compare(b, a, &cmp);
4019 if (ok)
4020 cmp = -cmp; /* swapped sides! */
4021 }
4022
4023 if (!ok)
4024 {
4025 ERR("Could not compare models %p (%s) and %p (%s)",
4026 a, desc_a->cache.types[0]->name,
4027 b, desc_b->cache.types[0]->name);
4028 eina_error_set(EINA_ERROR_MODEL_FAILED);
4029 return -1;
4030 }
4031
4032 return cmp;
4033}
4034
4035EAPI Eina_Bool
4036eina_model_load(Eina_Model *model)
4037{
4038 Eina_Bool ret;
4039
4040 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4041
4042 eina_error_set(0);
4043 if (model->desc->ops.type.load)
4044 {
4045 ret = model->desc->ops.type.load(model);
4046 if (ret)
4047 _eina_model_event_callback_call(model, _eina_model_str_loaded, NULL);
4048 }
4049 else
4050 {
4051 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4052 ret = EINA_FALSE;
4053 ERR("Method load() not implemented for model %p (%s)",
4054 model, model->desc->cache.types[0]->name);
4055 }
4056
4057 return ret;
4058}
4059
4060EAPI Eina_Bool
4061eina_model_unload(Eina_Model *model)
4062{
4063 Eina_Bool ret;
4064
4065 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4066
4067 eina_error_set(0);
4068 if (model->desc->ops.type.unload)
4069 {
4070 ret = model->desc->ops.type.unload(model);
4071 if (ret)
4072 _eina_model_event_callback_call
4073 (model, _eina_model_str_unloaded, NULL);
4074 }
4075 else
4076 {
4077 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4078 ret = EINA_FALSE;
4079 ERR("Method unload() not implemented for model %p (%s)",
4080 model, model->desc->cache.types[0]->name);
4081 }
4082
4083 return ret;
4084}
4085
4086EAPI Eina_Bool
4087eina_model_property_get(const Eina_Model *model, const char *name, Eina_Value *value)
4088{
4089 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4090 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4091 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
4092 EINA_MODEL_TYPE_CALL_MANDATORY_RETURN(model, property_get, EINA_FALSE,
4093 name, value);
4094}
4095
4096EAPI Eina_Bool
4097eina_model_property_set(Eina_Model *model, const const char *name, const Eina_Value *value)
4098{
4099 Eina_Bool ret;
4100
4101 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4102 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4103 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
4104 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), EINA_FALSE);
4105
4106 eina_error_set(0);
4107 if (model->desc->ops.type.property_set)
4108 {
4109 ret = model->desc->ops.type.property_set(model, name, value);
4110 if (ret)
4111 _eina_model_event_callback_call
4112 (model, _eina_model_str_property_set, name);
4113 }
4114 else
4115 {
4116 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4117 ret = EINA_FALSE;
4118 ERR("Method property_set() not implemented for model %p (%s)",
4119 model, model->desc->cache.types[0]->name);
4120 }
4121
4122 return ret;
4123}
4124
4125EAPI Eina_Bool
4126eina_model_property_del(Eina_Model *model, const char *name)
4127{
4128 Eina_Bool ret;
4129
4130 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4131 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4132
4133 eina_error_set(0);
4134 if (model->desc->ops.type.property_del)
4135 {
4136 ret = model->desc->ops.type.property_del(model, name);
4137 if (ret)
4138 _eina_model_event_callback_call
4139 (model, _eina_model_str_property_del, name);
4140 }
4141 else
4142 {
4143 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4144 ret = EINA_FALSE;
4145 ERR("Method property_del() not implemented for model %p (%s)",
4146 model, model->desc->cache.types[0]->name);
4147 }
4148
4149 return ret;
4150}
4151
4152EAPI Eina_List *
4153eina_model_properties_names_list_get(const Eina_Model *model)
4154{
4155 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4156 EINA_MODEL_TYPE_CALL_OPTIONAL_RETURN(model, properties_names_list_get, NULL);
4157}
4158
4159EAPI void
4160eina_model_properties_names_list_free(Eina_List *list)
4161{
4162 const char *str;
4163 EINA_LIST_FREE(list, str)
4164 eina_stringshare_del(str);
4165}
4166
4167EAPI int
4168eina_model_child_count(const Eina_Model *model)
4169{
4170 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
4171 EINA_MODEL_TYPE_CALL_OPTIONAL_RETURN(model, child_count, 0);
4172}
4173
4174EAPI Eina_Model *
4175eina_model_child_get(const Eina_Model *model, unsigned int position)
4176{
4177 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4178 EINA_MODEL_TYPE_CALL_RETURN(model, child_get, NULL, position);
4179}
4180
4181EAPI Eina_Bool
4182eina_model_child_set(Eina_Model *model, unsigned int position, Eina_Model *child)
4183{
4184 Eina_Bool ret;
4185
4186 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4187 EINA_MODEL_INSTANCE_CHECK_VAL(child, EINA_FALSE);
4188
4189 eina_error_set(0);
4190 if (model->desc->ops.type.child_set)
4191 {
4192 ret = model->desc->ops.type.child_set(model, position, child);
4193 if (ret)
4194 _eina_model_event_callback_call
4195 (model, _eina_model_str_child_set, &position);
4196 }
4197 else
4198 {
4199 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4200 ret = EINA_FALSE;
4201 ERR("Method child_set() not implemented for model %p (%s)",
4202 model, model->desc->cache.types[0]->name);
4203 }
4204
4205 return ret;
4206}
4207
4208EAPI Eina_Bool
4209eina_model_child_del(Eina_Model *model, unsigned int position)
4210{
4211 Eina_Bool ret;
4212
4213 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4214
4215 eina_error_set(0);
4216 if (model->desc->ops.type.child_del)
4217 {
4218 ret = model->desc->ops.type.child_del(model, position);
4219 if (ret)
4220 {
4221 _eina_model_event_callback_call
4222 (model, _eina_model_str_child_del, &position);
4223 _eina_model_event_callback_call
4224 (model, _eina_model_str_children_changed, NULL);
4225 }
4226 }
4227 else
4228 {
4229 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4230 ret = EINA_FALSE;
4231 ERR("Method child_del() not implemented for model %p (%s)",
4232 model, model->desc->cache.types[0]->name);
4233 }
4234
4235 return ret;
4236}
4237
4238EAPI Eina_Bool
4239eina_model_child_insert_at(Eina_Model *model, unsigned int position, Eina_Model *child)
4240{
4241 Eina_Bool ret;
4242
4243 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4244 EINA_SAFETY_ON_NULL_RETURN_VAL(child, EINA_FALSE);
4245
4246 eina_error_set(0);
4247 if (model->desc->ops.type.child_insert_at)
4248 {
4249 ret = model->desc->ops.type.child_insert_at(model, position, child);
4250 if (ret)
4251 {
4252 _eina_model_event_callback_call
4253 (model, _eina_model_str_child_inserted, &position);
4254 _eina_model_event_callback_call
4255 (model, _eina_model_str_children_changed, NULL);
4256 }
4257 }
4258 else
4259 {
4260 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4261 ret = EINA_FALSE;
4262 ERR("Method child_insert_at() not implemented for model %p (%s)",
4263 model, model->desc->cache.types[0]->name);
4264 }
4265
4266 return ret;
4267}
4268
4269EAPI int
4270eina_model_child_append(Eina_Model *model, Eina_Model *child)
4271{
4272 Eina_Bool ret;
4273 int position;
4274
4275 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
4276 EINA_SAFETY_ON_NULL_RETURN_VAL(child, -1);
4277
4278 position = eina_model_child_count(model);
4279 if (position < 0)
4280 return -1;
4281
4282 eina_error_set(0);
4283 if (model->desc->ops.type.child_insert_at)
4284 {
4285 ret = model->desc->ops.type.child_insert_at(model, position, child);
4286 if (ret)
4287 {
4288 _eina_model_event_callback_call
4289 (model, _eina_model_str_child_inserted, &position);
4290 _eina_model_event_callback_call
4291 (model, _eina_model_str_children_changed, NULL);
4292 }
4293 }
4294 else
4295 {
4296 eina_error_set(EINA_ERROR_MODEL_METHOD_MISSING);
4297 ret = EINA_FALSE;
4298 ERR("Method child_insert_at() not implemented for model %p (%s)",
4299 model, model->desc->cache.types[0]->name);
4300 }
4301
4302 return ret ? position : -1;
4303}
4304
4305EAPI int
4306eina_model_child_find(const Eina_Model *model, unsigned int start_position, const Eina_Model *other)
4307{
4308 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
4309 EINA_SAFETY_ON_NULL_RETURN_VAL(other, -1);
4310 EINA_MODEL_TYPE_CALL_RETURN(model, child_find, -1, start_position, other);
4311}
4312
4313EAPI int
4314eina_model_child_criteria_match(const Eina_Model *model, unsigned int start_position, Eina_Each_Cb match, const void *data)
4315{
4316 EINA_MODEL_INSTANCE_CHECK_VAL(model, -1);
4317 EINA_SAFETY_ON_NULL_RETURN_VAL(match, -1);
4318 EINA_MODEL_TYPE_CALL_RETURN(model, child_criteria_match, -1,
4319 start_position, match, data);
4320}
4321
4322EAPI Eina_Bool
4323eina_model_child_sort(Eina_Model *model, Eina_Compare_Cb compare)
4324{
4325 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
4326 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, EINA_FALSE);
4327 EINA_MODEL_TYPE_CALL(model, child_sort, compare);
4328 _eina_model_event_callback_call
4329 (model, _eina_model_str_children_changed, NULL);
4330 return EINA_TRUE;
4331}
4332
4333EAPI Eina_Iterator *
4334eina_model_child_iterator_get(Eina_Model *model)
4335{
4336 int count;
4337 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4338 count = eina_model_child_count(model);
4339 if (count < 0)
4340 return NULL;
4341 EINA_MODEL_TYPE_CALL_RETURN(model, child_iterator_get, NULL, 0, count);
4342}
4343
4344EAPI Eina_Iterator *
4345eina_model_child_slice_iterator_get(Eina_Model *model, unsigned int start, unsigned int count)
4346{
4347 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4348 EINA_MODEL_TYPE_CALL_RETURN(model, child_iterator_get, NULL, start, count);
4349}
4350
4351EAPI Eina_Iterator *
4352eina_model_child_reversed_iterator_get(Eina_Model *model)
4353{
4354 int count;
4355 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4356 count = eina_model_child_count(model);
4357 if (count < 0)
4358 return NULL;
4359 EINA_MODEL_TYPE_CALL_RETURN(model, child_reversed_iterator_get, NULL,
4360 0, count);
4361}
4362
4363EAPI Eina_Iterator *
4364eina_model_child_slice_reversed_iterator_get(Eina_Model *model, unsigned int start, unsigned int count)
4365{
4366 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4367 EINA_MODEL_TYPE_CALL_RETURN(model, child_reversed_iterator_get, NULL,
4368 start, count);
4369}
4370
4371EAPI Eina_Iterator *
4372eina_model_child_sorted_iterator_get(Eina_Model *model, Eina_Compare_Cb compare)
4373{
4374 int count;
4375 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4376 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, NULL);
4377 count = eina_model_child_count(model);
4378 if (count < 0)
4379 return NULL;
4380 EINA_MODEL_TYPE_CALL_RETURN(model, child_sorted_iterator_get, NULL,
4381 0, count, compare);
4382}
4383
4384EAPI Eina_Iterator *
4385eina_model_child_slice_sorted_iterator_get(Eina_Model *model, unsigned int start, unsigned int count, Eina_Compare_Cb compare)
4386{
4387 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4388 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, NULL);
4389 EINA_MODEL_TYPE_CALL_RETURN(model, child_sorted_iterator_get, NULL,
4390 start, count, compare);
4391}
4392
4393EAPI Eina_Iterator *
4394eina_model_child_filtered_iterator_get(Eina_Model *model, Eina_Each_Cb match, const void *data)
4395{
4396 int count;
4397 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4398 EINA_SAFETY_ON_NULL_RETURN_VAL(match, NULL);
4399 count = eina_model_child_count(model);
4400 if (count < 0)
4401 return NULL;
4402 EINA_MODEL_TYPE_CALL_RETURN(model, child_filtered_iterator_get, NULL,
4403 0, count, match, data);
4404}
4405
4406EAPI Eina_Iterator *
4407eina_model_child_slice_filtered_iterator_get(Eina_Model *model, unsigned int start, unsigned int count, Eina_Each_Cb match, const void *data)
4408{
4409 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4410 EINA_SAFETY_ON_NULL_RETURN_VAL(match, NULL);
4411 EINA_MODEL_TYPE_CALL_RETURN(model, child_filtered_iterator_get, NULL,
4412 start, count, match, data);
4413}
4414
4415EAPI char *
4416eina_model_to_string(const Eina_Model *model)
4417{
4418 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4419 EINA_MODEL_TYPE_CALL_RETURN(model, to_string, NULL);
4420}
4421
4422/* type functions *****************************************************/
4423
4424EAPI Eina_Bool
4425eina_model_type_check(const Eina_Model_Type *type)
4426{
4427 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
4428 return _eina_model_type_check(type);
4429}
4430
4431EAPI const char *
4432eina_model_type_name_get(const Eina_Model_Type *type)
4433{
4434 EINA_SAFETY_ON_NULL_RETURN_VAL(type, NULL);
4435 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), NULL);
4436 return type->name;
4437}
4438
4439EAPI const Eina_Model_Type *
4440eina_model_type_parent_get(const Eina_Model_Type *type)
4441{
4442 EINA_SAFETY_ON_NULL_RETURN_VAL(type, NULL);
4443 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), NULL);
4444 return type->parent;
4445}
4446
4447#define EINA_MODEL_TYPE_INSTANCE_CHECK(type, model) \
4448 EINA_SAFETY_ON_NULL_RETURN(type); \
4449 EINA_SAFETY_ON_FALSE_RETURN(_eina_model_type_check(type)); \
4450 EINA_MODEL_INSTANCE_CHECK(model); \
4451 EINA_SAFETY_ON_FALSE_RETURN(_eina_model_instance_check(model, type));
4452
4453#define EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, retval) \
4454 EINA_SAFETY_ON_NULL_RETURN_VAL(type, retval); \
4455 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), retval); \
4456 EINA_MODEL_INSTANCE_CHECK_VAL(model, retval); \
4457 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_instance_check(model, type), retval);
4458
4459EAPI Eina_Bool
4460eina_model_type_constructor(const Eina_Model_Type *type, Eina_Model *model)
4461{
4462 Eina_Bool (*constructor)(Eina_Model *);
4463
4464 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4465
4466 constructor = _eina_model_type_find_offset
4467 (type, offsetof(Eina_Model_Type, constructor));
4468 EINA_SAFETY_ON_NULL_RETURN_VAL(constructor, EINA_FALSE);
4469
4470 return constructor(model);
4471}
4472
4473EAPI Eina_Bool
4474eina_model_type_destructor(const Eina_Model_Type *type, Eina_Model *model)
4475{
4476 Eina_Bool (*destructor)(Eina_Model *);
4477
4478 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4479
4480 destructor = _eina_model_type_find_offset
4481 (type, offsetof(Eina_Model_Type, destructor));
4482 EINA_SAFETY_ON_NULL_RETURN_VAL(destructor, EINA_FALSE);
4483
4484 return destructor(model);
4485}
4486
4487EAPI Eina_Bool
4488eina_model_type_copy(const Eina_Model_Type *type, const Eina_Model *src, Eina_Model *dst)
4489{
4490 Eina_Bool (*copy)(const Eina_Model *, Eina_Model *);
4491
4492 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, src, EINA_FALSE);
4493 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, dst, EINA_FALSE);
4494
4495 copy = _eina_model_type_find_offset
4496 (type, offsetof(Eina_Model_Type, copy));
4497 EINA_SAFETY_ON_NULL_RETURN_VAL(copy, EINA_FALSE);
4498
4499 return copy(src, dst);
4500}
4501
4502EAPI Eina_Bool
4503eina_model_type_deep_copy(const Eina_Model_Type *type, const Eina_Model *src, Eina_Model *dst)
4504{
4505 Eina_Bool (*deep_copy)(const Eina_Model *, Eina_Model *);
4506
4507 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, src, EINA_FALSE);
4508 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, dst, EINA_FALSE);
4509
4510 deep_copy = _eina_model_type_find_offset
4511 (type, offsetof(Eina_Model_Type, deep_copy));
4512 EINA_SAFETY_ON_NULL_RETURN_VAL(deep_copy, EINA_FALSE);
4513
4514 return deep_copy(src, dst);
4515}
4516
4517EAPI Eina_Bool
4518eina_model_type_compare(const Eina_Model_Type *type, const Eina_Model *a, const Eina_Model *b, int *cmp)
4519{
4520 Eina_Bool (*compare)(const Eina_Model *, const Eina_Model *, int *);
4521
4522 EINA_SAFETY_ON_NULL_RETURN_VAL(cmp, EINA_FALSE);
4523 *cmp = 0;
4524
4525 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, a, EINA_FALSE);
4526 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, b, EINA_FALSE);
4527
4528 compare = _eina_model_type_find_offset
4529 (type, offsetof(Eina_Model_Type, compare));
4530 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, EINA_FALSE);
4531
4532 return compare(a, b, cmp);
4533}
4534
4535EAPI Eina_Bool
4536eina_model_type_load(const Eina_Model_Type *type, Eina_Model *model)
4537{
4538 Eina_Bool (*load)(Eina_Model *);
4539
4540 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4541
4542 load = _eina_model_type_find_offset
4543 (type, offsetof(Eina_Model_Type, load));
4544 EINA_SAFETY_ON_NULL_RETURN_VAL(load, EINA_FALSE);
4545
4546 return load(model);
4547}
4548
4549EAPI Eina_Bool
4550eina_model_type_unload(const Eina_Model_Type *type, Eina_Model *model)
4551{
4552 Eina_Bool (*unload)(Eina_Model *);
4553
4554 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4555
4556 unload = _eina_model_type_find_offset
4557 (type, offsetof(Eina_Model_Type, unload));
4558 EINA_SAFETY_ON_NULL_RETURN_VAL(unload, EINA_FALSE);
4559
4560 return unload(model);
4561}
4562
4563EAPI Eina_Bool
4564eina_model_type_property_get(const Eina_Model_Type *type, const Eina_Model *model, const char *name, Eina_Value *value)
4565{
4566 Eina_Bool (*property_get)(const Eina_Model *, const char *, Eina_Value *);
4567
4568 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4569 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
4570
4571 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4572
4573 property_get = _eina_model_type_find_offset
4574 (type, offsetof(Eina_Model_Type, property_get));
4575 EINA_SAFETY_ON_NULL_RETURN_VAL(property_get, EINA_FALSE);
4576
4577 return property_get(model, name, value);
4578}
4579
4580EAPI Eina_Bool
4581eina_model_type_property_set(const Eina_Model_Type *type, Eina_Model *model, const char *name, const Eina_Value *value)
4582{
4583 Eina_Bool (*property_set)(Eina_Model *, const char *, const Eina_Value *);
4584
4585 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4586 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
4587 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), EINA_FALSE);
4588
4589 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4590
4591 property_set = _eina_model_type_find_offset
4592 (type, offsetof(Eina_Model_Type, property_set));
4593 EINA_SAFETY_ON_NULL_RETURN_VAL(property_set, EINA_FALSE);
4594
4595 return property_set(model, name, value);
4596}
4597
4598EAPI Eina_Bool
4599eina_model_type_property_del(const Eina_Model_Type *type, Eina_Model *model, const char *name)
4600{
4601 Eina_Bool (*property_del)(const Eina_Model *, const char *);
4602
4603 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
4604 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4605
4606 property_del = _eina_model_type_find_offset
4607 (type, offsetof(Eina_Model_Type, property_del));
4608 EINA_SAFETY_ON_NULL_RETURN_VAL(property_del, EINA_FALSE);
4609
4610 return property_del(model, name);
4611}
4612
4613EAPI Eina_List *
4614eina_model_type_properties_names_list_get(const Eina_Model_Type *type, const Eina_Model *model)
4615{
4616 Eina_List *(*properties_names_list_get)(const Eina_Model *);
4617
4618 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4619
4620 properties_names_list_get = _eina_model_type_find_offset
4621 (type, offsetof(Eina_Model_Type, properties_names_list_get));
4622 EINA_SAFETY_ON_NULL_RETURN_VAL(properties_names_list_get, NULL);
4623
4624 return properties_names_list_get(model);
4625}
4626
4627EAPI int
4628eina_model_type_child_count(const Eina_Model_Type *type, const Eina_Model *model)
4629{
4630 int (*child_count)(const Eina_Model *);
4631
4632 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, -1);
4633
4634 child_count = _eina_model_type_find_offset
4635 (type, offsetof(Eina_Model_Type, child_count));
4636 EINA_SAFETY_ON_NULL_RETURN_VAL(child_count, -1);
4637
4638 return child_count(model);
4639}
4640
4641EAPI Eina_Model *
4642eina_model_type_child_get(const Eina_Model_Type *type, const Eina_Model *model, unsigned int position)
4643{
4644 Eina_Model *(*child_get)(const Eina_Model *, unsigned int);
4645
4646 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4647
4648 child_get = _eina_model_type_find_offset
4649 (type, offsetof(Eina_Model_Type, child_get));
4650 EINA_SAFETY_ON_NULL_RETURN_VAL(child_get, NULL);
4651
4652 return child_get(model, position);
4653}
4654
4655EAPI Eina_Bool
4656eina_model_type_child_set(const Eina_Model_Type *type, Eina_Model *model, unsigned int position, Eina_Model *child)
4657{
4658 Eina_Bool (*child_set)(Eina_Model *, unsigned int, Eina_Model *);
4659
4660 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4661 EINA_MODEL_INSTANCE_CHECK_VAL(child, EINA_FALSE);
4662
4663 child_set = _eina_model_type_find_offset
4664 (type, offsetof(Eina_Model_Type, child_set));
4665 EINA_SAFETY_ON_NULL_RETURN_VAL(child_set, EINA_FALSE);
4666
4667 return child_set(model, position, child);
4668}
4669
4670EAPI Eina_Bool
4671eina_model_type_child_del(const Eina_Model_Type *type, Eina_Model *model, unsigned int position)
4672{
4673 Eina_Bool (*child_del)(Eina_Model *, unsigned int);
4674
4675 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4676
4677 child_del = _eina_model_type_find_offset
4678 (type, offsetof(Eina_Model_Type, child_del));
4679 EINA_SAFETY_ON_NULL_RETURN_VAL(child_del, EINA_FALSE);
4680
4681 return child_del(model, position);
4682}
4683
4684EAPI Eina_Bool
4685eina_model_type_child_insert_at(const Eina_Model_Type *type, Eina_Model *model, unsigned int position, Eina_Model *child)
4686{
4687 Eina_Bool (*child_insert_at)(Eina_Model *, unsigned int, Eina_Model *);
4688
4689 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, EINA_FALSE);
4690 EINA_MODEL_INSTANCE_CHECK_VAL(child, EINA_FALSE);
4691
4692 child_insert_at = _eina_model_type_find_offset
4693 (type, offsetof(Eina_Model_Type, child_insert_at));
4694 EINA_SAFETY_ON_NULL_RETURN_VAL(child_insert_at, EINA_FALSE);
4695
4696 return child_insert_at(model, position, child);
4697}
4698
4699EAPI int
4700eina_model_type_child_find(const Eina_Model_Type *type, const Eina_Model *model, unsigned int start_position, const Eina_Model *other)
4701{
4702 int (*child_find)(const Eina_Model *, unsigned int, const Eina_Model *);
4703
4704 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, -1);
4705 EINA_MODEL_INSTANCE_CHECK_VAL(other, -1);
4706
4707 child_find = _eina_model_type_find_offset
4708 (type, offsetof(Eina_Model_Type, child_find));
4709 EINA_SAFETY_ON_NULL_RETURN_VAL(child_find, -1);
4710
4711 return child_find(model, start_position, other);
4712}
4713
4714EAPI int
4715eina_model_type_child_criteria_match(const Eina_Model_Type *type, const Eina_Model *model, unsigned int start_position, Eina_Each_Cb match, const void *data)
4716{
4717 int (*child_criteria_match)(const Eina_Model *, unsigned int, Eina_Each_Cb, const void *);
4718
4719 EINA_SAFETY_ON_NULL_RETURN_VAL(match, -1);
4720 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, -1);
4721
4722 child_criteria_match = _eina_model_type_find_offset
4723 (type, offsetof(Eina_Model_Type, child_criteria_match));
4724 EINA_SAFETY_ON_NULL_RETURN_VAL(child_criteria_match, -1);
4725
4726 return child_criteria_match(model, start_position, match, data);
4727}
4728
4729EAPI void
4730eina_model_type_child_sort(const Eina_Model_Type *type, Eina_Model *model, Eina_Compare_Cb compare)
4731{
4732 void (*child_sort)(Eina_Model *, Eina_Compare_Cb);
4733
4734 EINA_SAFETY_ON_NULL_RETURN(compare);
4735 EINA_MODEL_TYPE_INSTANCE_CHECK(type, model);
4736
4737 child_sort = _eina_model_type_find_offset
4738 (type, offsetof(Eina_Model_Type, child_sort));
4739 EINA_SAFETY_ON_NULL_RETURN(child_sort);
4740
4741 return child_sort(model, compare);
4742}
4743
4744EAPI Eina_Iterator *
4745eina_model_type_child_iterator_get(const Eina_Model_Type *type, Eina_Model *model, unsigned int start, unsigned int count)
4746{
4747 Eina_Iterator *(*child_iterator_get)(const Eina_Model *, unsigned int, unsigned int);
4748
4749 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4750
4751 child_iterator_get = _eina_model_type_find_offset
4752 (type, offsetof(Eina_Model_Type, child_iterator_get));
4753 EINA_SAFETY_ON_NULL_RETURN_VAL(child_iterator_get, NULL);
4754
4755 return child_iterator_get(model, start, count);
4756}
4757
4758EAPI Eina_Iterator *
4759eina_model_type_child_reversed_iterator_get(const Eina_Model_Type *type, Eina_Model *model, unsigned int start, unsigned int count)
4760{
4761 Eina_Iterator *(*child_reversed_iterator_get)(const Eina_Model *, unsigned int, unsigned int);
4762
4763 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4764
4765 child_reversed_iterator_get = _eina_model_type_find_offset
4766 (type, offsetof(Eina_Model_Type, child_reversed_iterator_get));
4767 EINA_SAFETY_ON_NULL_RETURN_VAL(child_reversed_iterator_get, NULL);
4768
4769 return child_reversed_iterator_get(model, start, count);
4770}
4771
4772EAPI Eina_Iterator *
4773eina_model_type_child_sorted_iterator_get(const Eina_Model_Type *type, Eina_Model *model, unsigned int start, unsigned int count, Eina_Compare_Cb compare)
4774{
4775 Eina_Iterator *(*child_sorted_iterator_get)(const Eina_Model *, unsigned int, unsigned int, Eina_Compare_Cb);
4776
4777 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, NULL);
4778 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4779
4780 child_sorted_iterator_get = _eina_model_type_find_offset
4781 (type, offsetof(Eina_Model_Type, child_sorted_iterator_get));
4782 EINA_SAFETY_ON_NULL_RETURN_VAL(child_sorted_iterator_get, NULL);
4783
4784 return child_sorted_iterator_get(model, start, count, compare);
4785}
4786
4787EAPI Eina_Iterator *
4788eina_model_type_child_filtered_iterator_get(const Eina_Model_Type *type, Eina_Model *model, unsigned int start, unsigned int count, Eina_Each_Cb match, const void *data)
4789{
4790 Eina_Iterator *(*child_filtered_iterator_get)(const Eina_Model *, unsigned int, unsigned int, Eina_Each_Cb, const void *);
4791
4792 EINA_SAFETY_ON_NULL_RETURN_VAL(match, NULL);
4793 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4794
4795 child_filtered_iterator_get = _eina_model_type_find_offset
4796 (type, offsetof(Eina_Model_Type, child_filtered_iterator_get));
4797 EINA_SAFETY_ON_NULL_RETURN_VAL(child_filtered_iterator_get, NULL);
4798
4799 return child_filtered_iterator_get(model, start, count, match, data);
4800}
4801
4802EAPI char *
4803eina_model_type_to_string(const Eina_Model_Type *type, const Eina_Model *model)
4804{
4805 char *(*to_string)(const Eina_Model *);
4806
4807 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4808
4809 to_string = _eina_model_type_find_offset
4810 (type, offsetof(Eina_Model_Type, to_string));
4811 EINA_SAFETY_ON_NULL_RETURN_VAL(to_string, NULL);
4812
4813 return to_string(model);
4814}
4815
4816EAPI Eina_Bool
4817eina_model_type_subclass_setup(Eina_Model_Type *type, const Eina_Model_Type *parent)
4818{
4819 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
4820 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, EINA_FALSE);
4821 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(parent), EINA_FALSE);
4822 EINA_SAFETY_ON_FALSE_RETURN_VAL(type->version == EINA_MODEL_TYPE_VERSION,
4823 EINA_FALSE);
4824
4825 type->parent = parent;
4826 type->type_size = parent->type_size;
4827 type->interfaces = NULL;
4828 type->events = NULL;
4829
4830 type->setup = NULL;
4831 type->flush = NULL;
4832 type->constructor = NULL;
4833 type->destructor = NULL;
4834 type->copy = NULL;
4835 type->deep_copy = NULL;
4836 type->compare = NULL;
4837 type->load = NULL;
4838 type->unload = NULL;
4839 type->property_get = NULL;
4840 type->property_set = NULL;
4841 type->property_del = NULL;
4842 type->properties_names_list_get = NULL;
4843 type->child_count = NULL;
4844 type->child_get = NULL;
4845 type->child_set = NULL;
4846 type->child_del = NULL;
4847 type->child_insert_at = NULL;
4848 type->child_find = NULL;
4849 type->child_criteria_match = NULL;
4850 type->child_sort = NULL;
4851 type->child_iterator_get = NULL;
4852 type->child_reversed_iterator_get = NULL;
4853 type->child_sorted_iterator_get = NULL;
4854 type->child_filtered_iterator_get = NULL;
4855 type->to_string = NULL;
4856 type->__extension_ptr0 = NULL;
4857 type->__extension_ptr1 = NULL;
4858 type->__extension_ptr2 = NULL;
4859 type->__extension_ptr3 = NULL;
4860
4861 if (type->type_size > sizeof(Eina_Model_Type))
4862 {
4863 unsigned char *p = (unsigned char *)type;
4864 p += sizeof(Eina_Model_Type);
4865 memset(p, 0, type->type_size - sizeof(Eina_Model_Type));
4866 }
4867
4868 return EINA_TRUE;
4869}
4870
4871EAPI Eina_Bool
4872eina_model_type_subclass_check(const Eina_Model_Type *type, const Eina_Model_Type *self_or_parent)
4873{
4874 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
4875 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), EINA_FALSE);
4876 EINA_SAFETY_ON_NULL_RETURN_VAL(self_or_parent, EINA_FALSE);
4877
4878 for (; type != NULL; type = type->parent)
4879 {
4880 if (type == self_or_parent)
4881 return EINA_TRUE;
4882 }
4883
4884 return EINA_FALSE;
4885}
4886
4887static inline const Eina_Model_Interface *
4888_eina_model_type_interface_get(const Eina_Model_Type *type, const char *name, Eina_Bool ptr_cmp __UNUSED__)
4889{
4890 const Eina_Model_Interface **itr;
4891
4892 if (!type)
4893 return NULL;
4894
4895 if (!type->interfaces)
4896 return _eina_model_type_interface_get(type->parent, name, ptr_cmp);
4897
4898 {
4899 for (itr = type->interfaces ; itr != NULL ; itr++)
4900 if (strcmp((*itr)->name, name) == 0)
4901 return *itr;
4902 }
4903
4904 return NULL;
4905}
4906
4907static inline Eina_Bool
4908_eina_model_interface_check(const Eina_Model_Interface *iface)
4909{
4910 EINA_SAFETY_ON_FALSE_RETURN_VAL
4911 (iface->version == EINA_MODEL_INTERFACE_VERSION, EINA_FALSE);
4912 return EINA_TRUE;
4913}
4914
4915EAPI const Eina_Model_Interface *
4916eina_model_type_interface_get(const Eina_Model_Type *type, const char *name)
4917{
4918 const Eina_Model_Interface *iface;
4919
4920 EINA_SAFETY_ON_NULL_RETURN_VAL(type, NULL);
4921 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), NULL);
4922
4923 /* search for pointer, make speed-aware users fast */
4924 iface = _eina_model_type_interface_get(type, name, EINA_TRUE);
4925
4926 if (!iface)
4927 {
4928 /* search using strcmp(), slow users don't care */
4929 iface = _eina_model_type_interface_get(type, name, EINA_FALSE);
4930 }
4931 else if (!_eina_model_interface_check(iface))
4932 iface = NULL;
4933
4934 return iface;
4935}
4936
4937EAPI void *
4938eina_model_type_private_data_get(const Eina_Model *model, const Eina_Model_Type *type)
4939{
4940 const Eina_Model_Description *desc;
4941 unsigned int i;
4942
4943 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4944 EINA_SAFETY_ON_NULL_RETURN_VAL(type, NULL);
4945 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_type_check(type), NULL);
4946
4947 desc = model->desc;
4948
4949 for (i = 0; i < desc->total.types; i++)
4950 if (desc->cache.types[i] == type)
4951 return model->privates[i];
4952
4953 CRITICAL("Model %p (%s) is not an instance of type %p (%s)",
4954 model, desc->cache.types[0]->name,
4955 type, type->name);
4956 return NULL;
4957}
4958
4959EAPI const void *
4960eina_model_method_offset_resolve(const Eina_Model *model, unsigned int offset)
4961{
4962 const Eina_Model_Description *desc;
4963
4964 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
4965 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset >= sizeof(Eina_Model_Type), NULL);
4966 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset % sizeof(void *) == 0, NULL);
4967
4968 desc = model->desc;
4969 EINA_SAFETY_ON_FALSE_RETURN_VAL
4970 (offset + sizeof(void *) <= desc->cache.types[0]->type_size, NULL);
4971
4972 offset -= sizeof(Eina_Model_Type);
4973 offset /= sizeof(void *);
4974 return desc->ops.type.extension[offset];
4975}
4976
4977EAPI const void *
4978eina_model_type_method_offset_resolve(const Eina_Model_Type *type, const Eina_Model *model, unsigned int offset)
4979{
4980 const Eina_Model_Description *desc;
4981
4982 EINA_MODEL_TYPE_INSTANCE_CHECK_VAL(type, model, NULL);
4983 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset >= sizeof(Eina_Model_Type), NULL);
4984 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset % sizeof(void *) == 0, NULL);
4985
4986 desc = model->desc;
4987 EINA_SAFETY_ON_FALSE_RETURN_VAL
4988 (offset + sizeof(void *) <= desc->cache.types[0]->type_size, NULL);
4989
4990 return _eina_model_type_find_offset(type, offset);
4991}
4992
4993/* interface functions ************************************************/
4994
4995EAPI Eina_Bool
4996eina_model_interface_check(const Eina_Model_Interface *iface)
4997{
4998 EINA_SAFETY_ON_NULL_RETURN_VAL(iface, EINA_FALSE);
4999 return _eina_model_interface_check(iface);
5000}
5001
5002EAPI void *
5003eina_model_interface_private_data_get(const Eina_Model *model, const Eina_Model_Interface *iface)
5004{
5005 const Eina_Model_Description *desc;
5006 unsigned int i;
5007
5008 EINA_MODEL_INSTANCE_CHECK_VAL(model, NULL);
5009 EINA_SAFETY_ON_NULL_RETURN_VAL(iface, NULL);
5010 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_interface_check(iface), NULL);
5011
5012 desc = model->desc;
5013
5014 for (i = 0; i < desc->total.ifaces; i++)
5015 if (desc->cache.ifaces[i] == iface)
5016 return model->privates[desc->total.types + i];
5017
5018 CRITICAL("Model %p (%s) does not implement interface %p (%s)",
5019 model, desc->cache.types[0]->name,
5020 iface, iface->name);
5021 return NULL;
5022}
5023
5024static Eina_Bool
5025_eina_model_interface_implemented(const Eina_Model *model, const Eina_Model_Interface *iface)
5026{
5027 const Eina_Model_Interface **itr, **itr_end;
5028
5029 itr = model->desc->cache.ifaces;
5030 itr_end = itr + model->desc->total.ifaces;
5031
5032 for (; itr < itr_end; itr++)
5033 if (*itr == iface)
5034 return EINA_TRUE;
5035
5036 return EINA_FALSE;
5037}
5038
5039EAPI Eina_Bool
5040eina_model_interface_implemented(const Eina_Model *model, const Eina_Model_Interface *iface)
5041{
5042 EINA_MODEL_INSTANCE_CHECK_VAL(model, EINA_FALSE);
5043 EINA_SAFETY_ON_NULL_RETURN_VAL(iface, EINA_FALSE);
5044 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_interface_check(iface),
5045 EINA_FALSE);
5046 return _eina_model_interface_implemented(model, iface);
5047}
5048
5049#define EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK(iface, model) \
5050 EINA_SAFETY_ON_NULL_RETURN(iface); \
5051 EINA_SAFETY_ON_FALSE_RETURN(_eina_model_interface_check(iface)); \
5052 EINA_MODEL_INSTANCE_CHECK(model); \
5053 EINA_SAFETY_ON_FALSE_RETURN(_eina_model_interface_implemented(model, iface));
5054
5055#define EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, retval) \
5056 EINA_SAFETY_ON_NULL_RETURN_VAL(iface, retval); \
5057 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_interface_check(iface), retval); \
5058 EINA_MODEL_INSTANCE_CHECK_VAL(model, retval); \
5059 EINA_SAFETY_ON_FALSE_RETURN_VAL(_eina_model_interface_implemented(model, iface), retval);
5060
5061
5062EAPI Eina_Bool
5063eina_model_interface_constructor(const Eina_Model_Interface *iface, Eina_Model *model)
5064{
5065 Eina_Bool (*constructor)(Eina_Model *);
5066
5067 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5068
5069 constructor = _eina_model_interface_find_offset
5070 (iface, offsetof(Eina_Model_Interface, constructor));
5071 EINA_SAFETY_ON_NULL_RETURN_VAL(constructor, EINA_FALSE);
5072 return constructor(model);
5073}
5074
5075EAPI Eina_Bool
5076eina_model_interface_destructor(const Eina_Model_Interface *iface, Eina_Model *model)
5077{
5078 Eina_Bool (*destructor)(Eina_Model *);
5079
5080 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5081
5082 destructor = _eina_model_interface_find_offset
5083 (iface, offsetof(Eina_Model_Interface, destructor));
5084 EINA_SAFETY_ON_NULL_RETURN_VAL(destructor, EINA_FALSE);
5085 return destructor(model);
5086}
5087
5088EAPI Eina_Bool
5089eina_model_interface_copy(const Eina_Model_Interface *iface, const Eina_Model *src, Eina_Model *dst)
5090{
5091 Eina_Bool (*copy)(const Eina_Model *, Eina_Model *);
5092
5093 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, src, EINA_FALSE);
5094 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, dst, EINA_FALSE);
5095
5096 copy = _eina_model_interface_find_offset
5097 (iface, offsetof(Eina_Model_Interface, copy));
5098 EINA_SAFETY_ON_NULL_RETURN_VAL(copy, EINA_FALSE);
5099 return copy(src, dst);
5100}
5101
5102EAPI Eina_Bool
5103eina_model_interface_deep_copy(const Eina_Model_Interface *iface, const Eina_Model *src, Eina_Model *dst)
5104{
5105 Eina_Bool (*deep_copy)(const Eina_Model *, Eina_Model *);
5106
5107 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, src, EINA_FALSE);
5108 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, dst, EINA_FALSE);
5109
5110 deep_copy = _eina_model_interface_find_offset
5111 (iface, offsetof(Eina_Model_Interface, deep_copy));
5112 EINA_SAFETY_ON_NULL_RETURN_VAL(deep_copy, EINA_FALSE);
5113 return deep_copy(src, dst);
5114}
5115
5116EAPI const void
5117*eina_model_interface_method_offset_resolve(const Eina_Model_Interface *iface, const Eina_Model *model, unsigned int offset)
5118{
5119 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, NULL);
5120 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset >= sizeof(Eina_Model_Interface), NULL);
5121 EINA_SAFETY_ON_FALSE_RETURN_VAL(offset % sizeof(void *) == 0, NULL);
5122 return _eina_model_interface_find_offset(iface, offset);
5123}
5124
5125
5126/* Eina_Model_Interface_Properties ************************************/
5127
5128EAPI Eina_Bool
5129eina_model_interface_properties_compare(const Eina_Model_Interface *iface, const Eina_Model *a, const Eina_Model *b, int *cmp)
5130{
5131 Eina_Bool (*compare)(const Eina_Model *, const Eina_Model *, int *cmp);
5132
5133 EINA_SAFETY_ON_NULL_RETURN_VAL(cmp, EINA_FALSE);
5134
5135 *cmp = 0;
5136 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, a, EINA_FALSE);
5137 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, b, EINA_FALSE);
5138
5139 compare = _eina_model_interface_find_offset
5140 (iface, offsetof(Eina_Model_Interface_Properties, compare));
5141 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, EINA_FALSE);
5142 return compare(a, b, cmp);
5143}
5144
5145EAPI Eina_Bool
5146eina_model_interface_properties_load(const Eina_Model_Interface *iface, Eina_Model *model)
5147{
5148 Eina_Bool (*load)(Eina_Model *);
5149 Eina_Bool ret;
5150
5151 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5152
5153 load = _eina_model_interface_find_offset
5154 (iface, offsetof(Eina_Model_Interface_Properties, load));
5155 EINA_SAFETY_ON_NULL_RETURN_VAL(load, EINA_FALSE);
5156 ret = load(model);
5157
5158 if (ret)
5159 _eina_model_event_callback_call
5160 (model, _eina_model_str_properties_loaded, NULL);
5161
5162 return ret;
5163}
5164
5165EAPI Eina_Bool
5166eina_model_interface_properties_unload(const Eina_Model_Interface *iface, Eina_Model *model)
5167{
5168 Eina_Bool (*unload)(Eina_Model *);
5169 Eina_Bool ret;
5170
5171 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5172
5173 unload = _eina_model_interface_find_offset
5174 (iface, offsetof(Eina_Model_Interface_Properties, unload));
5175 EINA_SAFETY_ON_NULL_RETURN_VAL(unload, EINA_FALSE);
5176 ret = unload(model);
5177
5178 if (ret)
5179 _eina_model_event_callback_call
5180 (model, _eina_model_str_properties_unloaded, NULL);
5181
5182 return ret;
5183}
5184
5185EAPI Eina_Bool
5186eina_model_interface_properties_get(const Eina_Model_Interface *iface, const Eina_Model *model, const char *name, Eina_Value *value)
5187{
5188 Eina_Bool (*get)(const Eina_Model *, const char *, Eina_Value *);
5189
5190 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
5191 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
5192 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5193
5194 get = _eina_model_interface_find_offset
5195 (iface, offsetof(Eina_Model_Interface_Properties, get));
5196 EINA_SAFETY_ON_NULL_RETURN_VAL(get, EINA_FALSE);
5197 return get(model, name, value);
5198}
5199
5200EAPI Eina_Bool
5201eina_model_interface_properties_set(const Eina_Model_Interface *iface, Eina_Model *model, const char *name, const Eina_Value *value)
5202{
5203 Eina_Bool (*set)(Eina_Model *, const char *, const Eina_Value *);
5204
5205 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
5206 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
5207 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), EINA_FALSE);
5208 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5209
5210 set = _eina_model_interface_find_offset
5211 (iface, offsetof(Eina_Model_Interface_Properties, set));
5212 EINA_SAFETY_ON_NULL_RETURN_VAL(set, EINA_FALSE);
5213 return set(model, name, value);
5214}
5215
5216EAPI Eina_Bool
5217eina_model_interface_properties_del(const Eina_Model_Interface *iface, Eina_Model *model, const char *name)
5218{
5219 Eina_Bool (*del)(Eina_Model *, const char *);
5220
5221 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
5222 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5223
5224 del = _eina_model_interface_find_offset
5225 (iface, offsetof(Eina_Model_Interface_Properties, del));
5226 EINA_SAFETY_ON_NULL_RETURN_VAL(del, EINA_FALSE);
5227 return del(model, name);
5228}
5229
5230EAPI Eina_List *
5231eina_model_interface_properties_names_list_get(const Eina_Model_Interface *iface, const Eina_Model *model)
5232{
5233 Eina_List *(*names_list_get)(const Eina_Model *);
5234
5235 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, NULL);
5236
5237 names_list_get = _eina_model_interface_find_offset
5238 (iface, offsetof(Eina_Model_Interface_Properties, names_list_get));
5239 EINA_SAFETY_ON_NULL_RETURN_VAL(names_list_get, NULL);
5240 return names_list_get(model);
5241}
5242
5243/* Eina_Model_Interface_Children **************************************/
5244
5245EAPI Eina_Bool
5246eina_model_interface_children_compare(const Eina_Model_Interface *iface, const Eina_Model *a, const Eina_Model *b, int *cmp)
5247{
5248 Eina_Bool (*compare)(const Eina_Model *, const Eina_Model *, int *);
5249
5250 EINA_SAFETY_ON_NULL_RETURN_VAL(cmp, EINA_FALSE);
5251
5252 *cmp = 0;
5253
5254 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, a, EINA_FALSE);
5255 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, b, EINA_FALSE);
5256
5257 compare = _eina_model_interface_find_offset
5258 (iface, offsetof(Eina_Model_Interface_Children, compare));
5259 EINA_SAFETY_ON_NULL_RETURN_VAL(compare, EINA_FALSE);
5260 return compare(a, b, cmp);
5261}
5262
5263EAPI Eina_Bool
5264eina_model_interface_children_load(const Eina_Model_Interface *iface, Eina_Model *model)
5265{
5266 Eina_Bool (*load)(Eina_Model *);
5267 Eina_Bool ret;
5268
5269 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5270
5271 load = _eina_model_interface_find_offset
5272 (iface, offsetof(Eina_Model_Interface_Children, load));
5273 EINA_SAFETY_ON_NULL_RETURN_VAL(load, EINA_FALSE);
5274 ret = load(model);
5275
5276 if (ret)
5277 _eina_model_event_callback_call
5278 (model, _eina_model_str_children_loaded, NULL);
5279
5280 return ret;
5281}
5282
5283EAPI Eina_Bool
5284eina_model_interface_children_unload(const Eina_Model_Interface *iface, Eina_Model *model)
5285{
5286 Eina_Bool (*unload)(Eina_Model *);
5287 Eina_Bool ret;
5288
5289 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5290
5291 unload = _eina_model_interface_find_offset
5292 (iface, offsetof(Eina_Model_Interface_Children, unload));
5293 EINA_SAFETY_ON_NULL_RETURN_VAL(unload, EINA_FALSE);
5294 ret = unload(model);
5295
5296 if (ret)
5297 _eina_model_event_callback_call
5298 (model, _eina_model_str_children_unloaded, NULL);
5299
5300 return ret;
5301}
5302
5303EAPI int
5304eina_model_interface_children_count(const Eina_Model_Interface *iface, const Eina_Model *model)
5305{
5306 int (*count)(const Eina_Model *);
5307
5308 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, -1);
5309
5310 count = _eina_model_interface_find_offset
5311 (iface, offsetof(Eina_Model_Interface_Children, count));
5312 EINA_SAFETY_ON_NULL_RETURN_VAL(count, -1);
5313 return count(model);
5314}
5315
5316EAPI Eina_Model *
5317eina_model_interface_children_get(const Eina_Model_Interface *iface, const Eina_Model *model, unsigned int position)
5318{
5319 Eina_Model *(*get)(const Eina_Model *, unsigned int);
5320
5321 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, NULL);
5322
5323 get = _eina_model_interface_find_offset
5324 (iface, offsetof(Eina_Model_Interface_Children, get));
5325 EINA_SAFETY_ON_NULL_RETURN_VAL(get, NULL);
5326 return get(model, position);
5327}
5328
5329EAPI Eina_Bool eina_model_interface_children_set(const Eina_Model_Interface *iface, Eina_Model *model, unsigned int position, Eina_Model *child)
5330{
5331 Eina_Bool (*set)(const Eina_Model *, unsigned int, Eina_Model *);
5332
5333 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5334 EINA_MODEL_INSTANCE_CHECK_VAL(child, EINA_FALSE);
5335
5336 set = _eina_model_interface_find_offset
5337 (iface, offsetof(Eina_Model_Interface_Children, set));
5338 EINA_SAFETY_ON_NULL_RETURN_VAL(set, EINA_FALSE);
5339 return set(model, position, child);
5340}
5341
5342EAPI Eina_Bool
5343eina_model_interface_children_del(const Eina_Model_Interface *iface, Eina_Model *model, unsigned int position)
5344{
5345 Eina_Bool (*del)(Eina_Model *, unsigned int);
5346
5347 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5348
5349 del = _eina_model_interface_find_offset
5350 (iface, offsetof(Eina_Model_Interface_Children, del));
5351 EINA_SAFETY_ON_NULL_RETURN_VAL(del, EINA_FALSE);
5352 return del(model, position);
5353}
5354
5355
5356EAPI Eina_Bool
5357eina_model_interface_children_insert_at(const Eina_Model_Interface *iface, Eina_Model *model, unsigned int position, Eina_Model *child)
5358{
5359 Eina_Bool (*insert_at)(const Eina_Model *, unsigned int, Eina_Model *);
5360
5361 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL(iface, model, EINA_FALSE);
5362 EINA_MODEL_INSTANCE_CHECK_VAL(child, EINA_FALSE);
5363
5364 insert_at = _eina_model_interface_find_offset
5365 (iface, offsetof(Eina_Model_Interface_Children, insert_at));
5366 EINA_SAFETY_ON_NULL_RETURN_VAL(insert_at, EINA_FALSE);
5367 return insert_at(model, position, child);
5368}
5369
5370EAPI void
5371eina_model_interface_children_sort(const Eina_Model_Interface *iface, Eina_Model *model, Eina_Compare_Cb compare)
5372{
5373 void (*sort)(const Eina_Model *, Eina_Compare_Cb);
5374
5375 EINA_SAFETY_ON_NULL_RETURN(compare);
5376 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK(iface, model);
5377
5378 sort = _eina_model_interface_find_offset
5379 (iface, offsetof(Eina_Model_Interface_Children, sort));
5380 EINA_SAFETY_ON_NULL_RETURN(sort);
5381 return sort(model, compare);
5382}
5383
5384static Eina_Bool
5385_eina_model_struct_set(Eina_Model *m, const Eina_Value_Struct_Desc *desc, void *memory)
5386{
5387 Eina_Value_Struct st = {desc, memory};
5388 Eina_Value *val = eina_model_interface_private_data_get
5389 (m, &_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base);
5390 return eina_value_pset(val, &st);
5391}
5392
5393EAPI Eina_Model *
5394eina_model_struct_new(const Eina_Value_Struct_Desc *desc)
5395{
5396 Eina_Model *m;
5397
5398 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
5399 EINA_SAFETY_ON_FALSE_RETURN_VAL
5400 (desc->version == EINA_VALUE_STRUCT_DESC_VERSION, NULL);
5401
5402 m = eina_model_new(EINA_MODEL_TYPE_STRUCT);
5403 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
5404
5405 EINA_SAFETY_ON_FALSE_GOTO(_eina_model_struct_set(m, desc, NULL), error);
5406 return m;
5407
5408 error:
5409 eina_model_del(m);
5410 return NULL;
5411}
5412
5413EAPI Eina_Model *
5414eina_model_type_struct_new(const Eina_Model_Type *type, const Eina_Value_Struct_Desc *desc)
5415{
5416 Eina_Model *m;
5417
5418 EINA_SAFETY_ON_FALSE_RETURN_VAL
5419 (eina_model_type_subclass_check(type, EINA_MODEL_TYPE_STRUCT), NULL);
5420 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
5421 EINA_SAFETY_ON_FALSE_RETURN_VAL
5422 (desc->version == EINA_VALUE_STRUCT_DESC_VERSION, NULL);
5423
5424 m = eina_model_new(type);
5425 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
5426
5427 EINA_SAFETY_ON_FALSE_GOTO(_eina_model_struct_set(m, desc, NULL), error);
5428 return m;
5429
5430 error:
5431 eina_model_del(m);
5432 return NULL;
5433}
5434
5435EAPI Eina_Bool
5436eina_model_struct_set(Eina_Model *model, const Eina_Value_Struct_Desc *desc, void *memory)
5437{
5438 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
5439 EINA_SAFETY_ON_FALSE_RETURN_VAL
5440 (desc->version == EINA_VALUE_STRUCT_DESC_VERSION, EINA_FALSE);
5441 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL
5442 (&_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base, model, EINA_FALSE);
5443
5444 return _eina_model_struct_set(model, desc, memory);
5445}
5446
5447EAPI Eina_Bool
5448eina_model_struct_get(const Eina_Model *model, const Eina_Value_Struct_Desc **p_desc, void **p_memory)
5449{
5450 const Eina_Value *val;
5451 Eina_Value_Struct st;
5452
5453 EINA_SAFETY_ON_NULL_RETURN_VAL(p_desc, EINA_FALSE);
5454
5455 *p_desc = NULL;
5456 if (p_memory) *p_memory = NULL;
5457
5458 EINA_MODEL_INTERFACE_IMPLEMENTED_CHECK_VAL
5459 (&_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base, model, EINA_FALSE);
5460
5461 val = eina_model_interface_private_data_get
5462 (model, &_EINA_MODEL_INTERFACE_PROPERTIES_STRUCT.base);
5463
5464 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_pget(val, &st), EINA_FALSE);
5465
5466 *p_desc = st.desc;
5467 if (p_memory) *p_memory = st.memory;
5468 return EINA_FALSE;
5469}
5470
5471EAPI void
5472eina_models_usage_dump(void)
5473{
5474 const Eina_List *l;
5475 const Eina_Model *m;
5476
5477 eina_lock_take(&_eina_model_debug_list_lock);
5478
5479 puts("DDD: model refs info (type, holders, backtrace)");
5480 puts("DDD: -------------- -------------- ---------------------------------");
5481
5482 EINA_LIST_FOREACH(_eina_model_debug_list, l, m)
5483 {
5484 Eina_Model_XRef *ref;
5485
5486 printf("DDD: %14p %14d %s\n",
5487 m, m->refcount, m->desc->cache.types[0]->name);
5488
5489 EINA_INLIST_FOREACH(m->xrefs, ref)
5490 {
5491 printf("DDD: id: %p '%s'\n",
5492 ref->id, ref->label);
5493 if (ref->backtrace.count)
5494 {
5495 char **symbols;
5496 unsigned int i;
5497
5498#ifdef HAVE_BACKTRACE_SYMBOLS
5499 symbols = backtrace_symbols((void * const *)ref->backtrace.symbols,
5500 ref->backtrace.count);
5501#else
5502 symbols = NULL;
5503#endif
5504
5505 printf("DDD: Backtrace: Address Symbol\n");
5506 for (i = 0; i < ref->backtrace.count; i++)
5507 printf("DDD: %14p %s\n",
5508 ref->backtrace.symbols[i],
5509 symbols ? symbols[i] : "???");
5510
5511 free(symbols);
5512 puts("DDD:");
5513 }
5514 }
5515 }
5516
5517 eina_lock_release(&_eina_model_debug_list_lock);
5518}
5519
5520EAPI Eina_List *
5521eina_models_list_get(void)
5522{
5523 const Eina_List *l;
5524 Eina_Model *m;
5525 Eina_List *ret = NULL;
5526
5527 eina_lock_take(&_eina_model_debug_list_lock);
5528
5529 EINA_LIST_FOREACH(_eina_model_debug_list, l, m)
5530 {
5531 ret = eina_list_append
5532 (ret, eina_model_xref
5533 (m, eina_models_list_get, "eina_models_list_get"));
5534 }
5535
5536 eina_lock_release(&_eina_model_debug_list_lock);
5537
5538 return ret;
5539}
5540
5541EAPI void
5542eina_models_list_free(Eina_List *list)
5543{
5544 Eina_Model *m;
5545
5546 EINA_LIST_FREE(list, m)
5547 eina_model_xunref(m, eina_models_list_get);
5548}
diff --git a/libraries/eina/src/lib/eina_module.c b/libraries/eina/src/lib/eina_module.c
deleted file mode 100644
index f4f3242..0000000
--- a/libraries/eina/src/lib/eina_module.c
+++ /dev/null
@@ -1,604 +0,0 @@
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 <stdlib.h>
41#include <stdio.h>
42#include <sys/types.h>
43#include <string.h>
44
45#ifdef HAVE_LIBGEN_H
46# include <libgen.h>
47#endif
48
49#ifdef HAVE_DLOPEN
50# include <dlfcn.h>
51#endif
52
53#ifdef HAVE_EVIL
54# include <Evil.h>
55#endif
56
57#ifdef HAVE_ESCAPE
58# include <Escape.h>
59#endif
60
61#ifdef HAVE_EXOTIC_H
62# include <Exotic.h>
63#endif
64
65#include "eina_config.h"
66#include "eina_private.h"
67#include "eina_error.h"
68#include "eina_file.h"
69#include "eina_log.h"
70
71/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
72#include "eina_safety_checks.h"
73#include "eina_module.h"
74
75/*============================================================================*
76* Local *
77*============================================================================*/
78
79/**
80 * @cond LOCAL
81 */
82
83static int EINA_MODULE_LOG_DOM = -1;
84#ifdef ERR
85#undef ERR
86#endif
87#define ERR(...) EINA_LOG_DOM_ERR(EINA_MODULE_LOG_DOM, __VA_ARGS__)
88
89#ifdef WRN
90#undef WRN
91#endif
92#define WRN(...) EINA_LOG_DOM_WARN(EINA_MODULE_LOG_DOM, __VA_ARGS__)
93
94#ifdef DBG
95#undef DBG
96#endif
97#define DBG(...) EINA_LOG_DOM_DBG(EINA_MODULE_LOG_DOM, __VA_ARGS__)
98
99#ifdef _WIN32
100# define SEP_C '\\'
101# define SEP_S "\\"
102#else
103# define SEP_C '/'
104# define SEP_S "/"
105#endif
106
107#define EINA_MODULE_SYMBOL_INIT "__eina_module_init"
108#define EINA_MODULE_SYMBOL_SHUTDOWN "__eina_module_shutdown"
109
110struct _Eina_Module
111{
112 void *handle;
113 int ref;
114 const char file[];
115};
116
117typedef struct _Dir_List_Get_Cb_Data
118{
119 Eina_Module_Cb cb;
120 void *data;
121 Eina_Array *array;
122} Dir_List_Get_Cb_Data;
123
124typedef struct _Dir_List_Cb_Data
125{
126 Eina_Module_Cb cb;
127 void *data;
128} Dir_List_Cb_Data;
129
130static Eina_Bool _dir_list_get_cb(Eina_Module *m, void *data)
131{
132 Dir_List_Get_Cb_Data *cb_data = data;
133 Eina_Bool ret = EINA_TRUE;
134
135 if (cb_data->cb)
136 ret = cb_data->cb(m, cb_data->data);
137
138 if (ret)
139 eina_array_push(cb_data->array, m);
140
141 return ret;
142}
143
144static void _dir_list_cb(const char *name, const char *path, void *data)
145{
146 Dir_List_Cb_Data *cb_data = data;
147 size_t length;
148
149 length = strlen(name);
150 if (length < sizeof(SHARED_LIB_SUFFIX)) /* x.so */
151 return;
152
153 if (!strcmp(name + length - sizeof(SHARED_LIB_SUFFIX) + 1,
154 SHARED_LIB_SUFFIX))
155 {
156 char *file;
157 Eina_Module *m;
158
159 length = strlen(path) + strlen(name) + 2;
160
161 file = alloca(sizeof (char) * length);
162
163 snprintf(file, length, "%s" SEP_S "%s", path, name);
164 m = eina_module_new(file);
165 if (!m)
166 {
167 return; /* call the user provided cb on this module */
168
169 }
170
171 if (!cb_data->cb(m, cb_data->data))
172 eina_module_free(m);
173 }
174}
175
176static void _dir_arch_list_cb(const char *name, const char *path, void *data)
177{
178 Dir_List_Get_Cb_Data *cb_data = data;
179 Eina_Module *m;
180 char *file = NULL;
181 size_t length;
182
183 length = strlen(path) + 1 + strlen(name) + 1 +
184 strlen((char *)(cb_data->data)) + 1 + sizeof("module") +
185 sizeof(SHARED_LIB_SUFFIX) + 1;
186
187 file = alloca(length);
188 snprintf(file, length, "%s" SEP_S "%s" SEP_S "%s" SEP_S "module" SHARED_LIB_SUFFIX,
189 path, name, (char *)(cb_data->data));
190 m = eina_module_new(file);
191 if (!m)
192 return;
193
194 eina_array_push(cb_data->array, m);
195}
196
197/**
198 * @endcond
199 */
200
201
202/*============================================================================*
203* Global *
204*============================================================================*/
205
206/**
207 * @cond LOCAL
208 */
209
210static const char EINA_ERROR_WRONG_MODULE_STR[] =
211 "Wrong file format or no file module found";
212static const char EINA_ERROR_MODULE_INIT_FAILED_STR[] =
213 "Module initialisation function failed";
214
215EAPI Eina_Error EINA_ERROR_WRONG_MODULE = 0;
216EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0;
217
218/**
219 * @endcond
220 */
221
222/**
223 * @internal
224 * @brief Initialize the module loader module.
225 *
226 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
227 *
228 * This function sets up the module loader module of Eina. It is
229 * called by eina_init().
230 *
231 * This function sets up the module module of Eina. It also registers
232 * the errors #EINA_ERROR_WRONG_MODULE and
233 * #EINA_ERROR_MODULE_INIT_FAILED.
234 *
235 * @see eina_init()
236 */
237Eina_Bool
238eina_module_init(void)
239{
240 EINA_MODULE_LOG_DOM = eina_log_domain_register
241 ("eina_module", EINA_LOG_COLOR_DEFAULT);
242 if (EINA_MODULE_LOG_DOM < 0)
243 {
244 EINA_LOG_ERR("Could not register log domain: eina_module");
245 return EINA_FALSE;
246 }
247
248#define EEMR(n) n = eina_error_msg_static_register(n ## _STR)
249 EEMR(EINA_ERROR_WRONG_MODULE);
250 EEMR(EINA_ERROR_MODULE_INIT_FAILED);
251#undef EEMR
252
253 return EINA_TRUE;
254}
255
256/**
257 * @internal
258 * @brief Shut down the module loader module.
259 *
260 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
261 *
262 * This function shuts down the module loader module set up by
263 * eina_module_init(). It is called by eina_shutdown().
264 *
265 * @see eina_shutdown()
266 */
267Eina_Bool
268eina_module_shutdown(void)
269{
270 /* TODO should we store every module when "new" is called and
271 * delete the list of modules here
272 */
273
274 eina_log_domain_unregister(EINA_MODULE_LOG_DOM);
275 EINA_MODULE_LOG_DOM = -1;
276 return EINA_TRUE;
277}
278
279/*============================================================================*
280* API *
281*============================================================================*/
282
283EAPI Eina_Module *eina_module_new(const char *file)
284{
285 Eina_Module *m;
286 size_t len;
287
288 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
289 /* TODO check that the file exists. Update doc too */
290
291 len = strlen(file);
292 EINA_SAFETY_ON_FALSE_RETURN_VAL(len > 0, NULL);
293
294 m = malloc(sizeof(Eina_Module) + len + 1);
295 if (!m)
296 {
297 ERR("could not malloc(%lu)",
298 (unsigned long)(sizeof(Eina_Module) + len + 1));
299 return NULL;
300 }
301
302 memcpy((char *)m->file, file, len + 1);
303 m->ref = 0;
304 m->handle = NULL;
305 DBG("m=%p, file=%s", m, file);
306
307 return m;
308}
309
310EAPI Eina_Bool eina_module_free(Eina_Module *m)
311{
312 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
313
314 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
315
316 if (m->handle)
317 if (eina_module_unload(m) == EINA_FALSE)
318 return EINA_FALSE;
319
320 free(m);
321 return EINA_TRUE;
322}
323
324EAPI Eina_Bool eina_module_load(Eina_Module *m)
325{
326#ifdef HAVE_DLOPEN
327 void *dl_handle;
328 Eina_Module_Init *initcall;
329
330 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
331
332 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
333
334 if (m->handle)
335 goto loaded;
336
337 dl_handle = dlopen(m->file, RTLD_NOW);
338 if (!dl_handle)
339 {
340 WRN("could not dlopen(\"%s\", RTLD_NOW): %s", m->file, dlerror());
341 eina_error_set(EINA_ERROR_WRONG_MODULE);
342 return EINA_FALSE;
343 }
344
345 initcall = dlsym(dl_handle, EINA_MODULE_SYMBOL_INIT);
346 if ((!initcall) || (!(*initcall)))
347 goto ok;
348
349 if ((*initcall)() == EINA_TRUE)
350 goto ok;
351
352 WRN("could not find eina's entry symbol %s inside module %s",
353 EINA_MODULE_SYMBOL_INIT, m->file);
354 eina_error_set(EINA_ERROR_MODULE_INIT_FAILED);
355 dlclose(dl_handle);
356 return EINA_FALSE;
357ok:
358 DBG("successfully loaded %s", m->file);
359 m->handle = dl_handle;
360loaded:
361 m->ref++;
362 DBG("ref %d", m->ref);
363
364 eina_error_set(0);
365 return EINA_TRUE;
366#else
367 (void) m;
368 return EINA_FALSE;
369#endif
370}
371
372EAPI Eina_Bool eina_module_unload(Eina_Module *m)
373{
374#ifdef HAVE_DLOPEN
375 Eina_Module_Shutdown *shut;
376 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
377
378 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
379
380 m->ref--;
381 if (!m->ref)
382 {
383 shut = dlsym(m->handle, EINA_MODULE_SYMBOL_SHUTDOWN);
384 if ((shut) && (*shut))
385 (*shut)();
386
387 dlclose(m->handle);
388 m->handle = NULL;
389 DBG("unloaded module %s", m->file);
390 return EINA_TRUE;
391 }
392
393 return EINA_FALSE;
394#else
395 (void) m;
396 return EINA_FALSE;
397#endif
398}
399
400EAPI void *eina_module_symbol_get(const Eina_Module *m, const char *symbol)
401{
402#ifdef HAVE_DLOPEN
403 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
404 EINA_SAFETY_ON_NULL_RETURN_VAL(m->handle, NULL);
405 return dlsym(m->handle, symbol);
406#else
407 (void) m;
408 (void) symbol;
409 return NULL;
410#endif
411}
412
413EAPI const char *eina_module_file_get(const Eina_Module *m)
414{
415 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
416 return m->file;
417}
418
419EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
420{
421#ifdef HAVE_DLADDR
422 Dl_info eina_dl;
423
424 EINA_SAFETY_ON_NULL_RETURN_VAL(symbol, NULL);
425
426 if (dladdr(symbol, &eina_dl))
427 {
428 char *pos = strrchr(eina_dl.dli_fname, SEP_C);
429 if (pos)
430 {
431 char *path;
432 int l0;
433 int l1;
434 int l2 = 0;
435
436 l0 = strlen(eina_dl.dli_fname);
437 l1 = strlen(pos);
438 if (sub_dir && (*sub_dir != '\0'))
439 l2 = strlen(sub_dir);
440
441 path = malloc(l0 - l1 + l2 + 1);
442 if (path)
443 {
444 memcpy(path, eina_dl.dli_fname, l0 - l1);
445 if (sub_dir && (*sub_dir != '\0'))
446 memcpy(path + l0 - l1, sub_dir, l2);
447
448 path[l0 - l1 + l2] = '\0';
449 return path;
450 }
451 }
452 }
453#else
454 (void) symbol;
455 (void) sub_dir;
456#endif /* ! HAVE_DLADDR */
457
458 return NULL;
459}
460
461EAPI char *eina_module_environment_path_get(const char *env,
462 const char *sub_dir)
463{
464 const char *env_dir;
465
466 EINA_SAFETY_ON_NULL_RETURN_VAL(env, NULL);
467
468 env_dir = getenv(env);
469 if (env_dir)
470 {
471 char *path;
472 size_t l1;
473 size_t l2 = 0;
474
475 l1 = strlen(env_dir);
476 if (sub_dir && (*sub_dir != '\0'))
477 l2 = strlen(sub_dir);
478
479 path = (char *)malloc(l1 + l2 + 1);
480 if (path)
481 {
482 memcpy(path, env_dir, l1);
483 if (sub_dir && (*sub_dir != '\0'))
484 memcpy(path + l1, sub_dir, l2);
485
486 path[l1 + l2] = '\0';
487
488 return path;
489 }
490 }
491
492 return NULL;
493}
494
495EAPI Eina_Array *eina_module_arch_list_get(Eina_Array *array,
496 const char *path,
497 const char *arch)
498{
499 Dir_List_Get_Cb_Data list_get_cb_data;
500
501 if ((!path) || (!arch))
502 return array;
503
504 list_get_cb_data.array = array ? array : eina_array_new(4);
505 list_get_cb_data.cb = NULL;
506 list_get_cb_data.data = (void *)arch;
507
508 eina_file_dir_list(path, 0, &_dir_arch_list_cb, &list_get_cb_data);
509
510 return list_get_cb_data.array;
511}
512
513EAPI Eina_Array *eina_module_list_get(Eina_Array *array,
514 const char *path,
515 Eina_Bool recursive,
516 Eina_Module_Cb cb,
517 void *data)
518{
519 Dir_List_Get_Cb_Data list_get_cb_data;
520 Dir_List_Cb_Data list_cb_data;
521
522 if (!path)
523 return array;
524
525 list_get_cb_data.array = array ? array : eina_array_new(4);
526 list_get_cb_data.cb = cb;
527 list_get_cb_data.data = data;
528
529 list_cb_data.cb = &_dir_list_get_cb;
530 list_cb_data.data = &list_get_cb_data;
531
532 eina_file_dir_list(path, recursive, &_dir_list_cb, &list_cb_data);
533
534 return list_get_cb_data.array;
535}
536
537EAPI Eina_Module *
538eina_module_find(const Eina_Array *array, const char *module)
539{
540 unsigned int i;
541 Eina_Array_Iterator iterator;
542 Eina_Module *m;
543
544 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
545 {
546 char *file_m;
547 char *tmp;
548 ssize_t len;
549
550 /* basename() can modify its argument, so we first get a copie */
551 /* do not use strdupa, as opensolaris does not have it */
552 len = strlen(eina_module_file_get(m));
553 tmp = alloca(len + 1);
554 memcpy(tmp, eina_module_file_get(m), len + 1);
555 file_m = basename(tmp);
556 len = strlen(file_m);
557 len -= sizeof(SHARED_LIB_SUFFIX) - 1;
558 if (len <= 0)
559 continue;
560
561 if (!strncmp(module, file_m, len))
562 return m;;
563 }
564
565 return NULL;
566}
567
568EAPI void eina_module_list_load(Eina_Array *array)
569{
570 Eina_Array_Iterator iterator;
571 Eina_Module *m;
572 unsigned int i;
573
574 EINA_SAFETY_ON_NULL_RETURN(array);
575 DBG("array %p, count %u", array, array->count);
576 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
577 eina_module_load(m);
578}
579
580EAPI void eina_module_list_unload(Eina_Array *array)
581{
582 Eina_Array_Iterator iterator;
583 Eina_Module *m;
584 unsigned int i;
585
586 EINA_SAFETY_ON_NULL_RETURN(array);
587 DBG("array %p, count %u", array, array->count);
588 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
589 eina_module_unload(m);
590}
591
592EAPI void eina_module_list_free(Eina_Array *array)
593{
594 Eina_Array_Iterator iterator;
595 Eina_Module *m;
596 unsigned int i;
597
598 EINA_SAFETY_ON_NULL_RETURN(array);
599 DBG("array %p, count %u", array, array->count);
600 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
601 eina_module_free(m);
602
603 eina_array_flush(array);
604}
diff --git a/libraries/eina/src/lib/eina_prefix.c b/libraries/eina/src/lib/eina_prefix.c
deleted file mode 100644
index 2322311..0000000
--- a/libraries/eina/src/lib/eina_prefix.c
+++ /dev/null
@@ -1,726 +0,0 @@
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 alloca
34# ifdef __GNUC__
35# define alloca __builtin_alloca
36# elif defined _AIX
37# define alloca __alloca
38# elif defined _MSC_VER
39# include <malloc.h>
40# define alloca _alloca
41# elif !defined 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 WRN("Could not determine its installed prefix for '%s'\n"
154 " so am falling back on the compiled in default:\n"
155 " %s\n"
156 " implied by the following:\n"
157 " bindir = %s\n"
158 " libdir = %s\n"
159 " datadir = %s\n"
160 " localedir = %s\n"
161 " Try setting the following environment variables:\n"
162 " %s_PREFIX - points to the base prefix of install\n"
163 " or the next 4 variables\n"
164 " %s_BIN_DIR - provide a specific binary directory\n"
165 " %s_LIB_DIR - provide a specific library directory\n"
166 " %s_DATA_DIR - provide a specific data directory\n"
167 " %s_LOCALE_DIR - provide a specific locale directory",
168 envprefix,
169 pfx->prefix_path, pkg_bin, pkg_lib, pkg_data, pkg_locale,
170 envprefix, envprefix, envprefix, envprefix, envprefix);
171 pfx->fallback = 1;
172 return 1;
173}
174
175#ifndef _WIN32
176static int
177_try_proc(Eina_Prefix *pfx, void *symbol)
178{
179 FILE *f;
180 char buf[4096];
181
182 DBG("Try /proc/self/maps");
183 f = fopen("/proc/self/maps", "rb");
184 if (!f) return 0;
185 DBG("Exists /proc/self/maps");
186 while (fgets(buf, sizeof(buf), f))
187 {
188 int len;
189 char *p, mode[5] = "";
190 unsigned long ptr1 = 0, ptr2 = 0;
191
192 len = strlen(buf);
193 if (buf[len - 1] == '\n')
194 {
195 buf[len - 1] = 0;
196 len--;
197 }
198 if (sscanf(buf, "%lx-%lx %4s", &ptr1, &ptr2, mode) == 3)
199 {
200 if (!strcmp(mode, "r-xp"))
201 {
202 if (((void *)ptr1 <= symbol) && (symbol < (void *)ptr2))
203 {
204 DBG("Found in /proc/self/maps: %s", buf);
205 p = strchr(buf, '/');
206 if (p)
207 {
208 DBG("Found in /proc/self/maps: found last /");
209 if (len > 10)
210 {
211 if (!strcmp(buf + len - 10, " (deleted)"))
212 buf[len - 10] = 0;
213 }
214 STRDUP_REP(pfx->exe_path, p);
215 INF("Found in /proc/self/maps: guess exe path is %s", pfx->exe_path);
216 fclose(f);
217 return 1;
218 }
219 else break;
220 }
221 }
222 }
223 }
224 fclose(f);
225 WRN("Failed in /proc/self/maps");
226 return 0;
227}
228#endif
229
230static int
231_try_argv(Eina_Prefix *pfx, const char *argv0)
232{
233 char *path, *p, *cp, *s;
234 int len, lenexe;
235 char buf[PATH_MAX], buf2[PATH_MAX], buf3[PATH_MAX];
236
237 DBG("Try argv0 = %s", argv0);
238 /* 1. is argv0 abs path? */
239#ifdef _WIN32
240 if (evil_path_is_absolute(argv0))
241#else
242 if (argv0[0] == DSEP_C)
243#endif
244 {
245 DBG("Match arvg0 is full path: %s", argv0);
246 STRDUP_REP(pfx->exe_path, argv0);
247 if (access(pfx->exe_path, X_OK) == 0)
248 {
249 INF("Executable argv0 = %s", argv0);
250 return 1;
251 }
252 IF_FREE_NULL(pfx->exe_path);
253 DBG("Non existent argv0: %s", argv0);
254 return 0;
255 }
256 /* 2. relative path */
257 if (strchr(argv0, DSEP_C))
258 {
259 DBG("Relative path argv0: %s", argv0);
260 if (getcwd(buf3, sizeof(buf3)))
261 {
262 snprintf(buf2, sizeof(buf2), "%s" DSEP_S "%s", buf3, argv0);
263 DBG("Relative to CWD: %s", buf2);
264 if (realpath(buf2, buf))
265 {
266 DBG("Realpath is: %s", buf);
267 STRDUP_REP(pfx->exe_path, buf);
268 if (access(pfx->exe_path, X_OK) == 0)
269 {
270 INF("Path %s is executable", pfx->exe_path);
271 return 1;
272 }
273 DBG("Fail check for executable: %s", pfx->exe_path);
274 IF_FREE_NULL(pfx->exe_path);
275 }
276 }
277 }
278 /* 3. argv0 no path - look in PATH */
279 DBG("Look for argv0=%s in $PATH", argv0);
280 path = getenv("PATH");
281 if (!path) return 0;
282 p = path;
283 cp = p;
284 lenexe = strlen(argv0);
285 while ((p = strchr(cp, PSEP_C)))
286 {
287 len = p - cp;
288 s = malloc(len + 1 + lenexe + 1);
289 if (s)
290 {
291 strncpy(s, cp, len);
292 s[len] = DSEP_C;
293 strcpy(s + len + 1, argv0);
294 DBG("Try path: %s", s);
295 if (realpath(s, buf))
296 {
297 DBG("Realpath is: %s", buf);
298 if (access(buf, X_OK) == 0)
299 {
300 STRDUP_REP(pfx->exe_path, buf);
301 INF("Path %s is executable", pfx->exe_path);
302 free(s);
303 return 1;
304 }
305 }
306 free(s);
307 }
308 cp = p + 1;
309 }
310 /* 4. big problems. arg[0] != executable - weird execution */
311 return 0;
312}
313
314static int
315_get_env_var(char **var, const char *env, const char *prefix, const char *dir)
316{
317 char buf[PATH_MAX];
318 const char *s = getenv(env);
319
320 DBG("Try env var %s", env);
321 if (s)
322 {
323 INF("Have env %s = %s", env, s);
324 STRDUP_REP(*var, s);
325 return 1;
326 }
327 else if (prefix)
328 {
329 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", prefix, dir);
330 INF("Have prefix %s = %s", prefix, buf);
331 STRDUP_REP(*var, buf);
332 return 1;
333 }
334 return 0;
335}
336
337static int
338_get_env_vars(Eina_Prefix *pfx,
339 const char *envprefix,
340 const char *bindir,
341 const char *libdir,
342 const char *datadir,
343 const char *localedir)
344{
345 char env[1024];
346 const char *s;
347 int ret = 0;
348
349 snprintf(env, sizeof(env), "%s_PREFIX", envprefix);
350 if ((s = getenv(env))) STRDUP_REP(pfx->prefix_path, s);
351 snprintf(env, sizeof(env), "%s_BIN_DIR", envprefix);
352 ret += _get_env_var(&pfx->prefix_path_bin, env, s, bindir);
353 snprintf(env, sizeof(env), "%s_LIB_DIR", envprefix);
354 ret += _get_env_var(&pfx->prefix_path_lib, env, s, libdir);
355 snprintf(env, sizeof(env), "%s_DATA_DIR", envprefix);
356 ret += _get_env_var(&pfx->prefix_path_data, env, s, datadir);
357 snprintf(env, sizeof(env), "%s_LOCALE_DIR", envprefix);
358 ret += _get_env_var(&pfx->prefix_path_locale, env, s, localedir);
359 return ret;
360}
361
362/**
363 * @endcond
364 */
365
366
367/*============================================================================*
368 * Global *
369 *============================================================================*/
370
371
372/*============================================================================*
373 * API *
374 *============================================================================*/
375
376
377EAPI Eina_Prefix *
378eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
379 const char *sharedir, const char *magicsharefile,
380 const char *pkg_bin, const char *pkg_lib,
381 const char *pkg_data, const char *pkg_locale)
382{
383 Eina_Prefix *pfx;
384 char *p, buf[4096], *tmp, *magic = NULL;
385 struct stat st;
386 const char *p1, *p2;
387 const char *pkg_bin_p = NULL;
388 const char *pkg_lib_p = NULL;
389 const char *pkg_data_p = NULL;
390 const char *pkg_locale_p = NULL;
391 const char *bindir = "bin";
392 const char *libdir = "lib";
393 const char *datadir = "share";
394 const char *localedir = "share";
395
396 DBG("EINA PREFIX: argv0=%s, symbol=%p, magicsharefile=%s, envprefix=%s",
397 argv0, symbol, magicsharefile, envprefix);
398 pfx = calloc(1, sizeof(Eina_Prefix));
399 if (!pfx) return NULL;
400
401 /* if provided with a share dir use datadir/sharedir as the share dir */
402 if (sharedir)
403 {
404 int len;
405
406 len = snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", datadir, sharedir);
407 if (len > 0)
408 {
409#ifdef _WIN32
410 /* on win32 convert / to \ for path here */
411 for (p = buf + strlen(datadir) + strlen(DSEP_S); *p; p++)
412 {
413 if (*p == '/') *p = DSEP_C;
414 }
415#endif
416 tmp = alloca(len + 1);
417 strcpy(tmp, buf);
418 datadir = tmp;
419 }
420 }
421 if (magicsharefile)
422 {
423 magic = alloca(strlen(magicsharefile));
424 strcpy(magic, magicsharefile);
425#ifdef _WIN32
426 /* on win32 convert / to \ for path here */
427 for (p = magic; *p; p++)
428 {
429 if (*p == '/') *p = DSEP_C;
430 }
431#endif
432 }
433
434 /* look at compile-time package bin/lib/datadir etc. and figure out the
435 * bin, lib and data dirs from these, if possible. i.e.
436 * bin = /usr/local/bin
437 * lib = /usr/local/lib
438 * data = /usr/local/share/enlightenment
439 * thus they all have a common prefix string of /usr/local/ and
440 * bindir = bin
441 * libdir = lib
442 * datadir = share/enlightenment
443 * this addresses things like libdir is lib64 or lib32 or other such
444 * junk distributions like to do so then:
445 * bin = /usr/local/bin
446 * lib = /usr/local/lib64
447 * data = /usr/local/share/enlightenment
448 * then
449 * bindir = bin
450 * libdir = lib64
451 * datadir = share/enlightennment
452 * in theory this should also work with debians new multiarch style like
453 * bindir = bin
454 * libdir = lib/i386-linux-gnu
455 * or
456 * libdir = lib/x86_64-linux-gnu
457 * all with a common prefix that can be relocated
458 */
459 /* 1. check last common char in bin and lib strings */
460 for (p1 = pkg_bin, p2 = pkg_lib; *p1 && *p2; p1++, p2++)
461 {
462 if (*p1 != *p2)
463 {
464 pkg_bin_p = p1;
465 pkg_lib_p = p2;
466 break;
467 }
468 }
469 /* 1. check last common char in bin and data strings */
470 for (p1 = pkg_bin, p2 = pkg_data; *p1 && *p2; p1++, p2++)
471 {
472 if (*p1 != *p2)
473 {
474 pkg_data_p = p2;
475 break;
476 }
477 }
478 /* 1. check last common char in bin and locale strings */
479 for (p1 = pkg_bin, p2 = pkg_locale; *p1 && *p2; p1++, p2++)
480 {
481 if (*p1 != *p2)
482 {
483 pkg_locale_p = p2;
484 break;
485 }
486 }
487 /* 2. if all the common string offsets match we compiled with a common prefix */
488 if (((pkg_bin_p - pkg_bin) == (pkg_lib_p - pkg_lib))
489 && ((pkg_bin_p - pkg_bin) == (pkg_data_p - pkg_data))
490 && ((pkg_bin_p - pkg_bin) == (pkg_locale_p - pkg_locale))
491 )
492 {
493 bindir = pkg_bin_p;
494 libdir = pkg_lib_p;
495 datadir = pkg_data_p;
496 localedir = pkg_locale_p;
497 DBG("Prefix relative bindir = %s", bindir);
498 DBG("Prefix relative libdir = %s", libdir);
499 DBG("Prefix relative datadir = %s", datadir);
500 DBG("Prefix relative localedir = %s", localedir);
501 }
502 /* 3. some galoot thought it awesome not to give us a common prefix at compile time
503 * so fall back to the compile time directories. we are no longer relocatable */
504 else
505 {
506 STRDUP_REP(pfx->prefix_path_bin, pkg_bin);
507 STRDUP_REP(pfx->prefix_path_lib, pkg_lib);
508 STRDUP_REP(pfx->prefix_path_data, pkg_data);
509 STRDUP_REP(pfx->prefix_path_locale, pkg_locale);
510 pfx->no_common_prefix = 1;
511 DBG("Can't work out a common prefix - compiled in fallback");
512 }
513
514 /* if user provides env vars - then use that or also more specific sub
515 * dirs for bin, lib, data and locale */
516 if ((envprefix) &&
517 (_get_env_vars(pfx, envprefix, bindir, libdir, datadir, localedir) > 0))
518 {
519 pfx->env_used = 1;
520 return pfx;
521 }
522
523#ifdef HAVE_DLADDR
524 DBG("Try dladdr on %p", symbol);
525 if (symbol)
526 {
527 Dl_info info_dl;
528
529 if (dladdr(symbol, &info_dl))
530 {
531 DBG("Dlinfo worked");
532 if (info_dl.dli_fname)
533 {
534 DBG("Dlinfo dli_fname = %s", info_dl.dli_fname);
535# ifdef _WIN32
536 if (evil_path_is_absolute(info_dl.dli_fname))
537# else
538 if (info_dl.dli_fname[0] == DSEP_C)
539# endif
540 {
541 INF("Dlsym gave full path = %s", info_dl.dli_fname);
542 STRDUP_REP(pfx->exe_path, info_dl.dli_fname);
543 }
544 }
545 }
546 }
547#endif
548 /* no env var - examine process and possible argv0 */
549 if ((argv0) && (!pfx->exe_path) && (symbol))
550 {
551#ifndef _WIN32
552 if (!_try_proc(pfx, symbol))
553 {
554#endif
555 if (!_try_argv(pfx, argv0))
556 {
557 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale,
558 envprefix);
559 return pfx;
560 }
561#ifndef _WIN32
562 }
563#endif
564 }
565 if (!pfx->exe_path)
566 {
567 WRN("Fallback - nothing found");
568 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix);
569 return pfx;
570 }
571 /* _exe_path is now a full absolute path TO this exe - figure out rest */
572 /* if
573 * exe = /blah/whatever/bin/exe
574 * or
575 * exe = /blah/whatever/lib/libexe.so
576 * then
577 * prefix = /blah/whatever
578 * bin_dir = /blah/whatever/bin
579 * data_dir = /blah/whatever/share/enlightenment
580 * lib_dir = /blah/whatever/lib
581 */
582 DBG("From exe %s figure out the rest", pfx->exe_path);
583 p = strrchr(pfx->exe_path, DSEP_C);
584 if (p)
585 {
586 p--;
587 while (p >= pfx->exe_path)
588 {
589 if (*p == DSEP_C)
590 {
591 pfx->prefix_path = malloc(p - pfx->exe_path + 1);
592 if (pfx->prefix_path)
593 {
594 strncpy(pfx->prefix_path, pfx->exe_path,
595 p - pfx->exe_path);
596 pfx->prefix_path[p - pfx->exe_path] = 0;
597 DBG("Have prefix = %s", pfx->prefix_path);
598
599 /* bin */
600 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
601 pfx->prefix_path, bindir);
602 STRDUP_REP(pfx->prefix_path_bin, buf);
603 DBG("Have bin = %s", pfx->prefix_path_bin);
604 /* lib */
605 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
606 pfx->prefix_path, libdir);
607 STRDUP_REP(pfx->prefix_path_lib, buf);
608 DBG("Have lib = %s", pfx->prefix_path_lib);
609 /* locale */
610 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
611 pfx->prefix_path, localedir);
612 STRDUP_REP(pfx->prefix_path_locale, buf);
613 DBG("Have locale = %s", pfx->prefix_path_locale);
614 /* check if magic file is there - then our guess is right */
615 if (magic)
616 {
617 DBG("Magic = %s", magic);
618 snprintf(buf, sizeof(buf),
619 "%s" DSEP_S "%s" DSEP_S "%s",
620 pfx->prefix_path, datadir, magic);
621 DBG("Check in %s", buf);
622 }
623 if ((!magic) || (stat(buf, &st) == 0))
624 {
625 if (buf[0])
626 DBG("Magic path %s stat passed", buf);
627 else
628 DBG("No magic file");
629 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
630 pfx->prefix_path, datadir);
631 STRDUP_REP(pfx->prefix_path_data, buf);
632 }
633 /* magic file not there. time to start hunting! */
634 else
635 {
636 WRN("Magic failed");
637 _fallback(pfx, pkg_bin, pkg_lib, pkg_data,
638 pkg_locale, envprefix);
639 }
640 }
641 else
642 {
643 WRN("No Prefix path (alloc fail)");
644 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale,
645 envprefix);
646 }
647 return pfx;
648 }
649 p--;
650 }
651 }
652 WRN("Final fallback");
653 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix);
654 return pfx;
655}
656
657EAPI void
658eina_prefix_free(Eina_Prefix *pfx)
659{
660 if (!pfx) return;
661
662 IF_FREE_NULL(pfx->exe_path);
663 IF_FREE_NULL(pfx->prefix_path);
664 IF_FREE_NULL(pfx->prefix_path_bin);
665 IF_FREE_NULL(pfx->prefix_path_data);
666 IF_FREE_NULL(pfx->prefix_path_lib);
667 IF_FREE_NULL(pfx->prefix_path_locale);
668 free(pfx);
669}
670
671EAPI const char *
672eina_prefix_get(Eina_Prefix *pfx)
673{
674 if (!pfx) return "";
675 return pfx->prefix_path;
676}
677
678EAPI const char *
679eina_prefix_bin_get(Eina_Prefix *pfx)
680{
681 if (!pfx) return "";
682 return pfx->prefix_path_bin;
683}
684
685EAPI const char *
686eina_prefix_lib_get(Eina_Prefix *pfx)
687{
688 if (!pfx) return "";
689 return pfx->prefix_path_lib;
690}
691
692EAPI const char *
693eina_prefix_data_get(Eina_Prefix *pfx)
694{
695 if (!pfx) return "";
696 return pfx->prefix_path_data;
697}
698
699EAPI const char *
700eina_prefix_locale_get(Eina_Prefix *pfx)
701{
702 if (!pfx) return "";
703 return pfx->prefix_path_locale;
704}
705
706Eina_Bool
707eina_prefix_init(void)
708{
709 _eina_prefix_log_dom = eina_log_domain_register("eina_prefix",
710 EINA_LOG_COLOR_DEFAULT);
711 if (_eina_prefix_log_dom < 0)
712 {
713 EINA_LOG_ERR("Could not register log domain: eina_prefix");
714 return EINA_FALSE;
715 }
716
717 return EINA_TRUE;
718}
719
720Eina_Bool
721eina_prefix_shutdown(void)
722{
723 eina_log_domain_unregister(_eina_prefix_log_dom);
724 _eina_prefix_log_dom = -1;
725 return EINA_TRUE;
726}
diff --git a/libraries/eina/src/lib/eina_private.h b/libraries/eina/src/lib/eina_private.h
deleted file mode 100644
index 49df565..0000000
--- a/libraries/eina/src/lib/eina_private.h
+++ /dev/null
@@ -1,148 +0,0 @@
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_INARRAY 0x98761270
95#define EINA_MAGIC_INARRAY_ITERATOR 0x98761271
96#define EINA_MAGIC_INARRAY_ACCESSOR 0x98761272
97
98#define EINA_MAGIC_MODEL 0x98761280
99
100#define EINA_MAGIC_CLASS 0x9877CB30
101
102/* undef the following, we want out version */
103#undef FREE
104#define FREE(ptr) \
105 do { \
106 free(ptr); \
107 ptr = NULL; \
108 } while(0);
109
110#undef IF_FREE
111#define IF_FREE(ptr) \
112 do { \
113 if (ptr) { \
114 free(ptr); \
115 ptr = NULL; \
116 } \
117 } while(0);
118
119#undef IF_FN_DEL
120#define IF_FN_DEL(_fn, ptr) \
121 do { \
122 if (ptr) { \
123 _fn(ptr); \
124 ptr = NULL; \
125 } \
126 } while(0);
127
128#define MAGIC_FREE(ptr) \
129 do { \
130 if (ptr) { \
131 EINA_MAGIC_SET(ptr, EINA_MAGIC_NONE); \
132 FREE(ptr); \
133 } \
134 } while(0);
135
136#ifdef EFL_HAVE_THREADS
137extern Eina_Bool _threads_activated;
138
139void eina_share_common_threads_init(void);
140void eina_share_common_threads_shutdown(void);
141void eina_log_threads_init(void);
142void eina_log_threads_shutdown(void);
143#endif
144
145void eina_file_mmap_faulty(void *addr, long page_size);
146
147#endif /* EINA_PRIVATE_H_ */
148
diff --git a/libraries/eina/src/lib/eina_quadtree.c b/libraries/eina/src/lib/eina_quadtree.c
deleted file mode 100644
index daf03d0..0000000
--- a/libraries/eina/src/lib/eina_quadtree.c
+++ /dev/null
@@ -1,935 +0,0 @@
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
deleted file mode 100644
index a9d777a..0000000
--- a/libraries/eina/src/lib/eina_rbtree.c
+++ /dev/null
@@ -1,519 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 * Copyright (C) 2011 Alexandre Becoulet
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 <stdlib.h>
25#include <stdio.h>
26#include <string.h>
27#include <stdint.h>
28
29#include "eina_config.h"
30#include "eina_private.h"
31#include "eina_array.h"
32
33/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
34#include "eina_safety_checks.h"
35#include "eina_rbtree.h"
36
37/*============================================================================*
38* Local *
39*============================================================================*/
40
41#define EINA_RBTREE_ITERATOR_PREFIX_MASK 0x1
42#define EINA_RBTREE_ITERATOR_INFIX_MASK 0x2
43#define EINA_RBTREE_ITERATOR_POSTFIX_MASK 0x4
44
45typedef struct _Eina_Iterator_Rbtree Eina_Iterator_Rbtree;
46typedef struct _Eina_Iterator_Rbtree_List Eina_Iterator_Rbtree_List;
47
48struct _Eina_Iterator_Rbtree
49{
50 Eina_Iterator iterator;
51
52 Eina_Array *stack;
53
54 unsigned char mask;
55};
56
57struct _Eina_Iterator_Rbtree_List
58{
59 Eina_Rbtree *tree;
60
61 Eina_Rbtree_Direction dir : 1;
62 Eina_Bool up : 1;
63};
64
65static Eina_Iterator_Rbtree_List *
66_eina_rbtree_iterator_list_new(const Eina_Rbtree *tree)
67{
68 Eina_Iterator_Rbtree_List *new;
69
70 eina_error_set(0);
71 new = malloc(sizeof (Eina_Iterator_Rbtree_List));
72 if (!new)
73 {
74 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
75 return NULL;
76 }
77
78 new->tree = (Eina_Rbtree *)tree;
79 new->dir = EINA_RBTREE_RIGHT;
80 new->up = EINA_FALSE;
81
82 return new;
83}
84
85static Eina_Rbtree *
86_eina_rbtree_iterator_get_content(Eina_Iterator_Rbtree *it)
87{
88 if (eina_array_count(it->stack) <= 0)
89 return NULL;
90
91 return eina_array_data_get(it->stack, 0);
92}
93
94static void
95_eina_rbtree_iterator_free(Eina_Iterator_Rbtree *it)
96{
97 Eina_Iterator_Rbtree_List *item;
98 Eina_Array_Iterator et;
99 unsigned int i;
100
101 EINA_ARRAY_ITER_NEXT(it->stack, i, item, et)
102 free(item);
103
104 eina_array_free(it->stack);
105 free(it);
106}
107
108static Eina_Bool
109_eina_rbtree_iterator_next(Eina_Iterator_Rbtree *it, void **data)
110{
111 Eina_Iterator_Rbtree_List *last;
112 Eina_Iterator_Rbtree_List *new;
113 Eina_Rbtree *tree;
114
115 if (eina_array_count(it->stack) <= 0)
116 return EINA_FALSE;
117
118 last = eina_array_data_get(it->stack, eina_array_count(it->stack) - 1);
119 tree = last->tree;
120
121 if (!last->tree || last->up == EINA_TRUE)
122 {
123 last = eina_array_pop(it->stack);
124 while (last->dir == EINA_RBTREE_LEFT
125 || !last->tree)
126 {
127 if (tree)
128 if ((it->mask & EINA_RBTREE_ITERATOR_POSTFIX_MASK) ==
129 EINA_RBTREE_ITERATOR_POSTFIX_MASK)
130 {
131 free(last);
132
133 if (eina_array_count(it->stack) > 0)
134 {
135 last = eina_array_data_get(it->stack,
136 eina_array_count(
137 it->
138 stack)
139 - 1);
140 last->up = EINA_TRUE;
141 }
142
143 goto onfix;
144 }
145
146 free(last);
147
148 last = eina_array_pop(it->stack);
149 if (!last)
150 return EINA_FALSE;
151
152 tree = last->tree;
153 }
154
155 last->dir = EINA_RBTREE_LEFT;
156 last->up = EINA_FALSE;
157
158 eina_array_push(it->stack, last);
159
160 if ((it->mask & EINA_RBTREE_ITERATOR_INFIX_MASK) ==
161 EINA_RBTREE_ITERATOR_INFIX_MASK)
162 goto onfix;
163 }
164
165 new = _eina_rbtree_iterator_list_new(last->tree->son[last->dir]);
166 if (!new)
167 return EINA_FALSE;
168
169 eina_array_push(it->stack, new);
170
171 if (last->dir == EINA_RBTREE_RIGHT)
172 if ((it->mask & EINA_RBTREE_ITERATOR_PREFIX_MASK) ==
173 EINA_RBTREE_ITERATOR_PREFIX_MASK)
174 goto onfix;
175
176 return _eina_rbtree_iterator_next(it, data);
177
178onfix:
179 *data = tree;
180 return EINA_TRUE;
181}
182
183static Eina_Iterator *
184_eina_rbtree_iterator_build(const Eina_Rbtree *root, unsigned char mask)
185{
186 Eina_Iterator_Rbtree_List *first;
187 Eina_Iterator_Rbtree *it;
188
189 eina_error_set(0);
190 it = calloc(1, sizeof (Eina_Iterator_Rbtree));
191 if (!it)
192 {
193 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
194 return NULL;
195 }
196
197 it->stack = eina_array_new(8);
198 if (!it->stack)
199 goto on_error2;
200
201 first = _eina_rbtree_iterator_list_new(root);
202 if (!first)
203 goto on_error;
204
205 eina_array_push(it->stack, first);
206
207 it->mask = mask;
208
209 it->iterator.version = EINA_ITERATOR_VERSION;
210 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_rbtree_iterator_next);
211 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
212 _eina_rbtree_iterator_get_content);
213 it->iterator.free = FUNC_ITERATOR_FREE(_eina_rbtree_iterator_free);
214
215 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
216
217 return &it->iterator;
218
219on_error:
220 eina_array_free(it->stack);
221on_error2:
222 free(it);
223
224 return NULL;
225}
226
227static void
228_eina_rbtree_node_init(Eina_Rbtree *node)
229{
230 if (!node)
231 return;
232
233 node->son[0] = NULL;
234 node->son[1] = NULL;
235
236 node->color = EINA_RBTREE_RED;
237}
238
239static inline Eina_Bool
240_eina_rbtree_is_red(Eina_Rbtree *node)
241{
242 return !!node && node->color == EINA_RBTREE_RED;
243}
244
245static inline Eina_Rbtree *
246_eina_rbtree_inline_single_rotation(Eina_Rbtree *node,
247 Eina_Rbtree_Direction dir)
248{
249 Eina_Rbtree *save = node->son[dir ^ 1];
250
251 node->son[dir ^ 1] = save->son[dir];
252 save->son[dir] = node;
253
254 node->color = EINA_RBTREE_RED;
255 save->color = EINA_RBTREE_BLACK;
256
257 return save;
258}
259
260static inline Eina_Rbtree *
261_eina_rbtree_inline_double_rotation(Eina_Rbtree *node,
262 Eina_Rbtree_Direction dir)
263{
264 node->son[dir ^ 1] = _eina_rbtree_inline_single_rotation(node->son[dir ^ 1], dir ^ 1);
265 return _eina_rbtree_inline_single_rotation(node, dir);
266}
267
268/*============================================================================*
269* Global *
270*============================================================================*/
271
272/*============================================================================*
273* API *
274*============================================================================*/
275
276EAPI Eina_Rbtree *
277eina_rbtree_inline_insert(Eina_Rbtree *root,
278 Eina_Rbtree *node,
279 Eina_Rbtree_Cmp_Node_Cb cmp,
280 const void *data)
281{
282 Eina_Rbtree **r = &root;
283 Eina_Rbtree *q = root;
284 uintptr_t stack[48];
285 unsigned int s = 0;
286
287 EINA_SAFETY_ON_NULL_RETURN_VAL(node, root);
288 EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root);
289
290 /* Find insertion leaf */
291 while (q != NULL)
292 {
293 Eina_Rbtree_Direction dir = cmp(q, node, (void *)data);
294
295 /* Keep path in stack */
296 stack[s++] = (uintptr_t)r | dir;
297
298 r = q->son + dir;
299 q = *r;
300 }
301
302 /* Insert */
303 *r = node;
304 _eina_rbtree_node_init(node);
305
306 /* Rebalance */
307 while (s > 0)
308 {
309 Eina_Rbtree *a, *b;
310 uintptr_t top = stack[--s]; /* Pop link pointer and direction */
311 Eina_Rbtree_Direction dir = top & 1;
312
313 r = (Eina_Rbtree **)(top & ~(uintptr_t)1);
314 q = *r;
315
316 a = q->son[dir];
317 /* Rebalance done ? */
318 if (a == NULL || a->color == EINA_RBTREE_BLACK)
319 break;
320
321 b = q->son[dir ^ 1];
322 if (b != NULL && b->color == EINA_RBTREE_RED)
323 {
324 q->color = EINA_RBTREE_RED;
325 b->color = a->color = EINA_RBTREE_BLACK;
326 }
327 else
328 {
329 Eina_Rbtree *c = a->son[dir];
330 Eina_Rbtree *d = a->son[dir ^ 1];
331
332 if (c != NULL && c->color == EINA_RBTREE_RED)
333 *r = _eina_rbtree_inline_single_rotation(*r, dir ^ 1);
334 else if (d != NULL && d->color == EINA_RBTREE_RED)
335 *r = _eina_rbtree_inline_double_rotation(*r, dir ^ 1);
336 }
337 }
338
339 root->color = EINA_RBTREE_BLACK;
340 return root;
341}
342
343EAPI Eina_Rbtree *
344eina_rbtree_inline_remove(Eina_Rbtree *root,
345 Eina_Rbtree *node,
346 Eina_Rbtree_Cmp_Node_Cb cmp,
347 const void *data)
348{
349 Eina_Rbtree *l0, *l1, *r, **rt = &root;
350 Eina_Rbtree_Direction dir;
351 uintptr_t stack[48];
352 unsigned int s = 0;
353
354 EINA_SAFETY_ON_NULL_RETURN_VAL(node, root);
355 EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root);
356
357 /* Item search loop */
358 for (r = *rt; r != NULL; r = *rt)
359 {
360 if (r == node)
361 goto found;
362
363 dir = cmp(r, node, (void*)data);
364 stack[s++] = (uintptr_t)rt | dir;
365 rt = r->son + dir;
366 }
367 return root;
368
369 found:
370 /* remove entry */
371 l0 = node->son[0];
372 l1 = node->son[1];
373
374 if (l0 != NULL && l1 != NULL) /* two links case */
375 {
376 Eina_Rbtree *q, **t, **p;
377 uintptr_t ss;
378
379 stack[s++] = (uintptr_t)rt | 1;
380 ss = s; /* keep predecessor right link stack index */
381
382 /* find predecessor */
383 p = node->son + 1;
384 q = *p;
385
386 while (1)
387 {
388 t = q->son;
389 q = *t;
390 if (q == NULL)
391 break;
392 stack[s++] = (uintptr_t)p | 0;
393 p = t;
394 }
395
396 /* detach predecessor */
397 q = *p;
398 *p = q->son[1];
399
400 int c = q->color;
401
402 /* replace entry by predecessor */
403 memcpy(q, node, sizeof(Eina_Rbtree));
404 *rt = q;
405
406 if (c == EINA_RBTREE_RED)
407 goto end;
408
409 /* fix stack for replaced entry */
410 if (s > ss)
411 stack[ss] = (uintptr_t)(q->son + 1) | 0;
412 }
413 else /* single link case */
414 {
415 if (l0 == NULL)
416 l0 = l1;
417
418 *rt = l0;
419
420 if (node->color == EINA_RBTREE_RED)
421 goto end; /* removed red */
422
423 if (l0 != NULL && l0->color == EINA_RBTREE_RED)
424 {
425 /* red child replace removed black */
426 l0->color = EINA_RBTREE_BLACK;
427 goto end;
428 }
429 }
430
431 /* rebalance */
432 while (s > 0)
433 {
434 Eina_Rbtree *q;
435 uintptr_t st = stack[--s];
436
437 rt = (Eina_Rbtree**)(st & ~(uintptr_t)1);
438 dir = st & 1;
439 r = *rt;
440 q = r->son[dir ^ 1];
441
442 if (q != NULL && q->color == EINA_RBTREE_RED)
443 {
444 *rt = _eina_rbtree_inline_single_rotation(*rt, dir);
445 q = r->son[dir ^ 1];
446 rt = (*rt)->son + dir;
447 }
448
449 if (q != NULL)
450 {
451 int r_color = r->color;
452 Eina_Rbtree *nd = q->son[dir ^ 1];
453
454 if (nd != NULL && nd->color == EINA_RBTREE_RED)
455 {
456 *rt = _eina_rbtree_inline_single_rotation(*rt, dir);
457 }
458 else
459 {
460 Eina_Rbtree *d = q->son[dir];
461
462 if (d != NULL && d->color == EINA_RBTREE_RED)
463 {
464 *rt = _eina_rbtree_inline_double_rotation(*rt, dir);
465 }
466 else
467 {
468 r->color = EINA_RBTREE_BLACK;
469 q->color = EINA_RBTREE_RED;
470 if (r_color == EINA_RBTREE_RED)
471 break;
472 continue;
473 }
474 }
475
476 r = *rt;
477 r->color = r_color;
478 r->son[1]->color = r->son[0]->color = EINA_RBTREE_BLACK;
479
480 break;
481 }
482 }
483
484 end:
485 if (root != NULL)
486 root->color = EINA_RBTREE_BLACK;
487 return root;
488}
489
490EAPI Eina_Iterator *
491eina_rbtree_iterator_prefix(const Eina_Rbtree *root)
492{
493 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_PREFIX_MASK);
494}
495
496EAPI Eina_Iterator *
497eina_rbtree_iterator_infix(const Eina_Rbtree *root)
498{
499 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_INFIX_MASK);
500}
501
502EAPI Eina_Iterator *
503eina_rbtree_iterator_postfix(const Eina_Rbtree *root)
504{
505 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_POSTFIX_MASK);
506}
507
508EAPI void
509eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data)
510{
511 if (!root)
512 return;
513
514 EINA_SAFETY_ON_NULL_RETURN(func);
515
516 eina_rbtree_delete(root->son[0], func, data);
517 eina_rbtree_delete(root->son[1], func, data);
518 func(root, data);
519}
diff --git a/libraries/eina/src/lib/eina_rectangle.c b/libraries/eina/src/lib/eina_rectangle.c
deleted file mode 100644
index 7f0a619..0000000
--- a/libraries/eina/src/lib/eina_rectangle.c
+++ /dev/null
@@ -1,568 +0,0 @@
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
deleted file mode 100644
index eed7c59..0000000
--- a/libraries/eina/src/lib/eina_safety_checks.c
+++ /dev/null
@@ -1,90 +0,0 @@
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
deleted file mode 100644
index b8e7000..0000000
--- a/libraries/eina/src/lib/eina_sched.c
+++ /dev/null
@@ -1,101 +0,0 @@
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 1
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 param.sched_priority -= RTNICENESS;
66
67 /* We don't change the policy */
68 if (param.sched_priority < 1)
69 {
70 EINA_LOG_INFO("RT prio < 1, setting to 1 instead");
71 param.sched_priority = 1;
72 }
73
74 pthread_setschedparam(pthread_id, pol, &param);
75 }
76# ifdef __linux__
77 else
78 {
79 errno = 0;
80 prio = getpriority(PRIO_PROCESS, 0);
81 if (errno == 0)
82 {
83 prio += NICENESS;
84 if (prio > 19)
85 {
86 EINA_LOG_INFO("Max niceness reached; keeping max (19)");
87 prio = 19;
88 }
89
90 setpriority(PRIO_PROCESS, 0, prio);
91 }
92 }
93# endif
94#elif defined EFL_HAVE_WIN32_THREADS
95 if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL))
96 EINA_LOG_ERR("Can not set thread priority");
97#else
98 EINA_LOG_ERR("Eina does not have support for threads enabled"
99 "or it doesn't support setting scheduler priorities");
100#endif
101}
diff --git a/libraries/eina/src/lib/eina_share_common.c b/libraries/eina/src/lib/eina_share_common.c
deleted file mode 100644
index 776e429..0000000
--- a/libraries/eina/src/lib/eina_share_common.c
+++ /dev/null
@@ -1,949 +0,0 @@
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_lock.h"
80
81/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
82#include "eina_safety_checks.h"
83#include "eina_share_common.h"
84
85/*============================================================================*
86* Local *
87*============================================================================*/
88
89/**
90 * @cond LOCAL
91 */
92
93#define EINA_SHARE_COMMON_BUCKETS 256
94#define EINA_SHARE_COMMON_MASK 0xFF
95
96static const char EINA_MAGIC_SHARE_STR[] = "Eina Share";
97static const char EINA_MAGIC_SHARE_HEAD_STR[] = "Eina Share Head";
98
99static int _eina_share_common_count = 0;
100
101#define EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(d, unlock, ...) \
102 do { \
103 if (!EINA_MAGIC_CHECK((d), EINA_MAGIC_SHARE_HEAD)) \
104 { \
105 EINA_MAGIC_FAIL((d), EINA_MAGIC_SHARE_HEAD); \
106 unlock; \
107 return __VA_ARGS__; \
108 } \
109 } while (0)
110
111#define EINA_MAGIC_CHECK_SHARE_COMMON_NODE(d, _node_magic, unlock) \
112 do { \
113 if (!EINA_MAGIC_CHECK((d), _node_magic)) \
114 { \
115 EINA_MAGIC_FAIL((d), _node_magic); \
116 unlock; \
117 } \
118 } while (0)
119
120#ifdef EINA_SHARE_USAGE
121typedef struct _Eina_Share_Common_Population Eina_Share_Common_Population;
122#endif
123
124typedef struct _Eina_Share_Common Eina_Share_Common;
125typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node;
126typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head;
127
128struct _Eina_Share
129{
130 Eina_Share_Common *share;
131 Eina_Magic node_magic;
132#ifdef EINA_SHARE_COMMON_USAGE
133 Eina_Share_Common_Population population;
134 int max_node_population;
135#endif
136};
137
138struct _Eina_Share_Common
139{
140 Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS];
141
142 EINA_MAGIC
143};
144
145struct _Eina_Share_Common_Node
146{
147 Eina_Share_Common_Node *next;
148
149 EINA_MAGIC
150
151 unsigned int length;
152 unsigned int references;
153 char str[];
154};
155
156struct _Eina_Share_Common_Head
157{
158 EINA_RBTREE;
159 EINA_MAGIC
160
161 int hash;
162
163#ifdef EINA_SHARE_COMMON_USAGE
164 int population;
165#endif
166
167 Eina_Share_Common_Node *head;
168 Eina_Share_Common_Node builtin_node;
169};
170
171Eina_Bool _share_common_threads_activated = EINA_FALSE;
172
173static Eina_Lock _mutex_big;
174
175#ifdef EINA_SHARE_COMMON_USAGE
176struct _Eina_Share_Common_Population
177{
178 int count;
179 int max;
180};
181
182static Eina_Share_Common_Population population = { 0, 0 };
183
184static Eina_Share_Common_Population population_group[4] =
185{
186 { 0, 0 },
187 { 0, 0 },
188 { 0, 0 },
189 { 0, 0 }
190};
191
192static void
193_eina_share_common_population_init(Eina_Share *share)
194{
195 unsigned int i;
196
197 for (i = 0;
198 i < sizeof (share->population_group) /
199 sizeof (share->population_group[0]);
200 ++i)
201 {
202 share->population_group[i].count = 0;
203 share->population_group[i].max = 0;
204 }
205}
206
207static void
208_eina_share_common_population_shutdown(Eina_Share *share)
209{
210 unsigned int i;
211
212 share->max_node_population = 0;
213 share->population.count = 0;
214 share->population.max = 0;
215
216 for (i = 0;
217 i < sizeof (share->population_group) /
218 sizeof (share->population_group[0]);
219 ++i)
220 {
221 share->population_group[i].count = 0;
222 share->population_group[i].max = 0;
223 }
224}
225
226static void
227_eina_share_common_population_stats(Eina_Share *share)
228{
229 unsigned int i;
230
231 fprintf(stderr, "eina share_common statistic:\n");
232 fprintf(stderr,
233 " * maximum shared strings : %i\n",
234 share->population.max);
235 fprintf(stderr,
236 " * maximum shared strings per node : %i\n",
237 share->max_node_population);
238
239 for (i = 0;
240 i < sizeof (share->population_group) /
241 sizeof (share->population_group[0]);
242 ++i)
243 fprintf(stderr,
244 "DDD: %i strings of length %i, max strings: %i\n",
245 share->population_group[i].count,
246 i,
247 share->population_group[i].max);
248}
249
250void
251eina_share_common_population_add(Eina_Share *share, int slen)
252{
253 eina_lock_take(&_mutex_big);
254
255 share->population.count++;
256 if (share->population.count > share->population.max)
257 share->population.max = share->population.count;
258
259 if (slen < 4)
260 {
261 share->population_group[slen].count++;
262 if (share->population_group[slen].count >
263 share->population_group[slen].max)
264 share->population_group[slen].max =
265 share->population_group[slen].count;
266 }
267
268 eina_lock_release(&_mutex_big);
269}
270
271void
272eina_share_common_population_del(Eina_Share *share, int slen)
273{
274 eina_lock_take(&_mutex_big);
275
276 share->population.count--;
277 if (slen < 4)
278 share->population_group[slen].count--;
279
280 eina_lock_release(&_mutex_big);
281}
282
283static void
284_eina_share_common_population_head_init(Eina_Share *share,
285 Eina_Share_Common_Head *head)
286{
287 head->population = 1;
288}
289
290static void
291_eina_share_common_population_head_add(Eina_Share *share,
292 Eina_Share_Common_Head *head)
293{
294 head->population++;
295 if (head->population > share->max_node_population)
296 share->max_node_population = head->population;
297}
298
299static void
300_eina_share_common_population_head_del(Eina_Share *share,
301 Eina_Share_Common_Head *head)
302{
303 head->population--;
304}
305
306#else /* EINA_SHARE_COMMON_USAGE undefined */
307
308static void _eina_share_common_population_init(__UNUSED__ Eina_Share *share) {
309}
310static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share *share)
311{
312}
313static void _eina_share_common_population_stats(__UNUSED__ Eina_Share *share) {
314}
315void eina_share_common_population_add(__UNUSED__ Eina_Share *share,
316 __UNUSED__ int slen) {
317}
318void eina_share_common_population_del(__UNUSED__ Eina_Share *share,
319 __UNUSED__ int slen) {
320}
321static void _eina_share_common_population_head_init(
322 __UNUSED__ Eina_Share *share,
323 __UNUSED__ Eina_Share_Common_Head *head) {
324}
325static void _eina_share_common_population_head_add(
326 __UNUSED__ Eina_Share *share,
327 __UNUSED__
328 Eina_Share_Common_Head *head) {
329}
330static void _eina_share_common_population_head_del(
331 __UNUSED__ Eina_Share *share,
332 __UNUSED__
333 Eina_Share_Common_Head *head) {
334}
335#endif
336
337static int
338_eina_share_common_cmp(const Eina_Share_Common_Head *ed,
339 const int *hash,
340 __UNUSED__ int length,
341 __UNUSED__ void *data)
342{
343 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, , 0);
344
345 return ed->hash - *hash;
346}
347
348static Eina_Rbtree_Direction
349_eina_share_common_node(const Eina_Share_Common_Head *left,
350 const Eina_Share_Common_Head *right,
351 __UNUSED__ void *data)
352{
353 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left, , 0);
354 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right, , 0);
355
356 if (left->hash - right->hash < 0)
357 return EINA_RBTREE_LEFT;
358
359 return EINA_RBTREE_RIGHT;
360}
361
362static void
363_eina_share_common_head_free(Eina_Share_Common_Head *ed, __UNUSED__ void *data)
364{
365 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, );
366
367 while (ed->head)
368 {
369 Eina_Share_Common_Node *el = ed->head;
370
371 ed->head = ed->head->next;
372 if (el != &ed->builtin_node)
373 MAGIC_FREE(el);
374 }
375 MAGIC_FREE(ed);
376}
377
378static void
379_eina_share_common_node_init(Eina_Share_Common_Node *node,
380 const char *str,
381 int slen,
382 unsigned int null_size,
383 Eina_Magic node_magic)
384{
385 EINA_MAGIC_SET(node, node_magic);
386 node->references = 1;
387 node->length = slen;
388 memcpy(node->str, str, slen);
389 memset(node->str + slen, 0, null_size); /* Nullify the null */
390
391 (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */
392}
393
394static Eina_Share_Common_Head *
395_eina_share_common_head_alloc(int slen)
396{
397 Eina_Share_Common_Head *head;
398 const size_t head_size = offsetof(Eina_Share_Common_Head, builtin_node.str);
399
400 head = malloc(head_size + slen);
401 if (!head)
402 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
403
404 return head;
405}
406
407static const char *
408_eina_share_common_add_head(Eina_Share *share,
409 Eina_Share_Common_Head **p_bucket,
410 int hash,
411 const char *str,
412 unsigned int slen,
413 unsigned int null_size)
414{
415 Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
416 Eina_Share_Common_Head *head;
417
418 head = _eina_share_common_head_alloc(slen + null_size);
419 if (!head)
420 return NULL;
421
422 EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD);
423 head->hash = hash;
424 head->head = &head->builtin_node;
425 _eina_share_common_node_init(head->head,
426 str,
427 slen,
428 null_size,
429 share->node_magic);
430 head->head->next = NULL;
431
432 _eina_share_common_population_head_init(share, head);
433
434 *p_tree = eina_rbtree_inline_insert
435 (*p_tree, EINA_RBTREE_GET(head),
436 EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
437
438 return head->head->str;
439}
440
441static void
442_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket,
443 Eina_Share_Common_Head *head)
444{
445 Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
446
447 *p_tree = eina_rbtree_inline_remove
448 (*p_tree, EINA_RBTREE_GET(head),
449 EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
450
451 MAGIC_FREE(head);
452}
453
454
455static inline Eina_Bool
456_eina_share_common_node_eq(const Eina_Share_Common_Node *node,
457 const char *str,
458 unsigned int slen)
459{
460 return ((node->length == slen) &&
461 (memcmp(node->str, str, slen) == 0));
462}
463
464static Eina_Share_Common_Node *
465_eina_share_common_head_find(Eina_Share_Common_Head *head,
466 const char *str,
467 unsigned int slen)
468{
469 Eina_Share_Common_Node *node, *prev;
470
471 node = head->head;
472 if (_eina_share_common_node_eq(node, str, slen))
473 return node;
474
475 prev = node;
476 node = node->next;
477 for (; node; prev = node, node = node->next)
478 if (_eina_share_common_node_eq(node, str, slen))
479 {
480 /* promote node, make hot items be at the beginning */
481 prev->next = node->next;
482 node->next = head->head;
483 head->head = node;
484 return node;
485 }
486
487 return NULL;
488}
489
490static Eina_Bool
491_eina_share_common_head_remove_node(Eina_Share_Common_Head *head,
492 const Eina_Share_Common_Node *node)
493{
494 Eina_Share_Common_Node *cur, *prev;
495
496 if (head->head == node)
497 {
498 head->head = node->next;
499 return 1;
500 }
501
502 prev = head->head;
503 cur = head->head->next;
504 for (; cur; prev = cur, cur = cur->next)
505 if (cur == node)
506 {
507 prev->next = cur->next;
508 return 1;
509 }
510
511 return 0;
512}
513
514static Eina_Share_Common_Head *
515_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash)
516{
517 return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup
518 (EINA_RBTREE_GET(bucket), &hash, 0,
519 EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL);
520}
521
522static Eina_Share_Common_Node *
523_eina_share_common_node_alloc(unsigned int slen, unsigned int null_size)
524{
525 Eina_Share_Common_Node *node;
526 const size_t node_size = offsetof(Eina_Share_Common_Node, str);
527
528 node = malloc(node_size + slen + null_size);
529 if (!node)
530 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
531
532 return node;
533}
534
535static Eina_Share_Common_Node *
536_eina_share_common_node_from_str(const char *str, Eina_Magic node_magic)
537{
538 Eina_Share_Common_Node *node;
539 const size_t offset = offsetof(Eina_Share_Common_Node, str);
540
541 node = (Eina_Share_Common_Node *)(str - offset);
542 EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic, node = NULL);
543 return node;
544
545 (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */
546}
547
548static Eina_Bool
549eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__,
550 Eina_Share_Common_Head *head,
551 struct dumpinfo *fdata)
552{
553 Eina_Share_Common_Node *node;
554
555 fdata->used += sizeof(Eina_Share_Common_Head);
556 for (node = head->head; node; node = node->next)
557 {
558 printf("DDD: %5i %5i ", node->length, node->references);
559 printf("'%.*s'\n", node->length, ((char *)node) + sizeof(Eina_Share_Common_Node));
560 fdata->used += sizeof(Eina_Share_Common_Node);
561 fdata->used += node->length;
562 fdata->saved += (node->references - 1) * node->length;
563 fdata->dups += node->references - 1;
564 fdata->unique++;
565 }
566
567 return EINA_TRUE;
568}
569
570/**
571 * @endcond
572 */
573
574
575/*============================================================================*
576* Global *
577*============================================================================*/
578
579/**
580 * @internal
581 * @brief Initialize the share_common module.
582 *
583 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
584 *
585 * This function sets up the share_common module of Eina. It is called by
586 * eina_init().
587 *
588 * @see eina_init()
589 */
590Eina_Bool
591eina_share_common_init(Eina_Share **_share,
592 Eina_Magic node_magic,
593 const char *node_magic_STR)
594{
595 Eina_Share *share;
596
597 share = *_share = calloc(sizeof(Eina_Share), 1);
598 if (!share) goto on_error;
599
600 share->share = calloc(1, sizeof(Eina_Share_Common));
601 if (!share->share) goto on_error;
602
603 share->node_magic = node_magic;
604#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
605 EMS(EINA_MAGIC_SHARE);
606 EMS(EINA_MAGIC_SHARE_HEAD);
607 EMS(node_magic);
608#undef EMS
609 EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE);
610
611 _eina_share_common_population_init(share);
612
613 /* below is the common part among other all eina_share_common user */
614 if (_eina_share_common_count++ != 0)
615 return EINA_TRUE;
616
617 eina_lock_new(&_mutex_big);
618 return EINA_TRUE;
619
620 on_error:
621 _eina_share_common_count--;
622 return EINA_FALSE;
623}
624
625/**
626 * @internal
627 * @brief Shut down the share_common module.
628 *
629 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
630 *
631 * This function shuts down the share_common module set up by
632 * eina_share_common_init(). It is called by eina_shutdown().
633 *
634 * @see eina_shutdown()
635 */
636Eina_Bool
637eina_share_common_shutdown(Eina_Share **_share)
638{
639 unsigned int i;
640 Eina_Share *share = *_share;
641
642 eina_lock_take(&_mutex_big);
643
644 _eina_share_common_population_stats(share);
645
646 /* remove any string still in the table */
647 for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
648 {
649 eina_rbtree_delete(EINA_RBTREE_GET(
650 share->share->buckets[i]),
651 EINA_RBTREE_FREE_CB(
652 _eina_share_common_head_free), NULL);
653 share->share->buckets[i] = NULL;
654 }
655 MAGIC_FREE(share->share);
656
657 _eina_share_common_population_shutdown(share);
658
659 eina_lock_release(&_mutex_big);
660
661 free(*_share);
662 *_share = NULL;
663
664 /* below is the common part among other all eina_share_common user */
665 if (--_eina_share_common_count != 0)
666 return EINA_TRUE;
667
668 eina_lock_free(&_mutex_big);
669
670 return EINA_TRUE;
671}
672
673#ifdef EFL_HAVE_THREADS
674
675/**
676 * @internal
677 * @brief Activate the share_common mutexes.
678 *
679 * This function activate the mutexes in the eina share_common module. It is called by
680 * eina_threads_init().
681 *
682 * @see eina_threads_init()
683 */
684void
685eina_share_common_threads_init(void)
686{
687 _share_common_threads_activated = EINA_TRUE;
688}
689
690/**
691 * @internal
692 * @brief Shut down the share_common mutexes.
693 *
694 * This function shuts down the mutexes in the share_common module.
695 * It is called by eina_threads_shutdown().
696 *
697 * @see eina_threads_shutdown()
698 */
699void
700eina_share_common_threads_shutdown(void)
701{
702 _share_common_threads_activated = EINA_FALSE;
703}
704
705#endif
706
707/*============================================================================*
708* API *
709*============================================================================*/
710
711/**
712 * @cond LOCAL
713 */
714
715const char *
716eina_share_common_add_length(Eina_Share *share,
717 const char *str,
718 unsigned int slen,
719 unsigned int null_size)
720{
721 Eina_Share_Common_Head **p_bucket, *ed;
722 Eina_Share_Common_Node *el;
723 int hash_num, hash;
724
725 if (!str)
726 return NULL;
727
728 eina_share_common_population_add(share, slen);
729
730 if (slen <= 0)
731 return NULL;
732
733 hash = eina_hash_superfast(str, slen);
734 hash_num = hash & 0xFF;
735 hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
736
737 eina_lock_take(&_mutex_big);
738 p_bucket = share->share->buckets + hash_num;
739
740 ed = _eina_share_common_find_hash(*p_bucket, hash);
741 if (!ed)
742 {
743 const char *s = _eina_share_common_add_head(share,
744 p_bucket,
745 hash,
746 str,
747 slen,
748 null_size);
749 eina_lock_release(&_mutex_big);
750 return s;
751 }
752
753 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), NULL);
754
755 el = _eina_share_common_head_find(ed, str, slen);
756 if (el)
757 {
758 EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el,
759 share->node_magic,
760 eina_lock_release(&_mutex_big));
761 el->references++;
762 eina_lock_release(&_mutex_big);
763 return el->str;
764 }
765
766 el = _eina_share_common_node_alloc(slen, null_size);
767 if (!el)
768 {
769 eina_lock_release(&_mutex_big);
770 return NULL;
771 }
772
773 _eina_share_common_node_init(el, str, slen, null_size, share->node_magic);
774 el->next = ed->head;
775 ed->head = el;
776 _eina_share_common_population_head_add(share, ed);
777
778 eina_lock_release(&_mutex_big);
779
780 return el->str;
781}
782
783const char *
784eina_share_common_ref(Eina_Share *share, const char *str)
785{
786 Eina_Share_Common_Node *node;
787
788 if (!str)
789 return NULL;
790
791 eina_lock_take(&_mutex_big);
792 node = _eina_share_common_node_from_str(str, share->node_magic);
793 if (!node)
794 {
795 eina_lock_release(&_mutex_big);
796 return str;
797 }
798 node->references++;
799
800 eina_lock_release(&_mutex_big);
801
802 eina_share_common_population_add(share, node->length);
803
804 return str;
805}
806
807
808Eina_Bool
809eina_share_common_del(Eina_Share *share, const char *str)
810{
811 unsigned int slen;
812 Eina_Share_Common_Head *ed;
813 Eina_Share_Common_Head **p_bucket;
814 Eina_Share_Common_Node *node;
815 int hash_num, hash;
816
817 if (!str)
818 return EINA_TRUE;
819
820 eina_lock_take(&_mutex_big);
821
822 node = _eina_share_common_node_from_str(str, share->node_magic);
823 if (!node)
824 goto on_error;
825
826 slen = node->length;
827 eina_share_common_population_del(share, slen);
828 if (node->references > 1)
829 {
830 node->references--;
831 eina_lock_release(&_mutex_big);
832 return EINA_TRUE;
833 }
834
835 node->references = 0;
836
837 hash = eina_hash_superfast(str, slen);
838 hash_num = hash & 0xFF;
839 hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
840
841 p_bucket = share->share->buckets + hash_num;
842 ed = _eina_share_common_find_hash(*p_bucket, hash);
843 if (!ed)
844 goto on_error;
845
846 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), EINA_FALSE);
847
848 if (!_eina_share_common_head_remove_node(ed, node))
849 goto on_error;
850
851 if (node != &ed->builtin_node)
852 MAGIC_FREE(node);
853
854 if (!ed->head)
855 _eina_share_common_del_head(p_bucket, ed);
856 else
857 _eina_share_common_population_head_del(share, ed);
858
859 eina_lock_release(&_mutex_big);
860
861 return EINA_TRUE;
862
863on_error:
864 eina_lock_release(&_mutex_big);
865 /* possible segfault happened before here, but... */
866 return EINA_FALSE;
867}
868
869int
870eina_share_common_length(__UNUSED__ Eina_Share *share, const char *str)
871{
872 const Eina_Share_Common_Node *node;
873
874 if (!str)
875 return -1;
876
877 node = _eina_share_common_node_from_str(str, share->node_magic);
878 if (!node) return 0;
879 return node->length;
880}
881
882void
883eina_share_common_dump(Eina_Share *share, void (*additional_dump)(
884 struct dumpinfo *), int used)
885{
886 Eina_Iterator *it;
887 unsigned int i;
888 struct dumpinfo di;
889
890 if (!share)
891 return;
892
893 di.used = used;
894 di.saved = 0;
895 di.dups = 0;
896 di.unique = 0;
897 printf("DDD: len ref string\n");
898 printf("DDD:-------------------\n");
899
900 eina_lock_take(&_mutex_big);
901 for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
902 {
903 if (!share->share->buckets[i])
904 {
905 continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i,
906
907 }
908
909// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node));
910 it = eina_rbtree_iterator_prefix(
911 (Eina_Rbtree *)share->share->buckets[i]);
912 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &di);
913 eina_iterator_free(it);
914 }
915 if (additional_dump)
916 additional_dump(&di);
917
918#ifdef EINA_SHARE_COMMON_USAGE
919 /* One character strings are not counted in the hash. */
920 di.saved += share->population_group[0].count * sizeof(char);
921 di.saved += share->population_group[1].count * sizeof(char) * 2;
922#endif
923 printf("DDD:-------------------\n");
924 printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n",
925 di.used, di.saved, di.used ? (di.saved * 100.0 / di.used) : 0.0);
926 printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n",
927 di.unique, di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0);
928
929#ifdef EINA_SHARE_COMMON_USAGE
930 printf("DDD: Allocated strings: %i\n", share->population.count);
931 printf("DDD: Max allocated strings: %i\n", share->population.max);
932
933 for (i = 0;
934 i < sizeof (share->population_group) /
935 sizeof (share->population_group[0]);
936 ++i)
937 fprintf(stderr,
938 "DDD: %i strings of length %i, max strings: %i\n",
939 share->population_group[i].count,
940 i,
941 share->population_group[i].max);
942#endif
943
944 eina_lock_release(&_mutex_big);
945}
946
947/**
948 * @endcond
949 */
diff --git a/libraries/eina/src/lib/eina_share_common.h b/libraries/eina/src/lib/eina_share_common.h
deleted file mode 100644
index 6bc11ef..0000000
--- a/libraries/eina/src/lib/eina_share_common.h
+++ /dev/null
@@ -1,86 +0,0 @@
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);
74Eina_Bool eina_share_common_del(Eina_Share *share, const char *str) EINA_WARN_UNUSED_RESULT;
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#endif /* EINA_SHARE_COMMON_H_ */
diff --git a/libraries/eina/src/lib/eina_simple_xml_parser.c b/libraries/eina/src/lib/eina_simple_xml_parser.c
deleted file mode 100644
index 4e357ba..0000000
--- a/libraries/eina/src/lib/eina_simple_xml_parser.c
+++ /dev/null
@@ -1,1073 +0,0 @@
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#ifdef HAVE_STRINGS_H
42# include <strings.h>
43#endif
44#include <stdlib.h>
45#include <string.h>
46#include <ctype.h>
47
48#ifdef HAVE_EVIL
49# include <Evil.h>
50#endif
51
52#include "eina_private.h"
53#include "eina_log.h"
54#include "eina_mempool.h"
55#include "eina_stringshare.h"
56#include "eina_strbuf.h"
57#include "eina_simple_xml_parser.h"
58
59/*============================================================================*
60 * Local *
61 *============================================================================*/
62
63/**
64 * @cond LOCAL
65 */
66
67static Eina_Mempool *_eina_simple_xml_tag_mp = NULL;
68static Eina_Mempool *_eina_simple_xml_attribute_mp = NULL;
69static int _eina_simple_xml_log_dom = -1;
70
71static const char EINA_MAGIC_SIMPLE_XML_TAG_STR[] = "Eina Simple XML Tag";
72static const char EINA_MAGIC_SIMPLE_XML_DATA_STR[] = "Eina Simple XML Data";
73static const char EINA_MAGIC_SIMPLE_XML_ATTRIBUTE_STR[] = "Eina Simple XML Attribute";
74
75#define EINA_MAGIC_CHECK_TAG(d, ...) \
76 do { \
77 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_TAG)) \
78 { \
79 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_TAG); \
80 return __VA_ARGS__; \
81 } \
82 } while(0)
83
84#define EINA_MAGIC_CHECK_DATA(d, ...) \
85 do { \
86 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_DATA)) \
87 { \
88 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_DATA); \
89 return __VA_ARGS__; \
90 } \
91 } while(0)
92
93#define EINA_MAGIC_CHECK_ATTRIBUTE(d, ...) \
94 do { \
95 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE)) \
96 { \
97 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); \
98 return __VA_ARGS__; \
99 } \
100 } while(0)
101
102
103#ifndef EINA_LOG_COLOR_DEFAULT
104#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
105#endif
106
107#ifdef ERR
108#undef ERR
109#endif
110#define ERR(...) EINA_LOG_DOM_ERR(_eina_simple_xml_log_dom, __VA_ARGS__)
111
112#ifdef WRN
113#undef WRN
114#endif
115#define WRN(...) EINA_LOG_DOM_WARN(_eina_simple_xml_log_dom, __VA_ARGS__)
116
117#ifdef DBG
118#undef DBG
119#endif
120#define DBG(...) EINA_LOG_DOM_DBG(_eina_simple_xml_log_dom, __VA_ARGS__)
121
122
123static inline const char *
124_eina_simple_xml_whitespace_find(const char *itr, const char *itr_end)
125{
126 for (; itr < itr_end; itr++)
127 if (isspace((unsigned char)*itr)) break;
128 return itr;
129}
130
131static inline const char *
132_eina_simple_xml_whitespace_skip(const char *itr, const char *itr_end)
133{
134 for (; itr < itr_end; itr++)
135 if (!isspace((unsigned char)*itr)) break;
136 return itr;
137}
138
139static inline const char *
140_eina_simple_xml_whitespace_unskip(const char *itr, const char *itr_start)
141{
142 for (itr--; itr > itr_start; itr--)
143 if (!isspace((unsigned char)*itr)) break;
144 return itr + 1;
145}
146
147static inline const char *
148_eina_simple_xml_tag_start_find(const char *itr, const char *itr_end)
149{
150 return memchr(itr, '<', itr_end - itr);
151}
152
153static inline const char *
154_eina_simple_xml_tag_end_find(const char *itr, const char *itr_end)
155{
156 for (; itr < itr_end; itr++)
157 if ((*itr == '>') || (*itr == '<')) /* consider < also ends a tag */
158 return itr;
159 return NULL;
160}
161
162/**
163 * @endcond
164 */
165
166/*============================================================================*
167 * Global *
168 *============================================================================*/
169
170
171/**
172 * @internal
173 * @brief Initialize the simple xml parser module.
174 *
175 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
176 *
177 * This function sets up the simple xml parser module of Eina. It is called by
178 * eina_init().
179 *
180 * @see eina_init()
181 */
182Eina_Bool
183eina_simple_xml_init(void)
184{
185 const char *choice, *tmp;
186
187 _eina_simple_xml_log_dom = eina_log_domain_register("eina_simple_xml",
188 EINA_LOG_COLOR_DEFAULT);
189 if (_eina_simple_xml_log_dom < 0)
190 {
191 EINA_LOG_ERR("Could not register log domain: eina_simple_xml");
192 return EINA_FALSE;
193 }
194
195#ifdef EINA_DEFAULT_MEMPOOL
196 choice = "pass_through";
197#else
198 choice = "chained_mempool";
199#endif
200 tmp = getenv("EINA_MEMPOOL");
201 if (tmp && tmp[0])
202 choice = tmp;
203
204 _eina_simple_xml_tag_mp = eina_mempool_add
205 (choice, "simple_xml_tag", NULL,
206 sizeof(Eina_Simple_XML_Node_Tag), 320);
207 if (!_eina_simple_xml_tag_mp)
208 {
209 ERR("Mempool for simple_xml_tag cannot be allocated in init.");
210 goto on_init_fail;
211 }
212
213 _eina_simple_xml_attribute_mp = eina_mempool_add
214 (choice, "simple_xml_attribute", NULL,
215 sizeof(Eina_Simple_XML_Attribute), 80);
216 if (!_eina_simple_xml_attribute_mp)
217 {
218 ERR("Mempool for simple_xml_attribute cannot be allocated in init.");
219 eina_mempool_del(_eina_simple_xml_tag_mp);
220 goto on_init_fail;
221 }
222
223#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
224 EMS(EINA_MAGIC_SIMPLE_XML_TAG);
225 EMS(EINA_MAGIC_SIMPLE_XML_DATA);
226 EMS(EINA_MAGIC_SIMPLE_XML_ATTRIBUTE);
227#undef EMS
228
229 return EINA_TRUE;
230
231on_init_fail:
232 eina_log_domain_unregister(_eina_simple_xml_log_dom);
233 _eina_simple_xml_log_dom = -1;
234 return EINA_FALSE;
235}
236
237/**
238 * @internal
239 * @brief Shut down the simple xml parser module.
240 *
241 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
242 *
243 * This function shuts down the simple xml parser module set
244 * up by eina_simple_xml_init(). It is called by
245 * eina_shutdown().
246 *
247 * @see eina_shutdown()
248 */
249Eina_Bool
250eina_simple_xml_shutdown(void)
251{
252 eina_mempool_del(_eina_simple_xml_attribute_mp);
253 eina_mempool_del(_eina_simple_xml_tag_mp);
254
255 eina_log_domain_unregister(_eina_simple_xml_log_dom);
256 _eina_simple_xml_log_dom = -1;
257 return EINA_TRUE;
258}
259
260
261/*============================================================================*
262 * API *
263 *============================================================================*/
264
265
266EAPI Eina_Bool
267eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Simple_XML_Cb func, const void *data)
268{
269 const char *itr = buf, *itr_end = buf + buflen;
270
271 if (!buf) return EINA_FALSE;
272 if (!func) return EINA_FALSE;
273
274#define CB(type, start, end) \
275 do \
276 { \
277 size_t _sz = end - start; \
278 Eina_Bool _ret; \
279 _ret = func((void*)data, type, start, start - buf, _sz); \
280 if (!_ret) return EINA_FALSE; \
281 } \
282 while (0)
283
284 while (itr < itr_end)
285 {
286 if (itr[0] == '<')
287 {
288 if (itr + 1 >= itr_end)
289 {
290 CB(EINA_SIMPLE_XML_ERROR, itr, itr_end);
291 return EINA_FALSE;
292 }
293 else
294 {
295 Eina_Simple_XML_Type type;
296 size_t toff;
297 const char *p;
298
299 if (itr[1] == '/')
300 {
301 type = EINA_SIMPLE_XML_CLOSE;
302 toff = 1;
303 }
304 else if (itr[1] == '?')
305 {
306 type = EINA_SIMPLE_XML_PROCESSING;
307 toff = 1;
308 }
309 else if (itr[1] == '!')
310 {
311 if ((itr + sizeof("<!DOCTYPE>") - 1 < itr_end) &&
312 (!memcmp(itr + 2, "DOCTYPE",
313 sizeof("DOCTYPE") - 1)) &&
314 ((itr[2 + sizeof("DOCTYPE") - 1] == '>') ||
315 (isspace((unsigned char)itr[2 + sizeof("DOCTYPE") - 1]))))
316 {
317 type = EINA_SIMPLE_XML_DOCTYPE;
318 toff = sizeof("!DOCTYPE") - 1;
319 }
320 else if ((itr + sizeof("<!---->") - 1 < itr_end) &&
321 (!memcmp(itr + 2, "--", sizeof("--") - 1)))
322 {
323 type = EINA_SIMPLE_XML_COMMENT;
324 toff = sizeof("!--") - 1;
325 }
326 else if ((itr + sizeof("<![CDATA[]]>") - 1 < itr_end) &&
327 (!memcmp(itr + 2, "[CDATA[",
328 sizeof("[CDATA[") - 1)))
329 {
330 type = EINA_SIMPLE_XML_CDATA;
331 toff = sizeof("![CDATA[") - 1;
332 }
333 else
334 {
335 type = EINA_SIMPLE_XML_OPEN;
336 toff = 0;
337 }
338 }
339 else
340 {
341 type = EINA_SIMPLE_XML_OPEN;
342 toff = 0;
343 }
344
345 p = _eina_simple_xml_tag_end_find(itr + 1 + toff, itr_end);
346 if (p)
347 {
348 if (type == EINA_SIMPLE_XML_CDATA)
349 {
350 /* must end with ]]> */
351 while ((p) && (memcmp(p - 2, "]]>", 3)))
352 p = _eina_simple_xml_tag_end_find(p + 1, itr_end);
353 }
354
355 if ((p) && (*p == '<'))
356 {
357 type = EINA_SIMPLE_XML_ERROR;
358 toff = 0;
359 }
360 }
361
362 if (p)
363 {
364 const char *start, *end;
365
366 start = itr + 1 + toff;
367 end = p;
368
369 switch (type)
370 {
371 case EINA_SIMPLE_XML_OPEN:
372 if (p[-1] == '/')
373 {
374 type = EINA_SIMPLE_XML_OPEN_EMPTY;
375 end--;
376 }
377 break;
378 case EINA_SIMPLE_XML_CDATA:
379 if (!memcmp(p - 2, "]]", 2)) end -= 2;
380 break;
381 case EINA_SIMPLE_XML_PROCESSING:
382 if (p[-1] == '?') end--;
383 break;
384 case EINA_SIMPLE_XML_COMMENT:
385 if (!memcmp(p - 2, "--", 2)) end -= 2;
386 break;
387 case EINA_SIMPLE_XML_OPEN_EMPTY:
388 case EINA_SIMPLE_XML_CLOSE:
389 case EINA_SIMPLE_XML_DATA:
390 case EINA_SIMPLE_XML_ERROR:
391 case EINA_SIMPLE_XML_DOCTYPE:
392 case EINA_SIMPLE_XML_IGNORED:
393 break;
394 }
395
396 if ((strip) && (type != EINA_SIMPLE_XML_ERROR))
397 {
398 start = _eina_simple_xml_whitespace_skip
399 (start, end);
400 end = _eina_simple_xml_whitespace_unskip
401 (end, start + 1);
402 }
403
404 CB(type, start, end);
405
406 if (type != EINA_SIMPLE_XML_ERROR)
407 itr = p + 1;
408 else
409 itr = p;
410 }
411 else
412 {
413 CB(EINA_SIMPLE_XML_ERROR, itr, itr_end);
414 return EINA_FALSE;
415 }
416 }
417 }
418 else
419 {
420 const char *p, *end;
421
422 if (strip)
423 {
424 p = _eina_simple_xml_whitespace_skip(itr, itr_end);
425 if (p)
426 {
427 CB(EINA_SIMPLE_XML_IGNORED, itr, p);
428 itr = p;
429 }
430 }
431
432 p = _eina_simple_xml_tag_start_find(itr, itr_end);
433 if (!p) p = itr_end;
434
435 end = p;
436 if (strip)
437 end = _eina_simple_xml_whitespace_unskip(end, itr);
438
439 if (itr != end)
440 CB(EINA_SIMPLE_XML_DATA, itr, end);
441
442 if ((strip) && (end < p))
443 CB(EINA_SIMPLE_XML_IGNORED, end, p);
444
445 itr = p;
446 }
447 }
448
449#undef CB
450
451 return EINA_TRUE;
452}
453
454EAPI const char *
455eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen)
456{
457 const char *itr = buf, *itr_end = buf + buflen;
458
459 for (; itr < itr_end; itr++)
460 {
461 if (!isspace((unsigned char)*itr))
462 {
463 /* user skip tagname and already gave it the attributes */
464 if (*itr == '=')
465 return buf;
466 }
467 else
468 {
469 itr = _eina_simple_xml_whitespace_skip(itr + 1, itr_end);
470 if (itr == itr_end)
471 return NULL;
472 return itr;
473 }
474 }
475
476 return NULL;
477}
478
479EAPI Eina_Bool
480eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, Eina_Simple_XML_Attribute_Cb func, const void *data)
481{
482 const char *itr = buf, *itr_end = buf + buflen;
483 char *tmpbuf = alloca(buflen + 1);
484
485 if (!buf) return EINA_FALSE;
486 if (!func) return EINA_FALSE;
487
488 while (itr < itr_end)
489 {
490 const char *p = _eina_simple_xml_whitespace_skip(itr, itr_end);
491 const char *key, *key_end, *value, *value_end;
492 char *tval;
493
494 if (p == itr_end) return EINA_TRUE;
495
496 key = p;
497 for (key_end = key; key_end < itr_end; key_end++)
498 if ((*key_end == '=') || (isspace((unsigned char)*key_end))) break;
499 if (key_end == itr_end) return EINA_FALSE;
500 if (key_end == key) continue;
501
502 if (*key_end == '=') value = key_end + 1;
503 else
504 {
505 value = memchr(key_end, '=', itr_end - key_end);
506 if (!value) return EINA_FALSE;
507 value++;
508 }
509 for (; value < itr_end; value++)
510 if (!isspace((unsigned char)*value)) break;
511 if (value == itr_end) return EINA_FALSE;
512
513 if ((*value == '"') || (*value == '\''))
514 {
515 value_end = memchr(value + 1, *value, itr_end - value);
516 if (!value_end) return EINA_FALSE;
517 value++;
518 }
519 else
520 {
521 value_end = _eina_simple_xml_whitespace_find(value, itr_end);
522 }
523
524 memcpy(tmpbuf, key, key_end - key);
525 tmpbuf[key_end - key] = '\0';
526
527 tval = tmpbuf + (key_end - key) + 1;
528 memcpy(tval, value, value_end - value);
529 tval[value_end - value] = '\0';
530
531 if (!func((void*)data, tmpbuf, tval))
532 return EINA_FALSE;
533
534 itr = value_end + 1;
535 }
536 return EINA_TRUE;
537}
538
539/* Node loader *************************************************************/
540
541EAPI Eina_Simple_XML_Attribute *
542eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value)
543{
544 Eina_Simple_XML_Attribute *attr;
545
546 if (!key) return NULL;
547
548 attr = eina_mempool_malloc(_eina_simple_xml_attribute_mp, sizeof(*attr));
549 if (!attr)
550 {
551 ERR("could not allocate memory for attribute from mempool");
552 return NULL;
553 }
554
555 EINA_MAGIC_SET(attr, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE);
556 attr->parent = parent;
557 attr->key = eina_stringshare_add(key);
558 attr->value = eina_stringshare_add(value ? value : "");
559
560 if (parent)
561 parent->attributes = eina_inlist_append
562 (parent->attributes, EINA_INLIST_GET(attr));
563
564 return attr;
565}
566
567EAPI void
568eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr)
569{
570 EINA_MAGIC_CHECK_ATTRIBUTE(attr);
571
572 if (attr->parent)
573 attr->parent->attributes = eina_inlist_remove
574 (attr->parent->attributes, EINA_INLIST_GET(attr));
575
576 eina_stringshare_del(attr->key);
577 eina_stringshare_del(attr->value);
578 EINA_MAGIC_SET(attr, EINA_MAGIC_NONE);
579 eina_mempool_free(_eina_simple_xml_attribute_mp, attr);
580}
581
582static void
583_eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
584{
585 if (node->base.parent)
586 node->base.parent->children = eina_inlist_remove
587 (node->base.parent->children, EINA_INLIST_GET(&node->base));
588
589 EINA_MAGIC_SET(&node->base, EINA_MAGIC_NONE);
590 free(node);
591}
592
593EAPI Eina_Simple_XML_Node_Tag *
594eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name)
595{
596 Eina_Simple_XML_Node_Tag *n;
597
598 if (!name) return NULL;
599
600 n = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*n));
601 if (!n)
602 {
603 ERR("could not allocate memory for node from mempool");
604 return NULL;
605 }
606
607 memset(n, 0, sizeof(*n));
608
609 EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_TAG);
610
611 n->base.type = EINA_SIMPLE_XML_NODE_TAG;
612 n->base.parent = parent;
613 n->name = eina_stringshare_add(name);
614
615 if (parent)
616 parent->children = eina_inlist_append
617 (parent->children, EINA_INLIST_GET(&n->base));
618
619 return n;
620}
621
622void
623_eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
624{
625 while (tag->children)
626 {
627 Eina_Simple_XML_Node *n = EINA_INLIST_CONTAINER_GET
628 (tag->children, Eina_Simple_XML_Node);
629 if (n->type == EINA_SIMPLE_XML_NODE_TAG)
630 _eina_simple_xml_node_tag_free((Eina_Simple_XML_Node_Tag *)n);
631 else
632 _eina_simple_xml_node_data_free((Eina_Simple_XML_Node_Data *)n);
633 }
634
635 while (tag->attributes)
636 {
637 Eina_Simple_XML_Attribute *a = EINA_INLIST_CONTAINER_GET
638 (tag->attributes, Eina_Simple_XML_Attribute);
639 eina_simple_xml_attribute_free(a);
640 }
641
642 if (tag->base.parent)
643 tag->base.parent->children = eina_inlist_remove
644 (tag->base.parent->children, EINA_INLIST_GET(&tag->base));
645
646 eina_stringshare_del(tag->name);
647 EINA_MAGIC_SET(&tag->base, EINA_MAGIC_NONE);
648 eina_mempool_free(_eina_simple_xml_tag_mp, tag);
649}
650
651EAPI void
652eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
653{
654 EINA_MAGIC_CHECK_TAG(&tag->base);
655 if (tag->base.type != EINA_SIMPLE_XML_NODE_TAG)
656 {
657 ERR("expected tag node!");
658 return;
659 }
660 _eina_simple_xml_node_tag_free(tag);
661}
662
663static Eina_Simple_XML_Node_Data *
664_eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, Eina_Simple_XML_Node_Type type, const char *content, unsigned length)
665{
666 Eina_Simple_XML_Node_Data *n = malloc(sizeof(*n) + length + 1);
667
668 if (!content) return NULL;
669
670 if (!n)
671 {
672 ERR("could not allocate memory for node");
673 return NULL;
674 }
675
676 EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_DATA);
677 n->base.type = type;
678 n->base.parent = parent;
679
680 n->length = length;
681 memcpy(n->data, content, length);
682 n->data[length] = '\0';
683
684 if (parent)
685 parent->children = eina_inlist_append
686 (parent->children, EINA_INLIST_GET(&n->base));
687
688 return n;
689}
690
691EAPI Eina_Simple_XML_Node_Data *
692eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
693{
694 return _eina_simple_xml_node_data_new
695 (parent, EINA_SIMPLE_XML_NODE_DATA, contents, length);
696}
697
698EAPI void
699eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
700{
701 EINA_MAGIC_CHECK_DATA(&node->base);
702 if (node->base.type != EINA_SIMPLE_XML_NODE_DATA)
703 {
704 ERR("expected node of type: data!");
705 return;
706 }
707 _eina_simple_xml_node_data_free(node);
708}
709
710EAPI Eina_Simple_XML_Node_CData *
711eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
712{
713 return _eina_simple_xml_node_data_new
714 (parent, EINA_SIMPLE_XML_NODE_CDATA, contents, length);
715}
716
717EAPI void
718eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node)
719{
720 EINA_MAGIC_CHECK_DATA(&node->base);
721 if (node->base.type != EINA_SIMPLE_XML_NODE_CDATA)
722 {
723 ERR("expected node of type: cdata!");
724 return;
725 }
726 _eina_simple_xml_node_data_free(node);
727}
728
729EAPI Eina_Simple_XML_Node_Processing *
730eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
731{
732 return _eina_simple_xml_node_data_new
733 (parent, EINA_SIMPLE_XML_NODE_PROCESSING, contents, length);
734}
735
736EAPI void
737eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node)
738{
739 EINA_MAGIC_CHECK_DATA(&node->base);
740 if (node->base.type != EINA_SIMPLE_XML_NODE_PROCESSING)
741 {
742 ERR("expected node of type: processing!");
743 return;
744 }
745 _eina_simple_xml_node_data_free(node);
746}
747
748EAPI Eina_Simple_XML_Node_Doctype *
749eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
750{
751 return _eina_simple_xml_node_data_new
752 (parent, EINA_SIMPLE_XML_NODE_DOCTYPE, contents, length);
753}
754
755EAPI void
756eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node)
757{
758 EINA_MAGIC_CHECK_DATA(&node->base);
759 if (node->base.type != EINA_SIMPLE_XML_NODE_DOCTYPE)
760 {
761 ERR("expected node of type: doctype!");
762 return;
763 }
764 _eina_simple_xml_node_data_free(node);
765}
766
767EAPI Eina_Simple_XML_Node_Comment *
768eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
769{
770 return _eina_simple_xml_node_data_new
771 (parent, EINA_SIMPLE_XML_NODE_COMMENT, contents, length);
772}
773
774EAPI void
775eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node)
776{
777 EINA_MAGIC_CHECK_DATA(&node->base);
778 if (node->base.type != EINA_SIMPLE_XML_NODE_COMMENT)
779 {
780 ERR("expected node of type: comment!");
781 return;
782 }
783 _eina_simple_xml_node_data_free(node);
784}
785
786struct eina_simple_xml_node_load_ctxt
787{
788 Eina_Simple_XML_Node_Root *root;
789 Eina_Simple_XML_Node_Tag *current;
790};
791
792static Eina_Bool
793_eina_simple_xml_attrs_parse(void *data, const char *key, const char *value)
794{
795 Eina_Simple_XML_Node_Tag *n = data;
796 Eina_Simple_XML_Attribute *attr;
797
798 attr = eina_simple_xml_attribute_new(n, key, value);
799 return !!attr;
800}
801
802static Eina_Bool
803_eina_simple_xml_node_parse(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset, unsigned length)
804{
805 struct eina_simple_xml_node_load_ctxt *ctx = data;
806
807 switch (type)
808 {
809 case EINA_SIMPLE_XML_OPEN:
810 case EINA_SIMPLE_XML_OPEN_EMPTY:
811 {
812 Eina_Simple_XML_Node_Tag *n;
813 const char *name, *name_end, *attrs;
814
815 attrs = eina_simple_xml_tag_attributes_find(content, length);
816 if (!attrs)
817 name_end = content + length;
818 else
819 name_end = attrs;
820
821 name_end = _eina_simple_xml_whitespace_unskip(name_end, content);
822
823 name = eina_stringshare_add_length(content, name_end - content);
824 n = eina_simple_xml_node_tag_new(ctx->current, name);
825 eina_stringshare_del(name);
826 if (!n) return EINA_FALSE;
827
828 if (attrs)
829 eina_simple_xml_attributes_parse
830 (attrs, length - (attrs - content),
831 _eina_simple_xml_attrs_parse, n);
832
833 if (type == EINA_SIMPLE_XML_OPEN)
834 ctx->current = n;
835 }
836 break;
837
838 case EINA_SIMPLE_XML_CLOSE:
839 if (ctx->current->base.parent)
840 {
841 const char *end = _eina_simple_xml_whitespace_unskip
842 (content + length, content);
843 int len;
844 len = end - content;
845 if ((len == 0) /* </> closes the tag for us. */ ||
846 ((eina_stringshare_strlen(ctx->current->name) == len) &&
847 (memcmp(ctx->current->name, content, len) == 0)))
848 ctx->current = ctx->current->base.parent;
849 else
850 WRN("closed incorrect tag: '%.*s', '%s' was expected!",
851 len, content, ctx->current->name);
852 }
853 else
854 WRN("closed tag '%.*s' but already at document root!",
855 length, content);
856 break;
857
858 case EINA_SIMPLE_XML_DATA:
859 return !!eina_simple_xml_node_data_new
860 (ctx->current, content, length);
861 case EINA_SIMPLE_XML_CDATA:
862 return !!eina_simple_xml_node_cdata_new
863 (ctx->current, content, length);
864 case EINA_SIMPLE_XML_PROCESSING:
865 return !!eina_simple_xml_node_processing_new
866 (ctx->current, content, length);
867 case EINA_SIMPLE_XML_DOCTYPE:
868 return !!eina_simple_xml_node_doctype_new
869 (ctx->current, content, length);
870 case EINA_SIMPLE_XML_COMMENT:
871 return !!eina_simple_xml_node_comment_new
872 (ctx->current, content, length);
873
874 case EINA_SIMPLE_XML_ERROR:
875 ERR("parser error at offset %u-%u: %.*s",
876 offset, length, length, content);
877 break;
878 case EINA_SIMPLE_XML_IGNORED:
879 DBG("ignored contents at offset %u-%u: %.*s",
880 offset, length, length, content);
881 break;
882 }
883
884 return EINA_TRUE;
885}
886
887EAPI Eina_Simple_XML_Node_Root *
888eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip)
889{
890 Eina_Simple_XML_Node_Root *root;
891 struct eina_simple_xml_node_load_ctxt ctx;
892
893 if (!buf) return NULL;
894
895 root = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*root));
896 if (!root) return NULL;
897
898 memset(root, 0, sizeof(*root));
899 EINA_MAGIC_SET(&root->base, EINA_MAGIC_SIMPLE_XML_TAG);
900 root->base.type = EINA_SIMPLE_XML_NODE_ROOT;
901
902 ctx.root = root;
903 ctx.current = root;
904 eina_simple_xml_parse(buf, buflen, strip, _eina_simple_xml_node_parse, &ctx);
905
906 return root;
907}
908
909EAPI void
910eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root)
911{
912 if (!root) return;
913 EINA_MAGIC_CHECK_TAG(&root->base);
914 if (root->base.type != EINA_SIMPLE_XML_NODE_ROOT)
915 {
916 ERR("expected root node!");
917 return;
918 }
919 _eina_simple_xml_node_tag_free(root);
920}
921
922static inline void
923_eina_simple_xml_node_dump_indent(Eina_Strbuf *buf, const char *indent, unsigned level)
924{
925 unsigned i, indent_len = strlen(indent);
926 for (i = 0; i < level; i++)
927 eina_strbuf_append_length(buf, indent, indent_len);
928}
929
930static void
931_eina_simple_xml_node_tag_attributes_append(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag)
932{
933 Eina_Simple_XML_Attribute *a;
934
935 EINA_INLIST_FOREACH(tag->attributes, a)
936 eina_strbuf_append_printf(buf, " %s=\"%s\"", a->key, a->value);
937}
938
939static void _eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level);
940
941static void
942_eina_simple_xml_node_children_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag, const char *indent, unsigned level)
943{
944 Eina_Simple_XML_Node *node;
945
946 EINA_INLIST_FOREACH(tag->children, node)
947 _eina_simple_xml_node_dump(buf, node, indent, level);
948}
949
950static void
951_eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level)
952{
953 switch (node->type)
954 {
955 case EINA_SIMPLE_XML_NODE_ROOT:
956 _eina_simple_xml_node_children_dump
957 (buf, (Eina_Simple_XML_Node_Tag *)node, indent, level);
958 break;
959
960 case EINA_SIMPLE_XML_NODE_TAG:
961 {
962 Eina_Simple_XML_Node_Tag *n = (Eina_Simple_XML_Node_Tag *)node;
963
964 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
965
966 eina_strbuf_append_char(buf, '<');
967 eina_strbuf_append_length
968 (buf, n->name, eina_stringshare_strlen(n->name));
969
970 if (n->attributes)
971 _eina_simple_xml_node_tag_attributes_append(buf, n);
972
973 if (n->children)
974 eina_strbuf_append_char(buf, '>');
975 else
976 eina_strbuf_append_length(buf, "/>", sizeof("/>") - 1);
977
978 if (indent) eina_strbuf_append_char(buf, '\n');
979
980 if (n->children)
981 {
982 _eina_simple_xml_node_children_dump(buf, n, indent, level + 1);
983
984 if (indent)
985 _eina_simple_xml_node_dump_indent(buf, indent, level);
986
987 eina_strbuf_append_length(buf, "</", sizeof("</") - 1);
988 eina_strbuf_append_length
989 (buf, n->name, eina_stringshare_strlen(n->name));
990 eina_strbuf_append_char(buf, '>');
991
992 if (indent) eina_strbuf_append_char(buf, '\n');
993 }
994 }
995 break;
996 case EINA_SIMPLE_XML_NODE_DATA:
997 {
998 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
999
1000 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1001 eina_strbuf_append_length(buf, n->data, n->length);
1002 if (indent) eina_strbuf_append_char(buf, '\n');
1003 }
1004 break;
1005
1006 case EINA_SIMPLE_XML_NODE_CDATA:
1007 {
1008 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1009
1010 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1011 eina_strbuf_append_length(buf, "<![CDATA[", sizeof("<![CDATA[") - 1);
1012 eina_strbuf_append_length(buf, n->data, n->length);
1013 eina_strbuf_append_length(buf, "]]>", sizeof("]]>") - 1);
1014 if (indent) eina_strbuf_append_char(buf, '\n');
1015 }
1016 break;
1017
1018 case EINA_SIMPLE_XML_NODE_PROCESSING:
1019 {
1020 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1021
1022 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1023 eina_strbuf_append_length(buf, "<?", sizeof("<?") - 1);
1024 eina_strbuf_append_length(buf, n->data, n->length);
1025 eina_strbuf_append_length(buf, " ?>", sizeof(" ?>") - 1);
1026 if (indent) eina_strbuf_append_char(buf, '\n');
1027 }
1028 break;
1029
1030 case EINA_SIMPLE_XML_NODE_DOCTYPE:
1031 {
1032 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1033
1034 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1035 eina_strbuf_append_length
1036 (buf, "<!DOCTYPE ", sizeof("<!DOCTYPE ") - 1);
1037 eina_strbuf_append_length(buf, n->data, n->length);
1038 eina_strbuf_append_char(buf, '>');
1039 if (indent) eina_strbuf_append_char(buf, '\n');
1040 }
1041 break;
1042
1043 case EINA_SIMPLE_XML_NODE_COMMENT:
1044 {
1045 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1046
1047 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1048 eina_strbuf_append_length(buf, "<!-- ", sizeof("<!-- ") - 1);
1049 eina_strbuf_append_length(buf, n->data, n->length);
1050 eina_strbuf_append_length(buf, " -->", sizeof(" -->") - 1);
1051 if (indent) eina_strbuf_append_char(buf, '\n');
1052 }
1053 break;
1054 }
1055}
1056
1057EAPI char *
1058eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent)
1059{
1060 Eina_Strbuf *buf;
1061 char *ret;
1062
1063 if (!node) return NULL;
1064
1065 buf = eina_strbuf_new();
1066 if (!buf) return NULL;
1067
1068 _eina_simple_xml_node_dump(buf, node, indent, 0);
1069
1070 ret = eina_strbuf_string_steal(buf);
1071 eina_strbuf_free(buf);
1072 return ret;
1073}
diff --git a/libraries/eina/src/lib/eina_str.c b/libraries/eina/src/lib/eina_str.c
deleted file mode 100644
index 8d27c65..0000000
--- a/libraries/eina/src/lib/eina_str.c
+++ /dev/null
@@ -1,462 +0,0 @@
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
deleted file mode 100644
index 828d842..0000000
--- a/libraries/eina/src/lib/eina_strbuf.c
+++ /dev/null
@@ -1,202 +0,0 @@
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 unsigned char *c = buf->buf;
166
167 while (buf->len > 0 && isspace(c[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 unsigned 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
deleted file mode 100644
index 46067cd..0000000
--- a/libraries/eina/src/lib/eina_strbuf_common.c
+++ /dev/null
@@ -1,874 +0,0 @@
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
deleted file mode 100644
index 06a1353..0000000
--- a/libraries/eina/src/lib/eina_strbuf_common.h
+++ /dev/null
@@ -1,120 +0,0 @@
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
deleted file mode 100644
index e8c3b61..0000000
--- a/libraries/eina/src/lib/eina_strbuf_template_c.x
+++ /dev/null
@@ -1,97 +0,0 @@
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
deleted file mode 100644
index f371fcd..0000000
--- a/libraries/eina/src/lib/eina_stringshare.c
+++ /dev/null
@@ -1,792 +0,0 @@
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_lock.h"
59#include "eina_share_common.h"
60
61/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
62#include "eina_safety_checks.h"
63#include "eina_stringshare.h"
64
65
66#ifdef CRITICAL
67#undef CRITICAL
68#endif
69#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_stringshare_log_dom, __VA_ARGS__)
70
71#ifdef ERR
72#undef ERR
73#endif
74#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_stringshare_log_dom, __VA_ARGS__)
75
76#ifdef DBG
77#undef DBG
78#endif
79#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_stringshare_log_dom, __VA_ARGS__)
80
81static int _eina_share_stringshare_log_dom = -1;
82
83/* The actual share */
84static Eina_Share *stringshare_share;
85static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node";
86
87extern Eina_Bool _share_common_threads_activated;
88static Eina_Lock _mutex_small;
89
90/* Stringshare optimizations */
91static const unsigned char _eina_stringshare_single[512] = {
92 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,
93 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,
94 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,
95 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,
96 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,
97 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,
98 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,
99 105,0,
100 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,
101 0,119,0,120,0,
102 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,
103 0,134,0,135,0,
104 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,
105 0,149,0,150,0,
106 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,
107 0,164,0,165,0,
108 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,
109 0,179,0,180,0,
110 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,
111 0,194,0,195,0,
112 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,
113 0,209,0,210,0,
114 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,
115 0,224,0,225,0,
116 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,
117 0,239,0,240,0,
118 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,
119 0,254,0,255,0
120};
121
122typedef struct _Eina_Stringshare_Small Eina_Stringshare_Small;
123typedef struct _Eina_Stringshare_Small_Bucket Eina_Stringshare_Small_Bucket;
124
125struct _Eina_Stringshare_Small_Bucket
126{
127 /* separate arrays for faster lookups */
128 const char **strings;
129 unsigned char *lengths;
130 unsigned short *references;
131 int count;
132 int size;
133};
134
135struct _Eina_Stringshare_Small
136{
137 Eina_Stringshare_Small_Bucket *buckets[256];
138};
139
140#define EINA_STRINGSHARE_SMALL_BUCKET_STEP 8
141static Eina_Stringshare_Small _eina_small_share;
142
143static inline int
144_eina_stringshare_small_cmp(const Eina_Stringshare_Small_Bucket *bucket,
145 int i,
146 const char *pstr,
147 unsigned char plength)
148{
149 /* pstr and plength are from second char and on, since the first is
150 * always the same.
151 *
152 * First string being always the same, size being between 2 and 3
153 * characters (there is a check for special case length==1 and then
154 * small stringshare is applied to strings < 4), we just need to
155 * compare 2 characters of both strings.
156 */
157 const unsigned char cur_plength = bucket->lengths[i] - 1;
158 const char *cur_pstr;
159
160 if (cur_plength > plength)
161 return 1;
162 else if (cur_plength < plength)
163 return -1;
164
165 cur_pstr = bucket->strings[i] + 1;
166
167 if (cur_pstr[0] > pstr[0])
168 return 1;
169 else if (cur_pstr[0] < pstr[0])
170 return -1;
171
172 if (plength == 1)
173 return 0;
174
175 if (cur_pstr[1] > pstr[1])
176 return 1;
177 else if (cur_pstr[1] < pstr[1])
178 return -1;
179
180 return 0;
181}
182
183static const char *
184_eina_stringshare_small_bucket_find(const Eina_Stringshare_Small_Bucket *bucket,
185 const char *str,
186 unsigned char length,
187 int *idx)
188{
189 const char *pstr = str + 1; /* skip first letter, it's always the same */
190 unsigned char plength = length - 1;
191 int i, low, high;
192
193 if (bucket->count == 0)
194 {
195 *idx = 0;
196 return NULL;
197 }
198
199 low = 0;
200 high = bucket->count;
201
202 while (low < high)
203 {
204 int r;
205
206 i = (low + high - 1) / 2;
207
208 r = _eina_stringshare_small_cmp(bucket, i, pstr, plength);
209 if (r > 0)
210 high = i;
211 else if (r < 0)
212 low = i + 1;
213 else
214 {
215 *idx = i;
216 return bucket->strings[i];
217 }
218 }
219
220 *idx = low;
221 return NULL;
222}
223
224static Eina_Bool
225_eina_stringshare_small_bucket_resize(Eina_Stringshare_Small_Bucket *bucket,
226 int size)
227{
228 void *tmp;
229
230 tmp = realloc((void *)bucket->strings, size * sizeof(bucket->strings[0]));
231 if (!tmp)
232 {
233 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
234 return 0;
235 }
236
237 bucket->strings = tmp;
238
239 tmp = realloc(bucket->lengths, size * sizeof(bucket->lengths[0]));
240 if (!tmp)
241 {
242 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
243 return 0;
244 }
245
246 bucket->lengths = tmp;
247
248 tmp = realloc(bucket->references, size * sizeof(bucket->references[0]));
249 if (!tmp)
250 {
251 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
252 return 0;
253 }
254
255 bucket->references = tmp;
256
257 bucket->size = size;
258 return 1;
259}
260
261static const char *
262_eina_stringshare_small_bucket_insert_at(
263 Eina_Stringshare_Small_Bucket **p_bucket,
264 const char *str,
265 unsigned char length,
266 int idx)
267{
268 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
269 int todo, off;
270 char *snew;
271
272 if (!bucket)
273 {
274 *p_bucket = bucket = calloc(1, sizeof(*bucket));
275 if (!bucket)
276 {
277 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
278 return NULL;
279 }
280 }
281
282 if (bucket->count + 1 >= bucket->size)
283 {
284 int size = bucket->size + EINA_STRINGSHARE_SMALL_BUCKET_STEP;
285 if (!_eina_stringshare_small_bucket_resize(bucket, size))
286 return NULL;
287 }
288
289 snew = malloc(length + 1);
290 if (!snew)
291 {
292 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
293 return NULL;
294 }
295
296 memcpy(snew, str, length);
297 snew[length] = '\0';
298
299 off = idx + 1;
300 todo = bucket->count - idx;
301 if (todo > 0)
302 {
303 memmove((void *)(bucket->strings + off), bucket->strings + idx,
304 todo * sizeof(bucket->strings[0]));
305 memmove(bucket->lengths + off, bucket->lengths + idx,
306 todo * sizeof(bucket->lengths[0]));
307 memmove(bucket->references + off, bucket->references + idx,
308 todo * sizeof(bucket->references[0]));
309 }
310
311 bucket->strings[idx] = snew;
312 bucket->lengths[idx] = length;
313 bucket->references[idx] = 1;
314 bucket->count++;
315
316 return snew;
317}
318
319static void
320_eina_stringshare_small_bucket_remove_at(
321 Eina_Stringshare_Small_Bucket **p_bucket,
322 int idx)
323{
324 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
325 int todo, off;
326
327 if (bucket->references[idx] > 1)
328 {
329 bucket->references[idx]--;
330 return;
331 }
332
333 free((char *)bucket->strings[idx]);
334
335 if (bucket->count == 1)
336 {
337 free((void *)bucket->strings);
338 free(bucket->lengths);
339 free(bucket->references);
340 free(bucket);
341 *p_bucket = NULL;
342 return;
343 }
344
345 bucket->count--;
346 if (idx == bucket->count)
347 goto end;
348
349 off = idx + 1;
350 todo = bucket->count - idx;
351
352 memmove((void *)(bucket->strings + idx), bucket->strings + off,
353 todo * sizeof(bucket->strings[0]));
354 memmove(bucket->lengths + idx, bucket->lengths + off,
355 todo * sizeof(bucket->lengths[0]));
356 memmove(bucket->references + idx, bucket->references + off,
357 todo * sizeof(bucket->references[0]));
358
359end:
360 if (bucket->count + EINA_STRINGSHARE_SMALL_BUCKET_STEP < bucket->size)
361 {
362 int size = bucket->size - EINA_STRINGSHARE_SMALL_BUCKET_STEP;
363 _eina_stringshare_small_bucket_resize(bucket, size);
364 }
365}
366
367static const char *
368_eina_stringshare_small_add(const char *str, unsigned char length)
369{
370 Eina_Stringshare_Small_Bucket **bucket;
371 int i;
372
373 bucket = _eina_small_share.buckets + (unsigned char)str[0];
374 if (!*bucket)
375 i = 0;
376 else
377 {
378 const char *ret;
379 ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i);
380 if (ret)
381 {
382 (*bucket)->references[i]++;
383 return ret;
384 }
385 }
386
387 return _eina_stringshare_small_bucket_insert_at(bucket, str, length, i);
388}
389
390static void
391_eina_stringshare_small_del(const char *str, unsigned char length)
392{
393 Eina_Stringshare_Small_Bucket **bucket;
394 const char *ret;
395 int i;
396
397 bucket = _eina_small_share.buckets + (unsigned char)str[0];
398 if (!*bucket)
399 goto error;
400
401 ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i);
402 if (!ret)
403 goto error;
404
405 _eina_stringshare_small_bucket_remove_at(bucket, i);
406 return;
407
408error:
409 CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
410}
411
412static void
413_eina_stringshare_small_init(void)
414{
415 eina_lock_new(&_mutex_small);
416 memset(&_eina_small_share, 0, sizeof(_eina_small_share));
417}
418
419static void
420_eina_stringshare_small_shutdown(void)
421{
422 Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end;
423
424 p_bucket = _eina_small_share.buckets;
425 p_bucket_end = p_bucket + 256;
426
427 for (; p_bucket < p_bucket_end; p_bucket++)
428 {
429 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
430 char **s, **s_end;
431
432 if (!bucket)
433 continue;
434
435 s = (char **)bucket->strings;
436 s_end = s + bucket->count;
437 for (; s < s_end; s++)
438 free(*s);
439
440 free((void *)bucket->strings);
441 free(bucket->lengths);
442 free(bucket->references);
443 free(bucket);
444 *p_bucket = NULL;
445 }
446
447 eina_lock_free(&_mutex_small);
448}
449
450static void
451_eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket *bucket,
452 struct dumpinfo *di)
453{
454 const char **s = bucket->strings;
455 unsigned char *l = bucket->lengths;
456 unsigned short *r = bucket->references;
457 int i;
458
459 di->used += sizeof(*bucket);
460 di->used += bucket->count * sizeof(*s);
461 di->used += bucket->count * sizeof(*l);
462 di->used += bucket->count * sizeof(*r);
463 di->unique += bucket->count;
464
465 for (i = 0; i < bucket->count; i++, s++, l++, r++)
466 {
467 int dups;
468
469 printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s);
470
471 dups = (*r - 1);
472
473 di->used += *l;
474 di->saved += *l * dups;
475 di->dups += dups;
476 }
477}
478
479static void
480_eina_stringshare_small_dump(struct dumpinfo *di)
481{
482 Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end;
483
484 p_bucket = _eina_small_share.buckets;
485 p_bucket_end = p_bucket + 256;
486
487 for (; p_bucket < p_bucket_end; p_bucket++)
488 {
489 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
490
491 if (!bucket)
492 continue;
493
494 _eina_stringshare_small_bucket_dump(bucket, di);
495 }
496}
497
498
499/*============================================================================*
500* Global *
501*============================================================================*/
502
503/**
504 * @internal
505 * @brief Initialize the share_common module.
506 *
507 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
508 *
509 * This function sets up the share_common module of Eina. It is called by
510 * eina_init().
511 *
512 * @see eina_init()
513 */
514Eina_Bool
515eina_stringshare_init(void)
516{
517 Eina_Bool ret;
518
519 if (_eina_share_stringshare_log_dom < 0)
520 {
521 _eina_share_stringshare_log_dom = eina_log_domain_register
522 ("eina_stringshare", EINA_LOG_COLOR_DEFAULT);
523
524 if (_eina_share_stringshare_log_dom < 0)
525 {
526 EINA_LOG_ERR("Could not register log domain: eina_stringshare");
527 return EINA_FALSE;
528 }
529 }
530
531 ret = eina_share_common_init(&stringshare_share,
532 EINA_MAGIC_STRINGSHARE_NODE,
533 EINA_MAGIC_STRINGSHARE_NODE_STR);
534 if (ret)
535 _eina_stringshare_small_init();
536 else
537 {
538 eina_log_domain_unregister(_eina_share_stringshare_log_dom);
539 _eina_share_stringshare_log_dom = -1;
540 }
541
542 return ret;
543}
544
545/**
546 * @internal
547 * @brief Shut down the share_common module.
548 *
549 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
550 *
551 * This function shuts down the share_common module set up by
552 * eina_share_common_init(). It is called by eina_shutdown().
553 *
554 * @see eina_shutdown()
555 */
556Eina_Bool
557eina_stringshare_shutdown(void)
558{
559 Eina_Bool ret;
560 _eina_stringshare_small_shutdown();
561 ret = eina_share_common_shutdown(&stringshare_share);
562
563 if (_eina_share_stringshare_log_dom >= 0)
564 {
565 eina_log_domain_unregister(_eina_share_stringshare_log_dom);
566 _eina_share_stringshare_log_dom = -1;
567 }
568
569 return ret;
570}
571
572/*============================================================================*
573* API *
574*============================================================================*/
575
576EAPI void
577eina_stringshare_del(Eina_Stringshare *str)
578{
579 int slen;
580
581 if (!str)
582 return;
583
584 /* special cases */
585 if (str[0] == '\0')
586 slen = 0;
587 else if (str[1] == '\0')
588 slen = 1;
589 else if (str[2] == '\0')
590 slen = 2;
591 else if (str[3] == '\0')
592 slen = 3;
593 else
594 slen = 4; /* handled later */
595
596 if (slen < 2)
597 return;
598 else if (slen < 4)
599 {
600 eina_share_common_population_del(stringshare_share, slen);
601 eina_lock_take(&_mutex_small);
602 _eina_stringshare_small_del(str, slen);
603 eina_lock_release(&_mutex_small);
604 return;
605 }
606
607 if (!eina_share_common_del(stringshare_share, str))
608 CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
609}
610
611EAPI Eina_Stringshare *
612eina_stringshare_add_length(const char *str, unsigned int slen)
613{
614 if ((!str) || (slen <= 0))
615 return "";
616 else if (slen == 1)
617 return (Eina_Stringshare *) _eina_stringshare_single + ((*str) << 1);
618 else if (slen < 4)
619 {
620 const char *s;
621
622 eina_lock_take(&_mutex_small);
623 s = _eina_stringshare_small_add(str, slen);
624 eina_lock_release(&_mutex_small);
625 return s;
626 }
627
628 return eina_share_common_add_length(stringshare_share, str, slen *
629 sizeof(char), sizeof(char));
630}
631
632EAPI Eina_Stringshare *
633eina_stringshare_add(const char *str)
634{
635 int slen;
636 if (!str)
637 return NULL;
638
639 if (str[0] == '\0')
640 slen = 0;
641 else if (str[1] == '\0')
642 slen = 1;
643 else if (str[2] == '\0')
644 slen = 2;
645 else if (str[3] == '\0')
646 slen = 3;
647 else
648 slen = 3 + (int)strlen(str + 3);
649
650 return eina_stringshare_add_length(str, slen);
651}
652
653EAPI Eina_Stringshare *
654eina_stringshare_printf(const char *fmt, ...)
655{
656 va_list args;
657 char *tmp;
658 const char *ret;
659 int len;
660
661 if (!fmt)
662 return NULL;
663
664 va_start(args, fmt);
665 len = vasprintf(&tmp, fmt, args);
666 va_end(args);
667
668 if (len < 1)
669 return NULL;
670
671 ret = eina_stringshare_add_length(tmp, len);
672 free(tmp);
673
674 return ret;
675}
676
677EAPI Eina_Stringshare *
678eina_stringshare_vprintf(const char *fmt, va_list args)
679{
680 char *tmp;
681 const char *ret;
682 int len;
683
684 if (!fmt)
685 return NULL;
686
687 len = vasprintf(&tmp, fmt, args);
688
689 if (len < 1)
690 return NULL;
691
692 ret = eina_stringshare_add_length(tmp, len);
693 free(tmp);
694
695 return ret;
696}
697
698EAPI Eina_Stringshare *
699eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
700{
701 va_list args;
702 char *tmp;
703 int size;
704
705 if (!fmt)
706 return NULL;
707
708 if (len < 1)
709 return NULL;
710
711 tmp = alloca(sizeof(char) * len + 1);
712
713 va_start(args, fmt);
714 size = vsnprintf(tmp, len, fmt, args);
715 va_end(args);
716
717 if (size < 1)
718 return NULL;
719
720 return eina_stringshare_add_length(tmp, len);
721}
722
723EAPI Eina_Stringshare *
724eina_stringshare_ref(Eina_Stringshare *str)
725{
726 int slen;
727
728 if (!str)
729 return eina_share_common_ref(stringshare_share, str);
730
731 /* special cases */
732 if (str[0] == '\0')
733 slen = 0;
734 else if (str[1] == '\0')
735 slen = 1;
736 else if (str[2] == '\0')
737 slen = 2;
738 else if (str[3] == '\0')
739 slen = 3;
740 else
741 slen = 3 + (int)strlen(str + 3);
742
743 if (slen < 2)
744 {
745 eina_share_common_population_add(stringshare_share, slen);
746
747 return str;
748 }
749 else if (slen < 4)
750 {
751 const char *s;
752 eina_share_common_population_add(stringshare_share, slen);
753
754 eina_lock_take(&_mutex_small);
755 s = _eina_stringshare_small_add(str, slen);
756 eina_lock_release(&_mutex_small);
757
758 return s;
759 }
760
761 return eina_share_common_ref(stringshare_share, str);
762}
763
764EAPI int
765eina_stringshare_strlen(Eina_Stringshare *str)
766{
767 int len;
768 /* special cases */
769 if (str[0] == '\0')
770 return 0;
771
772 if (str[1] == '\0')
773 return 1;
774
775 if (str[2] == '\0')
776 return 2;
777
778 if (str[3] == '\0')
779 return 3;
780
781 len = eina_share_common_length(stringshare_share, (Eina_Stringshare *) str);
782 len = (len > 0) ? len / (int)sizeof(char) : -1;
783 return len;
784}
785
786EAPI void
787eina_stringshare_dump(void)
788{
789 eina_share_common_dump(stringshare_share,
790 _eina_stringshare_small_dump,
791 sizeof(_eina_stringshare_single));
792}
diff --git a/libraries/eina/src/lib/eina_tiler.c b/libraries/eina/src/lib/eina_tiler.c
deleted file mode 100644
index 69b944e..0000000
--- a/libraries/eina/src/lib/eina_tiler.c
+++ /dev/null
@@ -1,1276 +0,0 @@
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
deleted file mode 100644
index 7505906..0000000
--- a/libraries/eina/src/lib/eina_unicode.c
+++ /dev/null
@@ -1,450 +0,0 @@
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#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#include "eina_config.h"
25#include "eina_private.h"
26#include <string.h>
27
28/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
29#include "eina_safety_checks.h"
30#include "eina_unicode.h"
31
32/* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so,
33 * probably better to use the standard functions */
34
35/* Maybe I'm too tired, but this is the only thing that actually worked. */
36const Eina_Unicode _EINA_UNICODE_EMPTY_STRING[1] = {0};
37EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING;
38EAPI int
39eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b)
40{
41 EINA_SAFETY_ON_NULL_RETURN_VAL(a, -1);
42 EINA_SAFETY_ON_NULL_RETURN_VAL(b, -1);
43
44 for (; *a && *a == *b; a++, b++)
45 ;
46 if (*a == *b)
47 return 0;
48 else if (*a < *b)
49 return -1;
50 else
51 return 1;
52}
53
54EAPI Eina_Unicode *
55eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source)
56{
57 Eina_Unicode *ret = dest;
58
59 EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL);
60 EINA_SAFETY_ON_NULL_RETURN_VAL(source, NULL);
61
62 while (*source)
63 *dest++ = *source++;
64 *dest = 0;
65 return ret;
66}
67
68EAPI Eina_Unicode *
69eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n)
70{
71 Eina_Unicode *ret = dest;
72
73 EINA_SAFETY_ON_NULL_RETURN_VAL(dest, NULL);
74 EINA_SAFETY_ON_NULL_RETURN_VAL(source, NULL);
75
76 for ( ; n && *source ; n--)
77 *dest++ = *source++;
78 for (; n; n--)
79 *dest++ = 0;
80 return ret;
81}
82
83EAPI size_t
84eina_unicode_strlen(const Eina_Unicode *ustr)
85{
86 const Eina_Unicode *end;
87
88 EINA_SAFETY_ON_NULL_RETURN_VAL(ustr, 0);
89
90 for (end = ustr; *end; end++)
91 ;
92 return end - ustr;
93}
94
95EAPI size_t
96eina_unicode_strnlen(const Eina_Unicode *ustr, int n)
97{
98 const Eina_Unicode *end;
99 const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */
100
101 EINA_SAFETY_ON_NULL_RETURN_VAL(ustr, 0);
102
103 for (end = ustr; end < last && *end; end++)
104 ;
105 return end - ustr;
106}
107
108
109
110
111EAPI Eina_Unicode *
112eina_unicode_strndup(const Eina_Unicode *text, size_t n)
113{
114 Eina_Unicode *ustr;
115
116 EINA_SAFETY_ON_NULL_RETURN_VAL(text, NULL);
117
118 ustr = malloc((n + 1) * sizeof(Eina_Unicode));
119 memcpy(ustr, text, n * sizeof(Eina_Unicode));
120 ustr[n] = 0;
121 return ustr;
122}
123
124EAPI Eina_Unicode *
125eina_unicode_strdup(const Eina_Unicode *text)
126{
127 size_t len;
128
129 EINA_SAFETY_ON_NULL_RETURN_VAL(text, NULL);
130
131 len = eina_unicode_strlen(text);
132 return eina_unicode_strndup(text, len);
133}
134
135EAPI Eina_Unicode *
136eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle)
137{
138 const Eina_Unicode *i, *j;
139
140 EINA_SAFETY_ON_NULL_RETURN_VAL(haystack, NULL);
141 EINA_SAFETY_ON_NULL_RETURN_VAL(needle, NULL);
142
143 for (i = haystack; *i; i++)
144 {
145 haystack = i; /* set this location as the base position */
146 for (j = needle; *j && *i && *j == *i; j++, i++)
147 ;
148
149 if (!*j) /*if we got to the end of j this means we got a full match */
150 {
151 return (Eina_Unicode *)haystack; /* return the new base position */
152 }
153 }
154
155 return NULL;
156}
157
158EAPI Eina_Unicode *
159eina_unicode_escape(const Eina_Unicode *str)
160{
161 Eina_Unicode *s2, *d;
162 const Eina_Unicode *s;
163
164 EINA_SAFETY_ON_NULL_RETURN_VAL(str, NULL);
165
166 s2 = malloc((eina_unicode_strlen(str) * 2) + 1);
167 if (!s2)
168 return NULL;
169
170 for (s = str, d = s2; *s != 0; s++, d++)
171 {
172 if ((*s == ' ') || (*s == '\\') || (*s == '\''))
173 {
174 *d = '\\';
175 d++;
176 }
177
178 *d = *s;
179 }
180 *d = 0;
181 return s2;
182}
183
184/* UTF-8 Handling */
185
186#define EINA_UNICODE_UTF8_BYTES_PER_CHAR 6
187/* The replacement range that will be used for bad utf8 chars. */
188#define ERROR_REPLACEMENT_BASE 0xDC80
189#define ERROR_REPLACEMENT_END 0xDCFF
190#define IS_INVALID_BYTE(x) ((x == 192) || (x == 193) || (x >= 245))
191#define IS_CONTINUATION_BYTE(x) ((x & 0xC0) == 0x80)
192
193EAPI Eina_Unicode
194eina_unicode_utf8_get_next(const char *buf, int *iindex)
195{
196 int ind = *iindex;
197 Eina_Unicode r;
198 unsigned char d;
199
200 EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0);
201 EINA_SAFETY_ON_NULL_RETURN_VAL(iindex, 0);
202
203 /* if this char is the null terminator, exit */
204 if ((d = buf[ind++]) == 0) return 0;
205
206 if ((d & 0x80) == 0)
207 { // 1 byte (7bit) - 0xxxxxxx
208 *iindex = ind;
209 return d;
210 }
211 if ((d & 0xe0) == 0xc0)
212 { // 2 byte (11bit) - 110xxxxx 10xxxxxx
213 r = (d & 0x1f) << 6;
214 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
215 !IS_CONTINUATION_BYTE(d)) goto error;
216 r |= (d & 0x3f);
217 if (r <= 0x7F) goto error;
218 *iindex = ind;
219 return r;
220 }
221 if ((d & 0xf0) == 0xe0)
222 { // 3 byte (16bit) - 1110xxxx 10xxxxxx 10xxxxxx
223 r = (d & 0x0f) << 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 <= 0x7FF) goto error;
231 *iindex = ind;
232 return r;
233 }
234 if ((d & 0xf8) == 0xf0)
235 { // 4 byte (21bit) - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
236 r = (d & 0x07) << 18;
237 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
238 !IS_CONTINUATION_BYTE(d)) goto error;
239 r |= (d & 0x3f) << 12;
240 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
241 !IS_CONTINUATION_BYTE(d)) goto error;
242 r |= (d & 0x3f) << 6;
243 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
244 !IS_CONTINUATION_BYTE(d)) goto error;
245 r |= (d & 0x3f);
246 if (r <= 0xFFFF) goto error;
247 *iindex = ind;
248 return r;
249 }
250 if ((d & 0xfc) == 0xf8)
251 { // 5 byte (26bit) - 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
252 r = (d & 0x03) << 24;
253 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
254 !IS_CONTINUATION_BYTE(d)) goto error;
255 r |= (d & 0x3f) << 18;
256 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
257 !IS_CONTINUATION_BYTE(d)) goto error;
258 r |= (d & 0x3f) << 12;
259 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
260 !IS_CONTINUATION_BYTE(d)) goto error;
261 r |= (d & 0x3f) << 6;
262 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
263 !IS_CONTINUATION_BYTE(d)) goto error;
264 r |= (d & 0x3f);
265 if (r <= 0x1FFFFF) goto error;
266 *iindex = ind;
267 return r;
268 }
269 if ((d & 0xfe) == 0xfc)
270 { // 6 byte (31bit) - 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
271 r = (d & 0x01) << 30;
272 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
273 !IS_CONTINUATION_BYTE(d)) goto error;
274 r |= (d & 0x3f) << 24;
275 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
276 !IS_CONTINUATION_BYTE(d)) goto error;
277 r |= (d & 0x3f) << 18;
278 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
279 !IS_CONTINUATION_BYTE(d)) goto error;
280 r |= (d & 0x3f) << 12;
281 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
282 !IS_CONTINUATION_BYTE(d)) goto error;
283 r |= (d & 0x3f) << 6;
284 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
285 !IS_CONTINUATION_BYTE(d)) goto error;
286 r |= (d & 0x3f);
287 if (r <= 0x3FFFFFF) goto error;
288 *iindex = ind;
289 return r;
290 }
291
292/* Gets here where there was an error and we want to replace the char
293 * we just use the invalid unicode codepoints 8 lower bits represent
294 * the original char */
295error:
296 d = buf[*iindex];
297 (*iindex)++;
298 return ERROR_REPLACEMENT_BASE | d;
299}
300
301EAPI Eina_Unicode
302eina_unicode_utf8_get_prev(const char *buf, int *iindex)
303{
304 int r, ind;
305
306 EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0);
307 EINA_SAFETY_ON_NULL_RETURN_VAL(iindex, 0);
308
309 ind = *iindex;
310 /* First obtain the codepoint at iindex */
311 r = eina_unicode_utf8_get_next(buf, &ind);
312
313 /* although when ind == 0 there's no previous char, we still want to get
314 * the current char */
315 if (*iindex <= 0)
316 return r;
317
318 /* Next advance iindex to previous codepoint */
319 ind = *iindex;
320 ind--;
321 while ((ind > 0) && ((buf[ind] & 0xc0) == 0x80))
322 ind--;
323
324 *iindex = ind;
325 return r;
326}
327
328EAPI int
329eina_unicode_utf8_get_len(const char *buf)
330{
331 /* returns the number of utf8 characters (not bytes) in the string */
332 int i = 0, len = 0;
333
334 EINA_SAFETY_ON_NULL_RETURN_VAL(buf, 0);
335
336 while (eina_unicode_utf8_get_next(buf, &i))
337 len++;
338
339 return len;
340}
341
342EAPI Eina_Unicode *
343eina_unicode_utf8_to_unicode(const char *utf, int *_len)
344{
345 /* FIXME: Should optimize! */
346 int len, i;
347 int ind;
348 Eina_Unicode *buf, *uind;
349
350 EINA_SAFETY_ON_NULL_RETURN_VAL(utf, NULL);
351
352 len = eina_unicode_utf8_get_len(utf);
353 if (_len)
354 *_len = len;
355 buf = (Eina_Unicode *) calloc(sizeof(Eina_Unicode), (len + 1));
356 if (!buf) return buf;
357
358 for (i = 0, ind = 0, uind = buf ; i < len ; i++, uind++)
359 {
360 *uind = eina_unicode_utf8_get_next(utf, &ind);
361 }
362
363 return buf;
364}
365
366EAPI char *
367eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len)
368{
369 char *buf;
370 const Eina_Unicode *uind;
371 char *ind;
372 int ulen, len;
373
374 EINA_SAFETY_ON_NULL_RETURN_VAL(uni, NULL);
375
376 ulen = eina_unicode_strlen(uni);
377 buf = (char *) calloc(ulen + 1, EINA_UNICODE_UTF8_BYTES_PER_CHAR);
378
379 len = 0;
380 for (uind = uni, ind = buf ; *uind ; uind++)
381 {
382 if (*uind <= 0x7F) /* 1 byte char */
383 {
384 *ind++ = *uind;
385 len += 1;
386 }
387 else if (*uind <= 0x7FF) /* 2 byte char */
388 {
389 *ind++ = 0xC0 | (unsigned char) (*uind >> 6);
390 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
391 len += 2;
392 }
393 else if (*uind <= 0xFFFF) /* 3 byte char */
394 {
395 /* If it's a special replacement codepoint */
396 if (*uind >= ERROR_REPLACEMENT_BASE &&
397 *uind <= ERROR_REPLACEMENT_END)
398 {
399 *ind++ = *uind & 0xFF;
400 len += 1;
401 }
402 else
403 {
404 *ind++ = 0xE0 | (unsigned char) (*uind >> 12);
405 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
406 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
407 len += 3;
408 }
409 }
410 else if (*uind <= 0x1FFFFF) /* 4 byte char */
411 {
412 *ind++ = 0xF0 | (unsigned char) ((*uind >> 18) & 0x07);
413 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
414 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
415 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
416 len += 4;
417 }
418 else if (*uind <= 0x3FFFFFF) /* 5 byte char */
419 {
420 *ind++ = 0xF8 | (unsigned char) ((*uind >> 24) & 0x03);
421 *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F);
422 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
423 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
424 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
425 len += 5;
426 }
427 else if (*uind <= 0x7FFFFFFF) /* 6 byte char */
428 {
429 *ind++ = 0xFC | (unsigned char) ((*uind >> 30) & 0x01);
430 *ind++ = 0x80 | (unsigned char) ((*uind >> 24) & 0x3F);
431 *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F);
432 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
433 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
434 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
435 len += 6;
436 }
437 else /* error */
438 {
439 /* Do something */
440 }
441 }
442 buf = realloc(buf, len + 1);
443 buf[len] = '\0';
444 if (_len)
445 *_len = len;
446 return buf;
447}
448
449
450
diff --git a/libraries/eina/src/lib/eina_ustrbuf.c b/libraries/eina/src/lib/eina_ustrbuf.c
deleted file mode 100644
index 7c1c2db..0000000
--- a/libraries/eina/src/lib/eina_ustrbuf.c
+++ /dev/null
@@ -1,74 +0,0 @@
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
deleted file mode 100644
index 33be242..0000000
--- a/libraries/eina/src/lib/eina_ustringshare.c
+++ /dev/null
@@ -1,189 +0,0 @@
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#ifdef HAVE_CONFIG_H
31# include "config.h"
32#endif
33
34#include "eina_config.h"
35#include "eina_private.h"
36#include "eina_unicode.h"
37#include "eina_log.h"
38#include "eina_share_common.h"
39
40/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
41#include "eina_safety_checks.h"
42#include "eina_ustringshare.h"
43
44
45#ifdef CRITICAL
46#undef CRITICAL
47#endif
48#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_ustringshare_log_dom, __VA_ARGS__)
49
50#ifdef ERR
51#undef ERR
52#endif
53#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_ustringshare_log_dom, __VA_ARGS__)
54
55#ifdef DBG
56#undef DBG
57#endif
58#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_ustringshare_log_dom, __VA_ARGS__)
59
60static int _eina_share_ustringshare_log_dom = -1;
61
62/* The actual share */
63static Eina_Share *ustringshare_share;
64static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node";
65
66/*============================================================================*
67* Global *
68*============================================================================*/
69
70/**
71 * @internal
72 * @brief Initialize the share_common module.
73 *
74 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
75 *
76 * This function sets up the share_common module of Eina. It is called by
77 * eina_init().
78 *
79 * @see eina_init()
80 */
81Eina_Bool
82eina_ustringshare_init(void)
83{
84 Eina_Bool ret;
85
86 if (_eina_share_ustringshare_log_dom < 0)
87 {
88 _eina_share_ustringshare_log_dom = eina_log_domain_register
89 ("eina_ustringshare", EINA_LOG_COLOR_DEFAULT);
90
91 if (_eina_share_ustringshare_log_dom < 0)
92 {
93 EINA_LOG_ERR("Could not register log domain: eina_ustringshare");
94 return EINA_FALSE;
95 }
96 }
97
98 ret = eina_share_common_init(&ustringshare_share,
99 EINA_MAGIC_USTRINGSHARE_NODE,
100 EINA_MAGIC_USTRINGSHARE_NODE_STR);
101
102 if (!ret)
103 {
104 eina_log_domain_unregister(_eina_share_ustringshare_log_dom);
105 _eina_share_ustringshare_log_dom = -1;
106 }
107
108 return ret;
109}
110
111/**
112 * @internal
113 * @brief Shut down the share_common module.
114 *
115 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
116 *
117 * This function shuts down the share_common module set up by
118 * eina_share_common_init(). It is called by eina_shutdown().
119 *
120 * @see eina_shutdown()
121 */
122Eina_Bool
123eina_ustringshare_shutdown(void)
124{
125 Eina_Bool ret;
126 ret = eina_share_common_shutdown(&ustringshare_share);
127
128 if (_eina_share_ustringshare_log_dom >= 0)
129 {
130 eina_log_domain_unregister(_eina_share_ustringshare_log_dom);
131 _eina_share_ustringshare_log_dom = -1;
132 }
133
134 return ret;
135}
136
137/*============================================================================*
138* API *
139*============================================================================*/
140
141EAPI void
142eina_ustringshare_del(const Eina_Unicode *str)
143{
144 if (!str)
145 return;
146
147 if (!eina_share_common_del(ustringshare_share, (const char *)str))
148 CRITICAL("EEEK trying to del non-shared ustringshare \"%s\"", (const char *)str);
149}
150
151EAPI const Eina_Unicode *
152eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen)
153{
154 return (const Eina_Unicode *)eina_share_common_add_length(ustringshare_share,
155 (const char *)str,
156 slen *
157 sizeof(
158 Eina_Unicode),
159 sizeof(
160 Eina_Unicode));
161}
162
163EAPI const Eina_Unicode *
164eina_ustringshare_add(const Eina_Unicode *str)
165{
166 int slen = (str) ? (int)eina_unicode_strlen(str) : -1;
167 return eina_ustringshare_add_length(str, slen);
168}
169
170EAPI const Eina_Unicode *
171eina_ustringshare_ref(const Eina_Unicode *str)
172{
173 return (const Eina_Unicode *)eina_share_common_ref(ustringshare_share,
174 (const char *)str);
175}
176
177EAPI int
178eina_ustringshare_strlen(const Eina_Unicode *str)
179{
180 int len = eina_share_common_length(ustringshare_share, (const char *)str);
181 len = (len > 0) ? len / (int)sizeof(Eina_Unicode) : -1;
182 return len;
183}
184
185EAPI void
186eina_ustringshare_dump(void)
187{
188 eina_share_common_dump(ustringshare_share, NULL, 0);
189}
diff --git a/libraries/eina/src/lib/eina_value.c b/libraries/eina/src/lib/eina_value.c
deleted file mode 100644
index b8df693..0000000
--- a/libraries/eina/src/lib/eina_value.c
+++ /dev/null
@@ -1,5309 +0,0 @@
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#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# include <stddef.h>
42# ifdef __cplusplus
43extern "C"
44# endif
45void *alloca (size_t);
46#endif
47
48#include <stdio.h> /* asprintf() */
49#include <inttypes.h> /* PRId64 and PRIu64 */
50#include <sys/time.h> /* struct timeval */
51
52#ifdef HAVE_EVIL
53# include <Evil.h>
54#endif
55
56#include "eina_config.h"
57#include "eina_private.h"
58#include "eina_error.h"
59#include "eina_log.h"
60#include "eina_strbuf.h"
61#include "eina_mempool.h"
62#include "eina_lock.h"
63
64/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
65#include "eina_safety_checks.h"
66#include "eina_value.h"
67#include "eina_model.h" /* uses eina_value.h */
68
69/*============================================================================*
70* Local *
71*============================================================================*/
72
73/**
74 * @cond LOCAL
75 */
76
77static Eina_Mempool *_eina_value_mp = NULL;
78static Eina_Hash *_eina_value_inner_mps = NULL;
79static Eina_Lock _eina_value_inner_mps_lock;
80static char *_eina_value_mp_choice = NULL;
81static int _eina_value_log_dom = -1;
82
83#ifdef ERR
84#undef ERR
85#endif
86#define ERR(...) EINA_LOG_DOM_ERR(_eina_value_log_dom, __VA_ARGS__)
87
88#ifdef DBG
89#undef DBG
90#endif
91#define DBG(...) EINA_LOG_DOM_DBG(_eina_value_log_dom, __VA_ARGS__)
92
93static const unsigned char eina_value_uchar_max = 255U;
94static const char eina_value_char_max = 127;
95static const char eina_value_char_min = -127 - 1;
96
97static const unsigned short eina_value_ushort_max = 65535U;
98static const short eina_value_short_max = 32767;
99static const short eina_value_short_min = -32767 - 1;
100
101static const unsigned int eina_value_uint_max = 4294967295U;
102static const int eina_value_int_max = 2147483647;
103static const int eina_value_int_min = -2147483647 - 1;
104
105static const uint64_t eina_value_uint64_max = 18446744073709551615ULL;
106static const int64_t eina_value_int64_max = 9223372036854775807LL;
107static const int64_t eina_value_int64_min = -9223372036854775807LL - 1LL;
108
109#if __WORDSIZE == 64
110static const unsigned long eina_value_ulong_max = 18446744073709551615ULL;
111static const long eina_value_long_max = 9223372036854775807LL;
112static const long eina_value_long_min = -9223372036854775807LL - 1LL;
113#else
114static const unsigned long eina_value_ulong_max = 4294967295U;
115static const long eina_value_long_max = 2147483647;
116static const long eina_value_long_min = -2147483647 - 1;
117#endif
118
119
120static Eina_Bool
121_eina_value_type_uchar_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
122{
123 unsigned char *tmem = mem;
124 *tmem = 0;
125 return EINA_TRUE;
126}
127
128static Eina_Bool
129_eina_value_type_uchar_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
130{
131 return EINA_TRUE;
132}
133
134static Eina_Bool
135_eina_value_type_uchar_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
136{
137 const unsigned char *s = src;
138 unsigned char *d = dst;
139 *d = *s;
140 return EINA_TRUE;
141}
142
143static int
144_eina_value_type_uchar_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
145{
146 const unsigned char *ta = a, *tb = b;
147 if (*ta < *tb)
148 return -1;
149 else if (*ta > *tb)
150 return 1;
151 return 0;
152}
153
154static Eina_Bool
155_eina_value_type_uchar_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
156{
157 const unsigned char v = *(const unsigned char *)type_mem;
158
159 eina_error_set(0);
160
161 if (convert == EINA_VALUE_TYPE_UCHAR)
162 {
163 unsigned char other_mem = v;
164 return eina_value_type_pset(convert, convert_mem, &other_mem);
165 }
166 else if (convert == EINA_VALUE_TYPE_USHORT)
167 {
168 unsigned short other_mem = v;
169 return eina_value_type_pset(convert, convert_mem, &other_mem);
170 }
171 else if (convert == EINA_VALUE_TYPE_UINT)
172 {
173 unsigned int other_mem = v;
174 return eina_value_type_pset(convert, convert_mem, &other_mem);
175 }
176 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
177 {
178 unsigned long other_mem = v;
179 return eina_value_type_pset(convert, convert_mem, &other_mem);
180 }
181 else if (convert == EINA_VALUE_TYPE_UINT64)
182 {
183 uint64_t other_mem = v;
184 return eina_value_type_pset(convert, convert_mem, &other_mem);
185 }
186 else if (convert == EINA_VALUE_TYPE_CHAR)
187 {
188 char other_mem = v;
189 if (EINA_UNLIKELY(v > (unsigned char)eina_value_char_max))
190 return EINA_FALSE;
191 return eina_value_type_pset(convert, convert_mem, &other_mem);
192 }
193 else if (convert == EINA_VALUE_TYPE_SHORT)
194 {
195 short other_mem = v;
196 return eina_value_type_pset(convert, convert_mem, &other_mem);
197 }
198 else if (convert == EINA_VALUE_TYPE_INT)
199 {
200 int other_mem = v;
201 return eina_value_type_pset(convert, convert_mem, &other_mem);
202 }
203 else if (convert == EINA_VALUE_TYPE_LONG)
204 {
205 long other_mem = v;
206 return eina_value_type_pset(convert, convert_mem, &other_mem);
207 }
208 else if (convert == EINA_VALUE_TYPE_INT64)
209 {
210 int64_t other_mem = v;
211 return eina_value_type_pset(convert, convert_mem, &other_mem);
212 }
213 else if (convert == EINA_VALUE_TYPE_FLOAT)
214 {
215 float other_mem = v;
216 return eina_value_type_pset(convert, convert_mem, &other_mem);
217 }
218 else if (convert == EINA_VALUE_TYPE_DOUBLE)
219 {
220 double other_mem = v;
221 return eina_value_type_pset(convert, convert_mem, &other_mem);
222 }
223 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
224 convert == EINA_VALUE_TYPE_STRING)
225 {
226 const char *other_mem;
227 char buf[64];
228 snprintf(buf, sizeof(buf), "%hhu", v);
229 other_mem = buf; /* required due &buf == buf */
230 return eina_value_type_pset(convert, convert_mem, &other_mem);
231 }
232 else
233 {
234 eina_error_set(EINA_ERROR_VALUE_FAILED);
235 return EINA_FALSE;
236 }
237
238 return EINA_TRUE;
239}
240
241static Eina_Bool
242_eina_value_type_uchar_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
243{
244 unsigned char *tmem = mem;
245 *tmem = va_arg(args, unsigned int); /* char is promoted to int for va_arg */
246 return EINA_TRUE;
247}
248
249static Eina_Bool
250_eina_value_type_uchar_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
251{
252 unsigned char *tmem = mem;
253 const unsigned char *p = ptr;
254 *tmem = *p;
255 return EINA_TRUE;
256}
257
258static Eina_Bool
259_eina_value_type_uchar_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
260{
261 const unsigned char *tmem = mem;
262 unsigned char *p = ptr;
263 *p = *tmem;
264 return EINA_TRUE;
265}
266
267static Eina_Bool
268_eina_value_type_ushort_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
269{
270 unsigned short *tmem = mem;
271 *tmem = 0;
272 return EINA_TRUE;
273}
274
275static Eina_Bool
276_eina_value_type_ushort_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
277{
278 return EINA_TRUE;
279}
280
281static Eina_Bool
282_eina_value_type_ushort_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
283{
284 const unsigned short *s = src;
285 unsigned short *d = dst;
286 *d = *s;
287 return EINA_TRUE;
288}
289
290static int
291_eina_value_type_ushort_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
292{
293 const unsigned short *ta = a, *tb = b;
294 if (*ta < *tb)
295 return -1;
296 else if (*ta > *tb)
297 return 1;
298 return 0;
299}
300
301static Eina_Bool
302_eina_value_type_ushort_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
303{
304 const unsigned short v = *(const unsigned short *)type_mem;
305
306 eina_error_set(0);
307
308 if (convert == EINA_VALUE_TYPE_UCHAR)
309 {
310 unsigned char other_mem = v;
311 if (EINA_UNLIKELY(v > eina_value_uchar_max))
312 return EINA_FALSE;
313 return eina_value_type_pset(convert, convert_mem, &other_mem);
314 }
315 else if (convert == EINA_VALUE_TYPE_USHORT)
316 {
317 unsigned short other_mem = v;
318 return eina_value_type_pset(convert, convert_mem, &other_mem);
319 }
320 else if (convert == EINA_VALUE_TYPE_UINT)
321 {
322 unsigned int other_mem = v;
323 return eina_value_type_pset(convert, convert_mem, &other_mem);
324 }
325 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
326 {
327 unsigned long other_mem = v;
328 return eina_value_type_pset(convert, convert_mem, &other_mem);
329 }
330 else if (convert == EINA_VALUE_TYPE_UINT64)
331 {
332 uint64_t other_mem = v;
333 return eina_value_type_pset(convert, convert_mem, &other_mem);
334 }
335 else if (convert == EINA_VALUE_TYPE_CHAR)
336 {
337 char other_mem = v;
338 if (EINA_UNLIKELY(v > (unsigned char)eina_value_char_max))
339 return EINA_FALSE;
340 return eina_value_type_pset(convert, convert_mem, &other_mem);
341 }
342 else if (convert == EINA_VALUE_TYPE_SHORT)
343 {
344 short other_mem = v;
345 if (EINA_UNLIKELY(v > (unsigned short)eina_value_short_max))
346 return EINA_FALSE;
347 return eina_value_type_pset(convert, convert_mem, &other_mem);
348 }
349 else if (convert == EINA_VALUE_TYPE_INT)
350 {
351 int other_mem = v;
352 return eina_value_type_pset(convert, convert_mem, &other_mem);
353 }
354 else if (convert == EINA_VALUE_TYPE_LONG)
355 {
356 long other_mem = v;
357 return eina_value_type_pset(convert, convert_mem, &other_mem);
358 }
359 else if (convert == EINA_VALUE_TYPE_INT64)
360 {
361 int64_t other_mem = v;
362 return eina_value_type_pset(convert, convert_mem, &other_mem);
363 }
364 else if (convert == EINA_VALUE_TYPE_FLOAT)
365 {
366 float other_mem = v;
367 return eina_value_type_pset(convert, convert_mem, &other_mem);
368 }
369 else if (convert == EINA_VALUE_TYPE_DOUBLE)
370 {
371 double other_mem = v;
372 return eina_value_type_pset(convert, convert_mem, &other_mem);
373 }
374 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
375 convert == EINA_VALUE_TYPE_STRING)
376 {
377 const char *other_mem;
378 char buf[64];
379 snprintf(buf, sizeof(buf), "%hu", v);
380 other_mem = buf; /* required due &buf == buf */
381 return eina_value_type_pset(convert, convert_mem, &other_mem);
382 }
383 else
384 {
385 eina_error_set(EINA_ERROR_VALUE_FAILED);
386 return EINA_FALSE;
387 }
388
389 return EINA_TRUE;
390}
391
392static Eina_Bool
393_eina_value_type_ushort_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
394{
395 unsigned short *tmem = mem;
396 *tmem = va_arg(args, unsigned int); /* short is promoted to int for va_arg */
397 return EINA_TRUE;
398}
399
400static Eina_Bool
401_eina_value_type_ushort_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
402{
403 unsigned short *tmem = mem;
404 const unsigned short *p = ptr;
405 *tmem = *p;
406 return EINA_TRUE;
407}
408
409static Eina_Bool
410_eina_value_type_ushort_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
411{
412 const unsigned short *tmem = mem;
413 unsigned short *p = ptr;
414 *p = *tmem;
415 return EINA_TRUE;
416}
417
418static Eina_Bool
419_eina_value_type_uint_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
420{
421 unsigned int *tmem = mem;
422 *tmem = 0;
423 return EINA_TRUE;
424}
425
426static Eina_Bool
427_eina_value_type_uint_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
428{
429 return EINA_TRUE;
430}
431
432static Eina_Bool
433_eina_value_type_uint_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
434{
435 const unsigned int *s = src;
436 unsigned int *d = dst;
437 *d = *s;
438 return EINA_TRUE;
439}
440
441static int
442_eina_value_type_uint_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
443{
444 const unsigned int *ta = a, *tb = b;
445 if (*ta < *tb)
446 return -1;
447 else if (*ta > *tb)
448 return 1;
449 return 0;
450}
451
452static Eina_Bool
453_eina_value_type_uint_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
454{
455 const unsigned int v = *(const unsigned int *)type_mem;
456
457 eina_error_set(0);
458
459 if (convert == EINA_VALUE_TYPE_UCHAR)
460 {
461 unsigned char other_mem = v;
462 if (EINA_UNLIKELY(v > eina_value_uchar_max))
463 return EINA_FALSE;
464 return eina_value_type_pset(convert, convert_mem, &other_mem);
465 }
466 else if (convert == EINA_VALUE_TYPE_USHORT)
467 {
468 unsigned short other_mem = v;
469 if (EINA_UNLIKELY(v > eina_value_ushort_max))
470 return EINA_FALSE;
471 return eina_value_type_pset(convert, convert_mem, &other_mem);
472 }
473 else if (convert == EINA_VALUE_TYPE_UINT)
474 {
475 unsigned int other_mem = v;
476 return eina_value_type_pset(convert, convert_mem, &other_mem);
477 }
478 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
479 {
480 unsigned long other_mem = v;
481 return eina_value_type_pset(convert, convert_mem, &other_mem);
482 }
483 else if (convert == EINA_VALUE_TYPE_UINT64)
484 {
485 uint64_t other_mem = v;
486 return eina_value_type_pset(convert, convert_mem, &other_mem);
487 }
488 else if (convert == EINA_VALUE_TYPE_CHAR)
489 {
490 char other_mem = v;
491 if (EINA_UNLIKELY(v > (unsigned char)eina_value_char_max))
492 return EINA_FALSE;
493 return eina_value_type_pset(convert, convert_mem, &other_mem);
494 }
495 else if (convert == EINA_VALUE_TYPE_SHORT)
496 {
497 short other_mem = v;
498 if (EINA_UNLIKELY(v > (unsigned short)eina_value_short_max))
499 return EINA_FALSE;
500 return eina_value_type_pset(convert, convert_mem, &other_mem);
501 }
502 else if (convert == EINA_VALUE_TYPE_INT)
503 {
504 int other_mem = v;
505 if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
506 return EINA_FALSE;
507 return eina_value_type_pset(convert, convert_mem, &other_mem);
508 }
509 else if (convert == EINA_VALUE_TYPE_LONG)
510 {
511 long other_mem = v;
512 return eina_value_type_pset(convert, convert_mem, &other_mem);
513 }
514 else if (convert == EINA_VALUE_TYPE_INT64)
515 {
516 int64_t other_mem = v;
517 return eina_value_type_pset(convert, convert_mem, &other_mem);
518 }
519 else if (convert == EINA_VALUE_TYPE_FLOAT)
520 {
521 float other_mem = v;
522 return eina_value_type_pset(convert, convert_mem, &other_mem);
523 }
524 else if (convert == EINA_VALUE_TYPE_DOUBLE)
525 {
526 double other_mem = v;
527 return eina_value_type_pset(convert, convert_mem, &other_mem);
528 }
529 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
530 convert == EINA_VALUE_TYPE_STRING)
531 {
532 const char *other_mem;
533 char buf[64];
534 snprintf(buf, sizeof(buf), "%u", v);
535 other_mem = buf; /* required due &buf == buf */
536 return eina_value_type_pset(convert, convert_mem, &other_mem);
537 }
538 else
539 {
540 eina_error_set(EINA_ERROR_VALUE_FAILED);
541 return EINA_FALSE;
542 }
543
544 return EINA_TRUE;
545}
546
547static Eina_Bool
548_eina_value_type_uint_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
549{
550 unsigned int *tmem = mem;
551 *tmem = va_arg(args, unsigned int);
552 return EINA_TRUE;
553}
554
555static Eina_Bool
556_eina_value_type_uint_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
557{
558 unsigned int *tmem = mem;
559 const unsigned int *p = ptr;
560 *tmem = *p;
561 return EINA_TRUE;
562}
563
564static Eina_Bool
565_eina_value_type_uint_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
566{
567 const unsigned int *tmem = mem;
568 unsigned int *p = ptr;
569 *p = *tmem;
570 return EINA_TRUE;
571}
572
573static Eina_Bool
574_eina_value_type_ulong_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
575{
576 unsigned long *tmem = mem;
577 *tmem = 0;
578 return EINA_TRUE;
579}
580
581static Eina_Bool
582_eina_value_type_ulong_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
583{
584 return EINA_TRUE;
585}
586
587static Eina_Bool
588_eina_value_type_ulong_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
589{
590 const unsigned long *s = src;
591 unsigned long *d = dst;
592 *d = *s;
593 return EINA_TRUE;
594}
595
596static int
597_eina_value_type_ulong_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
598{
599 const unsigned long *ta = a, *tb = b;
600 if (*ta < *tb)
601 return -1;
602 else if (*ta > *tb)
603 return 1;
604 return 0;
605}
606
607static Eina_Bool
608_eina_value_type_ulong_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
609{
610 const unsigned long v = *(const unsigned long *)type_mem;
611
612 eina_error_set(0);
613
614 if (convert == EINA_VALUE_TYPE_UCHAR)
615 {
616 unsigned char other_mem = v;
617 if (EINA_UNLIKELY(v > eina_value_uchar_max))
618 return EINA_FALSE;
619 return eina_value_type_pset(convert, convert_mem, &other_mem);
620 }
621 else if (convert == EINA_VALUE_TYPE_USHORT)
622 {
623 unsigned short other_mem = v;
624 if (EINA_UNLIKELY(v > eina_value_ushort_max))
625 return EINA_FALSE;
626 return eina_value_type_pset(convert, convert_mem, &other_mem);
627 }
628 else if (convert == EINA_VALUE_TYPE_UINT)
629 {
630 unsigned int other_mem = v;
631 if (EINA_UNLIKELY(v > eina_value_uint_max))
632 return EINA_FALSE;
633 return eina_value_type_pset(convert, convert_mem, &other_mem);
634 }
635 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
636 {
637 unsigned long other_mem = v;
638 return eina_value_type_pset(convert, convert_mem, &other_mem);
639 }
640 else if (convert == EINA_VALUE_TYPE_UINT64)
641 {
642 uint64_t other_mem = v;
643 return eina_value_type_pset(convert, convert_mem, &other_mem);
644 }
645 else if (convert == EINA_VALUE_TYPE_CHAR)
646 {
647 char other_mem = v;
648 if (EINA_UNLIKELY(v > (unsigned char)eina_value_char_max))
649 return EINA_FALSE;
650 return eina_value_type_pset(convert, convert_mem, &other_mem);
651 }
652 else if (convert == EINA_VALUE_TYPE_SHORT)
653 {
654 short other_mem = v;
655 if (EINA_UNLIKELY(v > (unsigned short)eina_value_short_max))
656 return EINA_FALSE;
657 return eina_value_type_pset(convert, convert_mem, &other_mem);
658 }
659 else if (convert == EINA_VALUE_TYPE_INT)
660 {
661 int other_mem = v;
662 if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
663 return EINA_FALSE;
664 return eina_value_type_pset(convert, convert_mem, &other_mem);
665 }
666 else if (convert == EINA_VALUE_TYPE_LONG)
667 {
668 long other_mem = v;
669 if (EINA_UNLIKELY(v > (unsigned long)eina_value_long_max))
670 return EINA_FALSE;
671 return eina_value_type_pset(convert, convert_mem, &other_mem);
672 }
673 else if (convert == EINA_VALUE_TYPE_INT64)
674 {
675 int64_t other_mem = v;
676 return eina_value_type_pset(convert, convert_mem, &other_mem);
677 }
678 else if (convert == EINA_VALUE_TYPE_FLOAT)
679 {
680 float other_mem = v;
681 return eina_value_type_pset(convert, convert_mem, &other_mem);
682 }
683 else if (convert == EINA_VALUE_TYPE_DOUBLE)
684 {
685 double other_mem = v;
686 return eina_value_type_pset(convert, convert_mem, &other_mem);
687 }
688 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
689 convert == EINA_VALUE_TYPE_STRING)
690 {
691 const char *other_mem;
692 char buf[64];
693 snprintf(buf, sizeof(buf), "%lu", v);
694 other_mem = buf; /* required due &buf == buf */
695 return eina_value_type_pset(convert, convert_mem, &other_mem);
696 }
697 else
698 {
699 eina_error_set(EINA_ERROR_VALUE_FAILED);
700 return EINA_FALSE;
701 }
702
703 return EINA_TRUE;
704}
705
706static Eina_Bool
707_eina_value_type_ulong_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
708{
709 unsigned long *tmem = mem;
710 *tmem = va_arg(args, unsigned long);
711 return EINA_TRUE;
712}
713
714static Eina_Bool
715_eina_value_type_ulong_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
716{
717 unsigned long *tmem = mem;
718 const unsigned long *p = ptr;
719 *tmem = *p;
720 return EINA_TRUE;
721}
722
723static Eina_Bool
724_eina_value_type_ulong_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
725{
726 const unsigned long *tmem = mem;
727 unsigned long *p = ptr;
728 *p = *tmem;
729 return EINA_TRUE;
730}
731
732static Eina_Bool
733_eina_value_type_uint64_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
734{
735 uint64_t *tmem = mem;
736 *tmem = 0;
737 return EINA_TRUE;
738}
739
740static Eina_Bool
741_eina_value_type_uint64_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
742{
743 return EINA_TRUE;
744}
745
746static Eina_Bool
747_eina_value_type_uint64_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
748{
749 const uint64_t *s = src;
750 uint64_t *d = dst;
751 *d = *s;
752 return EINA_TRUE;
753}
754
755static int
756_eina_value_type_uint64_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
757{
758 const uint64_t *ta = a, *tb = b;
759 if (*ta < *tb)
760 return -1;
761 else if (*ta > *tb)
762 return 1;
763 return 0;
764}
765
766static Eina_Bool
767_eina_value_type_uint64_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
768{
769 const uint64_t v = *(const uint64_t *)type_mem;
770
771 eina_error_set(0);
772
773 if (convert == EINA_VALUE_TYPE_UCHAR)
774 {
775 unsigned char other_mem = v;
776 if (EINA_UNLIKELY(v > eina_value_uchar_max))
777 return EINA_FALSE;
778 return eina_value_type_pset(convert, convert_mem, &other_mem);
779 }
780 else if (convert == EINA_VALUE_TYPE_USHORT)
781 {
782 unsigned short other_mem = v;
783 if (EINA_UNLIKELY(v > eina_value_ushort_max))
784 return EINA_FALSE;
785 return eina_value_type_pset(convert, convert_mem, &other_mem);
786 }
787 else if (convert == EINA_VALUE_TYPE_UINT)
788 {
789 unsigned int other_mem = v;
790 if (EINA_UNLIKELY(v > eina_value_uint_max))
791 return EINA_FALSE;
792 return eina_value_type_pset(convert, convert_mem, &other_mem);
793 }
794 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
795 {
796 unsigned long other_mem = v;
797 if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) &&
798 (v > eina_value_ulong_max)))
799 return EINA_FALSE;
800 return eina_value_type_pset(convert, convert_mem, &other_mem);
801 }
802 else if (convert == EINA_VALUE_TYPE_UINT64)
803 {
804 uint64_t other_mem = v;
805 return eina_value_type_pset(convert, convert_mem, &other_mem);
806 }
807 else if (convert == EINA_VALUE_TYPE_CHAR)
808 {
809 char other_mem = v;
810 if (EINA_UNLIKELY(v > (unsigned char)eina_value_char_max))
811 return EINA_FALSE;
812 return eina_value_type_pset(convert, convert_mem, &other_mem);
813 }
814 else if (convert == EINA_VALUE_TYPE_SHORT)
815 {
816 short other_mem = v;
817 if (EINA_UNLIKELY(v > (unsigned short)eina_value_short_max))
818 return EINA_FALSE;
819 return eina_value_type_pset(convert, convert_mem, &other_mem);
820 }
821 else if (convert == EINA_VALUE_TYPE_INT)
822 {
823 int other_mem = v;
824 if (EINA_UNLIKELY(v > (unsigned int)eina_value_int_max))
825 return EINA_FALSE;
826 return eina_value_type_pset(convert, convert_mem, &other_mem);
827 }
828 else if (convert == EINA_VALUE_TYPE_LONG)
829 {
830 long other_mem = v;
831 if (EINA_UNLIKELY(v > (unsigned long)eina_value_long_max))
832 return EINA_FALSE;
833 return eina_value_type_pset(convert, convert_mem, &other_mem);
834 }
835 else if (convert == EINA_VALUE_TYPE_INT64)
836 {
837 int64_t other_mem = v;
838 if (EINA_UNLIKELY(v > (uint64_t)eina_value_int64_max))
839 return EINA_FALSE;
840 return eina_value_type_pset(convert, convert_mem, &other_mem);
841 }
842 else if (convert == EINA_VALUE_TYPE_FLOAT)
843 {
844 float other_mem = v;
845 return eina_value_type_pset(convert, convert_mem, &other_mem);
846 }
847 else if (convert == EINA_VALUE_TYPE_DOUBLE)
848 {
849 double other_mem = v;
850 return eina_value_type_pset(convert, convert_mem, &other_mem);
851 }
852 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
853 convert == EINA_VALUE_TYPE_STRING)
854 {
855 const char *other_mem;
856 char buf[64];
857 snprintf(buf, sizeof(buf), "%"PRIu64, v);
858 other_mem = buf; /* required due &buf == buf */
859 return eina_value_type_pset(convert, convert_mem, &other_mem);
860 }
861 else
862 {
863 eina_error_set(EINA_ERROR_VALUE_FAILED);
864 return EINA_FALSE;
865 }
866
867 return EINA_TRUE;
868}
869
870static Eina_Bool
871_eina_value_type_uint64_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
872{
873 uint64_t *tmem = mem;
874 *tmem = va_arg(args, uint64_t);
875 return EINA_TRUE;
876}
877
878static Eina_Bool
879_eina_value_type_uint64_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
880{
881 uint64_t *tmem = mem;
882 const uint64_t *p = ptr;
883 *tmem = *p;
884 return EINA_TRUE;
885}
886
887static Eina_Bool
888_eina_value_type_uint64_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
889{
890 const uint64_t *tmem = mem;
891 uint64_t *p = ptr;
892 *p = *tmem;
893 return EINA_TRUE;
894}
895
896static Eina_Bool
897_eina_value_type_char_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
898{
899 char *tmem = mem;
900 *tmem = 0;
901 return EINA_TRUE;
902}
903
904static Eina_Bool
905_eina_value_type_char_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
906{
907 return EINA_TRUE;
908}
909
910static Eina_Bool
911_eina_value_type_char_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
912{
913 const char *s = src;
914 char *d = dst;
915 *d = *s;
916 return EINA_TRUE;
917}
918
919static int
920_eina_value_type_char_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
921{
922 const char *ta = a, *tb = b;
923 if (*ta < *tb)
924 return -1;
925 else if (*ta > *tb)
926 return 1;
927 return 0;
928}
929
930static Eina_Bool
931_eina_value_type_char_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
932{
933 const signed char v = *(const signed char *)type_mem;
934
935 eina_error_set(0);
936
937 if (convert == EINA_VALUE_TYPE_UCHAR)
938 {
939 unsigned char other_mem = v;
940 if (EINA_UNLIKELY(v < 0))
941 return EINA_FALSE;
942 return eina_value_type_pset(convert, convert_mem, &other_mem);
943 }
944 else if (convert == EINA_VALUE_TYPE_USHORT)
945 {
946 unsigned short other_mem = v;
947 if (EINA_UNLIKELY(v < 0))
948 return EINA_FALSE;
949 return eina_value_type_pset(convert, convert_mem, &other_mem);
950 }
951 else if (convert == EINA_VALUE_TYPE_UINT)
952 {
953 unsigned int other_mem = v;
954 if (EINA_UNLIKELY(v < 0))
955 return EINA_FALSE;
956 return eina_value_type_pset(convert, convert_mem, &other_mem);
957 }
958 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
959 {
960 unsigned long other_mem = v;
961 if (EINA_UNLIKELY(v < 0))
962 return EINA_FALSE;
963 return eina_value_type_pset(convert, convert_mem, &other_mem);
964 }
965 else if (convert == EINA_VALUE_TYPE_UINT64)
966 {
967 uint64_t other_mem = v;
968 if (EINA_UNLIKELY(v < 0))
969 return EINA_FALSE;
970 return eina_value_type_pset(convert, convert_mem, &other_mem);
971 }
972 else if (convert == EINA_VALUE_TYPE_CHAR)
973 {
974 char other_mem = v;
975 return eina_value_type_pset(convert, convert_mem, &other_mem);
976 }
977 else if (convert == EINA_VALUE_TYPE_SHORT)
978 {
979 short other_mem = v;
980 return eina_value_type_pset(convert, convert_mem, &other_mem);
981 }
982 else if (convert == EINA_VALUE_TYPE_INT)
983 {
984 int other_mem = v;
985 return eina_value_type_pset(convert, convert_mem, &other_mem);
986 }
987 else if (convert == EINA_VALUE_TYPE_LONG)
988 {
989 long other_mem = v;
990 return eina_value_type_pset(convert, convert_mem, &other_mem);
991 }
992 else if (convert == EINA_VALUE_TYPE_INT64)
993 {
994 int64_t other_mem = v;
995 return eina_value_type_pset(convert, convert_mem, &other_mem);
996 }
997 else if (convert == EINA_VALUE_TYPE_FLOAT)
998 {
999 float other_mem = v;
1000 return eina_value_type_pset(convert, convert_mem, &other_mem);
1001 }
1002 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1003 {
1004 double other_mem = v;
1005 return eina_value_type_pset(convert, convert_mem, &other_mem);
1006 }
1007 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1008 convert == EINA_VALUE_TYPE_STRING)
1009 {
1010 const char *other_mem;
1011 char buf[64];
1012 snprintf(buf, sizeof(buf), "%hhd", v);
1013 other_mem = buf; /* required due &buf == buf */
1014 return eina_value_type_pset(convert, convert_mem, &other_mem);
1015 }
1016 else
1017 {
1018 eina_error_set(EINA_ERROR_VALUE_FAILED);
1019 return EINA_FALSE;
1020 }
1021
1022 return EINA_TRUE;
1023}
1024
1025static Eina_Bool
1026_eina_value_type_char_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1027{
1028 char *tmem = mem;
1029 *tmem = va_arg(args, int); /* char is promoted to int for va_arg */
1030 return EINA_TRUE;
1031}
1032
1033static Eina_Bool
1034_eina_value_type_char_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1035{
1036 char *tmem = mem;
1037 const char *p = ptr;
1038 *tmem = *p;
1039 return EINA_TRUE;
1040}
1041
1042static Eina_Bool
1043_eina_value_type_char_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1044{
1045 const char *tmem = mem;
1046 char *p = ptr;
1047 *p = *tmem;
1048 return EINA_TRUE;
1049}
1050
1051static Eina_Bool
1052_eina_value_type_short_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1053{
1054 short *tmem = mem;
1055 *tmem = 0;
1056 return EINA_TRUE;
1057}
1058
1059static Eina_Bool
1060_eina_value_type_short_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1061{
1062 return EINA_TRUE;
1063}
1064
1065static Eina_Bool
1066_eina_value_type_short_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1067{
1068 const short *s = src;
1069 short *d = dst;
1070 *d = *s;
1071 return EINA_TRUE;
1072}
1073
1074static int
1075_eina_value_type_short_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1076{
1077 const short *ta = a, *tb = b;
1078 if (*ta < *tb)
1079 return -1;
1080 else if (*ta > *tb)
1081 return 1;
1082 return 0;
1083}
1084
1085static Eina_Bool
1086_eina_value_type_short_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1087{
1088 const short v = *(const short *)type_mem;
1089
1090 eina_error_set(0);
1091
1092 if (convert == EINA_VALUE_TYPE_UCHAR)
1093 {
1094 unsigned char other_mem = v;
1095 if (EINA_UNLIKELY(v < 0))
1096 return EINA_FALSE;
1097 if (EINA_UNLIKELY(v > eina_value_uchar_max))
1098 return EINA_FALSE;
1099 return eina_value_type_pset(convert, convert_mem, &other_mem);
1100 }
1101 else if (convert == EINA_VALUE_TYPE_USHORT)
1102 {
1103 unsigned short other_mem = v;
1104 if (EINA_UNLIKELY(v < 0))
1105 return EINA_FALSE;
1106 return eina_value_type_pset(convert, convert_mem, &other_mem);
1107 }
1108 else if (convert == EINA_VALUE_TYPE_UINT)
1109 {
1110 unsigned int other_mem = v;
1111 if (EINA_UNLIKELY(v < 0))
1112 return EINA_FALSE;
1113 return eina_value_type_pset(convert, convert_mem, &other_mem);
1114 }
1115 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1116 {
1117 unsigned long other_mem = v;
1118 if (EINA_UNLIKELY(v < 0))
1119 return EINA_FALSE;
1120 return eina_value_type_pset(convert, convert_mem, &other_mem);
1121 }
1122 else if (convert == EINA_VALUE_TYPE_UINT64)
1123 {
1124 uint64_t other_mem = v;
1125 if (EINA_UNLIKELY(v < 0))
1126 return EINA_FALSE;
1127 return eina_value_type_pset(convert, convert_mem, &other_mem);
1128 }
1129 else if (convert == EINA_VALUE_TYPE_CHAR)
1130 {
1131 char other_mem = v;
1132 if (EINA_UNLIKELY(v < eina_value_char_min))
1133 return EINA_FALSE;
1134 if (EINA_UNLIKELY(v > eina_value_char_max))
1135 return EINA_FALSE;
1136 return eina_value_type_pset(convert, convert_mem, &other_mem);
1137 }
1138 else if (convert == EINA_VALUE_TYPE_SHORT)
1139 {
1140 short other_mem = v;
1141 return eina_value_type_pset(convert, convert_mem, &other_mem);
1142 }
1143 else if (convert == EINA_VALUE_TYPE_INT)
1144 {
1145 int other_mem = v;
1146 return eina_value_type_pset(convert, convert_mem, &other_mem);
1147 }
1148 else if (convert == EINA_VALUE_TYPE_LONG)
1149 {
1150 long other_mem = v;
1151 return eina_value_type_pset(convert, convert_mem, &other_mem);
1152 }
1153 else if (convert == EINA_VALUE_TYPE_INT64)
1154 {
1155 int64_t other_mem = v;
1156 return eina_value_type_pset(convert, convert_mem, &other_mem);
1157 }
1158 else if (convert == EINA_VALUE_TYPE_FLOAT)
1159 {
1160 float other_mem = v;
1161 return eina_value_type_pset(convert, convert_mem, &other_mem);
1162 }
1163 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1164 {
1165 double other_mem = v;
1166 return eina_value_type_pset(convert, convert_mem, &other_mem);
1167 }
1168 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1169 convert == EINA_VALUE_TYPE_STRING)
1170 {
1171 const char *other_mem;
1172 char buf[64];
1173 snprintf(buf, sizeof(buf), "%hd", v);
1174 other_mem = buf; /* required due &buf == buf */
1175 return eina_value_type_pset(convert, convert_mem, &other_mem);
1176 }
1177 else
1178 {
1179 eina_error_set(EINA_ERROR_VALUE_FAILED);
1180 return EINA_FALSE;
1181 }
1182
1183 return EINA_TRUE;
1184}
1185
1186static Eina_Bool
1187_eina_value_type_short_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1188{
1189 short *tmem = mem;
1190 *tmem = va_arg(args, int); /* short int is promoted to int for va_arg */
1191 return EINA_TRUE;
1192}
1193
1194static Eina_Bool
1195_eina_value_type_short_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1196{
1197 short *tmem = mem;
1198 const short *p = ptr;
1199 *tmem = *p;
1200 return EINA_TRUE;
1201}
1202
1203static Eina_Bool
1204_eina_value_type_short_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1205{
1206 const short *tmem = mem;
1207 short *p = ptr;
1208 *p = *tmem;
1209 return EINA_TRUE;
1210}
1211
1212static Eina_Bool
1213_eina_value_type_int_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1214{
1215 int *tmem = mem;
1216 *tmem = 0;
1217 return EINA_TRUE;
1218}
1219
1220static Eina_Bool
1221_eina_value_type_int_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1222{
1223 return EINA_TRUE;
1224}
1225
1226static Eina_Bool
1227_eina_value_type_int_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1228{
1229 const int *s = src;
1230 int *d = dst;
1231 *d = *s;
1232 return EINA_TRUE;
1233}
1234
1235static int
1236_eina_value_type_int_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1237{
1238 const int *ta = a, *tb = b;
1239 if (*ta < *tb)
1240 return -1;
1241 else if (*ta > *tb)
1242 return 1;
1243 return 0;
1244}
1245
1246static Eina_Bool
1247_eina_value_type_int_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1248{
1249 const int v = *(const int *)type_mem;
1250
1251 eina_error_set(0);
1252
1253 if (convert == EINA_VALUE_TYPE_UCHAR)
1254 {
1255 unsigned char other_mem = v;
1256 if (EINA_UNLIKELY(v < 0))
1257 return EINA_FALSE;
1258 if (EINA_UNLIKELY(v > eina_value_uchar_max))
1259 return EINA_FALSE;
1260 return eina_value_type_pset(convert, convert_mem, &other_mem);
1261 }
1262 else if (convert == EINA_VALUE_TYPE_USHORT)
1263 {
1264 unsigned short other_mem = v;
1265 if (EINA_UNLIKELY(v < 0))
1266 return EINA_FALSE;
1267 if (EINA_UNLIKELY(v > eina_value_ushort_max))
1268 return EINA_FALSE;
1269 return eina_value_type_pset(convert, convert_mem, &other_mem);
1270 }
1271 else if (convert == EINA_VALUE_TYPE_UINT)
1272 {
1273 unsigned int other_mem = v;
1274 if (EINA_UNLIKELY(v < 0))
1275 return EINA_FALSE;
1276 return eina_value_type_pset(convert, convert_mem, &other_mem);
1277 }
1278 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1279 {
1280 unsigned long other_mem = v;
1281 if (EINA_UNLIKELY(v < 0))
1282 return EINA_FALSE;
1283 return eina_value_type_pset(convert, convert_mem, &other_mem);
1284 }
1285 else if (convert == EINA_VALUE_TYPE_UINT64)
1286 {
1287 uint64_t other_mem = v;
1288 if (EINA_UNLIKELY(v < 0))
1289 return EINA_FALSE;
1290 return eina_value_type_pset(convert, convert_mem, &other_mem);
1291 }
1292 else if (convert == EINA_VALUE_TYPE_CHAR)
1293 {
1294 char other_mem = v;
1295 if (EINA_UNLIKELY(v < eina_value_char_min))
1296 return EINA_FALSE;
1297 if (EINA_UNLIKELY(v > eina_value_char_max))
1298 return EINA_FALSE;
1299 return eina_value_type_pset(convert, convert_mem, &other_mem);
1300 }
1301 else if (convert == EINA_VALUE_TYPE_SHORT)
1302 {
1303 short other_mem = v;
1304 if (EINA_UNLIKELY(v < eina_value_short_min))
1305 return EINA_FALSE;
1306 if (EINA_UNLIKELY(v > eina_value_short_max))
1307 return EINA_FALSE;
1308 return eina_value_type_pset(convert, convert_mem, &other_mem);
1309 }
1310 else if (convert == EINA_VALUE_TYPE_INT)
1311 {
1312 int other_mem = v;
1313 return eina_value_type_pset(convert, convert_mem, &other_mem);
1314 }
1315 else if (convert == EINA_VALUE_TYPE_LONG)
1316 {
1317 long other_mem = v;
1318 return eina_value_type_pset(convert, convert_mem, &other_mem);
1319 }
1320 else if (convert == EINA_VALUE_TYPE_INT64)
1321 {
1322 int64_t other_mem = v;
1323 return eina_value_type_pset(convert, convert_mem, &other_mem);
1324 }
1325 else if (convert == EINA_VALUE_TYPE_FLOAT)
1326 {
1327 float other_mem = v;
1328 return eina_value_type_pset(convert, convert_mem, &other_mem);
1329 }
1330 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1331 {
1332 double other_mem = v;
1333 return eina_value_type_pset(convert, convert_mem, &other_mem);
1334 }
1335 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1336 convert == EINA_VALUE_TYPE_STRING)
1337 {
1338 const char *other_mem;
1339 char buf[64];
1340 snprintf(buf, sizeof(buf), "%d", v);
1341 other_mem = buf; /* required due &buf == buf */
1342 return eina_value_type_pset(convert, convert_mem, &other_mem);
1343 }
1344 else
1345 {
1346 eina_error_set(EINA_ERROR_VALUE_FAILED);
1347 return EINA_FALSE;
1348 }
1349
1350 return EINA_TRUE;
1351}
1352
1353static Eina_Bool
1354_eina_value_type_int_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1355{
1356 int *tmem = mem;
1357 *tmem = va_arg(args, int);
1358 return EINA_TRUE;
1359}
1360
1361static Eina_Bool
1362_eina_value_type_int_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1363{
1364 int *tmem = mem;
1365 const int *p = ptr;
1366 *tmem = *p;
1367 return EINA_TRUE;
1368}
1369
1370static Eina_Bool
1371_eina_value_type_int_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1372{
1373 const int *tmem = mem;
1374 int *p = ptr;
1375 *p = *tmem;
1376 return EINA_TRUE;
1377}
1378
1379static Eina_Bool
1380_eina_value_type_long_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1381{
1382 long *tmem = mem;
1383 *tmem = 0;
1384 return EINA_TRUE;
1385}
1386
1387static Eina_Bool
1388_eina_value_type_long_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1389{
1390 return EINA_TRUE;
1391}
1392
1393static Eina_Bool
1394_eina_value_type_long_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1395{
1396 const long *s = src;
1397 long *d = dst;
1398 *d = *s;
1399 return EINA_TRUE;
1400}
1401
1402static int
1403_eina_value_type_long_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1404{
1405 const long *ta = a, *tb = b;
1406 if (*ta < *tb)
1407 return -1;
1408 else if (*ta > *tb)
1409 return 1;
1410 return 0;
1411}
1412
1413static Eina_Bool
1414_eina_value_type_long_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1415{
1416 const long v = *(const long *)type_mem;
1417
1418 eina_error_set(0);
1419
1420 if (convert == EINA_VALUE_TYPE_UCHAR)
1421 {
1422 unsigned char other_mem = v;
1423 if (EINA_UNLIKELY(v < 0))
1424 return EINA_FALSE;
1425 if (EINA_UNLIKELY((unsigned long) v > eina_value_uchar_max))
1426 return EINA_FALSE;
1427 return eina_value_type_pset(convert, convert_mem, &other_mem);
1428 }
1429 else if (convert == EINA_VALUE_TYPE_USHORT)
1430 {
1431 unsigned short other_mem = v;
1432 if (EINA_UNLIKELY(v < 0))
1433 return EINA_FALSE;
1434 if (EINA_UNLIKELY((unsigned long) v > eina_value_ushort_max))
1435 return EINA_FALSE;
1436 return eina_value_type_pset(convert, convert_mem, &other_mem);
1437 }
1438 else if (convert == EINA_VALUE_TYPE_UINT)
1439 {
1440 unsigned int other_mem = v;
1441 if (EINA_UNLIKELY(v < 0))
1442 return EINA_FALSE;
1443 if (EINA_UNLIKELY((unsigned long) v > eina_value_uint_max))
1444 return EINA_FALSE;
1445 return eina_value_type_pset(convert, convert_mem, &other_mem);
1446 }
1447 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1448 {
1449 unsigned long other_mem = v;
1450 if (EINA_UNLIKELY(v < 0))
1451 return EINA_FALSE;
1452 return eina_value_type_pset(convert, convert_mem, &other_mem);
1453 }
1454 else if (convert == EINA_VALUE_TYPE_UINT64)
1455 {
1456 uint64_t other_mem = v;
1457 if (EINA_UNLIKELY(v < 0))
1458 return EINA_FALSE;
1459 return eina_value_type_pset(convert, convert_mem, &other_mem);
1460 }
1461 else if (convert == EINA_VALUE_TYPE_CHAR)
1462 {
1463 char other_mem = v;
1464 if (EINA_UNLIKELY(v < eina_value_char_min))
1465 return EINA_FALSE;
1466 if (EINA_UNLIKELY(v > eina_value_char_max))
1467 return EINA_FALSE;
1468 return eina_value_type_pset(convert, convert_mem, &other_mem);
1469 }
1470 else if (convert == EINA_VALUE_TYPE_SHORT)
1471 {
1472 short other_mem = v;
1473 if (EINA_UNLIKELY(v < eina_value_short_min))
1474 return EINA_FALSE;
1475 if (EINA_UNLIKELY(v > eina_value_short_max))
1476 return EINA_FALSE;
1477 return eina_value_type_pset(convert, convert_mem, &other_mem);
1478 }
1479 else if (convert == EINA_VALUE_TYPE_INT)
1480 {
1481 int other_mem = v;
1482 if (EINA_UNLIKELY(v < eina_value_int_min))
1483 return EINA_FALSE;
1484 if (EINA_UNLIKELY(v > eina_value_int_max))
1485 return EINA_FALSE;
1486 return eina_value_type_pset(convert, convert_mem, &other_mem);
1487 }
1488 else if (convert == EINA_VALUE_TYPE_LONG)
1489 {
1490 long other_mem = v;
1491 return eina_value_type_pset(convert, convert_mem, &other_mem);
1492 }
1493 else if (convert == EINA_VALUE_TYPE_INT64)
1494 {
1495 int64_t other_mem = v;
1496 return eina_value_type_pset(convert, convert_mem, &other_mem);
1497 }
1498 else if (convert == EINA_VALUE_TYPE_FLOAT)
1499 {
1500 float other_mem = v;
1501 return eina_value_type_pset(convert, convert_mem, &other_mem);
1502 }
1503 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1504 {
1505 double other_mem = v;
1506 return eina_value_type_pset(convert, convert_mem, &other_mem);
1507 }
1508 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1509 convert == EINA_VALUE_TYPE_STRING)
1510 {
1511 const char *other_mem;
1512 char buf[64];
1513 snprintf(buf, sizeof(buf), "%ld", v);
1514 other_mem = buf; /* required due &buf == buf */
1515 return eina_value_type_pset(convert, convert_mem, &other_mem);
1516 }
1517 else
1518 {
1519 eina_error_set(EINA_ERROR_VALUE_FAILED);
1520 return EINA_FALSE;
1521 }
1522
1523 return EINA_TRUE;
1524}
1525
1526static Eina_Bool
1527_eina_value_type_long_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1528{
1529 long *tmem = mem;
1530 *tmem = va_arg(args, long);
1531 return EINA_TRUE;
1532}
1533
1534static Eina_Bool
1535_eina_value_type_long_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1536{
1537 long *tmem = mem;
1538 const long *p = ptr;
1539 *tmem = *p;
1540 return EINA_TRUE;
1541}
1542
1543static Eina_Bool
1544_eina_value_type_long_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1545{
1546 const long *tmem = mem;
1547 long *p = ptr;
1548 *p = *tmem;
1549 return EINA_TRUE;
1550}
1551
1552static Eina_Bool
1553_eina_value_type_int64_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1554{
1555 int64_t *tmem = mem;
1556 *tmem = 0;
1557 return EINA_TRUE;
1558}
1559
1560static Eina_Bool
1561_eina_value_type_int64_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1562{
1563 return EINA_TRUE;
1564}
1565
1566static Eina_Bool
1567_eina_value_type_int64_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1568{
1569 const int64_t *s = src;
1570 int64_t *d = dst;
1571 *d = *s;
1572 return EINA_TRUE;
1573}
1574
1575static int
1576_eina_value_type_int64_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1577{
1578 const int64_t *ta = a, *tb = b;
1579 if (*ta < *tb)
1580 return -1;
1581 else if (*ta > *tb)
1582 return 1;
1583 return 0;
1584}
1585
1586static Eina_Bool
1587_eina_value_type_int64_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1588{
1589 const int64_t v = *(const int64_t *)type_mem;
1590
1591 eina_error_set(0);
1592
1593 if (convert == EINA_VALUE_TYPE_UCHAR)
1594 {
1595 unsigned char other_mem = v;
1596 if (EINA_UNLIKELY(v < 0))
1597 return EINA_FALSE;
1598 if (EINA_UNLIKELY(v > eina_value_uchar_max))
1599 return EINA_FALSE;
1600 return eina_value_type_pset(convert, convert_mem, &other_mem);
1601 }
1602 else if (convert == EINA_VALUE_TYPE_USHORT)
1603 {
1604 unsigned short other_mem = v;
1605 if (EINA_UNLIKELY(v < 0))
1606 return EINA_FALSE;
1607 if (EINA_UNLIKELY(v > eina_value_ushort_max))
1608 return EINA_FALSE;
1609 return eina_value_type_pset(convert, convert_mem, &other_mem);
1610 }
1611 else if (convert == EINA_VALUE_TYPE_UINT)
1612 {
1613 unsigned int other_mem = v;
1614 if (EINA_UNLIKELY(v < 0))
1615 return EINA_FALSE;
1616 if (EINA_UNLIKELY(v > eina_value_uint_max))
1617 return EINA_FALSE;
1618 return eina_value_type_pset(convert, convert_mem, &other_mem);
1619 }
1620 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1621 {
1622 unsigned long other_mem = v;
1623 if (EINA_UNLIKELY(v < 0))
1624 return EINA_FALSE;
1625 if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) &&
1626 (v > eina_value_ulong_max)))
1627 return EINA_FALSE;
1628 return eina_value_type_pset(convert, convert_mem, &other_mem);
1629 }
1630 else if (convert == EINA_VALUE_TYPE_UINT64)
1631 {
1632 uint64_t other_mem = v;
1633 if (EINA_UNLIKELY(v < 0))
1634 return EINA_FALSE;
1635 return eina_value_type_pset(convert, convert_mem, &other_mem);
1636 }
1637 else if (convert == EINA_VALUE_TYPE_CHAR)
1638 {
1639 char other_mem = v;
1640 if (EINA_UNLIKELY(v < eina_value_char_min))
1641 return EINA_FALSE;
1642 if (EINA_UNLIKELY(v > eina_value_char_max))
1643 return EINA_FALSE;
1644 return eina_value_type_pset(convert, convert_mem, &other_mem);
1645 }
1646 else if (convert == EINA_VALUE_TYPE_SHORT)
1647 {
1648 short other_mem = v;
1649 if (EINA_UNLIKELY(v < eina_value_short_min))
1650 return EINA_FALSE;
1651 if (EINA_UNLIKELY(v > eina_value_short_max))
1652 return EINA_FALSE;
1653 return eina_value_type_pset(convert, convert_mem, &other_mem);
1654 }
1655 else if (convert == EINA_VALUE_TYPE_INT)
1656 {
1657 int other_mem = v;
1658 if (EINA_UNLIKELY(v < eina_value_int_min))
1659 return EINA_FALSE;
1660 if (EINA_UNLIKELY(v > eina_value_int_max))
1661 return EINA_FALSE;
1662 return eina_value_type_pset(convert, convert_mem, &other_mem);
1663 }
1664 else if (convert == EINA_VALUE_TYPE_LONG)
1665 {
1666 long other_mem = v;
1667 if (EINA_UNLIKELY(v < eina_value_long_min))
1668 return EINA_FALSE;
1669 if (EINA_UNLIKELY(v > eina_value_long_max))
1670 return EINA_FALSE;
1671 return eina_value_type_pset(convert, convert_mem, &other_mem);
1672 }
1673 else if (convert == EINA_VALUE_TYPE_INT64)
1674 {
1675 int64_t other_mem = v;
1676 return eina_value_type_pset(convert, convert_mem, &other_mem);
1677 }
1678 else if (convert == EINA_VALUE_TYPE_FLOAT)
1679 {
1680 float other_mem = v;
1681 return eina_value_type_pset(convert, convert_mem, &other_mem);
1682 }
1683 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1684 {
1685 double other_mem = v;
1686 return eina_value_type_pset(convert, convert_mem, &other_mem);
1687 }
1688 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1689 convert == EINA_VALUE_TYPE_STRING)
1690 {
1691 const char *other_mem;
1692 char buf[64];
1693 snprintf(buf, sizeof(buf), "%"PRId64, v);
1694 other_mem = buf; /* required due &buf == buf */
1695 return eina_value_type_pset(convert, convert_mem, &other_mem);
1696 }
1697 else
1698 {
1699 eina_error_set(EINA_ERROR_VALUE_FAILED);
1700 return EINA_FALSE;
1701 }
1702
1703 return EINA_TRUE;
1704}
1705
1706static Eina_Bool
1707_eina_value_type_int64_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1708{
1709 int64_t *tmem = mem;
1710 *tmem = va_arg(args, int64_t);
1711 return EINA_TRUE;
1712}
1713
1714static Eina_Bool
1715_eina_value_type_int64_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1716{
1717 int64_t *tmem = mem;
1718 const int64_t *p = ptr;
1719 *tmem = *p;
1720 return EINA_TRUE;
1721}
1722
1723static Eina_Bool
1724_eina_value_type_int64_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1725{
1726 const int64_t *tmem = mem;
1727 int64_t *p = ptr;
1728 *p = *tmem;
1729 return EINA_TRUE;
1730}
1731
1732static Eina_Bool
1733_eina_value_type_float_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1734{
1735 float *tmem = mem;
1736 *tmem = 0;
1737 return EINA_TRUE;
1738}
1739
1740static Eina_Bool
1741_eina_value_type_float_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1742{
1743 return EINA_TRUE;
1744}
1745
1746static Eina_Bool
1747_eina_value_type_float_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1748{
1749 const float *s = src;
1750 float *d = dst;
1751 *d = *s;
1752 return EINA_TRUE;
1753}
1754
1755static int
1756_eina_value_type_float_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1757{
1758 const float *ta = a, *tb = b;
1759 if (*ta < *tb)
1760 return -1;
1761 else if (*ta > *tb)
1762 return 1;
1763 return 0;
1764}
1765
1766static Eina_Bool
1767_eina_value_type_float_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1768{
1769 const float v = *(const float *)type_mem;
1770
1771 eina_error_set(0);
1772
1773 if (convert == EINA_VALUE_TYPE_UCHAR)
1774 {
1775 unsigned char other_mem = v;
1776 if (EINA_UNLIKELY(v < 0))
1777 return EINA_FALSE;
1778 if (EINA_UNLIKELY(v > eina_value_uchar_max))
1779 return EINA_FALSE;
1780 return eina_value_type_pset(convert, convert_mem, &other_mem);
1781 }
1782 else if (convert == EINA_VALUE_TYPE_USHORT)
1783 {
1784 unsigned short other_mem = v;
1785 if (EINA_UNLIKELY(v < 0))
1786 return EINA_FALSE;
1787 if (EINA_UNLIKELY(v > eina_value_ushort_max))
1788 return EINA_FALSE;
1789 return eina_value_type_pset(convert, convert_mem, &other_mem);
1790 }
1791 else if (convert == EINA_VALUE_TYPE_UINT)
1792 {
1793 unsigned int other_mem = v;
1794 if (EINA_UNLIKELY(v < 0))
1795 return EINA_FALSE;
1796 if (EINA_UNLIKELY(v > eina_value_uint_max))
1797 return EINA_FALSE;
1798 return eina_value_type_pset(convert, convert_mem, &other_mem);
1799 }
1800 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1801 {
1802 unsigned long other_mem = v;
1803 if (EINA_UNLIKELY(v < 0))
1804 return EINA_FALSE;
1805 if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) &&
1806 (v > eina_value_ulong_max)))
1807 return EINA_FALSE;
1808 return eina_value_type_pset(convert, convert_mem, &other_mem);
1809 }
1810 else if (convert == EINA_VALUE_TYPE_UINT64)
1811 {
1812 uint64_t other_mem = v;
1813 if (EINA_UNLIKELY(v < 0))
1814 return EINA_FALSE;
1815 if (EINA_UNLIKELY(v > eina_value_uint64_max))
1816 return EINA_FALSE;
1817 return eina_value_type_pset(convert, convert_mem, &other_mem);
1818 }
1819 else if (convert == EINA_VALUE_TYPE_CHAR)
1820 {
1821 char other_mem = v;
1822 if (EINA_UNLIKELY(v < eina_value_char_min))
1823 return EINA_FALSE;
1824 if (EINA_UNLIKELY(v > eina_value_char_max))
1825 return EINA_FALSE;
1826 return eina_value_type_pset(convert, convert_mem, &other_mem);
1827 }
1828 else if (convert == EINA_VALUE_TYPE_SHORT)
1829 {
1830 short other_mem = v;
1831 if (EINA_UNLIKELY(v < eina_value_short_min))
1832 return EINA_FALSE;
1833 if (EINA_UNLIKELY(v > eina_value_short_max))
1834 return EINA_FALSE;
1835 return eina_value_type_pset(convert, convert_mem, &other_mem);
1836 }
1837 else if (convert == EINA_VALUE_TYPE_INT)
1838 {
1839 int other_mem = v;
1840 if (EINA_UNLIKELY(v < eina_value_int_min))
1841 return EINA_FALSE;
1842 if (EINA_UNLIKELY(v > eina_value_int_max))
1843 return EINA_FALSE;
1844 return eina_value_type_pset(convert, convert_mem, &other_mem);
1845 }
1846 else if (convert == EINA_VALUE_TYPE_LONG)
1847 {
1848 long other_mem = v;
1849 if (EINA_UNLIKELY(v < eina_value_long_min))
1850 return EINA_FALSE;
1851 if (EINA_UNLIKELY(v > eina_value_long_max))
1852 return EINA_FALSE;
1853 return eina_value_type_pset(convert, convert_mem, &other_mem);
1854 }
1855 else if (convert == EINA_VALUE_TYPE_INT64)
1856 {
1857 int64_t other_mem = v;
1858 if (EINA_UNLIKELY(v < eina_value_int64_min))
1859 return EINA_FALSE;
1860 if (EINA_UNLIKELY(v > eina_value_int64_max))
1861 return EINA_FALSE;
1862 return eina_value_type_pset(convert, convert_mem, &other_mem);
1863 }
1864 else if (convert == EINA_VALUE_TYPE_FLOAT)
1865 {
1866 float other_mem = v;
1867 return eina_value_type_pset(convert, convert_mem, &other_mem);
1868 }
1869 else if (convert == EINA_VALUE_TYPE_DOUBLE)
1870 {
1871 double other_mem = v;
1872 return eina_value_type_pset(convert, convert_mem, &other_mem);
1873 }
1874 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
1875 convert == EINA_VALUE_TYPE_STRING)
1876 {
1877 const char *other_mem;
1878 char buf[64];
1879 snprintf(buf, sizeof(buf), "%f", v);
1880 other_mem = buf; /* required due &buf == buf */
1881 return eina_value_type_pset(convert, convert_mem, &other_mem);
1882 }
1883 else
1884 {
1885 eina_error_set(EINA_ERROR_VALUE_FAILED);
1886 return EINA_FALSE;
1887 }
1888
1889 return EINA_TRUE;
1890}
1891
1892static Eina_Bool
1893_eina_value_type_float_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
1894{
1895 float *tmem = mem;
1896 *tmem = va_arg(args, double); /* float is promoted to double for va_args */
1897 return EINA_TRUE;
1898}
1899
1900static Eina_Bool
1901_eina_value_type_float_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
1902{
1903 float *tmem = mem;
1904 const float *p = ptr;
1905 *tmem = *p;
1906 return EINA_TRUE;
1907}
1908
1909static Eina_Bool
1910_eina_value_type_float_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
1911{
1912 const float *tmem = mem;
1913 float *p = ptr;
1914 *p = *tmem;
1915 return EINA_TRUE;
1916}
1917
1918static Eina_Bool
1919_eina_value_type_double_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
1920{
1921 double *tmem = mem;
1922 *tmem = 0;
1923 return EINA_TRUE;
1924}
1925
1926static Eina_Bool
1927_eina_value_type_double_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
1928{
1929 return EINA_TRUE;
1930}
1931
1932static Eina_Bool
1933_eina_value_type_double_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
1934{
1935 const double *s = src;
1936 double *d = dst;
1937 *d = *s;
1938 return EINA_TRUE;
1939}
1940
1941static int
1942_eina_value_type_double_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
1943{
1944 const double *ta = a, *tb = b;
1945 if (*ta < *tb)
1946 return -1;
1947 else if (*ta > *tb)
1948 return 1;
1949 return 0;
1950}
1951
1952static Eina_Bool
1953_eina_value_type_double_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
1954{
1955 const double v = *(const double *)type_mem;
1956
1957 eina_error_set(0);
1958
1959 if (convert == EINA_VALUE_TYPE_UCHAR)
1960 {
1961 unsigned char other_mem = v;
1962 if (EINA_UNLIKELY(v < 0))
1963 return EINA_FALSE;
1964 if (EINA_UNLIKELY(v > eina_value_uchar_max))
1965 return EINA_FALSE;
1966 return eina_value_type_pset(convert, convert_mem, &other_mem);
1967 }
1968 else if (convert == EINA_VALUE_TYPE_USHORT)
1969 {
1970 unsigned short other_mem = v;
1971 if (EINA_UNLIKELY(v < 0))
1972 return EINA_FALSE;
1973 if (EINA_UNLIKELY(v > eina_value_ushort_max))
1974 return EINA_FALSE;
1975 return eina_value_type_pset(convert, convert_mem, &other_mem);
1976 }
1977 else if (convert == EINA_VALUE_TYPE_UINT)
1978 {
1979 unsigned int other_mem = v;
1980 if (EINA_UNLIKELY(v < 0))
1981 return EINA_FALSE;
1982 if (EINA_UNLIKELY(v > eina_value_uint_max))
1983 return EINA_FALSE;
1984 return eina_value_type_pset(convert, convert_mem, &other_mem);
1985 }
1986 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
1987 {
1988 unsigned long other_mem = v;
1989 if (EINA_UNLIKELY(v < 0))
1990 return EINA_FALSE;
1991 if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) &&
1992 (v > eina_value_ulong_max)))
1993 return EINA_FALSE;
1994 return eina_value_type_pset(convert, convert_mem, &other_mem);
1995 }
1996 else if (convert == EINA_VALUE_TYPE_UINT64)
1997 {
1998 uint64_t other_mem = v;
1999 if (EINA_UNLIKELY(v < 0))
2000 return EINA_FALSE;
2001 return eina_value_type_pset(convert, convert_mem, &other_mem);
2002 }
2003 else if (convert == EINA_VALUE_TYPE_CHAR)
2004 {
2005 char other_mem = v;
2006 if (EINA_UNLIKELY(v < eina_value_char_min))
2007 return EINA_FALSE;
2008 if (EINA_UNLIKELY(v > eina_value_char_max))
2009 return EINA_FALSE;
2010 return eina_value_type_pset(convert, convert_mem, &other_mem);
2011 }
2012 else if (convert == EINA_VALUE_TYPE_SHORT)
2013 {
2014 short other_mem = v;
2015 if (EINA_UNLIKELY(v < eina_value_short_min))
2016 return EINA_FALSE;
2017 if (EINA_UNLIKELY(v > eina_value_short_max))
2018 return EINA_FALSE;
2019 return eina_value_type_pset(convert, convert_mem, &other_mem);
2020 }
2021 else if (convert == EINA_VALUE_TYPE_INT)
2022 {
2023 int other_mem = v;
2024 if (EINA_UNLIKELY(v < eina_value_int_min))
2025 return EINA_FALSE;
2026 if (EINA_UNLIKELY(v > eina_value_int_max))
2027 return EINA_FALSE;
2028 return eina_value_type_pset(convert, convert_mem, &other_mem);
2029 }
2030 else if (convert == EINA_VALUE_TYPE_LONG)
2031 {
2032 long other_mem = v;
2033 if (EINA_UNLIKELY(v < eina_value_long_min))
2034 return EINA_FALSE;
2035 if (EINA_UNLIKELY(v > eina_value_long_max))
2036 return EINA_FALSE;
2037 return eina_value_type_pset(convert, convert_mem, &other_mem);
2038 }
2039 else if (convert == EINA_VALUE_TYPE_INT64)
2040 {
2041 int64_t other_mem = v;
2042 return eina_value_type_pset(convert, convert_mem, &other_mem);
2043 }
2044 else if (convert == EINA_VALUE_TYPE_FLOAT)
2045 {
2046 float other_mem = v;
2047 return eina_value_type_pset(convert, convert_mem, &other_mem);
2048 }
2049 else if (convert == EINA_VALUE_TYPE_DOUBLE)
2050 {
2051 double other_mem = v;
2052 return eina_value_type_pset(convert, convert_mem, &other_mem);
2053 }
2054 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
2055 convert == EINA_VALUE_TYPE_STRING)
2056 {
2057 const char *other_mem;
2058 char buf[64];
2059 snprintf(buf, sizeof(buf), "%g", (double)v);
2060 other_mem = buf; /* required due &buf == buf */
2061 return eina_value_type_pset(convert, convert_mem, &other_mem);
2062 }
2063 else
2064 {
2065 eina_error_set(EINA_ERROR_VALUE_FAILED);
2066 return EINA_FALSE;
2067 }
2068
2069 return EINA_TRUE;
2070}
2071
2072static Eina_Bool
2073_eina_value_type_double_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
2074{
2075 double *tmem = mem;
2076 *tmem = va_arg(args, double);
2077 return EINA_TRUE;
2078}
2079
2080static Eina_Bool
2081_eina_value_type_double_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
2082{
2083 double *tmem = mem;
2084 const double *p = ptr;
2085 *tmem = *p;
2086 return EINA_TRUE;
2087}
2088
2089static Eina_Bool
2090_eina_value_type_double_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
2091{
2092 const double *tmem = mem;
2093 double *p = ptr;
2094 *p = *tmem;
2095 return EINA_TRUE;
2096}
2097
2098static Eina_Bool
2099_eina_value_type_string_common_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
2100{
2101 const char **tmem = mem;
2102 *tmem = NULL;
2103 return EINA_TRUE;
2104}
2105
2106static int
2107_eina_value_type_string_common_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
2108{
2109 const char *sa = *(const char **)a;
2110 const char *sb = *(const char **)b;
2111 if (sa == sb)
2112 return 0;
2113 if (sa == NULL)
2114 return -1;
2115 if (sb == NULL)
2116 return 1;
2117 return strcmp(sa, sb);
2118}
2119
2120static Eina_Bool
2121_eina_value_type_string_common_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
2122{
2123 const char *v = *(const char **)type_mem;
2124
2125 eina_error_set(0);
2126
2127 if (convert == EINA_VALUE_TYPE_UCHAR)
2128 {
2129 unsigned char other_mem;
2130 if ((sscanf(v, "%hhu", &other_mem) != 1) &&
2131 (sscanf(v, "%hhx", &other_mem) != 1) &&
2132 (sscanf(v, "%hho", &other_mem) != 1))
2133 return EINA_FALSE;
2134 return eina_value_type_pset(convert, convert_mem, &other_mem);
2135 }
2136 else if (convert == EINA_VALUE_TYPE_USHORT)
2137 {
2138 unsigned short other_mem;
2139 if ((sscanf(v, "%hu", &other_mem) != 1) &&
2140 (sscanf(v, "%hx", &other_mem) != 1) &&
2141 (sscanf(v, "%ho", &other_mem) != 1))
2142 return EINA_FALSE;
2143 return eina_value_type_pset(convert, convert_mem, &other_mem);
2144 }
2145 else if (convert == EINA_VALUE_TYPE_UINT)
2146 {
2147 unsigned int other_mem;
2148 if ((sscanf(v, "%u", &other_mem) != 1) &&
2149 (sscanf(v, "%x", &other_mem) != 1) &&
2150 (sscanf(v, "%o", &other_mem) != 1))
2151 return EINA_FALSE;
2152 return eina_value_type_pset(convert, convert_mem, &other_mem);
2153 }
2154 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
2155 {
2156 unsigned long other_mem;
2157 if ((sscanf(v, "%lu", &other_mem) != 1) &&
2158 (sscanf(v, "%lx", &other_mem) != 1) &&
2159 (sscanf(v, "%lo", &other_mem) != 1))
2160 return EINA_FALSE;
2161 return eina_value_type_pset(convert, convert_mem, &other_mem);
2162 }
2163 else if (convert == EINA_VALUE_TYPE_UINT64)
2164 {
2165 uint64_t other_mem;
2166 if ((sscanf(v, "%"SCNu64, &other_mem) != 1) &&
2167 (sscanf(v, "%"SCNx64, &other_mem) != 1) &&
2168 (sscanf(v, "%"SCNo64, &other_mem) != 1))
2169 return EINA_FALSE;
2170 return eina_value_type_pset(convert, convert_mem, &other_mem);
2171 }
2172 else if (convert == EINA_VALUE_TYPE_CHAR)
2173 {
2174 char other_mem;
2175 if ((sscanf(v, "%hhd", &other_mem) != 1) &&
2176 (sscanf(v, "%hhx", &other_mem) != 1) &&
2177 (sscanf(v, "%hho", &other_mem) != 1))
2178 return EINA_FALSE;
2179 return eina_value_type_pset(convert, convert_mem, &other_mem);
2180 }
2181 else if (convert == EINA_VALUE_TYPE_SHORT)
2182 {
2183 short other_mem;
2184 if ((sscanf(v, "%hd", &other_mem) != 1) &&
2185 (sscanf(v, "%hx", &other_mem) != 1) &&
2186 (sscanf(v, "%ho", &other_mem) != 1))
2187 return EINA_FALSE;
2188 return eina_value_type_pset(convert, convert_mem, &other_mem);
2189 }
2190 else if (convert == EINA_VALUE_TYPE_INT)
2191 {
2192 int other_mem;
2193 if ((sscanf(v, "%d", &other_mem) != 1) &&
2194 (sscanf(v, "%x", &other_mem) != 1) &&
2195 (sscanf(v, "%o", &other_mem) != 1))
2196 return EINA_FALSE;
2197 return eina_value_type_pset(convert, convert_mem, &other_mem);
2198 }
2199 else if (convert == EINA_VALUE_TYPE_LONG)
2200 {
2201 long other_mem;
2202 if ((sscanf(v, "%ld", &other_mem) != 1) &&
2203 (sscanf(v, "%lx", &other_mem) != 1) &&
2204 (sscanf(v, "%lo", &other_mem) != 1))
2205 return EINA_FALSE;
2206 return eina_value_type_pset(convert, convert_mem, &other_mem);
2207 }
2208 else if (convert == EINA_VALUE_TYPE_INT64)
2209 {
2210 int64_t other_mem;
2211 if ((sscanf(v, "%"SCNd64, &other_mem) != 1) &&
2212 (sscanf(v, "%"SCNx64, &other_mem) != 1) &&
2213 (sscanf(v, "%"SCNo64, &other_mem) != 1))
2214 return EINA_FALSE;
2215 return eina_value_type_pset(convert, convert_mem, &other_mem);
2216 }
2217 else if (convert == EINA_VALUE_TYPE_FLOAT)
2218 {
2219 float other_mem;
2220 if (sscanf(v, "%f", &other_mem) != 1)
2221 return EINA_FALSE;
2222 return eina_value_type_pset(convert, convert_mem, &other_mem);
2223 }
2224 else if (convert == EINA_VALUE_TYPE_DOUBLE)
2225 {
2226 double other_mem;
2227 if (sscanf(v, "%lf", &other_mem) != 1)
2228 return EINA_FALSE;
2229 return eina_value_type_pset(convert, convert_mem, &other_mem);
2230 }
2231 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
2232 convert == EINA_VALUE_TYPE_STRING)
2233 {
2234 return eina_value_type_pset(convert, convert_mem, &v);
2235 }
2236 else
2237 {
2238 eina_error_set(EINA_ERROR_VALUE_FAILED);
2239 return EINA_FALSE;
2240 }
2241
2242 return EINA_TRUE;
2243}
2244
2245static Eina_Bool
2246_eina_value_type_string_common_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
2247{
2248 memcpy(ptr, mem, sizeof(const char *));
2249 return EINA_TRUE;
2250}
2251
2252static Eina_Bool
2253_eina_value_type_stringshare_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
2254{
2255 const char **tmem = mem;
2256 if (*tmem)
2257 {
2258 eina_stringshare_del(*tmem);
2259 *tmem = NULL;
2260 }
2261 return EINA_TRUE;
2262}
2263
2264static Eina_Bool
2265_eina_value_type_stringshare_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
2266{
2267 const char * const*s = src;
2268 const char **d = dst;
2269 *d = eina_stringshare_add(*s);
2270 return EINA_TRUE;
2271}
2272
2273static Eina_Bool
2274_eina_value_type_stringshare_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
2275{
2276 const char *str = va_arg(args, const char *);
2277 return eina_stringshare_replace((const char **)mem, str);
2278}
2279
2280static Eina_Bool
2281_eina_value_type_stringshare_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
2282{
2283 const char * const *str = ptr;
2284 return eina_stringshare_replace((const char **)mem, *str);
2285}
2286
2287static Eina_Bool
2288_eina_value_type_string_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
2289{
2290 char **tmem = mem;
2291 if (*tmem)
2292 {
2293 free(*tmem);
2294 *tmem = NULL;
2295 }
2296 return EINA_TRUE;
2297}
2298
2299static Eina_Bool
2300_eina_value_type_string_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
2301{
2302 const char * const *s = src;
2303 char **d = dst;
2304 if (*s == NULL)
2305 *d = NULL;
2306 else
2307 {
2308 *d = strdup(*s);
2309 if (*d == NULL)
2310 {
2311 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
2312 return EINA_FALSE;
2313 }
2314 }
2315 return EINA_TRUE;
2316}
2317
2318static Eina_Bool
2319_eina_value_type_string_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
2320{
2321 char **tmem = mem;
2322 const char *str = va_arg(args, const char *);
2323 eina_error_set(0);
2324 if (str == *tmem) return EINA_TRUE;
2325 if (!str)
2326 {
2327 free(*tmem);
2328 *tmem = NULL;
2329 }
2330 else
2331 {
2332 char *tmp = strdup(str);
2333 if (!tmp)
2334 {
2335 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
2336 return EINA_FALSE;
2337 }
2338 free(*tmem);
2339 *tmem = tmp;
2340 }
2341 return EINA_TRUE;
2342}
2343
2344static Eina_Bool
2345_eina_value_type_string_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
2346{
2347 char **tmem = mem;
2348 const char * const *str = ptr;
2349 eina_error_set(0);
2350 if (*str == *tmem) return EINA_TRUE;
2351 if (!*str)
2352 {
2353 free(*tmem);
2354 *tmem = NULL;
2355 }
2356 else
2357 {
2358 char *tmp = strdup(*str);
2359 if (!tmp)
2360 {
2361 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
2362 return EINA_FALSE;
2363 }
2364 free(*tmem);
2365 *tmem = tmp;
2366 }
2367 return EINA_TRUE;
2368}
2369
2370static Eina_Bool
2371_eina_value_type_array_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
2372{
2373 memset(mem, 0, sizeof(Eina_Value_Array));
2374 return EINA_TRUE;
2375}
2376
2377static Eina_Bool
2378_eina_value_type_array_flush_elements(Eina_Value_Array *tmem)
2379{
2380 const Eina_Value_Type *subtype = tmem->subtype;
2381 Eina_Bool ret = EINA_TRUE;
2382 unsigned char sz;
2383 char *ptr, *ptr_end;
2384
2385 if (!tmem->array) return EINA_TRUE;
2386
2387 sz = tmem->array->member_size;
2388 ptr = tmem->array->members;
2389 ptr_end = ptr + tmem->array->len * sz;
2390
2391 for (; ptr < ptr_end; ptr += sz)
2392 ret &= eina_value_type_flush(subtype, ptr);
2393
2394 eina_inarray_flush(tmem->array);
2395 return ret;
2396}
2397
2398static Eina_Bool
2399_eina_value_type_array_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
2400{
2401 Eina_Value_Array *tmem = mem;
2402 Eina_Bool ret =_eina_value_type_array_flush_elements(tmem);
2403
2404 if (tmem->array) eina_inarray_free(tmem->array);
2405 tmem->array = NULL;
2406 tmem->subtype = NULL;
2407 return ret;
2408}
2409
2410static Eina_Bool
2411_eina_value_type_array_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
2412{
2413 const Eina_Value_Type *subtype;
2414 const Eina_Value_Array *s = src;
2415 Eina_Value_Array *d = dst;
2416 unsigned int i, count, sz;
2417 char *ptr, *ptr_end;
2418
2419 d->subtype = subtype = s->subtype;
2420 d->step = s->step;
2421
2422 if ((!s->array) || (!s->subtype))
2423 {
2424 d->array = NULL;
2425 return EINA_TRUE;
2426 }
2427
2428 if (!subtype->copy)
2429 {
2430 eina_error_set(EINA_ERROR_VALUE_FAILED);
2431 return EINA_FALSE;
2432 }
2433
2434 d->array = eina_inarray_new(subtype->value_size, s->step);
2435 if (!d->array)
2436 return EINA_FALSE;
2437
2438 sz = s->array->member_size;
2439
2440 count = eina_inarray_count(s->array);
2441 ptr = s->array->members;
2442 ptr_end = ptr + (count * sz);
2443
2444 for (i = 0; ptr < ptr_end; ptr += sz, i++)
2445 {
2446 void *imem = eina_inarray_alloc_at(d->array, i, 1);
2447 if (!imem) goto error;
2448 if (!subtype->copy(subtype, ptr, imem))
2449 {
2450 eina_inarray_pop(d->array);
2451 goto error;
2452 }
2453 }
2454
2455 return EINA_TRUE;
2456
2457 error:
2458 _eina_value_type_array_flush_elements(d);
2459 return EINA_FALSE;
2460}
2461
2462static int
2463_eina_value_type_array_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
2464{
2465 const Eina_Value_Type *subtype;
2466 const Eina_Value_Array *eva_a = a, *eva_b = b;
2467 const char *a_ptr, *a_ptr_end, *b_ptr;
2468 unsigned int count_a, count_b, count, sz;
2469 int cmp = 0;
2470
2471 if (eva_a->subtype != eva_b->subtype)
2472 {
2473 eina_error_set(EINA_ERROR_VALUE_FAILED);
2474 return -1;
2475 }
2476
2477 subtype = eva_a->subtype;
2478 if (!subtype->compare)
2479 {
2480 eina_error_set(EINA_ERROR_VALUE_FAILED);
2481 return 0;
2482 }
2483
2484 if ((!eva_a->array) && (!eva_b->array))
2485 return 0;
2486 else if (!eva_a->array)
2487 return -1;
2488 else if (!eva_b->array)
2489 return 1;
2490
2491 count_a = eina_inarray_count(eva_a->array);
2492 count_b = eina_inarray_count(eva_b->array);
2493
2494 if (count_a <= count_b)
2495 count = count_a;
2496 else
2497 count = count_b;
2498
2499 sz = eva_a->array->member_size;
2500
2501 a_ptr = eva_a->array->members;
2502 a_ptr_end = a_ptr + (count * sz);
2503 b_ptr = eva_b->array->members;
2504
2505 for (; (cmp == 0) && (a_ptr < a_ptr_end); a_ptr += sz, b_ptr += sz)
2506 cmp = subtype->compare(subtype, a_ptr, b_ptr);
2507
2508 if (cmp == 0)
2509 {
2510 if (count_a < count_b)
2511 return -1;
2512 else if (count_a > count_b)
2513 return 1;
2514 return 0;
2515 }
2516
2517 return cmp;
2518}
2519
2520static Eina_Bool
2521_eina_value_type_array_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
2522{
2523 const Eina_Value_Array *tmem = type_mem;
2524 Eina_Bool ret = EINA_FALSE;
2525
2526 if ((convert == EINA_VALUE_TYPE_STRING) ||
2527 (convert == EINA_VALUE_TYPE_STRINGSHARE))
2528 {
2529 Eina_Strbuf *str = eina_strbuf_new();
2530 const char *ptr;
2531 if (!tmem->array) eina_strbuf_append(str, "[]");
2532 else
2533 {
2534 const Eina_Value_Type *subtype = tmem->subtype;
2535 unsigned char sz;
2536 const char *ptr_end;
2537 Eina_Value tmp;
2538 Eina_Bool first = EINA_TRUE;
2539
2540 eina_value_setup(&tmp, EINA_VALUE_TYPE_STRING);
2541
2542 eina_strbuf_append_char(str, '[');
2543
2544 sz = tmem->array->member_size;
2545 ptr = tmem->array->members;
2546 ptr_end = ptr + tmem->array->len * sz;
2547 for (; ptr < ptr_end; ptr += sz)
2548 {
2549 Eina_Bool r = EINA_FALSE;
2550 if (subtype->convert_to)
2551 {
2552 r = subtype->convert_to(subtype, EINA_VALUE_TYPE_STRING,
2553 ptr, tmp.value.buf);
2554 if (r)
2555 {
2556 if (first) first = EINA_FALSE;
2557 else eina_strbuf_append_length(str, ", ", 2);
2558 eina_strbuf_append(str, tmp.value.ptr);
2559 free(tmp.value.ptr);
2560 tmp.value.ptr = NULL;
2561 }
2562 }
2563
2564 if (!r)
2565 {
2566 if (first)
2567 {
2568 first = EINA_FALSE;
2569 eina_strbuf_append_char(str, '?');
2570 }
2571 else
2572 eina_strbuf_append_length(str, ", ?", 3);
2573 }
2574 }
2575
2576 eina_strbuf_append_char(str, ']');
2577 }
2578 ptr = eina_strbuf_string_get(str);
2579 ret = eina_value_type_pset(convert, convert_mem, &ptr);
2580 eina_strbuf_free(str);
2581 }
2582 else if ((tmem->array) && (tmem->array->len == 1))
2583 {
2584 const Eina_Value_Type *subtype = tmem->subtype;
2585 void *imem = tmem->array->members;
2586
2587 if (subtype->convert_to)
2588 ret = subtype->convert_to(subtype, convert, imem, convert_mem);
2589 if ((!ret) && (convert->convert_from))
2590 ret = convert->convert_from(convert, subtype, convert_mem, imem);
2591 }
2592
2593 if (!ret)
2594 {
2595 eina_error_set(EINA_ERROR_VALUE_FAILED);
2596 return EINA_FALSE;
2597 }
2598 return EINA_TRUE;
2599}
2600
2601static Eina_Bool
2602_eina_value_type_array_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem)
2603{
2604 Eina_Value_Array *tmem = type_mem;
2605 Eina_Value_Array desc = {convert, tmem->step, NULL};
2606 char *buf;
2607 void *imem;
2608
2609 if (!eina_value_type_pset(type, tmem, &desc))
2610 return EINA_FALSE;
2611
2612 buf = alloca(convert->value_size);
2613 if (!eina_value_type_pget(convert, convert_mem, &buf))
2614 return EINA_FALSE;
2615
2616 imem = eina_inarray_alloc_at(tmem->array, 0, 1);
2617 if (!imem)
2618 return EINA_FALSE;
2619
2620 if (!eina_value_type_setup(convert, imem)) goto error_setup;
2621 if (!eina_value_type_pset(convert, imem, &buf)) goto error_set;
2622 return EINA_TRUE;
2623
2624 error_set:
2625 eina_value_type_flush(convert, imem);
2626 error_setup:
2627 eina_inarray_remove_at(tmem->array, 0);
2628 return EINA_FALSE;
2629}
2630
2631static Eina_Bool
2632_eina_value_type_array_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
2633{
2634 Eina_Value_Array *tmem = mem;
2635 const Eina_Value_Array *desc = ptr;
2636 Eina_Inarray *desc_array;
2637
2638 eina_error_set(0);
2639 if ((!tmem->subtype) && (!desc->subtype))
2640 return EINA_TRUE;
2641
2642 desc_array = desc->array;
2643 if (desc_array)
2644 {
2645 Eina_Value_Array tmp;
2646
2647 EINA_SAFETY_ON_FALSE_RETURN_VAL
2648 (desc_array->member_size == desc->subtype->value_size, EINA_FALSE);
2649
2650 if (desc_array == tmem->array)
2651 {
2652 tmem->subtype = desc->subtype;
2653 return EINA_TRUE;
2654 }
2655
2656 if (!_eina_value_type_array_copy(type, desc, &tmp))
2657 return EINA_FALSE;
2658
2659 _eina_value_type_array_flush(type, tmem);
2660 memcpy(tmem, &tmp, sizeof(tmp));
2661 return EINA_TRUE;
2662 }
2663
2664 if (tmem->array)
2665 {
2666 _eina_value_type_array_flush_elements(tmem);
2667 eina_inarray_setup(tmem->array, desc->subtype->value_size, desc->step);
2668 }
2669 else
2670 {
2671 tmem->array = eina_inarray_new(desc->subtype->value_size, desc->step);
2672 if (!tmem->array)
2673 return EINA_FALSE;
2674 }
2675
2676 tmem->subtype = desc->subtype;
2677 return EINA_TRUE;
2678}
2679
2680static Eina_Bool
2681_eina_value_type_array_vset(const Eina_Value_Type *type, void *mem, va_list args)
2682{
2683 const Eina_Value_Array desc = va_arg(args, Eina_Value_Array);
2684 _eina_value_type_array_pset(type, mem, &desc);
2685 return EINA_TRUE;
2686}
2687
2688static Eina_Bool
2689_eina_value_type_array_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
2690{
2691 memcpy(ptr, mem, sizeof(Eina_Value_Array));
2692 return EINA_TRUE;
2693}
2694
2695static const Eina_Value_Type _EINA_VALUE_TYPE_ARRAY = {
2696 EINA_VALUE_TYPE_VERSION,
2697 sizeof(Eina_Value_Array),
2698 "Eina_Value_Array",
2699 _eina_value_type_array_setup,
2700 _eina_value_type_array_flush,
2701 _eina_value_type_array_copy,
2702 _eina_value_type_array_compare,
2703 _eina_value_type_array_convert_to,
2704 _eina_value_type_array_convert_from,
2705 _eina_value_type_array_vset,
2706 _eina_value_type_array_pset,
2707 _eina_value_type_array_pget
2708};
2709
2710static Eina_Bool
2711_eina_value_type_list_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
2712{
2713 memset(mem, 0, sizeof(Eina_Value_List));
2714 return EINA_TRUE;
2715}
2716
2717static Eina_Bool
2718_eina_value_type_list_flush_elements(Eina_Value_List *tmem)
2719{
2720 const Eina_Value_Type *subtype = tmem->subtype;
2721 Eina_Bool ret = EINA_TRUE;
2722
2723 if (!tmem->list) return EINA_TRUE;
2724
2725 while (tmem->list)
2726 {
2727 void *mem = eina_value_list_node_memory_get(tmem->subtype, tmem->list);
2728 ret &= eina_value_type_flush(subtype, mem);
2729 eina_value_list_node_memory_flush(tmem->subtype, tmem->list);
2730 tmem->list = eina_list_remove_list(tmem->list, tmem->list);
2731 }
2732
2733 return ret;
2734}
2735
2736static Eina_Bool
2737_eina_value_type_list_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
2738{
2739 Eina_Value_List *tmem = mem;
2740 Eina_Bool ret =_eina_value_type_list_flush_elements(tmem);
2741
2742 if (tmem->list) eina_list_free(tmem->list);
2743 tmem->list = NULL;
2744 tmem->subtype = NULL;
2745 return ret;
2746}
2747
2748static Eina_Bool
2749_eina_value_type_list_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
2750{
2751 const Eina_Value_Type *subtype;
2752 const Eina_Value_List *s = src;
2753 Eina_Value_List *d = dst;
2754 const Eina_List *snode;
2755
2756 d->subtype = subtype = s->subtype;
2757 if ((!s->list) || (!s->subtype))
2758 {
2759 d->list = NULL;
2760 return EINA_TRUE;
2761 }
2762
2763 if (!subtype->copy)
2764 {
2765 eina_error_set(EINA_ERROR_VALUE_FAILED);
2766 return EINA_FALSE;
2767 }
2768
2769 d->list = NULL;
2770 for (snode = s->list; snode != NULL; snode = snode->next)
2771 {
2772 const void *ptr = eina_value_list_node_memory_get(subtype, snode);
2773 Eina_List *dnode;
2774 void *imem;
2775
2776 d->list = eina_list_append(d->list, (void*)1L);
2777 dnode = eina_list_last(d->list);
2778 EINA_SAFETY_ON_NULL_GOTO(dnode, error);
2779 EINA_SAFETY_ON_FALSE_GOTO(dnode->data == (void*)1L, error);
2780
2781 imem = eina_value_list_node_memory_setup(subtype, dnode);
2782 if (!subtype->copy(subtype, ptr, imem))
2783 {
2784 eina_value_list_node_memory_flush(subtype, dnode);
2785 d->list = eina_list_remove_list(d->list, dnode);
2786 goto error;
2787 }
2788 }
2789 return EINA_TRUE;
2790
2791 error:
2792 _eina_value_type_list_flush_elements(d);
2793 return EINA_FALSE;
2794}
2795
2796static int
2797_eina_value_type_list_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
2798{
2799 const Eina_Value_Type *subtype;
2800 const Eina_Value_List *eva_a = a, *eva_b = b;
2801 const Eina_List *anode, *bnode;
2802 int cmp = 0;
2803
2804 if (eva_a->subtype != eva_b->subtype)
2805 {
2806 eina_error_set(EINA_ERROR_VALUE_FAILED);
2807 return -1;
2808 }
2809
2810 subtype = eva_a->subtype;
2811 if (!subtype->compare)
2812 {
2813 eina_error_set(EINA_ERROR_VALUE_FAILED);
2814 return 0;
2815 }
2816
2817 if ((!eva_a->list) && (!eva_b->list))
2818 return 0;
2819 else if (!eva_a->list)
2820 return -1;
2821 else if (!eva_b->list)
2822 return 1;
2823
2824 for (anode = eva_a->list, bnode = eva_b->list;
2825 (cmp == 0) && (anode) && (bnode);
2826 anode = anode->next, bnode = bnode->next)
2827 {
2828 const void *amem = eina_value_list_node_memory_get(subtype, anode);
2829 const void *bmem = eina_value_list_node_memory_get(subtype, bnode);
2830 cmp = subtype->compare(subtype, amem, bmem);
2831 }
2832
2833 if (cmp == 0)
2834 {
2835 if ((!anode) && (bnode))
2836 return -1;
2837 else if ((anode) && (!bnode))
2838 return 1;
2839 return 0;
2840 }
2841
2842 return cmp;
2843}
2844
2845static Eina_Bool
2846_eina_value_type_list_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
2847{
2848 const Eina_Value_List *tmem = type_mem;
2849 Eina_Bool ret = EINA_FALSE;
2850
2851 if ((convert == EINA_VALUE_TYPE_STRING) ||
2852 (convert == EINA_VALUE_TYPE_STRINGSHARE))
2853 {
2854 Eina_Strbuf *str = eina_strbuf_new();
2855 const char *s;
2856 if (!tmem->list) eina_strbuf_append(str, "[]");
2857 else
2858 {
2859 const Eina_Value_Type *subtype = tmem->subtype;
2860 const Eina_List *node;
2861 Eina_Value tmp;
2862 Eina_Bool first = EINA_TRUE;
2863
2864 eina_value_setup(&tmp, EINA_VALUE_TYPE_STRING);
2865
2866 eina_strbuf_append_char(str, '[');
2867
2868 for (node = tmem->list; node != NULL; node = node->next)
2869 {
2870 Eina_Bool r = EINA_FALSE;
2871
2872 if (subtype->convert_to)
2873 {
2874 const void *ptr;
2875 ptr = eina_value_list_node_memory_get(subtype, node);
2876 r = subtype->convert_to(subtype, EINA_VALUE_TYPE_STRING,
2877 ptr, tmp.value.buf);
2878 if (r)
2879 {
2880 if (first) first = EINA_FALSE;
2881 else eina_strbuf_append_length(str, ", ", 2);
2882 eina_strbuf_append(str, tmp.value.ptr);
2883 free(tmp.value.ptr);
2884 tmp.value.ptr = NULL;
2885 }
2886 }
2887
2888 if (!r)
2889 {
2890 if (first)
2891 {
2892 first = EINA_FALSE;
2893 eina_strbuf_append_char(str, '?');
2894 }
2895 else
2896 eina_strbuf_append_length(str, ", ?", 3);
2897 }
2898 }
2899
2900 eina_strbuf_append_char(str, ']');
2901 }
2902 s = eina_strbuf_string_get(str);
2903 ret = eina_value_type_pset(convert, convert_mem, &s);
2904 eina_strbuf_free(str);
2905 }
2906 else if ((tmem->list) && (tmem->list->next == NULL))
2907 {
2908 const Eina_Value_Type *subtype = tmem->subtype;
2909 void *imem = eina_value_list_node_memory_get(subtype, tmem->list);
2910
2911 if (subtype->convert_to)
2912 ret = subtype->convert_to(subtype, convert, imem, convert_mem);
2913 if ((!ret) && (convert->convert_from))
2914 ret = convert->convert_from(convert, subtype, convert_mem, imem);
2915 }
2916
2917 if (!ret)
2918 {
2919 eina_error_set(EINA_ERROR_VALUE_FAILED);
2920 return EINA_FALSE;
2921 }
2922 return EINA_TRUE;
2923}
2924
2925static Eina_Bool
2926_eina_value_type_list_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem)
2927{
2928 Eina_Value_List *tmem = type_mem;
2929 Eina_Value_List desc = {convert, NULL};
2930 Eina_List *node;
2931 char *buf;
2932 void *imem;
2933
2934 if (!eina_value_type_pset(type, tmem, &desc))
2935 return EINA_FALSE;
2936
2937 buf = alloca(convert->value_size);
2938 if (!eina_value_type_pget(convert, convert_mem, &buf))
2939 return EINA_FALSE;
2940
2941 tmem->list = eina_list_append(tmem->list, (void*)1L);
2942 node = eina_list_last(tmem->list);
2943 EINA_SAFETY_ON_NULL_RETURN_VAL(node, EINA_FALSE);
2944 EINA_SAFETY_ON_FALSE_RETURN_VAL(node->data == (void*)1L, EINA_FALSE);
2945
2946 imem = eina_value_list_node_memory_setup(tmem->subtype, node);
2947 if (!imem)
2948 {
2949 tmem->list = eina_list_remove_list(tmem->list, node);
2950 return EINA_FALSE;
2951 }
2952
2953 if (!eina_value_type_setup(tmem->subtype, imem)) goto error_setup;
2954 if (!eina_value_type_pset(tmem->subtype, imem, &buf)) goto error_set;
2955 return EINA_TRUE;
2956
2957 error_set:
2958 eina_value_type_flush(tmem->subtype, imem);
2959 error_setup:
2960 eina_value_list_node_memory_flush(tmem->subtype, node);
2961 tmem->list = eina_list_remove_list(tmem->list, node);
2962 return EINA_FALSE;
2963}
2964
2965static Eina_Bool
2966_eina_value_type_list_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
2967{
2968 Eina_Value_List *tmem = mem;
2969 const Eina_Value_List *desc = ptr;
2970
2971 eina_error_set(0);
2972 if ((!tmem->subtype) && (!desc->subtype))
2973 return EINA_TRUE;
2974
2975 if ((tmem->list) && (tmem->list == desc->list))
2976 {
2977 tmem->subtype = desc->subtype;
2978 return EINA_TRUE;
2979 }
2980
2981 if (desc->list)
2982 {
2983 Eina_Value_List tmp;
2984
2985 if (!_eina_value_type_list_copy(type, desc, &tmp))
2986 return EINA_FALSE;
2987
2988 _eina_value_type_list_flush(type, tmem);
2989 memcpy(tmem, &tmp, sizeof(tmp));
2990 return EINA_TRUE;
2991 }
2992
2993 _eina_value_type_list_flush_elements(tmem);
2994
2995 tmem->subtype = desc->subtype;
2996 return EINA_TRUE;
2997}
2998
2999static Eina_Bool
3000_eina_value_type_list_vset(const Eina_Value_Type *type, void *mem, va_list args)
3001{
3002 const Eina_Value_List desc = va_arg(args, Eina_Value_List);
3003 _eina_value_type_list_pset(type, mem, &desc);
3004 return EINA_TRUE;
3005}
3006
3007static Eina_Bool
3008_eina_value_type_list_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
3009{
3010 memcpy(ptr, mem, sizeof(Eina_Value_List));
3011 return EINA_TRUE;
3012}
3013
3014static const Eina_Value_Type _EINA_VALUE_TYPE_LIST = {
3015 EINA_VALUE_TYPE_VERSION,
3016 sizeof(Eina_Value_List),
3017 "Eina_Value_List",
3018 _eina_value_type_list_setup,
3019 _eina_value_type_list_flush,
3020 _eina_value_type_list_copy,
3021 _eina_value_type_list_compare,
3022 _eina_value_type_list_convert_to,
3023 _eina_value_type_list_convert_from,
3024 _eina_value_type_list_vset,
3025 _eina_value_type_list_pset,
3026 _eina_value_type_list_pget
3027};
3028
3029static Eina_Bool
3030_eina_value_type_hash_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
3031{
3032 memset(mem, 0, sizeof(Eina_Value_Hash));
3033 return EINA_TRUE;
3034}
3035
3036struct _eina_value_type_hash_flush_each_ctx
3037{
3038 const Eina_Value_Type *subtype;
3039 Eina_Bool ret;
3040};
3041
3042static Eina_Bool
3043_eina_value_type_hash_flush_each(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED__, void *mem, void *user_data)
3044{
3045 struct _eina_value_type_hash_flush_each_ctx *ctx = user_data;
3046 ctx->ret &= eina_value_type_flush(ctx->subtype, mem);
3047 free(mem);
3048 return EINA_TRUE;
3049}
3050
3051static Eina_Bool
3052_eina_value_type_hash_flush_elements(Eina_Value_Hash *tmem)
3053{
3054 struct _eina_value_type_hash_flush_each_ctx ctx = {
3055 tmem->subtype,
3056 EINA_TRUE
3057 };
3058
3059 if (!tmem->hash) return EINA_TRUE;
3060
3061 eina_hash_foreach(tmem->hash, _eina_value_type_hash_flush_each, &ctx);
3062 eina_hash_free(tmem->hash);
3063 tmem->hash = NULL;
3064 return ctx.ret;
3065}
3066
3067static Eina_Bool
3068_eina_value_type_hash_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
3069{
3070 Eina_Value_Hash *tmem = mem;
3071 Eina_Bool ret =_eina_value_type_hash_flush_elements(tmem);
3072 tmem->subtype = NULL;
3073 return ret;
3074}
3075
3076static unsigned int
3077_eina_value_hash_key_length(const void *key)
3078{
3079 if (!key)
3080 return 0;
3081 return (int)strlen(key) + 1;
3082}
3083
3084static int
3085_eina_value_hash_key_cmp(const void *key1, int key1_len, const void *key2, int key2_len)
3086{
3087 int r = key1_len - key2_len;
3088 if (r != 0)
3089 return r;
3090 return strcmp(key1, key2);
3091}
3092
3093static Eina_Bool
3094_eina_value_type_hash_create(Eina_Value_Hash *desc)
3095{
3096 if (!desc->buckets_power_size)
3097 desc->buckets_power_size = 5;
3098
3099 desc->hash = eina_hash_new(_eina_value_hash_key_length,
3100 _eina_value_hash_key_cmp,
3101 EINA_KEY_HASH(eina_hash_superfast),
3102 NULL, desc->buckets_power_size);
3103 return !!desc->hash;
3104}
3105
3106struct _eina_value_type_hash_copy_each_ctx
3107{
3108 const Eina_Value_Type *subtype;
3109 Eina_Value_Hash *dest;
3110 Eina_Bool ret;
3111};
3112
3113static Eina_Bool
3114_eina_value_type_hash_copy_each(const Eina_Hash *hash __UNUSED__, const void *key, void *_ptr, void *user_data)
3115{
3116 struct _eina_value_type_hash_copy_each_ctx *ctx = user_data;
3117 const void *ptr = _ptr;
3118 void *imem = malloc(ctx->subtype->value_size);
3119 if (!imem)
3120 {
3121 ctx->ret = EINA_FALSE;
3122 return EINA_FALSE;
3123 }
3124 if (!ctx->subtype->copy(ctx->subtype, ptr, imem))
3125 {
3126 free(imem);
3127 ctx->ret = EINA_FALSE;
3128 return EINA_FALSE;
3129 }
3130 if (!eina_hash_add(ctx->dest->hash, key, imem))
3131 {
3132 eina_value_type_flush(ctx->subtype, imem);
3133 free(imem);
3134 ctx->ret = EINA_FALSE;
3135 return EINA_FALSE;
3136 }
3137 return EINA_TRUE;
3138}
3139
3140static Eina_Bool
3141_eina_value_type_hash_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
3142{
3143 const Eina_Value_Hash *s = src;
3144 Eina_Value_Hash *d = dst;
3145 struct _eina_value_type_hash_copy_each_ctx ctx = {s->subtype, d, EINA_TRUE};
3146
3147 d->subtype = s->subtype;
3148 d->buckets_power_size = s->buckets_power_size;
3149
3150 if ((!s->hash) || (!s->subtype))
3151 {
3152 d->hash = NULL;
3153 return EINA_TRUE;
3154 }
3155
3156 if (!s->subtype->copy)
3157 {
3158 eina_error_set(EINA_ERROR_VALUE_FAILED);
3159 return EINA_FALSE;
3160 }
3161
3162 if (!_eina_value_type_hash_create(d))
3163 return EINA_FALSE;
3164
3165 eina_hash_foreach(s->hash, _eina_value_type_hash_copy_each, &ctx);
3166 if (!ctx.ret)
3167 {
3168 _eina_value_type_hash_flush_elements(d);
3169 return EINA_FALSE;
3170 }
3171 return EINA_TRUE;
3172}
3173
3174struct _eina_value_type_hash_compare_each_ctx
3175{
3176 const Eina_Value_Type *subtype;
3177 const Eina_Hash *other;
3178 int cmp;
3179};
3180
3181static Eina_Bool
3182_eina_value_type_hash_compare_each(const Eina_Hash *hash __UNUSED__, const void *key, void *_ptr, void *user_data)
3183{
3184 struct _eina_value_type_hash_compare_each_ctx *ctx = user_data;
3185 const void *self_ptr = _ptr;
3186 const void *other_ptr = eina_hash_find(ctx->other, key);
3187 if (!other_ptr) return EINA_TRUE;
3188 ctx->cmp = ctx->subtype->compare(ctx->subtype, self_ptr, other_ptr);
3189 return ctx->cmp == 0;
3190}
3191
3192static int
3193_eina_value_type_hash_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
3194{
3195 const Eina_Value_Hash *eva_a = a, *eva_b = b;
3196 struct _eina_value_type_hash_compare_each_ctx ctx = {
3197 eva_a->subtype, eva_b->hash, 0
3198 };
3199
3200 if (eva_a->subtype != eva_b->subtype)
3201 {
3202 eina_error_set(EINA_ERROR_VALUE_FAILED);
3203 return -1;
3204 }
3205
3206 if (!eva_a->subtype->compare)
3207 {
3208 eina_error_set(EINA_ERROR_VALUE_FAILED);
3209 return 0;
3210 }
3211
3212 if ((!eva_a->hash) && (!eva_b->hash))
3213 return 0;
3214 else if (!eva_a->hash)
3215 return -1;
3216 else if (!eva_b->hash)
3217 return 1;
3218
3219 eina_hash_foreach(eva_a->hash, _eina_value_type_hash_compare_each, &ctx);
3220 if (ctx.cmp == 0)
3221 {
3222 unsigned int count_a = eina_hash_population(eva_a->hash);
3223 unsigned int count_b = eina_hash_population(eva_b->hash);
3224 if (count_a < count_b)
3225 return -1;
3226 else if (count_a > count_b)
3227 return 1;
3228 return 0;
3229 }
3230
3231 return ctx.cmp;
3232}
3233
3234static Eina_Bool
3235_eina_value_type_hash_find_first(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED__, void *ptr, void *user_data)
3236{
3237 void **ret = user_data;
3238 *ret = ptr;
3239 return EINA_FALSE;
3240}
3241
3242struct _eina_value_type_hash_convert_to_string_each_ctx
3243{
3244 const Eina_Value_Type *subtype;
3245 Eina_Strbuf *str;
3246 Eina_Value tmp;
3247 Eina_Bool first;
3248};
3249
3250static Eina_Bool
3251_eina_value_type_hash_convert_to_string_each(const Eina_Hash *hash __UNUSED__, const void *_key, void *_ptr, void *user_data)
3252{
3253 struct _eina_value_type_hash_convert_to_string_each_ctx *ctx = user_data;
3254 const char *key = _key;
3255 const void *ptr = _ptr;
3256 Eina_Bool r = EINA_FALSE;
3257
3258 if (ctx->first) ctx->first = EINA_FALSE;
3259 else eina_strbuf_append_length(ctx->str, ", ", 2);
3260
3261 eina_strbuf_append(ctx->str, key);
3262 eina_strbuf_append_length(ctx->str, ": ", 2);
3263
3264 if (ctx->subtype->convert_to)
3265 {
3266 r = ctx->subtype->convert_to(ctx->subtype, EINA_VALUE_TYPE_STRING,
3267 ptr, ctx->tmp.value.buf);
3268 if (r)
3269 {
3270 eina_strbuf_append(ctx->str, ctx->tmp.value.ptr);
3271 free(ctx->tmp.value.ptr);
3272 ctx->tmp.value.ptr = NULL;
3273 }
3274 }
3275
3276 if (!r)
3277 eina_strbuf_append_char(ctx->str, '?');
3278
3279 return EINA_TRUE;
3280}
3281
3282static Eina_Bool
3283_eina_value_type_hash_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
3284{
3285 const Eina_Value_Hash *tmem = type_mem;
3286 Eina_Bool ret = EINA_FALSE;
3287
3288 if ((convert == EINA_VALUE_TYPE_STRING) ||
3289 (convert == EINA_VALUE_TYPE_STRINGSHARE))
3290 {
3291 Eina_Strbuf *str = eina_strbuf_new();
3292 const char *s;
3293 if (!tmem->hash) eina_strbuf_append(str, "{}");
3294 else
3295 {
3296 struct _eina_value_type_hash_convert_to_string_each_ctx ctx;
3297
3298 ctx.subtype = tmem->subtype;
3299 ctx.str = str;
3300 ctx.first = EINA_TRUE;
3301 eina_value_setup(&ctx.tmp, EINA_VALUE_TYPE_STRING);
3302
3303 eina_strbuf_append_char(str, '{');
3304
3305 eina_hash_foreach(tmem->hash,
3306 _eina_value_type_hash_convert_to_string_each,
3307 &ctx);
3308
3309 eina_strbuf_append_char(str, '}');
3310 }
3311 s = eina_strbuf_string_get(str);
3312 ret = eina_value_type_pset(convert, convert_mem, &s);
3313 eina_strbuf_free(str);
3314 }
3315 else if ((tmem->hash) && (eina_hash_population(tmem->hash) == 1))
3316 {
3317 const Eina_Value_Type *subtype = tmem->subtype;
3318 void *imem = NULL;
3319
3320 eina_hash_foreach(tmem->hash, _eina_value_type_hash_find_first, &imem);
3321 if (!imem) /* shouldn't happen... */
3322 ret = EINA_FALSE;
3323 else
3324 {
3325 if (subtype->convert_to)
3326 ret = subtype->convert_to(subtype, convert, imem, convert_mem);
3327 if ((!ret) && (convert->convert_from))
3328 ret = convert->convert_from(convert, subtype, convert_mem, imem);
3329 }
3330 }
3331
3332 if (!ret)
3333 {
3334 eina_error_set(EINA_ERROR_VALUE_FAILED);
3335 return EINA_FALSE;
3336 }
3337 return EINA_TRUE;
3338}
3339
3340static Eina_Bool
3341_eina_value_type_hash_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
3342{
3343 Eina_Value_Hash *tmem = mem;
3344 const Eina_Value_Hash *desc = ptr;
3345
3346 eina_error_set(0);
3347 if ((!tmem->subtype) && (!desc->subtype))
3348 return EINA_TRUE;
3349
3350 if ((tmem->hash) && (tmem->hash == desc->hash))
3351 {
3352 tmem->subtype = desc->subtype;
3353 return EINA_TRUE;
3354 }
3355
3356 if (desc->hash)
3357 {
3358 Eina_Value_Hash tmp;
3359
3360 if (!_eina_value_type_hash_copy(type, desc, &tmp))
3361 return EINA_FALSE;
3362
3363 _eina_value_type_hash_flush(type, tmem);
3364 memcpy(tmem, &tmp, sizeof(tmp));
3365 return EINA_TRUE;
3366 }
3367
3368 if (tmem->hash) _eina_value_type_hash_flush_elements(tmem);
3369
3370 tmem->subtype = desc->subtype;
3371 if (!_eina_value_type_hash_create(tmem))
3372 return EINA_FALSE;
3373
3374 return EINA_TRUE;
3375}
3376
3377static Eina_Bool
3378_eina_value_type_hash_vset(const Eina_Value_Type *type, void *mem, va_list args)
3379{
3380 const Eina_Value_Hash desc = va_arg(args, Eina_Value_Hash);
3381 _eina_value_type_hash_pset(type, mem, &desc);
3382 return EINA_TRUE;
3383}
3384
3385static Eina_Bool
3386_eina_value_type_hash_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
3387{
3388 memcpy(ptr, mem, sizeof(Eina_Value_Hash));
3389 return EINA_TRUE;
3390}
3391
3392static const Eina_Value_Type _EINA_VALUE_TYPE_HASH = {
3393 EINA_VALUE_TYPE_VERSION,
3394 sizeof(Eina_Value_Hash),
3395 "Eina_Value_Hash",
3396 _eina_value_type_hash_setup,
3397 _eina_value_type_hash_flush,
3398 _eina_value_type_hash_copy,
3399 _eina_value_type_hash_compare,
3400 _eina_value_type_hash_convert_to,
3401 NULL, /* no convert from */
3402 _eina_value_type_hash_vset,
3403 _eina_value_type_hash_pset,
3404 _eina_value_type_hash_pget
3405};
3406
3407static Eina_Bool
3408_eina_value_type_timeval_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
3409{
3410 memset(mem, 0, sizeof(struct timeval));
3411 return EINA_TRUE;
3412}
3413
3414static Eina_Bool
3415_eina_value_type_timeval_flush(const Eina_Value_Type *type __UNUSED__, void *mem __UNUSED__)
3416{
3417 return EINA_TRUE;
3418}
3419
3420static Eina_Bool
3421_eina_value_type_timeval_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
3422{
3423 const struct timeval *s = src;
3424 struct timeval *d = dst;
3425 *d = *s;
3426 return EINA_TRUE;
3427}
3428
3429static inline struct timeval _eina_value_type_timeval_fix(const struct timeval *input)
3430{
3431 struct timeval ret = *input;
3432 if (EINA_UNLIKELY(ret.tv_usec < 0))
3433 {
3434 ret.tv_sec -= 1;
3435 ret.tv_usec += 1e6;
3436 }
3437 return ret;
3438}
3439
3440static int
3441_eina_value_type_timeval_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
3442{
3443 struct timeval va = _eina_value_type_timeval_fix(a);
3444 struct timeval vb = _eina_value_type_timeval_fix(b);
3445
3446 if (va.tv_sec < vb.tv_sec)
3447 return -1;
3448 else if (va.tv_sec > vb.tv_sec)
3449 return 1;
3450
3451 if (va.tv_usec < vb.tv_usec)
3452 return -1;
3453 else if (va.tv_usec > vb.tv_usec)
3454 return 1;
3455
3456 return 0;
3457}
3458
3459static Eina_Bool
3460_eina_value_type_timeval_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
3461{
3462 struct timeval v = _eina_value_type_timeval_fix(type_mem);
3463
3464 eina_error_set(0);
3465
3466 if (convert == EINA_VALUE_TYPE_UCHAR)
3467 {
3468 unsigned char other_mem = v.tv_sec;
3469 if (EINA_UNLIKELY(v.tv_sec < 0))
3470 return EINA_FALSE;
3471 if (EINA_UNLIKELY(v.tv_sec > eina_value_uchar_max))
3472 return EINA_FALSE;
3473 return eina_value_type_pset(convert, convert_mem, &other_mem);
3474 }
3475 else if (convert == EINA_VALUE_TYPE_USHORT)
3476 {
3477 unsigned short other_mem = v.tv_sec;
3478 if (EINA_UNLIKELY(v.tv_sec < 0))
3479 return EINA_FALSE;
3480 if (EINA_UNLIKELY(v.tv_sec > eina_value_ushort_max))
3481 return EINA_FALSE;
3482 return eina_value_type_pset(convert, convert_mem, &other_mem);
3483 }
3484 else if (convert == EINA_VALUE_TYPE_UINT)
3485 {
3486 unsigned int other_mem = v.tv_sec;
3487 if (EINA_UNLIKELY(v.tv_sec < 0))
3488 return EINA_FALSE;
3489 if (EINA_UNLIKELY((unsigned long) v.tv_sec > eina_value_uint_max))
3490 return EINA_FALSE;
3491 return eina_value_type_pset(convert, convert_mem, &other_mem);
3492 }
3493 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
3494 {
3495 unsigned long other_mem = v.tv_sec;
3496 if (EINA_UNLIKELY(v.tv_sec < 0))
3497 return EINA_FALSE;
3498 if (EINA_UNLIKELY((sizeof(other_mem) != sizeof(v)) &&
3499 ((unsigned long)v.tv_sec > eina_value_ulong_max)))
3500 return EINA_FALSE;
3501 return eina_value_type_pset(convert, convert_mem, &other_mem);
3502 }
3503 else if (convert == EINA_VALUE_TYPE_UINT64)
3504 {
3505 uint64_t other_mem = v.tv_sec;
3506 if (EINA_UNLIKELY(v.tv_sec < 0))
3507 return EINA_FALSE;
3508 return eina_value_type_pset(convert, convert_mem, &other_mem);
3509 }
3510 else if (convert == EINA_VALUE_TYPE_CHAR)
3511 {
3512 char other_mem = v.tv_sec;
3513 if (EINA_UNLIKELY(v.tv_sec < eina_value_char_min))
3514 return EINA_FALSE;
3515 if (EINA_UNLIKELY(v.tv_sec > eina_value_char_max))
3516 return EINA_FALSE;
3517 return eina_value_type_pset(convert, convert_mem, &other_mem);
3518 }
3519 else if (convert == EINA_VALUE_TYPE_SHORT)
3520 {
3521 short other_mem = v.tv_sec;
3522 if (EINA_UNLIKELY(v.tv_sec < eina_value_short_min))
3523 return EINA_FALSE;
3524 if (EINA_UNLIKELY(v.tv_sec > eina_value_short_max))
3525 return EINA_FALSE;
3526 return eina_value_type_pset(convert, convert_mem, &other_mem);
3527 }
3528 else if (convert == EINA_VALUE_TYPE_INT)
3529 {
3530 int other_mem = v.tv_sec;
3531 if (EINA_UNLIKELY(v.tv_sec < eina_value_int_min))
3532 return EINA_FALSE;
3533 if (EINA_UNLIKELY(v.tv_sec > eina_value_int_max))
3534 return EINA_FALSE;
3535 return eina_value_type_pset(convert, convert_mem, &other_mem);
3536 }
3537 else if (convert == EINA_VALUE_TYPE_LONG)
3538 {
3539 long other_mem = v.tv_sec;
3540 if (EINA_UNLIKELY(v.tv_sec < eina_value_long_min))
3541 return EINA_FALSE;
3542 if (EINA_UNLIKELY(v.tv_sec > eina_value_long_max))
3543 return EINA_FALSE;
3544 return eina_value_type_pset(convert, convert_mem, &other_mem);
3545 }
3546 else if (convert == EINA_VALUE_TYPE_INT64)
3547 {
3548 int64_t other_mem = v.tv_sec;
3549 return eina_value_type_pset(convert, convert_mem, &other_mem);
3550 }
3551 else if (convert == EINA_VALUE_TYPE_FLOAT)
3552 {
3553 float other_mem = (float)v.tv_sec + (float)v.tv_usec / 1.0e6;
3554 return eina_value_type_pset(convert, convert_mem, &other_mem);
3555 }
3556 else if (convert == EINA_VALUE_TYPE_DOUBLE)
3557 {
3558 double other_mem = (double)v.tv_sec + (double)v.tv_usec / 1.0e6;
3559 return eina_value_type_pset(convert, convert_mem, &other_mem);
3560 }
3561 else if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
3562 convert == EINA_VALUE_TYPE_STRING)
3563 {
3564 const char *other_mem;
3565 char buf[64];
3566 snprintf(buf, sizeof(buf), "%ld.%06ld", v.tv_sec, v.tv_usec);
3567 other_mem = buf; /* required due &buf == buf */
3568 return eina_value_type_pset(convert, convert_mem, &other_mem);
3569 }
3570 else
3571 {
3572 eina_error_set(EINA_ERROR_VALUE_FAILED);
3573 return EINA_FALSE;
3574 }
3575}
3576
3577static Eina_Bool
3578_eina_value_type_timeval_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
3579{
3580 struct timeval *tmem = mem;
3581 *tmem = _eina_value_type_timeval_fix(ptr);
3582 return EINA_TRUE;
3583}
3584
3585static Eina_Bool
3586_eina_value_type_timeval_vset(const Eina_Value_Type *type, void *mem, va_list args)
3587{
3588 const struct timeval desc = va_arg(args, struct timeval);
3589 _eina_value_type_timeval_pset(type, mem, &desc);
3590 return EINA_TRUE;
3591}
3592
3593static Eina_Bool
3594_eina_value_type_timeval_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
3595{
3596 memcpy(ptr, mem, sizeof(struct timeval));
3597 return EINA_TRUE;
3598}
3599
3600static const Eina_Value_Type _EINA_VALUE_TYPE_TIMEVAL = {
3601 EINA_VALUE_TYPE_VERSION,
3602 sizeof(struct timeval),
3603 "struct timeval",
3604 _eina_value_type_timeval_setup,
3605 _eina_value_type_timeval_flush,
3606 _eina_value_type_timeval_copy,
3607 _eina_value_type_timeval_compare,
3608 _eina_value_type_timeval_convert_to,
3609 NULL, /* no convert from */
3610 _eina_value_type_timeval_vset,
3611 _eina_value_type_timeval_pset,
3612 _eina_value_type_timeval_pget
3613};
3614
3615static Eina_Bool
3616_eina_value_type_blob_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
3617{
3618 memset(mem, 0, sizeof(Eina_Value_Blob));
3619 return EINA_TRUE;
3620}
3621
3622static inline const Eina_Value_Blob_Operations *
3623_eina_value_type_blob_ops_get(const Eina_Value_Blob *blob)
3624{
3625 if (!blob) return NULL;
3626 if (!blob->ops) return NULL;
3627 EINA_SAFETY_ON_FALSE_RETURN_VAL
3628 (blob->ops->version == EINA_VALUE_BLOB_OPERATIONS_VERSION, NULL);
3629 return blob->ops;
3630}
3631
3632static Eina_Bool
3633_eina_value_type_blob_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
3634{
3635 const Eina_Value_Blob_Operations *ops = _eina_value_type_blob_ops_get(mem);
3636 Eina_Value_Blob *tmem = mem;
3637 if ((ops) && (ops->free))
3638 ops->free(ops, (void *)tmem->memory, tmem->size);
3639 tmem->memory = NULL;
3640 tmem->size = 0;
3641 return EINA_TRUE;
3642}
3643
3644static Eina_Bool
3645_eina_value_type_blob_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
3646{
3647 const Eina_Value_Blob_Operations *ops = _eina_value_type_blob_ops_get(src);
3648 const Eina_Value_Blob *s = src;
3649 Eina_Value_Blob *d = dst;
3650
3651 *d = *s;
3652
3653 if ((ops) && (ops->copy))
3654 {
3655 d->memory = ops->copy(ops, s->memory, s->size);
3656 if ((d->memory == NULL) && (s->size > 0))
3657 return EINA_FALSE;
3658 }
3659
3660 return EINA_TRUE;
3661}
3662
3663static int
3664_eina_value_type_blob_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
3665{
3666 const Eina_Value_Blob_Operations *ops = _eina_value_type_blob_ops_get(a);
3667 const Eina_Value_Blob *ta = a, *tb = b;
3668 size_t minsize;
3669 if (ta->ops != tb->ops)
3670 {
3671 eina_error_set(EINA_ERROR_VALUE_FAILED);
3672 return -1;
3673 }
3674 if ((ops) && (ops->compare))
3675 return ops->compare(ops, ta->memory, ta->size, tb->memory, tb->size);
3676
3677 if (ta->size < tb->size)
3678 minsize = ta->size;
3679 else
3680 minsize = tb->size;
3681
3682 return memcmp(ta->memory, tb->memory, minsize);
3683}
3684
3685static Eina_Bool
3686_eina_value_type_blob_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
3687{
3688 const Eina_Value_Blob *tmem = type_mem;
3689
3690 eina_error_set(0);
3691 if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
3692 convert == EINA_VALUE_TYPE_STRING)
3693 {
3694 const Eina_Value_Blob_Operations *ops;
3695 Eina_Strbuf *str;
3696 const char *other_mem;
3697 Eina_Bool ret = EINA_FALSE, first = EINA_TRUE;
3698 const unsigned char *ptr, *ptr_end;
3699
3700 ops = _eina_value_type_blob_ops_get(tmem);
3701 if ((ops) && (ops->to_string))
3702 {
3703 char *x = ops->to_string(ops, tmem->memory, tmem->size);
3704 if (x)
3705 {
3706 ret = eina_value_type_pset(convert, convert_mem, &x);
3707 free(x);
3708 }
3709 return ret;
3710 }
3711
3712 str = eina_strbuf_new();
3713 if (!str)
3714 return EINA_FALSE;
3715
3716 if (!eina_strbuf_append_printf(str, "BLOB(%u, [", tmem->size))
3717 goto error;
3718
3719 ptr = tmem->memory;
3720 ptr_end = ptr + tmem->size;
3721 for (; ptr < ptr_end; ptr++)
3722 {
3723 if (first)
3724 {
3725 first = EINA_FALSE;
3726 if (!eina_strbuf_append_printf(str, "%02hhx", *ptr))
3727 goto error;
3728 }
3729 else
3730 {
3731 if (!eina_strbuf_append_printf(str, " %02hhx", *ptr))
3732 goto error;
3733 }
3734 }
3735
3736 if (!eina_strbuf_append(str, "])"))
3737 goto error;
3738
3739 other_mem = eina_strbuf_string_get(str);
3740 ret = eina_value_type_pset(convert, convert_mem, &other_mem);
3741
3742 error:
3743 eina_strbuf_free(str);
3744 return ret;
3745 }
3746 else
3747 {
3748 eina_error_set(EINA_ERROR_VALUE_FAILED);
3749 return EINA_FALSE;
3750 }
3751}
3752
3753static Eina_Bool
3754_eina_value_type_blob_convert_from(const Eina_Value_Type *type, const Eina_Value_Type *convert, void *type_mem, const void *convert_mem)
3755{
3756 Eina_Value_Blob desc;
3757 char *buf;
3758
3759 desc.ops = EINA_VALUE_BLOB_OPERATIONS_MALLOC;
3760
3761 if ((convert == EINA_VALUE_TYPE_STRING) ||
3762 (convert == EINA_VALUE_TYPE_STRINGSHARE))
3763 {
3764 const char *str = *(const char **)convert_mem;
3765 if (!str)
3766 {
3767 desc.size = 0;
3768 desc.memory = NULL;
3769 }
3770 else
3771 {
3772 desc.size = strlen(str) + 1;
3773 desc.memory = buf = malloc(desc.size);
3774 if (!desc.memory)
3775 {
3776 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
3777 return EINA_FALSE;
3778 }
3779 memcpy(buf, str, desc.size);
3780 }
3781 }
3782 else if (convert == EINA_VALUE_TYPE_ARRAY)
3783 {
3784 const Eina_Value_Array *a = convert_mem;
3785 if ((!a->array) || (a->array->len == 0))
3786 {
3787 desc.size = 0;
3788 desc.memory = NULL;
3789 }
3790 else
3791 {
3792 desc.size = a->array->len * a->array->member_size;
3793 desc.memory = buf = malloc(desc.size);
3794 if (!desc.memory)
3795 {
3796 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
3797 return EINA_FALSE;
3798 }
3799 memcpy(buf, a->array->members, desc.size);
3800 }
3801 }
3802 else if (convert == EINA_VALUE_TYPE_BLOB)
3803 {
3804 const Eina_Value_Blob *b = convert_mem;
3805 if (b->size == 0)
3806 {
3807 desc.size = 0;
3808 desc.memory = NULL;
3809 }
3810 else
3811 {
3812 desc.size = b->size;
3813 desc.memory = buf = malloc(desc.size);
3814 if (!desc.memory)
3815 {
3816 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
3817 return EINA_FALSE;
3818 }
3819 memcpy(buf, b->memory, desc.size);
3820 }
3821 }
3822 else
3823 {
3824 desc.size = convert->value_size;
3825 desc.memory = buf = malloc(convert->value_size);
3826 if (!desc.memory)
3827 {
3828 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
3829 return EINA_FALSE;
3830 }
3831 if (!eina_value_type_pget(convert, convert_mem, buf))
3832 {
3833 free(buf);
3834 return EINA_FALSE;
3835 }
3836 }
3837 return eina_value_type_pset(type, type_mem, &desc);
3838}
3839
3840static Eina_Bool
3841_eina_value_type_blob_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
3842{
3843 const Eina_Value_Blob_Operations *ops = _eina_value_type_blob_ops_get(mem);
3844 Eina_Value_Blob *tmem = mem;
3845 const Eina_Value_Blob *desc = ptr;
3846
3847 eina_error_set(0);
3848 if ((tmem->memory) && (tmem->memory == desc->memory))
3849 {
3850 tmem->ops = desc->ops;
3851 tmem->size = desc->size;
3852 return EINA_TRUE;
3853 }
3854
3855 if ((ops) && (ops->free))
3856 ops->free(ops, (void *)tmem->memory, tmem->size);
3857
3858 *tmem = *desc;
3859 return EINA_TRUE;
3860}
3861
3862static Eina_Bool
3863_eina_value_type_blob_vset(const Eina_Value_Type *type, void *mem, va_list args)
3864{
3865 const Eina_Value_Blob desc = va_arg(args, Eina_Value_Blob);
3866 _eina_value_type_blob_pset(type, mem, &desc);
3867 return EINA_TRUE;
3868}
3869
3870static Eina_Bool
3871_eina_value_type_blob_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
3872{
3873 memcpy(ptr, mem, sizeof(Eina_Value_Blob));
3874 return EINA_TRUE;
3875}
3876
3877static const Eina_Value_Type _EINA_VALUE_TYPE_BLOB = {
3878 EINA_VALUE_TYPE_VERSION,
3879 sizeof(Eina_Value_Blob),
3880 "Eina_Value_Blob",
3881 _eina_value_type_blob_setup,
3882 _eina_value_type_blob_flush,
3883 _eina_value_type_blob_copy,
3884 _eina_value_type_blob_compare,
3885 _eina_value_type_blob_convert_to,
3886 _eina_value_type_blob_convert_from,
3887 _eina_value_type_blob_vset,
3888 _eina_value_type_blob_pset,
3889 _eina_value_type_blob_pget
3890};
3891
3892static int
3893_eina_value_struct_operations_binsearch_cmp(const void *pa, const void *pb)
3894{
3895 const Eina_Value_Struct_Member *a = pa, *b = pb;
3896 return strcmp(a->name, b->name);
3897}
3898
3899static const Eina_Value_Struct_Member *
3900_eina_value_struct_operations_binsearch_find_member(const Eina_Value_Struct_Operations *ops __UNUSED__, const Eina_Value_Struct_Desc *desc, const char *name)
3901{
3902 unsigned int count = desc->member_count;
3903 Eina_Value_Struct_Member search;
3904 if (count == 0)
3905 {
3906 const Eina_Value_Struct_Member *itr = desc->members;
3907 for (; itr->name != NULL; itr++)
3908 count++;
3909 }
3910
3911 search.name = name;
3912 return bsearch(&search, desc->members, count,
3913 sizeof(Eina_Value_Struct_Member),
3914 _eina_value_struct_operations_binsearch_cmp);
3915}
3916
3917static Eina_Value_Struct_Operations _EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = {
3918 EINA_VALUE_STRUCT_OPERATIONS_VERSION,
3919 NULL, /* default alloc */
3920 NULL, /* default free */
3921 NULL, /* default copy */
3922 NULL, /* default compare */
3923 _eina_value_struct_operations_binsearch_find_member
3924};
3925
3926static const Eina_Value_Struct_Member *
3927_eina_value_struct_operations_stringshare_find_member(const Eina_Value_Struct_Operations *ops __UNUSED__, const Eina_Value_Struct_Desc *desc, const char *name)
3928{
3929 const Eina_Value_Struct_Member *itr = desc->members;
3930
3931 /* assumes name is stringshared.
3932 *
3933 * we do this because it's the recommended usage pattern, moreover
3934 * we expect to find the member, as users shouldn't look for
3935 * non-existent members!
3936 */
3937 if (desc->member_count > 0)
3938 {
3939 const Eina_Value_Struct_Member *itr_end = itr + desc->member_count;
3940 for (; itr < itr_end; itr++)
3941 if (itr->name == name)
3942 return itr;
3943 }
3944 else
3945 {
3946 for (; itr->name != NULL; itr++)
3947 if (itr->name == name)
3948 return itr;
3949 }
3950
3951 itr = desc->members;
3952 name = eina_stringshare_add(name);
3953 eina_stringshare_del(name); /* we'll not use the contents, this is fine */
3954 /* stringshare and look again */
3955 if (desc->member_count > 0)
3956 {
3957 const Eina_Value_Struct_Member *itr_end = itr + desc->member_count;
3958 for (; itr < itr_end; itr++)
3959 if (itr->name == name)
3960 return itr;
3961 }
3962 else
3963 {
3964 for (; itr->name != NULL; itr++)
3965 if (itr->name == name)
3966 return itr;
3967 }
3968
3969 return NULL;
3970}
3971
3972static Eina_Value_Struct_Operations _EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = {
3973 EINA_VALUE_STRUCT_OPERATIONS_VERSION,
3974 NULL, /* default alloc */
3975 NULL, /* default free */
3976 NULL, /* default copy */
3977 NULL, /* default compare */
3978 _eina_value_struct_operations_stringshare_find_member
3979};
3980
3981static inline const Eina_Value_Struct_Operations *
3982_eina_value_type_struct_ops_get(const Eina_Value_Struct *st)
3983{
3984 if (!st) return NULL;
3985 if (!st->desc) return NULL;
3986 if (!st->desc->ops) return NULL;
3987 EINA_SAFETY_ON_FALSE_RETURN_VAL
3988 (st->desc->ops->version == EINA_VALUE_STRUCT_OPERATIONS_VERSION, NULL);
3989 return st->desc->ops;
3990}
3991
3992EAPI const Eina_Value_Struct_Member *
3993eina_value_struct_member_find(const Eina_Value_Struct *st, const char *name)
3994{
3995 const Eina_Value_Struct_Operations *ops;
3996 const Eina_Value_Struct_Member *itr;
3997
3998 EINA_SAFETY_ON_NULL_RETURN_VAL(st, NULL);
3999 EINA_SAFETY_ON_NULL_RETURN_VAL(st->desc, NULL);
4000
4001 ops = _eina_value_type_struct_ops_get(st);
4002 if ((ops) && (ops->find_member))
4003 return ops->find_member(ops, st->desc, name);
4004
4005 itr = st->desc->members;
4006 if (st->desc->member_count)
4007 {
4008 const Eina_Value_Struct_Member *itr_end = itr + st->desc->member_count;
4009 for (; itr < itr_end; itr++)
4010 {
4011 if (strcmp(name, itr->name) == 0)
4012 return itr;
4013 }
4014 return NULL;
4015 }
4016 else
4017 {
4018 for (; itr->name != NULL; itr++)
4019 {
4020 if (strcmp(name, itr->name) == 0)
4021 return itr;
4022 }
4023 return NULL;
4024 }
4025}
4026
4027static Eina_Bool
4028_eina_value_type_struct_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
4029{
4030 memset(mem, 0, sizeof(Eina_Value_Struct));
4031 return EINA_TRUE;
4032}
4033
4034static Eina_Bool
4035_eina_value_type_struct_setup_member(const Eina_Value_Struct_Member *member, Eina_Value_Struct *st)
4036{
4037 unsigned char *base = st->memory;
4038 return eina_value_type_setup(member->type, base + member->offset);
4039}
4040
4041static Eina_Bool
4042_eina_value_type_struct_flush_member(const Eina_Value_Struct_Member *member, Eina_Value_Struct *st)
4043{
4044 unsigned char *base = st->memory;
4045 return eina_value_type_flush(member->type, base + member->offset);
4046}
4047
4048static Eina_Bool
4049_eina_value_type_struct_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
4050{
4051 const Eina_Value_Struct_Operations *ops;
4052 const Eina_Value_Struct_Member *itr;
4053 Eina_Value_Struct *tmem = mem;
4054 Eina_Bool ret = EINA_TRUE;
4055
4056 if ((!tmem->desc) || (!tmem->memory))
4057 return EINA_TRUE;
4058
4059 itr = tmem->desc->members;
4060 if (tmem->desc->member_count > 0)
4061 {
4062 const Eina_Value_Struct_Member *itr_end;
4063 itr_end = itr + tmem->desc->member_count;
4064 for (; itr < itr_end; itr++)
4065 ret &= _eina_value_type_struct_flush_member(itr, tmem);
4066 }
4067 else
4068 {
4069 for (; itr->name != NULL; itr++)
4070 ret &= _eina_value_type_struct_flush_member(itr, tmem);
4071 }
4072
4073 ops = _eina_value_type_struct_ops_get(mem);
4074 if ((ops) && (ops->free))
4075 ops->free(ops, tmem->desc, tmem->memory);
4076 else
4077 free(tmem->memory);
4078
4079 tmem->memory = NULL;
4080 tmem->desc = NULL;
4081
4082 return ret;
4083}
4084
4085static Eina_Bool
4086_eina_value_type_struct_copy_member(const Eina_Value_Struct_Member *member, const Eina_Value_Struct *s, Eina_Value_Struct *d)
4087{
4088 const unsigned char *base_s = s->memory;
4089 unsigned char *base_d = d->memory;
4090 return eina_value_type_copy(member->type,
4091 base_s + member->offset,
4092 base_d + member->offset);
4093}
4094
4095static Eina_Bool
4096_eina_value_type_struct_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
4097{
4098 const Eina_Value_Struct_Operations *ops;
4099 const Eina_Value_Struct_Member *itr;
4100 const Eina_Value_Struct *s = src;
4101 Eina_Value_Struct *d = dst;
4102
4103 *d = *s;
4104
4105 if ((!s->desc) || (!s->memory))
4106 return EINA_TRUE;
4107
4108 ops = _eina_value_type_struct_ops_get(src);
4109 if ((ops) && (ops->copy))
4110 {
4111 d->memory = ops->copy(ops, s->desc, s->memory);
4112 if (d->memory == NULL)
4113 return EINA_FALSE;
4114 return EINA_TRUE;
4115 }
4116
4117 if ((ops) && (ops->alloc))
4118 d->memory = ops->alloc(ops, s->desc);
4119 else
4120 d->memory = malloc(s->desc->size);
4121 if (!d->memory)
4122 {
4123 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
4124 return EINA_FALSE;
4125 }
4126
4127 itr = s->desc->members;
4128 if (s->desc->member_count > 0)
4129 {
4130 const Eina_Value_Struct_Member *itr_end = itr + s->desc->member_count;
4131 for (; itr < itr_end; itr++)
4132 if (!_eina_value_type_struct_copy_member(itr, s, d))
4133 goto error;
4134 }
4135 else
4136 {
4137 for (; itr->name != NULL; itr++)
4138 if (!_eina_value_type_struct_copy_member(itr, s, d))
4139 goto error;
4140 }
4141
4142 return EINA_TRUE;
4143
4144 error:
4145 itr--;
4146 for (; itr >= s->desc->members; itr--)
4147 _eina_value_type_struct_flush_member(itr, d);
4148
4149 if ((ops) && (ops->free))
4150 ops->free(ops, s->desc, d->memory);
4151 else
4152 free(d->memory);
4153 return EINA_FALSE;
4154}
4155
4156static inline int
4157_eina_value_type_struct_compare_member(const Eina_Value_Struct_Member *member, const Eina_Value_Struct *ta, const Eina_Value_Struct *tb)
4158{
4159 const unsigned char *base_a = ta->memory;
4160 const unsigned char *base_b = tb->memory;
4161 return eina_value_type_compare(member->type,
4162 base_a + member->offset,
4163 base_b + member->offset);
4164}
4165
4166static int
4167_eina_value_type_struct_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
4168{
4169 const Eina_Value_Struct_Operations *ops = _eina_value_type_struct_ops_get(a);
4170 const Eina_Value_Struct *ta = a, *tb = b;
4171 const Eina_Value_Struct_Member *itr;
4172 int cmp = 0;
4173
4174 if ((!ta->desc) && (!tb->desc))
4175 return 0;
4176 else if (ta->desc != tb->desc)
4177 {
4178 eina_error_set(EINA_ERROR_VALUE_FAILED);
4179 return -1;
4180 }
4181 if (ta->desc->ops != tb->desc->ops)
4182 {
4183 eina_error_set(EINA_ERROR_VALUE_FAILED);
4184 return -1;
4185 }
4186 if ((!ta->memory) && (!tb->memory))
4187 return 0;
4188 else if (!ta->memory)
4189 return -1;
4190 else if (!tb->memory)
4191 return 1;
4192
4193 if ((ops) && (ops->compare))
4194 return ops->compare(ops, ta->desc, ta->memory, tb->memory);
4195
4196 itr = ta->desc->members;
4197 if (ta->desc->member_count > 0)
4198 {
4199 const Eina_Value_Struct_Member *itr_end = itr + ta->desc->member_count;
4200 for (; (cmp == 0) && (itr < itr_end); itr++)
4201 cmp = _eina_value_type_struct_compare_member(itr, ta, tb);
4202 }
4203 else
4204 {
4205 for (; (cmp == 0) && (itr->name != NULL); itr++)
4206 cmp = _eina_value_type_struct_compare_member(itr, ta, tb);
4207 }
4208 return cmp;
4209}
4210
4211static void
4212_eina_value_type_struct_convert_to_string_member(const Eina_Value_Struct *st, const Eina_Value_Struct_Member *member, Eina_Strbuf *str)
4213{
4214 const unsigned char *p = st->memory;
4215 Eina_Bool first = st->desc->members == member;
4216 Eina_Bool r = EINA_FALSE;
4217
4218 if (first) eina_strbuf_append_printf(str, "%s: ", member->name);
4219 else eina_strbuf_append_printf(str, ", %s: ", member->name);
4220
4221 if ((member->type) && (member->type->convert_to))
4222 {
4223 const Eina_Value_Type *type = member->type;
4224 char *conv = NULL;
4225
4226 r = eina_value_type_convert_to(type, EINA_VALUE_TYPE_STRING,
4227 p + member->offset, &conv);
4228 if (r)
4229 {
4230 eina_strbuf_append(str, conv);
4231 free(conv);
4232 }
4233 }
4234
4235 if (!r)
4236 eina_strbuf_append_char(str, '?');
4237}
4238
4239static Eina_Bool
4240_eina_value_type_struct_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
4241{
4242 const Eina_Value_Struct *tmem = type_mem;
4243
4244 eina_error_set(0);
4245 if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
4246 convert == EINA_VALUE_TYPE_STRING)
4247 {
4248 Eina_Strbuf *str = eina_strbuf_new();
4249 const char *s;
4250 Eina_Bool ret;
4251
4252 if (!tmem->memory) eina_strbuf_append(str, "{}");
4253 else
4254 {
4255 const Eina_Value_Struct_Member *itr = tmem->desc->members;
4256
4257 eina_strbuf_append_char(str, '{');
4258
4259 if (tmem->desc->member_count > 0)
4260 {
4261 const Eina_Value_Struct_Member *itr_end;
4262
4263 itr_end = itr + tmem->desc->member_count;
4264 for (; itr < itr_end; itr++)
4265 _eina_value_type_struct_convert_to_string_member
4266 (tmem, itr, str);
4267 }
4268 else
4269 {
4270 for (; itr->name != NULL; itr++)
4271 _eina_value_type_struct_convert_to_string_member
4272 (tmem, itr, str);
4273 }
4274
4275 eina_strbuf_append_char(str, '}');
4276 }
4277 s = eina_strbuf_string_get(str);
4278 ret = eina_value_type_pset(convert, convert_mem, &s);
4279 eina_strbuf_free(str);
4280 return ret;
4281 }
4282 else
4283 {
4284 eina_error_set(EINA_ERROR_VALUE_FAILED);
4285 return EINA_FALSE;
4286 }
4287}
4288
4289static Eina_Bool
4290_eina_value_type_struct_desc_check(const Eina_Value_Struct_Desc *desc)
4291{
4292 unsigned int minsize = 0;
4293 const Eina_Value_Struct_Member *itr;
4294
4295 EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
4296 EINA_SAFETY_ON_FALSE_RETURN_VAL
4297 (desc->version == EINA_VALUE_STRUCT_DESC_VERSION, EINA_FALSE);
4298
4299 itr = desc->members;
4300 if (desc->member_count > 0)
4301 {
4302 const Eina_Value_Struct_Member *itr_end = itr + desc->member_count;
4303 for (; itr < itr_end; itr++)
4304 {
4305 unsigned int member_end;
4306
4307 EINA_SAFETY_ON_FALSE_RETURN_VAL
4308 (eina_value_type_check(itr->type), EINA_FALSE);
4309 EINA_SAFETY_ON_FALSE_RETURN_VAL
4310 (itr->type->value_size > 0, EINA_FALSE);
4311
4312 member_end = itr->offset + itr->type->value_size;
4313 if (minsize < member_end)
4314 minsize = member_end;
4315 }
4316 }
4317 else
4318 {
4319 for (; itr->name != NULL; itr++)
4320 {
4321 unsigned int member_end;
4322
4323 EINA_SAFETY_ON_FALSE_RETURN_VAL
4324 (eina_value_type_check(itr->type), EINA_FALSE);
4325 EINA_SAFETY_ON_FALSE_RETURN_VAL
4326 (itr->type->value_size > 0, EINA_FALSE);
4327
4328 member_end = itr->offset + itr->type->value_size;
4329 if (minsize < member_end)
4330 minsize = member_end;
4331 }
4332 }
4333
4334 EINA_SAFETY_ON_FALSE_RETURN_VAL(minsize > 0, EINA_FALSE);
4335 EINA_SAFETY_ON_FALSE_RETURN_VAL(desc->size >= minsize, EINA_FALSE);
4336 return EINA_TRUE;
4337}
4338
4339static Eina_Bool
4340_eina_value_type_struct_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
4341{
4342 const Eina_Value_Struct_Operations *ops;
4343 Eina_Value_Struct *tmem = mem;
4344 const Eina_Value_Struct *desc = ptr;
4345 const Eina_Value_Struct_Member *itr;
4346
4347 if (!_eina_value_type_struct_desc_check(desc->desc))
4348 {
4349 eina_error_set(EINA_ERROR_VALUE_FAILED);
4350 return EINA_FALSE;
4351 }
4352
4353 eina_error_set(0);
4354 if ((tmem->memory) && (tmem->memory == desc->memory))
4355 {
4356 tmem->desc = desc->desc;
4357 return EINA_TRUE;
4358 }
4359
4360 if (desc->memory)
4361 {
4362 Eina_Value_Struct tmp;
4363
4364 if (!_eina_value_type_struct_copy(type, desc, &tmp))
4365 return EINA_FALSE;
4366
4367 _eina_value_type_struct_flush(type, tmem);
4368 memcpy(tmem, &tmp, sizeof(tmp));
4369 return EINA_TRUE;
4370 }
4371
4372 if (tmem->memory) _eina_value_type_struct_flush(type, mem);
4373
4374 tmem->desc = desc->desc;
4375
4376 ops = _eina_value_type_struct_ops_get(desc);
4377 if ((ops) && (ops->alloc))
4378 tmem->memory = ops->alloc(ops, tmem->desc);
4379 else
4380 tmem->memory = malloc(tmem->desc->size);
4381
4382 if (!tmem->memory)
4383 {
4384 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
4385 return EINA_FALSE;
4386 }
4387
4388 itr = tmem->desc->members;
4389 if (tmem->desc->member_count > 0)
4390 {
4391 const Eina_Value_Struct_Member *itr_end;
4392 itr_end = itr + tmem->desc->member_count;
4393 for (; itr < itr_end; itr++)
4394 if (!_eina_value_type_struct_setup_member(itr, tmem))
4395 goto error;
4396 }
4397 else
4398 {
4399 for (; itr->name != NULL; itr++)
4400 if (!_eina_value_type_struct_setup_member(itr, tmem))
4401 goto error;
4402 }
4403
4404 return EINA_TRUE;
4405
4406 error:
4407 itr--;
4408 for (; itr >= tmem->desc->members; itr--)
4409 _eina_value_type_struct_flush_member(itr, tmem);
4410
4411 if ((ops) && (ops->free))
4412 ops->free(ops, tmem->desc, tmem->memory);
4413 else
4414 free(tmem->memory);
4415 tmem->memory = NULL;
4416 tmem->desc = NULL;
4417 return EINA_FALSE;
4418}
4419
4420static Eina_Bool
4421_eina_value_type_struct_vset(const Eina_Value_Type *type, void *mem, va_list args)
4422{
4423 const Eina_Value_Struct desc = va_arg(args, Eina_Value_Struct);
4424 _eina_value_type_struct_pset(type, mem, &desc);
4425 return EINA_TRUE;
4426}
4427
4428static Eina_Bool
4429_eina_value_type_struct_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
4430{
4431 memcpy(ptr, mem, sizeof(Eina_Value_Struct));
4432 return EINA_TRUE;
4433}
4434
4435static const Eina_Value_Type _EINA_VALUE_TYPE_STRUCT = {
4436 EINA_VALUE_TYPE_VERSION,
4437 sizeof(Eina_Value_Struct),
4438 "Eina_Value_Struct",
4439 _eina_value_type_struct_setup,
4440 _eina_value_type_struct_flush,
4441 _eina_value_type_struct_copy,
4442 _eina_value_type_struct_compare,
4443 _eina_value_type_struct_convert_to,
4444 NULL, /* no convert from */
4445 _eina_value_type_struct_vset,
4446 _eina_value_type_struct_pset,
4447 _eina_value_type_struct_pget
4448};
4449
4450static Eina_Bool
4451_eina_value_type_model_setup(const Eina_Value_Type *type __UNUSED__, void *mem)
4452{
4453 Eina_Model **tmem = mem;
4454 *tmem = NULL;
4455 return EINA_TRUE;
4456}
4457
4458static Eina_Bool
4459_eina_value_type_model_flush(const Eina_Value_Type *type __UNUSED__, void *mem)
4460{
4461 Eina_Model **tmem = mem;
4462 if (*tmem)
4463 {
4464 eina_model_unref(*tmem);
4465 *tmem = NULL;
4466 }
4467 return EINA_TRUE;
4468}
4469
4470static Eina_Bool
4471_eina_value_type_model_copy(const Eina_Value_Type *type __UNUSED__, const void *src, void *dst)
4472{
4473 const Eina_Model * const *s = src;
4474 Eina_Model **d = dst;
4475 if (*s)
4476 *d = eina_model_copy(*s); /* is it better to deep-copy? */
4477 else
4478 *d = NULL;
4479 return EINA_TRUE;
4480}
4481
4482static int
4483_eina_value_type_model_compare(const Eina_Value_Type *type __UNUSED__, const void *a, const void *b)
4484{
4485 const Eina_Model * const *ta = a;
4486 const Eina_Model * const *tb = b;
4487
4488 if ((!*ta) && (!*tb)) return 0;
4489 else if (!*ta) return 1;
4490 else if (!*tb) return -1;
4491 else return eina_model_compare(*ta, *tb);
4492}
4493
4494static Eina_Bool
4495_eina_value_type_model_convert_to(const Eina_Value_Type *type __UNUSED__, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
4496{
4497 const Eina_Model *v = *(const Eina_Model **)type_mem;
4498
4499 eina_error_set(0);
4500
4501 if (convert == EINA_VALUE_TYPE_STRINGSHARE ||
4502 convert == EINA_VALUE_TYPE_STRING)
4503 {
4504 char *other_mem = v ? eina_model_to_string(v) : NULL;
4505 Eina_Bool ret = eina_value_type_pset(convert, convert_mem, &other_mem);
4506 free(other_mem);
4507 return ret;
4508 }
4509 else
4510 {
4511 eina_error_set(EINA_ERROR_VALUE_FAILED);
4512 return EINA_FALSE;
4513 }
4514
4515 return EINA_TRUE;
4516}
4517
4518static Eina_Bool
4519_eina_value_type_model_vset(const Eina_Value_Type *type __UNUSED__, void *mem, va_list args)
4520{
4521 Eina_Model **tmem = mem, *tmp;
4522
4523 tmp = va_arg(args, Eina_Model *);
4524
4525 if (tmp) eina_model_ref(tmp);
4526 if (*tmem) eina_model_unref(*tmem);
4527
4528 *tmem = tmp;
4529
4530 return EINA_TRUE;
4531}
4532
4533static Eina_Bool
4534_eina_value_type_model_pset(const Eina_Value_Type *type __UNUSED__, void *mem, const void *ptr)
4535{
4536 Eina_Model **tmem = mem;
4537 Eina_Model **p = (Eina_Model **)ptr;
4538
4539 eina_error_set(0);
4540 if (*tmem == *p) return EINA_TRUE;
4541
4542 if (*p) eina_model_ref(*p);
4543 if (*tmem) eina_model_unref(*tmem);
4544
4545 *tmem = *p;
4546
4547 return EINA_TRUE;
4548}
4549
4550static Eina_Bool
4551_eina_value_type_model_pget(const Eina_Value_Type *type __UNUSED__, const void *mem, void *ptr)
4552{
4553 Eina_Model **tmem = (Eina_Model **)mem;
4554 Eina_Model **p = ptr;
4555 *p = *tmem;
4556 return EINA_TRUE;
4557}
4558
4559static const Eina_Value_Type _EINA_VALUE_TYPE_MODEL = {
4560 EINA_VALUE_TYPE_VERSION,
4561 sizeof(Eina_Model *),
4562 "Eina_Model",
4563 _eina_value_type_model_setup,
4564 _eina_value_type_model_flush,
4565 _eina_value_type_model_copy,
4566 _eina_value_type_model_compare,
4567 _eina_value_type_model_convert_to,
4568 NULL, /* no convert from */
4569 _eina_value_type_model_vset,
4570 _eina_value_type_model_pset,
4571 _eina_value_type_model_pget
4572};
4573
4574/* keep all basic types inlined in an array so we can compare if it's
4575 * a basic type using pointer arithmetic.
4576 *
4577 * NOTE-1: JUST BASIC TYPES, DO NOT ADD MORE TYPES HERE!!!
4578 * NOTE-2: KEEP ORDER, see eina_value_init()
4579 */
4580static const Eina_Value_Type _EINA_VALUE_TYPE_BASICS[] = {
4581 {
4582 EINA_VALUE_TYPE_VERSION,
4583 sizeof(unsigned char),
4584 "unsigned char",
4585 _eina_value_type_uchar_setup,
4586 _eina_value_type_uchar_flush,
4587 _eina_value_type_uchar_copy,
4588 _eina_value_type_uchar_compare,
4589 _eina_value_type_uchar_convert_to,
4590 NULL, /* no convert from */
4591 _eina_value_type_uchar_vset,
4592 _eina_value_type_uchar_pset,
4593 _eina_value_type_uchar_pget
4594 },
4595 {
4596 EINA_VALUE_TYPE_VERSION,
4597 sizeof(unsigned short),
4598 "unsigned short",
4599 _eina_value_type_ushort_setup,
4600 _eina_value_type_ushort_flush,
4601 _eina_value_type_ushort_copy,
4602 _eina_value_type_ushort_compare,
4603 _eina_value_type_ushort_convert_to,
4604 NULL, /* no convert from */
4605 _eina_value_type_ushort_vset,
4606 _eina_value_type_ushort_pset,
4607 _eina_value_type_ushort_pget
4608 },
4609 {
4610 EINA_VALUE_TYPE_VERSION,
4611 sizeof(unsigned int),
4612 "unsigned int",
4613 _eina_value_type_uint_setup,
4614 _eina_value_type_uint_flush,
4615 _eina_value_type_uint_copy,
4616 _eina_value_type_uint_compare,
4617 _eina_value_type_uint_convert_to,
4618 NULL, /* no convert from */
4619 _eina_value_type_uint_vset,
4620 _eina_value_type_uint_pset,
4621 _eina_value_type_uint_pget
4622 },
4623 {
4624 EINA_VALUE_TYPE_VERSION,
4625 sizeof(unsigned long),
4626 "unsigned long",
4627 _eina_value_type_ulong_setup,
4628 _eina_value_type_ulong_flush,
4629 _eina_value_type_ulong_copy,
4630 _eina_value_type_ulong_compare,
4631 _eina_value_type_ulong_convert_to,
4632 NULL, /* no convert from */
4633 _eina_value_type_ulong_vset,
4634 _eina_value_type_ulong_pset,
4635 _eina_value_type_ulong_pget
4636 },
4637 {
4638 EINA_VALUE_TYPE_VERSION,
4639 sizeof(uint64_t),
4640 "uint64_t",
4641 _eina_value_type_uint64_setup,
4642 _eina_value_type_uint64_flush,
4643 _eina_value_type_uint64_copy,
4644 _eina_value_type_uint64_compare,
4645 _eina_value_type_uint64_convert_to,
4646 NULL, /* no convert from */
4647 _eina_value_type_uint64_vset,
4648 _eina_value_type_uint64_pset,
4649 _eina_value_type_uint64_pget
4650 },
4651 {
4652 EINA_VALUE_TYPE_VERSION,
4653 sizeof(char),
4654 "char",
4655 _eina_value_type_char_setup,
4656 _eina_value_type_char_flush,
4657 _eina_value_type_char_copy,
4658 _eina_value_type_char_compare,
4659 _eina_value_type_char_convert_to,
4660 NULL, /* no convert from */
4661 _eina_value_type_char_vset,
4662 _eina_value_type_char_pset,
4663 _eina_value_type_char_pget
4664 },
4665 {
4666 EINA_VALUE_TYPE_VERSION,
4667 sizeof(short),
4668 "short",
4669 _eina_value_type_short_setup,
4670 _eina_value_type_short_flush,
4671 _eina_value_type_short_copy,
4672 _eina_value_type_short_compare,
4673 _eina_value_type_short_convert_to,
4674 NULL, /* no convert from */
4675 _eina_value_type_short_vset,
4676 _eina_value_type_short_pset,
4677 _eina_value_type_short_pget
4678 },
4679 {
4680 EINA_VALUE_TYPE_VERSION,
4681 sizeof(int),
4682 "int",
4683 _eina_value_type_int_setup,
4684 _eina_value_type_int_flush,
4685 _eina_value_type_int_copy,
4686 _eina_value_type_int_compare,
4687 _eina_value_type_int_convert_to,
4688 NULL, /* no convert from */
4689 _eina_value_type_int_vset,
4690 _eina_value_type_int_pset,
4691 _eina_value_type_int_pget
4692 },
4693 {
4694 EINA_VALUE_TYPE_VERSION,
4695 sizeof(long),
4696 "long",
4697 _eina_value_type_long_setup,
4698 _eina_value_type_long_flush,
4699 _eina_value_type_long_copy,
4700 _eina_value_type_long_compare,
4701 _eina_value_type_long_convert_to,
4702 NULL, /* no convert from */
4703 _eina_value_type_long_vset,
4704 _eina_value_type_long_pset,
4705 _eina_value_type_long_pget
4706 },
4707 {
4708 EINA_VALUE_TYPE_VERSION,
4709 sizeof(int64_t),
4710 "int64_t",
4711 _eina_value_type_int64_setup,
4712 _eina_value_type_int64_flush,
4713 _eina_value_type_int64_copy,
4714 _eina_value_type_int64_compare,
4715 _eina_value_type_int64_convert_to,
4716 NULL, /* no convert from */
4717 _eina_value_type_int64_vset,
4718 _eina_value_type_int64_pset,
4719 _eina_value_type_int64_pget
4720 },
4721 {
4722 EINA_VALUE_TYPE_VERSION,
4723 sizeof(float),
4724 "float",
4725 _eina_value_type_float_setup,
4726 _eina_value_type_float_flush,
4727 _eina_value_type_float_copy,
4728 _eina_value_type_float_compare,
4729 _eina_value_type_float_convert_to,
4730 NULL, /* no convert from */
4731 _eina_value_type_float_vset,
4732 _eina_value_type_float_pset,
4733 _eina_value_type_float_pget
4734 },
4735 {
4736 EINA_VALUE_TYPE_VERSION,
4737 sizeof(double),
4738 "double",
4739 _eina_value_type_double_setup,
4740 _eina_value_type_double_flush,
4741 _eina_value_type_double_copy,
4742 _eina_value_type_double_compare,
4743 _eina_value_type_double_convert_to,
4744 NULL, /* no convert from */
4745 _eina_value_type_double_vset,
4746 _eina_value_type_double_pset,
4747 _eina_value_type_double_pget
4748 },
4749 {
4750 EINA_VALUE_TYPE_VERSION,
4751 sizeof(const char *),
4752 "stringshare",
4753 _eina_value_type_string_common_setup,
4754 _eina_value_type_stringshare_flush,
4755 _eina_value_type_stringshare_copy,
4756 _eina_value_type_string_common_compare,
4757 _eina_value_type_string_common_convert_to,
4758 NULL, /* no convert from */
4759 _eina_value_type_stringshare_vset,
4760 _eina_value_type_stringshare_pset,
4761 _eina_value_type_string_common_pget
4762 },
4763 {
4764 EINA_VALUE_TYPE_VERSION,
4765 sizeof(char *),
4766 "string",
4767 _eina_value_type_string_common_setup,
4768 _eina_value_type_string_flush,
4769 _eina_value_type_string_copy,
4770 _eina_value_type_string_common_compare,
4771 _eina_value_type_string_common_convert_to,
4772 NULL, /* no convert from */
4773 _eina_value_type_string_vset,
4774 _eina_value_type_string_pset,
4775 _eina_value_type_string_common_pget
4776 },
4777 {
4778 EINA_VALUE_TYPE_VERSION,
4779 sizeof(unsigned long),
4780 "timestamp",
4781 _eina_value_type_ulong_setup,
4782 _eina_value_type_ulong_flush,
4783 _eina_value_type_ulong_copy,
4784 _eina_value_type_ulong_compare,
4785 _eina_value_type_ulong_convert_to,
4786 NULL, /* no convert from */
4787 _eina_value_type_ulong_vset,
4788 _eina_value_type_ulong_pset,
4789 _eina_value_type_ulong_pget
4790 }
4791};
4792
4793static void
4794_eina_value_blob_operations_malloc_free(const Eina_Value_Blob_Operations *ops __UNUSED__, void *memory, size_t size __UNUSED__)
4795{
4796 free(memory);
4797}
4798
4799static void *
4800_eina_value_blob_operations_malloc_copy(const Eina_Value_Blob_Operations *ops __UNUSED__, const void *memory, size_t size)
4801{
4802 void *ret = malloc(size);
4803 if (!ret)
4804 {
4805 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
4806 return NULL;
4807 }
4808 memcpy(ret, memory, size);
4809 return ret;
4810}
4811
4812static const Eina_Value_Blob_Operations _EINA_VALUE_BLOB_OPERATIONS_MALLOC = {
4813 EINA_VALUE_BLOB_OPERATIONS_VERSION,
4814 _eina_value_blob_operations_malloc_free,
4815 _eina_value_blob_operations_malloc_copy,
4816 NULL,
4817 NULL
4818};
4819
4820typedef struct _Eina_Value_Inner_Mp Eina_Value_Inner_Mp;
4821struct _Eina_Value_Inner_Mp
4822{
4823 Eina_Mempool *mempool;
4824 int references;
4825};
4826
4827/**
4828 * @endcond
4829 */
4830
4831static const char EINA_ERROR_VALUE_FAILED_STR[] = "Value check failed.";
4832
4833/**
4834 */
4835
4836static inline void
4837_eina_value_inner_mp_dispose(int size, Eina_Value_Inner_Mp *imp)
4838{
4839 EINA_SAFETY_ON_FALSE_RETURN(imp->references == 0);
4840
4841 eina_hash_del_by_key(_eina_value_inner_mps, &size);
4842 eina_mempool_del(imp->mempool);
4843 free(imp);
4844}
4845
4846static inline Eina_Value_Inner_Mp *
4847_eina_value_inner_mp_get(int size)
4848{
4849 Eina_Value_Inner_Mp *imp = eina_hash_find(_eina_value_inner_mps, &size);
4850 if (imp) return imp;
4851
4852 imp = malloc(sizeof(Eina_Value_Inner_Mp));
4853 if (!imp)
4854 return NULL;
4855
4856 imp->references = 0;
4857
4858 imp->mempool = eina_mempool_add(_eina_value_mp_choice,
4859 "Eina_Value_Inner_Mp", NULL, size, 128);
4860 if (!imp->mempool)
4861 {
4862 free(imp);
4863 return NULL;
4864 }
4865
4866 if (!eina_hash_add(_eina_value_inner_mps, &size, imp))
4867 {
4868 eina_mempool_del(imp->mempool);
4869 free(imp);
4870 return NULL;
4871 }
4872
4873 return imp;
4874}
4875
4876static inline void *
4877_eina_value_inner_alloc_internal(int size)
4878{
4879 Eina_Value_Inner_Mp *imp;
4880 void *mem;
4881
4882 imp = _eina_value_inner_mp_get(size);
4883 if (!imp) return NULL;
4884
4885 mem = eina_mempool_malloc(imp->mempool, size);
4886 if (mem) imp->references++;
4887 else if (imp->references == 0) _eina_value_inner_mp_dispose(size, imp);
4888
4889 return mem;
4890}
4891
4892static inline void
4893_eina_value_inner_free_internal(int size, void *mem)
4894{
4895 Eina_Value_Inner_Mp *imp = eina_hash_find(_eina_value_inner_mps, &size);
4896 EINA_SAFETY_ON_NULL_RETURN(imp);
4897
4898 eina_mempool_free(imp->mempool, mem);
4899
4900 imp->references--;
4901 if (imp->references > 0) return;
4902 _eina_value_inner_mp_dispose(size, imp);
4903}
4904
4905EAPI void *
4906eina_value_inner_alloc(size_t size)
4907{
4908 void *mem;
4909
4910 if (size > 256) return malloc(size);
4911
4912 eina_lock_take(&_eina_value_inner_mps_lock);
4913 mem = _eina_value_inner_alloc_internal(size);
4914 eina_lock_release(&_eina_value_inner_mps_lock);
4915
4916 return mem;
4917}
4918
4919EAPI void
4920eina_value_inner_free(size_t size, void *mem)
4921{
4922 if (size > 256)
4923 {
4924 free(mem);
4925 return;
4926 }
4927
4928 eina_lock_take(&_eina_value_inner_mps_lock);
4929 _eina_value_inner_free_internal(size, mem);
4930 eina_lock_release(&_eina_value_inner_mps_lock);
4931}
4932
4933/**
4934 * @internal
4935 * @brief Initialize the value module.
4936 *
4937 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
4938 *
4939 * This function sets up the value module of Eina. It is called
4940 * by eina_init().
4941 *
4942 * @see eina_init()
4943 */
4944Eina_Bool
4945eina_value_init(void)
4946{
4947 const char *choice, *tmp;
4948
4949 _eina_value_log_dom = eina_log_domain_register("eina_value",
4950 EINA_LOG_COLOR_DEFAULT);
4951 if (_eina_value_log_dom < 0)
4952 {
4953 EINA_LOG_ERR("Could not register log domain: eina_value");
4954 return EINA_FALSE;
4955 }
4956
4957#ifdef EINA_DEFAULT_MEMPOOL
4958 choice = "pass_through";
4959#else
4960 choice = "chained_mempool";
4961#endif
4962 tmp = getenv("EINA_MEMPOOL");
4963 if (tmp && tmp[0])
4964 choice = tmp;
4965
4966 if (choice)
4967 _eina_value_mp_choice = strdup(choice);
4968
4969 _eina_value_mp = eina_mempool_add
4970 (_eina_value_mp_choice, "value", NULL, sizeof(Eina_Value), 320);
4971 if (!_eina_value_mp)
4972 {
4973 ERR("Mempool for value cannot be allocated in value init.");
4974 goto on_init_fail_mp;
4975 }
4976
4977 if (!eina_lock_new(&_eina_value_inner_mps_lock))
4978 {
4979 ERR("Cannot create lock in value init.");
4980 goto on_init_fail_lock;
4981 }
4982 _eina_value_inner_mps = eina_hash_int32_new(NULL);
4983 if (!_eina_value_inner_mps)
4984 {
4985 ERR("Cannot create hash for inner mempools in value init.");
4986 goto on_init_fail_hash;
4987 }
4988
4989 EINA_ERROR_VALUE_FAILED = eina_error_msg_static_register(
4990 EINA_ERROR_VALUE_FAILED_STR);
4991
4992 EINA_VALUE_TYPE_UCHAR = _EINA_VALUE_TYPE_BASICS + 0;
4993 EINA_VALUE_TYPE_USHORT = _EINA_VALUE_TYPE_BASICS + 1;
4994 EINA_VALUE_TYPE_UINT = _EINA_VALUE_TYPE_BASICS + 2;
4995 EINA_VALUE_TYPE_ULONG = _EINA_VALUE_TYPE_BASICS + 3;
4996 EINA_VALUE_TYPE_UINT64 = _EINA_VALUE_TYPE_BASICS + 4;
4997 EINA_VALUE_TYPE_CHAR = _EINA_VALUE_TYPE_BASICS + 5;
4998 EINA_VALUE_TYPE_SHORT = _EINA_VALUE_TYPE_BASICS + 6;
4999 EINA_VALUE_TYPE_INT = _EINA_VALUE_TYPE_BASICS + 7;
5000 EINA_VALUE_TYPE_LONG = _EINA_VALUE_TYPE_BASICS + 8;
5001 EINA_VALUE_TYPE_INT64 = _EINA_VALUE_TYPE_BASICS + 9;
5002 EINA_VALUE_TYPE_FLOAT = _EINA_VALUE_TYPE_BASICS + 10;
5003 EINA_VALUE_TYPE_DOUBLE = _EINA_VALUE_TYPE_BASICS + 11;
5004 EINA_VALUE_TYPE_STRINGSHARE = _EINA_VALUE_TYPE_BASICS + 12;
5005 EINA_VALUE_TYPE_STRING = _EINA_VALUE_TYPE_BASICS + 13;
5006 EINA_VALUE_TYPE_TIMESTAMP = _EINA_VALUE_TYPE_BASICS + 14;
5007
5008 _EINA_VALUE_TYPE_BASICS_START = _EINA_VALUE_TYPE_BASICS + 0;
5009 _EINA_VALUE_TYPE_BASICS_END = _EINA_VALUE_TYPE_BASICS + 14;
5010
5011 EINA_SAFETY_ON_FALSE_RETURN_VAL((sizeof(_EINA_VALUE_TYPE_BASICS)/sizeof(_EINA_VALUE_TYPE_BASICS[0])) == 15, EINA_FALSE);
5012
5013
5014 EINA_VALUE_TYPE_ARRAY = &_EINA_VALUE_TYPE_ARRAY;
5015 EINA_VALUE_TYPE_LIST = &_EINA_VALUE_TYPE_LIST;
5016 EINA_VALUE_TYPE_HASH = &_EINA_VALUE_TYPE_HASH;
5017 EINA_VALUE_TYPE_TIMEVAL = &_EINA_VALUE_TYPE_TIMEVAL;
5018 EINA_VALUE_TYPE_BLOB = &_EINA_VALUE_TYPE_BLOB;
5019 EINA_VALUE_TYPE_STRUCT = &_EINA_VALUE_TYPE_STRUCT;
5020 EINA_VALUE_TYPE_MODEL = &_EINA_VALUE_TYPE_MODEL;
5021
5022 EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC;
5023
5024 EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = &_EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH;
5025 EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = &_EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE;
5026
5027 return EINA_TRUE;
5028
5029 on_init_fail_hash:
5030 eina_lock_free(&_eina_value_inner_mps_lock);
5031 on_init_fail_lock:
5032 eina_mempool_del(_eina_value_mp);
5033 on_init_fail_mp:
5034 free(_eina_value_mp_choice);
5035 _eina_value_mp_choice = NULL;
5036 eina_log_domain_unregister(_eina_value_log_dom);
5037 _eina_value_log_dom = -1;
5038 return EINA_FALSE;
5039}
5040
5041/**
5042 * @internal
5043 * @brief Shut down the value module.
5044 *
5045 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
5046 *
5047 * This function shuts down the value module set up by
5048 * eina_value_init(). It is called by eina_shutdown().
5049 *
5050 * @see eina_shutdown()
5051 */
5052Eina_Bool
5053eina_value_shutdown(void)
5054{
5055 eina_lock_take(&_eina_value_inner_mps_lock);
5056 if (eina_hash_population(_eina_value_inner_mps) != 0)
5057 ERR("Cannot free eina_value internal memory pools -- still in use!");
5058 else
5059 eina_hash_free(_eina_value_inner_mps);
5060 eina_lock_release(&_eina_value_inner_mps_lock);
5061 eina_lock_free(&_eina_value_inner_mps_lock);
5062
5063 free(_eina_value_mp_choice);
5064 _eina_value_mp_choice = NULL;
5065 eina_mempool_del(_eina_value_mp);
5066 eina_log_domain_unregister(_eina_value_log_dom);
5067 _eina_value_log_dom = -1;
5068 return EINA_TRUE;
5069}
5070
5071/*============================================================================*
5072* Global *
5073*============================================================================*/
5074
5075/*============================================================================*
5076* API *
5077*============================================================================*/
5078
5079EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_START = NULL;
5080EAPI const Eina_Value_Type *_EINA_VALUE_TYPE_BASICS_END = NULL;
5081
5082EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UCHAR = NULL;
5083EAPI const Eina_Value_Type *EINA_VALUE_TYPE_USHORT = NULL;
5084EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT = NULL;
5085EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ULONG = NULL;
5086EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMESTAMP = NULL;
5087EAPI const Eina_Value_Type *EINA_VALUE_TYPE_UINT64 = NULL;
5088EAPI const Eina_Value_Type *EINA_VALUE_TYPE_CHAR = NULL;
5089EAPI const Eina_Value_Type *EINA_VALUE_TYPE_SHORT = NULL;
5090EAPI const Eina_Value_Type *EINA_VALUE_TYPE_INT = NULL;
5091EAPI const Eina_Value_Type *EINA_VALUE_TYPE_LONG = NULL;
5092EAPI const Eina_Value_Type *EINA_VALUE_TYPE_INT64 = NULL;
5093EAPI const Eina_Value_Type *EINA_VALUE_TYPE_FLOAT = NULL;
5094EAPI const Eina_Value_Type *EINA_VALUE_TYPE_DOUBLE = NULL;
5095EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRINGSHARE = NULL;
5096EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRING = NULL;
5097EAPI const Eina_Value_Type *EINA_VALUE_TYPE_ARRAY = NULL;
5098EAPI const Eina_Value_Type *EINA_VALUE_TYPE_LIST = NULL;
5099EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL;
5100EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL;
5101EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL;
5102EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL;
5103EAPI const Eina_Value_Type *EINA_VALUE_TYPE_MODEL = NULL;
5104
5105EAPI const Eina_Value_Blob_Operations *EINA_VALUE_BLOB_OPERATIONS_MALLOC = NULL;
5106
5107EAPI const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH = NULL;
5108EAPI const Eina_Value_Struct_Operations *EINA_VALUE_STRUCT_OPERATIONS_STRINGSHARE = NULL;
5109
5110EAPI Eina_Error EINA_ERROR_VALUE_FAILED = 0;
5111
5112EAPI const unsigned int eina_prime_table[] =
5113{
5114 17, 31, 61, 127, 257, 509, 1021,
5115 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
5116 2097143, 4194301, 8388617, 16777213
5117};
5118
5119EAPI Eina_Value *
5120eina_value_new(const Eina_Value_Type *type)
5121{
5122 Eina_Value *value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));;
5123 if (!value)
5124 {
5125 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
5126 return NULL;
5127 }
5128 if (!eina_value_setup(value, type))
5129 {
5130 free(value);
5131 return NULL;
5132 }
5133 return value;
5134}
5135
5136EAPI void
5137eina_value_free(Eina_Value *value)
5138{
5139 EINA_SAFETY_ON_NULL_RETURN(value);
5140 eina_value_flush(value);
5141 eina_mempool_free(_eina_value_mp, value);
5142}
5143
5144
5145EAPI Eina_Bool
5146eina_value_copy(const Eina_Value *value, Eina_Value *copy)
5147{
5148 const Eina_Value_Type *type;
5149 const void *src;
5150 void *dst;
5151 Eina_Bool ret;
5152
5153 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
5154 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type),
5155 EINA_FALSE);
5156 EINA_SAFETY_ON_NULL_RETURN_VAL(copy, EINA_FALSE);
5157 EINA_SAFETY_ON_NULL_RETURN_VAL(value->type->copy, EINA_FALSE);
5158
5159 type = value->type;
5160 if (!eina_value_setup(copy, type))
5161 return EINA_FALSE;
5162
5163 src = eina_value_memory_get(value);
5164 dst = eina_value_memory_get(copy);
5165 ret = type->copy(type, src, dst);
5166 if (!ret)
5167 eina_value_flush(copy);
5168
5169 return ret;
5170}
5171
5172EAPI Eina_Bool
5173eina_value_convert(const Eina_Value *value, Eina_Value *convert)
5174{
5175 Eina_Bool ret = EINA_FALSE;
5176 const Eina_Value_Type *type, *convert_type;
5177 const void *type_mem;
5178 void *convert_mem;
5179
5180 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
5181 EINA_SAFETY_ON_NULL_RETURN_VAL(convert, EINA_FALSE);
5182 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type),
5183 EINA_FALSE);
5184 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(convert->type),
5185 EINA_FALSE);
5186
5187 type = value->type;
5188 convert_type = convert->type;
5189
5190 type_mem = eina_value_memory_get(value);
5191 convert_mem = eina_value_memory_get(convert);
5192
5193 if (type->convert_to)
5194 ret = type->convert_to(type, convert_type, type_mem, convert_mem);
5195
5196 if ((!ret) && (convert_type->convert_from))
5197 ret = convert_type->convert_from(convert_type, type, convert_mem,
5198 type_mem);
5199
5200 return ret;
5201}
5202
5203EAPI char *
5204eina_value_to_string(const Eina_Value *value)
5205{
5206 Eina_Value tmp;
5207
5208 EINA_SAFETY_ON_NULL_RETURN_VAL(value, NULL);
5209 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(value->type), NULL);
5210
5211 if (!eina_value_setup(&tmp, EINA_VALUE_TYPE_STRING))
5212 return NULL;
5213 if (!eina_value_convert(value, &tmp))
5214 return NULL;
5215
5216 return tmp.value.ptr; /* steal value */
5217}
5218
5219EAPI Eina_Value *
5220eina_value_array_new(const Eina_Value_Type *subtype, unsigned int step)
5221{
5222 Eina_Value *value;
5223
5224 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(subtype), EINA_FALSE);
5225
5226 value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));;
5227 if (!value)
5228 return NULL;
5229
5230 if (!eina_value_array_setup(value, subtype, step))
5231 {
5232 eina_mempool_free(_eina_value_mp, value);
5233 return NULL;
5234 }
5235
5236 return value;
5237}
5238
5239EAPI Eina_Value *
5240eina_value_list_new(const Eina_Value_Type *subtype)
5241{
5242 Eina_Value *value;
5243
5244 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(subtype), EINA_FALSE);
5245
5246 value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));;
5247 if (!value)
5248 return NULL;
5249
5250 if (!eina_value_list_setup(value, subtype))
5251 {
5252 eina_mempool_free(_eina_value_mp, value);
5253 return NULL;
5254 }
5255
5256 return value;
5257}
5258
5259EAPI Eina_Value *
5260eina_value_hash_new(const Eina_Value_Type *subtype, unsigned int buckets_power_size)
5261{
5262 Eina_Value *value;
5263
5264 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(subtype), EINA_FALSE);
5265
5266 value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));;
5267 if (!value)
5268 return NULL;
5269
5270 if (!eina_value_hash_setup(value, subtype, buckets_power_size))
5271 {
5272 eina_mempool_free(_eina_value_mp, value);
5273 return NULL;
5274 }
5275
5276 return value;
5277}
5278
5279EAPI Eina_Value *
5280eina_value_struct_new(const Eina_Value_Struct_Desc *desc)
5281{
5282 Eina_Value *value;
5283
5284 value = eina_mempool_malloc(_eina_value_mp, sizeof(Eina_Value));;
5285 if (!value)
5286 return NULL;
5287
5288 if (!eina_value_struct_setup(value, desc))
5289 {
5290 eina_mempool_free(_eina_value_mp, value);
5291 return NULL;
5292 }
5293
5294 return value;
5295}
5296
5297EAPI Eina_Bool
5298eina_value_type_check(const Eina_Value_Type *type)
5299{
5300 EINA_SAFETY_ON_NULL_RETURN_VAL(type, EINA_FALSE);
5301 return type->version == EINA_VALUE_TYPE_VERSION;
5302}
5303
5304EAPI const char *
5305eina_value_type_name_get(const Eina_Value_Type *type)
5306{
5307 EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_value_type_check(type), NULL);
5308 return type->name;
5309}
diff --git a/libraries/eina/src/lib/eina_xattr.c b/libraries/eina/src/lib/eina_xattr.c
deleted file mode 100644
index d4ed139..0000000
--- a/libraries/eina/src/lib/eina_xattr.c
+++ /dev/null
@@ -1,483 +0,0 @@
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 <stdlib.h>
24#include <sys/types.h>
25#include <string.h>
26#include <math.h>
27
28#ifdef HAVE_XATTR
29# include <sys/xattr.h>
30#endif
31
32#include "eina_config.h"
33#include "eina_private.h"
34
35#include "eina_safety_checks.h"
36#include "eina_xattr.h"
37#include "eina_convert.h"
38#include "eina_stringshare.h"
39
40/*============================================================================*
41 * Local *
42 *============================================================================*/
43
44/**
45 * @cond LOCAL
46 */
47
48typedef struct _Eina_Xattr_Iterator Eina_Xattr_Iterator;
49
50struct _Eina_Xattr_Iterator
51{
52 Eina_Iterator iterator;
53
54 const char *file;
55 Eina_Xattr *attr;
56
57 ssize_t length;
58 ssize_t offset;
59
60 int fd;
61
62 char xattr[1];
63};
64
65#ifdef HAVE_XATTR
66static Eina_Bool
67_eina_xattr_value_ls_fd_iterator_next(Eina_Xattr_Iterator *it, void **data)
68{
69 char *tmp;
70
71 if (it->offset >= it->length)
72 return EINA_FALSE;
73
74 *data = it->attr;
75 it->attr->name = it->xattr + it->offset;
76
77 it->attr->length = fgetxattr(it->fd, it->attr->name, NULL, 0);
78 if (it->attr->length)
79 {
80 tmp = realloc((void*) it->attr->value, it->attr->length);
81 if (!tmp)
82 {
83 free((void*) it->attr->value);
84 it->attr->value = NULL;
85 it->attr->length = 0;
86 }
87 else
88 {
89 it->attr->length = fgetxattr(it->fd, it->attr->name,
90 (void *) it->attr->value,
91 it->attr->length);
92 }
93 }
94
95 return EINA_TRUE;
96}
97
98static Eina_Bool
99_eina_xattr_value_ls_iterator_next(Eina_Xattr_Iterator *it, void **data)
100{
101 char *tmp;
102
103 if (it->offset >= it->length)
104 return EINA_FALSE;
105
106 *data = it->attr;
107 it->attr->name = it->xattr + it->offset;
108
109 it->attr->length = getxattr(it->file, it->attr->name, NULL, 0);
110 if (it->attr->length)
111 {
112 tmp = realloc((void*) it->attr->value, it->attr->length);
113 if (!tmp)
114 {
115 free((void*) it->attr->value);
116 it->attr->value = NULL;
117 it->attr->length = 0;
118 }
119 else
120 {
121 it->attr->length = getxattr(it->file, it->attr->name,
122 (void*) it->attr->value,
123 it->attr->length);
124 }
125 }
126
127 return EINA_TRUE;
128}
129
130static Eina_Bool
131_eina_xattr_ls_iterator_next(Eina_Xattr_Iterator *it, void **data)
132{
133 if (it->offset >= it->length)
134 return EINA_FALSE;
135
136 *data = it->xattr + it->offset;
137 it->offset += strlen(it->xattr + it->offset) + 1;
138
139 return EINA_TRUE;
140}
141
142static void *
143_eina_xattr_ls_iterator_container(Eina_Xattr_Iterator *it __UNUSED__)
144{
145 return NULL;
146}
147
148static void
149_eina_xattr_ls_iterator_free(Eina_Xattr_Iterator *it)
150{
151 EINA_MAGIC_SET(&it->iterator, 0);
152 if (it->attr) free((void *) it->attr->value);
153 eina_stringshare_del(it->file);
154 free(it->attr);
155 free(it);
156}
157#endif
158
159/**
160 * @endcond
161 */
162
163
164/*============================================================================*
165 * Global *
166 *============================================================================*/
167
168
169/*============================================================================*
170 * API *
171 *============================================================================*/
172
173EAPI Eina_Iterator *
174eina_xattr_value_fd_ls(int fd)
175{
176#ifdef HAVE_XATTR
177 Eina_Xattr_Iterator *it;
178 ssize_t length;
179
180 if (fd < 0) return NULL;
181
182 length = flistxattr(fd, NULL, 0);
183 if (length <= 0) return NULL;
184
185 it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1);
186 if (!it) return NULL;
187
188 it->attr = calloc(1, sizeof (Eina_Xattr));
189 if (!it->attr)
190 {
191 free(it);
192 return NULL;
193 }
194
195 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
196
197 it->fd = fd;
198 it->length = flistxattr(fd, it->xattr, length);
199 if (it->length != length)
200 {
201 free(it);
202 return NULL;
203 }
204
205 it->iterator.version = EINA_ITERATOR_VERSION;
206 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_value_ls_fd_iterator_next);
207 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container);
208 it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free);
209
210 return &it->iterator;
211#else
212 return NULL;
213 (void)fd;
214#endif
215}
216
217EAPI Eina_Iterator *
218eina_xattr_fd_ls(int fd)
219{
220#ifdef HAVE_XATTR
221 Eina_Xattr_Iterator *it;
222 ssize_t length;
223
224 if (fd < 0) return NULL;
225
226 length = flistxattr(fd, NULL, 0);
227 if (length <= 0) return NULL;
228
229 it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1);
230 if (!it) return NULL;
231
232 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
233
234 it->length = flistxattr(fd, it->xattr, length);
235 if (it->length != length)
236 {
237 free(it);
238 return NULL;
239 }
240
241 it->iterator.version = EINA_ITERATOR_VERSION;
242 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_ls_iterator_next);
243 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container);
244 it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free);
245
246 return &it->iterator;
247#else
248 return NULL;
249 (void)fd;
250#endif
251}
252
253EAPI Eina_Iterator *
254eina_xattr_ls(const char *file)
255{
256#ifdef HAVE_XATTR
257 Eina_Xattr_Iterator *it;
258 ssize_t length;
259
260 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
261
262 length = listxattr(file, NULL, 0);
263 if (length <= 0) return NULL;
264
265 it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1);
266 if (!it) return NULL;
267
268 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
269
270 it->length = listxattr(file, it->xattr, length);
271 if (it->length != length)
272 {
273 free(it);
274 return NULL;
275 }
276
277 it->iterator.version = EINA_ITERATOR_VERSION;
278 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_ls_iterator_next);
279 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container);
280 it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free);
281
282 return &it->iterator;
283#else
284 return NULL;
285 (void)file;
286#endif
287}
288
289EAPI Eina_Iterator *
290eina_xattr_value_ls(const char *file)
291{
292#ifdef HAVE_XATTR
293 Eina_Xattr_Iterator *it;
294 ssize_t length;
295
296 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
297
298 length = listxattr(file, NULL, 0);
299 if (length <= 0) return NULL;
300
301 it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1);
302 if (!it) return NULL;
303
304 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
305
306 it->length = listxattr(file, it->xattr, length);
307 if (it->length != length)
308 {
309 free(it);
310 return NULL;
311 }
312
313 it->file = eina_stringshare_add(file);
314
315 it->iterator.version = EINA_ITERATOR_VERSION;
316 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_value_ls_iterator_next);
317 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container);
318 it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free);
319
320 return &it->iterator;
321#else
322 return NULL;
323 (void)file;
324#endif
325}
326
327EAPI void *
328eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
329{
330#ifdef HAVE_XATTR
331 void *ret = NULL;
332 ssize_t tmp;
333
334 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
335 EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL);
336 EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL);
337
338 *size = getxattr(file, attribute, NULL, 0);
339 /* Size should be less than 2MB (already huge in my opinion) */
340 if (!(*size > 0 && *size < 2 * 1024 * 1024))
341 goto on_error;
342
343 ret = malloc(*size);
344 if (!ret) return NULL;
345
346 tmp = getxattr(file, attribute, ret, *size);
347 if (tmp != *size)
348 goto on_error;
349
350 return ret;
351
352 on_error:
353 free(ret);
354 *size = 0;
355 return NULL;
356#else
357 EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL);
358 *size = 0;
359 return NULL;
360 (void)file;
361 (void)attribute;
362#endif
363}
364
365EAPI Eina_Bool
366eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
367{
368#ifdef HAVE_XATTR
369 int iflags;
370
371 EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
372 EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE);
373 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
374 EINA_SAFETY_ON_TRUE_RETURN_VAL(!(length > 0 && length < 2 * 1024 * 1024), EINA_FALSE);
375
376 switch (flags)
377 {
378 case EINA_XATTR_INSERT: iflags = 0; break;
379 case EINA_XATTR_REPLACE: iflags = XATTR_REPLACE; break;
380 case EINA_XATTR_CREATED: iflags = XATTR_CREATE; break;
381 default:
382 return EINA_FALSE;
383 }
384
385 if (setxattr(file, attribute, data, length, iflags))
386 return EINA_FALSE;
387 return EINA_TRUE;
388#else
389 return EINA_FALSE;
390 (void)file;
391 (void)attribute;
392 (void)data;
393 (void)length;
394 (void)flags;
395#endif
396}
397
398EAPI Eina_Bool
399eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags)
400{
401 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
402
403 return eina_xattr_set(file, attribute, data, strlen(data) + 1, flags);
404}
405
406EAPI char *
407eina_xattr_string_get(const char *file, const char *attribute)
408{
409 char *tmp;
410 ssize_t size;
411
412 tmp = eina_xattr_get(file, attribute, &size);
413 if (!tmp) return NULL;
414
415 if (tmp[size - 1] != '\0')
416 {
417 free(tmp);
418 return NULL;
419 }
420
421 return tmp;
422}
423
424EAPI Eina_Bool
425eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags)
426{
427 char buffer[128];
428
429 eina_convert_dtoa(value, buffer);
430 return eina_xattr_string_set(file, attribute, buffer, flags);
431}
432
433EAPI Eina_Bool
434eina_xattr_double_get(const char *file, const char *attribute, double *value)
435{
436 char *tmp;
437 long long int m = 0;
438 long int e = 0;
439
440 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
441
442 tmp = eina_xattr_string_get(file, attribute);
443 if (!tmp) return EINA_FALSE;
444
445 if (!eina_convert_atod(tmp, strlen(tmp), &m, &e))
446 {
447 free(tmp);
448 return EINA_FALSE;
449 }
450
451 *value = ldexp((double)m, e);
452 free(tmp);
453
454 return EINA_TRUE;
455}
456
457EAPI Eina_Bool
458eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags)
459{
460 char buffer[10];
461
462 eina_convert_itoa(value, buffer);
463 return eina_xattr_string_set(file, attribute, buffer, flags);
464}
465
466EAPI Eina_Bool
467eina_xattr_int_get(const char *file, const char *attribute, int *value)
468{
469 char *tmp;
470 char *eos;
471 Eina_Bool result;
472
473 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
474
475 tmp = eina_xattr_string_get(file, attribute);
476 if (!tmp) return EINA_FALSE;
477
478 *value = (int) strtol(tmp, &eos, 10);
479 result = (*eos == '\0');
480 free(tmp);
481
482 return result;
483}
diff --git a/libraries/eina/src/modules/Makefile.am b/libraries/eina/src/modules/Makefile.am
deleted file mode 100644
index 53e28b7..0000000
--- a/libraries/eina/src/modules/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
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
deleted file mode 100644
index 62d4a09..0000000
--- a/libraries/eina/src/modules/Makefile.in
+++ /dev/null
@@ -1,639 +0,0 @@
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/eina/eina_bench.m4 \
40 $(top_srcdir)/m4/eina/eina_check.m4 \
41 $(top_srcdir)/m4/common/efl_attribute.m4 \
42 $(top_srcdir)/m4/common/efl_benchmark.m4 \
43 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
44 $(top_srcdir)/m4/common/efl_coverage.m4 \
45 $(top_srcdir)/m4/common/efl_cpu.m4 \
46 $(top_srcdir)/m4/common/efl_doxygen.m4 \
47 $(top_srcdir)/m4/common/efl_examples.m4 \
48 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
49 $(top_srcdir)/m4/common/efl_path_max.m4 \
50 $(top_srcdir)/m4/common/efl_tests.m4 \
51 $(top_srcdir)/m4/common/efl_threads.m4 \
52 $(top_srcdir)/m4/common/efl_voltron.m4 \
53 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
54 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
55 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
56 $(top_srcdir)/configure.ac
57am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
58 $(ACLOCAL_M4)
59mkinstalldirs = $(install_sh) -d
60CONFIG_HEADER = $(top_builddir)/config.h
61CONFIG_CLEAN_FILES =
62CONFIG_CLEAN_VPATH_FILES =
63AM_V_GEN = $(am__v_GEN_$(V))
64am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
65am__v_GEN_0 = @echo " GEN " $@;
66AM_V_at = $(am__v_at_$(V))
67am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
68am__v_at_0 = @
69SOURCES =
70DIST_SOURCES =
71RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
72 html-recursive info-recursive install-data-recursive \
73 install-dvi-recursive install-exec-recursive \
74 install-html-recursive install-info-recursive \
75 install-pdf-recursive install-ps-recursive install-recursive \
76 installcheck-recursive installdirs-recursive pdf-recursive \
77 ps-recursive uninstall-recursive
78RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
79 distclean-recursive maintainer-clean-recursive
80AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
81 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
82 distdir
83ETAGS = etags
84CTAGS = ctags
85DIST_SUBDIRS = $(SUBDIRS)
86DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
87am__relativize = \
88 dir0=`pwd`; \
89 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
90 sed_rest='s,^[^/]*/*,,'; \
91 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
92 sed_butlast='s,/*[^/]*$$,,'; \
93 while test -n "$$dir1"; do \
94 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
95 if test "$$first" != "."; then \
96 if test "$$first" = ".."; then \
97 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
98 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
99 else \
100 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
101 if test "$$first2" = "$$first"; then \
102 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
103 else \
104 dir2="../$$dir2"; \
105 fi; \
106 dir0="$$dir0"/"$$first"; \
107 fi; \
108 fi; \
109 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
110 done; \
111 reldir="$$dir2"
112ACLOCAL = @ACLOCAL@
113ALLOCA = @ALLOCA@
114AMTAR = @AMTAR@
115AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
116AR = @AR@
117AS = @AS@
118AUTOCONF = @AUTOCONF@
119AUTOHEADER = @AUTOHEADER@
120AUTOMAKE = @AUTOMAKE@
121AWK = @AWK@
122CC = @CC@
123CCDEPMODE = @CCDEPMODE@
124CFLAGS = @CFLAGS@
125CHECK_CFLAGS = @CHECK_CFLAGS@
126CHECK_LIBS = @CHECK_LIBS@
127CPP = @CPP@
128CPPFLAGS = @CPPFLAGS@
129CXX = @CXX@
130CXXCPP = @CXXCPP@
131CXXDEPMODE = @CXXDEPMODE@
132CXXFLAGS = @CXXFLAGS@
133CYGPATH_W = @CYGPATH_W@
134DEFS = @DEFS@
135DEPDIR = @DEPDIR@
136DLLTOOL = @DLLTOOL@
137DSYMUTIL = @DSYMUTIL@
138DUMPBIN = @DUMPBIN@
139ECHO_C = @ECHO_C@
140ECHO_N = @ECHO_N@
141ECHO_T = @ECHO_T@
142ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
143ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
144EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
145EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
146EFL_EINA_BUILD = @EFL_EINA_BUILD@
147EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
148EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
149EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
150EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
151EGREP = @EGREP@
152EINA_CFLAGS = @EINA_CFLAGS@
153EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
154EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
155EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
156EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
157EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
158EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
159EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
160EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
161EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
162EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
163EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
164EINA_LIBS = @EINA_LIBS@
165EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
166EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
167EMEMOA_LIBS = @EMEMOA_LIBS@
168ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
169ESCAPE_LIBS = @ESCAPE_LIBS@
170EVIL_CFLAGS = @EVIL_CFLAGS@
171EVIL_LIBS = @EVIL_LIBS@
172EXEEXT = @EXEEXT@
173EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
174EXOTIC_LIBS = @EXOTIC_LIBS@
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@
285SUBDIRS = mp
286MAINTAINERCLEANFILES = \
287Makefile.in
288
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/Makefile'; \
302 $(am__cd) $(top_srcdir) && \
303 $(AUTOMAKE) --gnu src/modules/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/Makefile.am b/libraries/eina/src/modules/mp/Makefile.am
deleted file mode 100644
index 435d57a..0000000
--- a/libraries/eina/src/modules/mp/Makefile.am
+++ /dev/null
@@ -1,45 +0,0 @@
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
deleted file mode 100644
index 7283b72..0000000
--- a/libraries/eina/src/modules/mp/Makefile.in
+++ /dev/null
@@ -1,647 +0,0 @@
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/eina/eina_bench.m4 \
47 $(top_srcdir)/m4/eina/eina_check.m4 \
48 $(top_srcdir)/m4/common/efl_attribute.m4 \
49 $(top_srcdir)/m4/common/efl_benchmark.m4 \
50 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
51 $(top_srcdir)/m4/common/efl_coverage.m4 \
52 $(top_srcdir)/m4/common/efl_cpu.m4 \
53 $(top_srcdir)/m4/common/efl_doxygen.m4 \
54 $(top_srcdir)/m4/common/efl_examples.m4 \
55 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
56 $(top_srcdir)/m4/common/efl_path_max.m4 \
57 $(top_srcdir)/m4/common/efl_tests.m4 \
58 $(top_srcdir)/m4/common/efl_threads.m4 \
59 $(top_srcdir)/m4/common/efl_voltron.m4 \
60 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
61 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
62 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
63 $(top_srcdir)/configure.ac
64am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
65 $(ACLOCAL_M4)
66mkinstalldirs = $(install_sh) -d
67CONFIG_HEADER = $(top_builddir)/config.h
68CONFIG_CLEAN_FILES =
69CONFIG_CLEAN_VPATH_FILES =
70AM_V_GEN = $(am__v_GEN_$(V))
71am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
72am__v_GEN_0 = @echo " GEN " $@;
73AM_V_at = $(am__v_at_$(V))
74am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
75am__v_at_0 = @
76SOURCES =
77DIST_SOURCES =
78RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
79 html-recursive info-recursive install-data-recursive \
80 install-dvi-recursive install-exec-recursive \
81 install-html-recursive install-info-recursive \
82 install-pdf-recursive install-ps-recursive install-recursive \
83 installcheck-recursive installdirs-recursive pdf-recursive \
84 ps-recursive uninstall-recursive
85RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
86 distclean-recursive maintainer-clean-recursive
87AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
88 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
89 distdir
90ETAGS = etags
91CTAGS = ctags
92DIST_SUBDIRS = buddy chained_pool ememoa_fixed ememoa_unknown \
93 fixed_bitmap one_big pass_through
94DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
95am__relativize = \
96 dir0=`pwd`; \
97 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
98 sed_rest='s,^[^/]*/*,,'; \
99 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
100 sed_butlast='s,/*[^/]*$$,,'; \
101 while test -n "$$dir1"; do \
102 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
103 if test "$$first" != "."; then \
104 if test "$$first" = ".."; then \
105 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
106 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
107 else \
108 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
109 if test "$$first2" = "$$first"; then \
110 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
111 else \
112 dir2="../$$dir2"; \
113 fi; \
114 dir0="$$dir0"/"$$first"; \
115 fi; \
116 fi; \
117 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
118 done; \
119 reldir="$$dir2"
120ACLOCAL = @ACLOCAL@
121ALLOCA = @ALLOCA@
122AMTAR = @AMTAR@
123AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
124AR = @AR@
125AS = @AS@
126AUTOCONF = @AUTOCONF@
127AUTOHEADER = @AUTOHEADER@
128AUTOMAKE = @AUTOMAKE@
129AWK = @AWK@
130CC = @CC@
131CCDEPMODE = @CCDEPMODE@
132CFLAGS = @CFLAGS@
133CHECK_CFLAGS = @CHECK_CFLAGS@
134CHECK_LIBS = @CHECK_LIBS@
135CPP = @CPP@
136CPPFLAGS = @CPPFLAGS@
137CXX = @CXX@
138CXXCPP = @CXXCPP@
139CXXDEPMODE = @CXXDEPMODE@
140CXXFLAGS = @CXXFLAGS@
141CYGPATH_W = @CYGPATH_W@
142DEFS = @DEFS@
143DEPDIR = @DEPDIR@
144DLLTOOL = @DLLTOOL@
145DSYMUTIL = @DSYMUTIL@
146DUMPBIN = @DUMPBIN@
147ECHO_C = @ECHO_C@
148ECHO_N = @ECHO_N@
149ECHO_T = @ECHO_T@
150ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
151ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
152EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
153EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
154EFL_EINA_BUILD = @EFL_EINA_BUILD@
155EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
156EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
157EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
158EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
159EGREP = @EGREP@
160EINA_CFLAGS = @EINA_CFLAGS@
161EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
162EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
163EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
164EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
165EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
166EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
167EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
168EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
169EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
170EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
171EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
172EINA_LIBS = @EINA_LIBS@
173EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
174EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
175EMEMOA_LIBS = @EMEMOA_LIBS@
176ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
177ESCAPE_LIBS = @ESCAPE_LIBS@
178EVIL_CFLAGS = @EVIL_CFLAGS@
179EVIL_LIBS = @EVIL_LIBS@
180EXEEXT = @EXEEXT@
181EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
182EXOTIC_LIBS = @EXOTIC_LIBS@
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
294SUBDIRS = $(am__append_1) $(am__append_2) $(am__append_3) \
295 $(am__append_4) $(am__append_5) $(am__append_6) \
296 $(am__append_7)
297all: all-recursive
298
299.SUFFIXES:
300$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
301 @for dep in $?; do \
302 case '$(am__configure_deps)' in \
303 *$$dep*) \
304 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
305 && { if test -f $@; then exit 0; else break; fi; }; \
306 exit 1;; \
307 esac; \
308 done; \
309 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/Makefile'; \
310 $(am__cd) $(top_srcdir) && \
311 $(AUTOMAKE) --gnu src/modules/mp/Makefile
312.PRECIOUS: Makefile
313Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
314 @case '$?' in \
315 *config.status*) \
316 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
317 *) \
318 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
319 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
320 esac;
321
322$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
323 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
324
325$(top_srcdir)/configure: $(am__configure_deps)
326 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
327$(ACLOCAL_M4): $(am__aclocal_m4_deps)
328 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
329$(am__aclocal_m4_deps):
330
331mostlyclean-libtool:
332 -rm -f *.lo
333
334clean-libtool:
335 -rm -rf .libs _libs
336
337# This directory's subdirectories are mostly independent; you can cd
338# into them and run `make' without going through this Makefile.
339# To change the values of `make' variables: instead of editing Makefiles,
340# (1) if the variable is set in `config.status', edit `config.status'
341# (which will cause the Makefiles to be regenerated when you run `make');
342# (2) otherwise, pass the desired values on the `make' command line.
343$(RECURSIVE_TARGETS):
344 @fail= failcom='exit 1'; \
345 for f in x $$MAKEFLAGS; do \
346 case $$f in \
347 *=* | --[!k]*);; \
348 *k*) failcom='fail=yes';; \
349 esac; \
350 done; \
351 dot_seen=no; \
352 target=`echo $@ | sed s/-recursive//`; \
353 list='$(SUBDIRS)'; for subdir in $$list; do \
354 echo "Making $$target in $$subdir"; \
355 if test "$$subdir" = "."; then \
356 dot_seen=yes; \
357 local_target="$$target-am"; \
358 else \
359 local_target="$$target"; \
360 fi; \
361 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
362 || eval $$failcom; \
363 done; \
364 if test "$$dot_seen" = "no"; then \
365 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
366 fi; test -z "$$fail"
367
368$(RECURSIVE_CLEAN_TARGETS):
369 @fail= failcom='exit 1'; \
370 for f in x $$MAKEFLAGS; do \
371 case $$f in \
372 *=* | --[!k]*);; \
373 *k*) failcom='fail=yes';; \
374 esac; \
375 done; \
376 dot_seen=no; \
377 case "$@" in \
378 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
379 *) list='$(SUBDIRS)' ;; \
380 esac; \
381 rev=''; for subdir in $$list; do \
382 if test "$$subdir" = "."; then :; else \
383 rev="$$subdir $$rev"; \
384 fi; \
385 done; \
386 rev="$$rev ."; \
387 target=`echo $@ | sed s/-recursive//`; \
388 for subdir in $$rev; do \
389 echo "Making $$target in $$subdir"; \
390 if test "$$subdir" = "."; then \
391 local_target="$$target-am"; \
392 else \
393 local_target="$$target"; \
394 fi; \
395 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
396 || eval $$failcom; \
397 done && test -z "$$fail"
398tags-recursive:
399 list='$(SUBDIRS)'; for subdir in $$list; do \
400 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
401 done
402ctags-recursive:
403 list='$(SUBDIRS)'; for subdir in $$list; do \
404 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
405 done
406
407ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
408 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
409 unique=`for i in $$list; do \
410 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
411 done | \
412 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
413 END { if (nonempty) { for (i in files) print i; }; }'`; \
414 mkid -fID $$unique
415tags: TAGS
416
417TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
418 $(TAGS_FILES) $(LISP)
419 set x; \
420 here=`pwd`; \
421 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
422 include_option=--etags-include; \
423 empty_fix=.; \
424 else \
425 include_option=--include; \
426 empty_fix=; \
427 fi; \
428 list='$(SUBDIRS)'; for subdir in $$list; do \
429 if test "$$subdir" = .; then :; else \
430 test ! -f $$subdir/TAGS || \
431 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
432 fi; \
433 done; \
434 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
435 unique=`for i in $$list; do \
436 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
437 done | \
438 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
439 END { if (nonempty) { for (i in files) print i; }; }'`; \
440 shift; \
441 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
442 test -n "$$unique" || unique=$$empty_fix; \
443 if test $$# -gt 0; then \
444 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
445 "$$@" $$unique; \
446 else \
447 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
448 $$unique; \
449 fi; \
450 fi
451ctags: CTAGS
452CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
453 $(TAGS_FILES) $(LISP)
454 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
455 unique=`for i in $$list; do \
456 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
457 done | \
458 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
459 END { if (nonempty) { for (i in files) print i; }; }'`; \
460 test -z "$(CTAGS_ARGS)$$unique" \
461 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
462 $$unique
463
464GTAGS:
465 here=`$(am__cd) $(top_builddir) && pwd` \
466 && $(am__cd) $(top_srcdir) \
467 && gtags -i $(GTAGS_ARGS) "$$here"
468
469distclean-tags:
470 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
471
472distdir: $(DISTFILES)
473 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
474 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
475 list='$(DISTFILES)'; \
476 dist_files=`for file in $$list; do echo $$file; done | \
477 sed -e "s|^$$srcdirstrip/||;t" \
478 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
479 case $$dist_files in \
480 */*) $(MKDIR_P) `echo "$$dist_files" | \
481 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
482 sort -u` ;; \
483 esac; \
484 for file in $$dist_files; do \
485 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
486 if test -d $$d/$$file; then \
487 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
488 if test -d "$(distdir)/$$file"; then \
489 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
490 fi; \
491 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
492 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
493 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
494 fi; \
495 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
496 else \
497 test -f "$(distdir)/$$file" \
498 || cp -p $$d/$$file "$(distdir)/$$file" \
499 || exit 1; \
500 fi; \
501 done
502 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
503 if test "$$subdir" = .; then :; else \
504 test -d "$(distdir)/$$subdir" \
505 || $(MKDIR_P) "$(distdir)/$$subdir" \
506 || exit 1; \
507 fi; \
508 done
509 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
510 if test "$$subdir" = .; then :; else \
511 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
512 $(am__relativize); \
513 new_distdir=$$reldir; \
514 dir1=$$subdir; dir2="$(top_distdir)"; \
515 $(am__relativize); \
516 new_top_distdir=$$reldir; \
517 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
518 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
519 ($(am__cd) $$subdir && \
520 $(MAKE) $(AM_MAKEFLAGS) \
521 top_distdir="$$new_top_distdir" \
522 distdir="$$new_distdir" \
523 am__remove_distdir=: \
524 am__skip_length_check=: \
525 am__skip_mode_fix=: \
526 distdir) \
527 || exit 1; \
528 fi; \
529 done
530check-am: all-am
531check: check-recursive
532all-am: Makefile
533installdirs: installdirs-recursive
534installdirs-am:
535install: install-recursive
536install-exec: install-exec-recursive
537install-data: install-data-recursive
538uninstall: uninstall-recursive
539
540install-am: all-am
541 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
542
543installcheck: installcheck-recursive
544install-strip:
545 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
546 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
547 `test -z '$(STRIP)' || \
548 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
549mostlyclean-generic:
550
551clean-generic:
552
553distclean-generic:
554 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
555 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
556
557maintainer-clean-generic:
558 @echo "This command is intended for maintainers to use"
559 @echo "it deletes files that may require special tools to rebuild."
560 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
561clean: clean-recursive
562
563clean-am: clean-generic clean-libtool mostlyclean-am
564
565distclean: distclean-recursive
566 -rm -f Makefile
567distclean-am: clean-am distclean-generic distclean-tags
568
569dvi: dvi-recursive
570
571dvi-am:
572
573html: html-recursive
574
575html-am:
576
577info: info-recursive
578
579info-am:
580
581install-data-am:
582
583install-dvi: install-dvi-recursive
584
585install-dvi-am:
586
587install-exec-am:
588
589install-html: install-html-recursive
590
591install-html-am:
592
593install-info: install-info-recursive
594
595install-info-am:
596
597install-man:
598
599install-pdf: install-pdf-recursive
600
601install-pdf-am:
602
603install-ps: install-ps-recursive
604
605install-ps-am:
606
607installcheck-am:
608
609maintainer-clean: maintainer-clean-recursive
610 -rm -f Makefile
611maintainer-clean-am: distclean-am maintainer-clean-generic
612
613mostlyclean: mostlyclean-recursive
614
615mostlyclean-am: mostlyclean-generic mostlyclean-libtool
616
617pdf: pdf-recursive
618
619pdf-am:
620
621ps: ps-recursive
622
623ps-am:
624
625uninstall-am:
626
627.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
628 install-am install-strip tags-recursive
629
630.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
631 all all-am check check-am clean clean-generic clean-libtool \
632 ctags ctags-recursive distclean distclean-generic \
633 distclean-libtool distclean-tags distdir dvi dvi-am html \
634 html-am info info-am install install-am install-data \
635 install-data-am install-dvi install-dvi-am install-exec \
636 install-exec-am install-html install-html-am install-info \
637 install-info-am install-man install-pdf install-pdf-am \
638 install-ps install-ps-am install-strip installcheck \
639 installcheck-am installdirs installdirs-am maintainer-clean \
640 maintainer-clean-generic mostlyclean mostlyclean-generic \
641 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
642 uninstall uninstall-am
643
644
645# Tell versions [3.59,3.63) of GNU make to not export all variables.
646# Otherwise a system limit (for SysV at least) may be exceeded.
647.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.am b/libraries/eina/src/modules/mp/buddy/Makefile.am
deleted file mode 100644
index c0a6cd7..0000000
--- a/libraries/eina/src/modules/mp/buddy/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
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@EFL_EINA_BUILD@
10
11controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH)
12controller_LTLIBRARIES = module.la
13
14module_la_SOURCES = \
15eina_buddy.c
16
17module_la_CFLAGS = @EINA_CFLAGS@
18module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
19module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
20module_la_LIBTOOLFLAGS = --tag=disable-static
21
22install-data-hook:
23 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
24uninstall-hook:
25 rm -f $(DESTDIR)$(controllerdir)/module.*
26
27clean-local:
28 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.in b/libraries/eina/src/modules/mp/buddy/Makefile.in
deleted file mode 100644
index 449c511..0000000
--- a/libraries/eina/src/modules/mp/buddy/Makefile.in
+++ /dev/null
@@ -1,650 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_buddy.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EFL_EINA_BUILD@
309
310controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH)
311controller_LTLIBRARIES = module.la
312module_la_SOURCES = \
313eina_buddy.c
314
315module_la_CFLAGS = @EINA_CFLAGS@
316module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
317module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
318module_la_LIBTOOLFLAGS = --tag=disable-static
319all: all-am
320
321.SUFFIXES:
322.SUFFIXES: .c .lo .o .obj
323$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
324 @for dep in $?; do \
325 case '$(am__configure_deps)' in \
326 *$$dep*) \
327 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
328 && { if test -f $@; then exit 0; else break; fi; }; \
329 exit 1;; \
330 esac; \
331 done; \
332 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile'; \
333 $(am__cd) $(top_srcdir) && \
334 $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile
335.PRECIOUS: Makefile
336Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
337 @case '$?' in \
338 *config.status*) \
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
340 *) \
341 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
342 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
343 esac;
344
345$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
346 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
347
348$(top_srcdir)/configure: $(am__configure_deps)
349 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
350$(ACLOCAL_M4): $(am__aclocal_m4_deps)
351 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
352$(am__aclocal_m4_deps):
353install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
354 @$(NORMAL_INSTALL)
355 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
356 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
357 list2=; for p in $$list; do \
358 if test -f $$p; then \
359 list2="$$list2 $$p"; \
360 else :; fi; \
361 done; \
362 test -z "$$list2" || { \
363 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
364 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
365 }
366
367uninstall-controllerLTLIBRARIES:
368 @$(NORMAL_UNINSTALL)
369 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
370 for p in $$list; do \
371 $(am__strip_dir) \
372 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
373 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
374 done
375
376clean-controllerLTLIBRARIES:
377 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
378 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
379 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
380 test "$$dir" != "$$p" || dir=.; \
381 echo "rm -f \"$${dir}/so_locations\""; \
382 rm -f "$${dir}/so_locations"; \
383 done
384module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
385 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
386
387mostlyclean-compile:
388 -rm -f *.$(OBJEXT)
389
390distclean-compile:
391 -rm -f *.tab.c
392
393@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_buddy.Plo@am__quote@
394
395.c.o:
396@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
397@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
398@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
399@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
401@am__fastdepCC_FALSE@ $(COMPILE) -c $<
402
403.c.obj:
404@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
405@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
406@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
407@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
409@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
410
411.c.lo:
412@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
413@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
414@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
415@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
417@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
418
419module_la-eina_buddy.lo: eina_buddy.c
420@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
421@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_buddy.Tpo $(DEPDIR)/module_la-eina_buddy.Plo
422@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
423@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_buddy.c' object='module_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
425@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
426
427mostlyclean-libtool:
428 -rm -f *.lo
429
430clean-libtool:
431 -rm -rf .libs _libs
432
433ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
434 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
435 unique=`for i in $$list; do \
436 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
437 done | \
438 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
439 END { if (nonempty) { for (i in files) print i; }; }'`; \
440 mkid -fID $$unique
441tags: TAGS
442
443TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
444 $(TAGS_FILES) $(LISP)
445 set x; \
446 here=`pwd`; \
447 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
448 unique=`for i in $$list; do \
449 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
450 done | \
451 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
452 END { if (nonempty) { for (i in files) print i; }; }'`; \
453 shift; \
454 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
455 test -n "$$unique" || unique=$$empty_fix; \
456 if test $$# -gt 0; then \
457 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
458 "$$@" $$unique; \
459 else \
460 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
461 $$unique; \
462 fi; \
463 fi
464ctags: CTAGS
465CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
466 $(TAGS_FILES) $(LISP)
467 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
468 unique=`for i in $$list; do \
469 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
470 done | \
471 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
472 END { if (nonempty) { for (i in files) print i; }; }'`; \
473 test -z "$(CTAGS_ARGS)$$unique" \
474 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
475 $$unique
476
477GTAGS:
478 here=`$(am__cd) $(top_builddir) && pwd` \
479 && $(am__cd) $(top_srcdir) \
480 && gtags -i $(GTAGS_ARGS) "$$here"
481
482distclean-tags:
483 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
484
485distdir: $(DISTFILES)
486 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
487 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 list='$(DISTFILES)'; \
489 dist_files=`for file in $$list; do echo $$file; done | \
490 sed -e "s|^$$srcdirstrip/||;t" \
491 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
492 case $$dist_files in \
493 */*) $(MKDIR_P) `echo "$$dist_files" | \
494 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
495 sort -u` ;; \
496 esac; \
497 for file in $$dist_files; do \
498 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
499 if test -d $$d/$$file; then \
500 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
501 if test -d "$(distdir)/$$file"; then \
502 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
503 fi; \
504 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
505 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
506 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
507 fi; \
508 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
509 else \
510 test -f "$(distdir)/$$file" \
511 || cp -p $$d/$$file "$(distdir)/$$file" \
512 || exit 1; \
513 fi; \
514 done
515check-am: all-am
516check: check-am
517all-am: Makefile $(LTLIBRARIES)
518installdirs:
519 for dir in "$(DESTDIR)$(controllerdir)"; do \
520 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
521 done
522install: install-am
523install-exec: install-exec-am
524install-data: install-data-am
525uninstall: uninstall-am
526
527install-am: all-am
528 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
529
530installcheck: installcheck-am
531install-strip:
532 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
533 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
534 `test -z '$(STRIP)' || \
535 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
536mostlyclean-generic:
537
538clean-generic:
539
540distclean-generic:
541 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
542 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
543
544maintainer-clean-generic:
545 @echo "This command is intended for maintainers to use"
546 @echo "it deletes files that may require special tools to rebuild."
547 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
548clean: clean-am
549
550clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
551 clean-local mostlyclean-am
552
553distclean: distclean-am
554 -rm -rf ./$(DEPDIR)
555 -rm -f Makefile
556distclean-am: clean-am distclean-compile distclean-generic \
557 distclean-tags
558
559dvi: dvi-am
560
561dvi-am:
562
563html: html-am
564
565html-am:
566
567info: info-am
568
569info-am:
570
571install-data-am: install-controllerLTLIBRARIES
572 @$(NORMAL_INSTALL)
573 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
574install-dvi: install-dvi-am
575
576install-dvi-am:
577
578install-exec-am:
579
580install-html: install-html-am
581
582install-html-am:
583
584install-info: install-info-am
585
586install-info-am:
587
588install-man:
589
590install-pdf: install-pdf-am
591
592install-pdf-am:
593
594install-ps: install-ps-am
595
596install-ps-am:
597
598installcheck-am:
599
600maintainer-clean: maintainer-clean-am
601 -rm -rf ./$(DEPDIR)
602 -rm -f Makefile
603maintainer-clean-am: distclean-am maintainer-clean-generic
604
605mostlyclean: mostlyclean-am
606
607mostlyclean-am: mostlyclean-compile mostlyclean-generic \
608 mostlyclean-libtool
609
610pdf: pdf-am
611
612pdf-am:
613
614ps: ps-am
615
616ps-am:
617
618uninstall-am: uninstall-controllerLTLIBRARIES
619 @$(NORMAL_INSTALL)
620 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
621.MAKE: install-am install-data-am install-strip uninstall-am
622
623.PHONY: CTAGS GTAGS all all-am check check-am clean \
624 clean-controllerLTLIBRARIES clean-generic clean-libtool \
625 clean-local ctags distclean distclean-compile \
626 distclean-generic distclean-libtool distclean-tags distdir dvi \
627 dvi-am html html-am info info-am install install-am \
628 install-controllerLTLIBRARIES install-data install-data-am \
629 install-data-hook install-dvi install-dvi-am install-exec \
630 install-exec-am install-html install-html-am install-info \
631 install-info-am install-man install-pdf install-pdf-am \
632 install-ps install-ps-am install-strip installcheck \
633 installcheck-am installdirs maintainer-clean \
634 maintainer-clean-generic mostlyclean mostlyclean-compile \
635 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
636 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
637 uninstall-hook
638
639
640install-data-hook:
641 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
642uninstall-hook:
643 rm -f $(DESTDIR)$(controllerdir)/module.*
644
645clean-local:
646 rm -rf *.gcno
647
648# Tell versions [3.59,3.63) of GNU make to not export all variables.
649# Otherwise a system limit (for SysV at least) may be exceeded.
650.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/buddy/eina_buddy.c b/libraries/eina/src/modules/mp/buddy/eina_buddy.c
deleted file mode 100644
index 7d830db..0000000
--- a/libraries/eina/src/modules/mp/buddy/eina_buddy.c
+++ /dev/null
@@ -1,292 +0,0 @@
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 idx;
137
138 offset = (unsigned char *)element - (unsigned char *)b->heap;
139 if (offset > b->size)
140 return;
141
142 idx = offset >> b->min_order;
143 block = &b->blocks[idx];
144
145 //printf("free %x idx = %d order = %d buddy = %d\n", offset, idx, block->order, idx ^ (1 << block->order));
146 /* we should always work with the buddy at right */
147 if (idx & (1 << block->order))
148 {
149 Block *left;
150
151 idx = idx ^ (1 << block->order);
152 left = &b->blocks[idx];
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[idx ^ (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 = %zu, min_order = %d, max_order = %d, num_order = %d, num_blocks = %d (%uKB)\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(" %d", (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
deleted file mode 100644
index 42d0d7e..0000000
--- a/libraries/eina/src/modules/mp/chained_pool/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
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@EFL_EINA_BUILD@ \
10@VALGRIND_CFLAGS@
11
12controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_chained_mempool.c
17
18module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
20module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
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/chained_pool/Makefile.in b/libraries/eina/src/modules/mp/chained_pool/Makefile.in
deleted file mode 100644
index 78299a4..0000000
--- a/libraries/eina/src/modules/mp/chained_pool/Makefile.in
+++ /dev/null
@@ -1,651 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_chained_mempool.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EFL_EINA_BUILD@ \
309@VALGRIND_CFLAGS@
310
311controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH)
312controller_LTLIBRARIES = module.la
313module_la_SOURCES = \
314eina_chained_mempool.c
315
316module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
317module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
318module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
319module_la_LIBTOOLFLAGS = --tag=disable-static
320all: all-am
321
322.SUFFIXES:
323.SUFFIXES: .c .lo .o .obj
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/modules/mp/chained_pool/Makefile'; \
334 $(am__cd) $(top_srcdir) && \
335 $(AUTOMAKE) --gnu src/modules/mp/chained_pool/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):
354install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
355 @$(NORMAL_INSTALL)
356 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
357 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
358 list2=; for p in $$list; do \
359 if test -f $$p; then \
360 list2="$$list2 $$p"; \
361 else :; fi; \
362 done; \
363 test -z "$$list2" || { \
364 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
365 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
366 }
367
368uninstall-controllerLTLIBRARIES:
369 @$(NORMAL_UNINSTALL)
370 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
371 for p in $$list; do \
372 $(am__strip_dir) \
373 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
374 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
375 done
376
377clean-controllerLTLIBRARIES:
378 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
379 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
380 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
381 test "$$dir" != "$$p" || dir=.; \
382 echo "rm -f \"$${dir}/so_locations\""; \
383 rm -f "$${dir}/so_locations"; \
384 done
385module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
386 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
387
388mostlyclean-compile:
389 -rm -f *.$(OBJEXT)
390
391distclean-compile:
392 -rm -f *.tab.c
393
394@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_chained_mempool.Plo@am__quote@
395
396.c.o:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
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 $<
403
404.c.obj:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
411
412.c.lo:
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
419
420module_la-eina_chained_mempool.lo: eina_chained_mempool.c
421@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
422@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_chained_mempool.Tpo $(DEPDIR)/module_la-eina_chained_mempool.Plo
423@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_chained_mempool.c' object='module_la-eina_chained_mempool.lo' libtool=yes @AMDEPBACKSLASH@
425@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
426@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
427
428mostlyclean-libtool:
429 -rm -f *.lo
430
431clean-libtool:
432 -rm -rf .libs _libs
433
434ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
435 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
436 unique=`for i in $$list; do \
437 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
438 done | \
439 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
440 END { if (nonempty) { for (i in files) print i; }; }'`; \
441 mkid -fID $$unique
442tags: TAGS
443
444TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
445 $(TAGS_FILES) $(LISP)
446 set x; \
447 here=`pwd`; \
448 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
449 unique=`for i in $$list; do \
450 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
451 done | \
452 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
453 END { if (nonempty) { for (i in files) print i; }; }'`; \
454 shift; \
455 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
456 test -n "$$unique" || unique=$$empty_fix; \
457 if test $$# -gt 0; then \
458 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
459 "$$@" $$unique; \
460 else \
461 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
462 $$unique; \
463 fi; \
464 fi
465ctags: CTAGS
466CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
467 $(TAGS_FILES) $(LISP)
468 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
469 unique=`for i in $$list; do \
470 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
471 done | \
472 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
473 END { if (nonempty) { for (i in files) print i; }; }'`; \
474 test -z "$(CTAGS_ARGS)$$unique" \
475 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
476 $$unique
477
478GTAGS:
479 here=`$(am__cd) $(top_builddir) && pwd` \
480 && $(am__cd) $(top_srcdir) \
481 && gtags -i $(GTAGS_ARGS) "$$here"
482
483distclean-tags:
484 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
485
486distdir: $(DISTFILES)
487 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
489 list='$(DISTFILES)'; \
490 dist_files=`for file in $$list; do echo $$file; done | \
491 sed -e "s|^$$srcdirstrip/||;t" \
492 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
493 case $$dist_files in \
494 */*) $(MKDIR_P) `echo "$$dist_files" | \
495 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
496 sort -u` ;; \
497 esac; \
498 for file in $$dist_files; do \
499 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
500 if test -d $$d/$$file; then \
501 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
502 if test -d "$(distdir)/$$file"; then \
503 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
504 fi; \
505 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
506 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
507 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
508 fi; \
509 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
510 else \
511 test -f "$(distdir)/$$file" \
512 || cp -p $$d/$$file "$(distdir)/$$file" \
513 || exit 1; \
514 fi; \
515 done
516check-am: all-am
517check: check-am
518all-am: Makefile $(LTLIBRARIES)
519installdirs:
520 for dir in "$(DESTDIR)$(controllerdir)"; do \
521 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
522 done
523install: install-am
524install-exec: install-exec-am
525install-data: install-data-am
526uninstall: uninstall-am
527
528install-am: all-am
529 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
530
531installcheck: installcheck-am
532install-strip:
533 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
534 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
535 `test -z '$(STRIP)' || \
536 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
537mostlyclean-generic:
538
539clean-generic:
540
541distclean-generic:
542 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
543 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
544
545maintainer-clean-generic:
546 @echo "This command is intended for maintainers to use"
547 @echo "it deletes files that may require special tools to rebuild."
548 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
549clean: clean-am
550
551clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
552 clean-local mostlyclean-am
553
554distclean: distclean-am
555 -rm -rf ./$(DEPDIR)
556 -rm -f Makefile
557distclean-am: clean-am distclean-compile distclean-generic \
558 distclean-tags
559
560dvi: dvi-am
561
562dvi-am:
563
564html: html-am
565
566html-am:
567
568info: info-am
569
570info-am:
571
572install-data-am: install-controllerLTLIBRARIES
573 @$(NORMAL_INSTALL)
574 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
575install-dvi: install-dvi-am
576
577install-dvi-am:
578
579install-exec-am:
580
581install-html: install-html-am
582
583install-html-am:
584
585install-info: install-info-am
586
587install-info-am:
588
589install-man:
590
591install-pdf: install-pdf-am
592
593install-pdf-am:
594
595install-ps: install-ps-am
596
597install-ps-am:
598
599installcheck-am:
600
601maintainer-clean: maintainer-clean-am
602 -rm -rf ./$(DEPDIR)
603 -rm -f Makefile
604maintainer-clean-am: distclean-am maintainer-clean-generic
605
606mostlyclean: mostlyclean-am
607
608mostlyclean-am: mostlyclean-compile mostlyclean-generic \
609 mostlyclean-libtool
610
611pdf: pdf-am
612
613pdf-am:
614
615ps: ps-am
616
617ps-am:
618
619uninstall-am: uninstall-controllerLTLIBRARIES
620 @$(NORMAL_INSTALL)
621 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
622.MAKE: install-am install-data-am install-strip uninstall-am
623
624.PHONY: CTAGS GTAGS all all-am check check-am clean \
625 clean-controllerLTLIBRARIES clean-generic clean-libtool \
626 clean-local ctags distclean distclean-compile \
627 distclean-generic distclean-libtool distclean-tags distdir dvi \
628 dvi-am html html-am info info-am install install-am \
629 install-controllerLTLIBRARIES install-data install-data-am \
630 install-data-hook install-dvi install-dvi-am install-exec \
631 install-exec-am install-html install-html-am install-info \
632 install-info-am install-man install-pdf install-pdf-am \
633 install-ps install-ps-am install-strip installcheck \
634 installcheck-am installdirs maintainer-clean \
635 maintainer-clean-generic mostlyclean mostlyclean-compile \
636 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
637 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
638 uninstall-hook
639
640
641install-data-hook:
642 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
643uninstall-hook:
644 rm -f $(DESTDIR)$(controllerdir)/module.*
645
646clean-local:
647 rm -rf *.gcno
648
649# Tell versions [3.59,3.63) of GNU make to not export all variables.
650# Otherwise a system limit (for SysV at least) may be exceeded.
651.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
deleted file mode 100644
index e56df4c..0000000
--- a/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c
+++ /dev/null
@@ -1,572 +0,0 @@
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 EINA_DEBUG_MALLOC
35# include <malloc.h>
36#endif
37
38#ifdef EFL_HAVE_WIN32_THREADS
39# define WIN32_LEAN_AND_MEAN
40# include <windows.h>
41# undef WIN32_LEAN_AND_MEAN
42#endif
43
44#include "eina_inlist.h"
45#include "eina_error.h"
46#include "eina_module.h"
47#include "eina_mempool.h"
48#include "eina_trash.h"
49#include "eina_rbtree.h"
50#include "eina_lock.h"
51
52#include "eina_private.h"
53
54#ifndef NVALGRIND
55# include <memcheck.h>
56#endif
57
58#if defined DEBUG || defined EINA_DEBUG_MALLOC
59#include <assert.h>
60#include "eina_log.h"
61
62static int _eina_chained_mp_log_dom = -1;
63
64#ifdef INF
65#undef INF
66#endif
67#define INF(...) EINA_LOG_DOM_INFO(_eina_chained_mp_log_dom, __VA_ARGS__)
68#endif
69
70typedef struct _Chained_Mempool Chained_Mempool;
71struct _Chained_Mempool
72{
73 Eina_Inlist *first;
74 Eina_Rbtree *root;
75 const char *name;
76 int item_alloc;
77 int pool_size;
78 int alloc_size;
79 int group_size;
80 int usage;
81#ifdef EINA_DEBUG_MALLOC
82 int minimal_size;
83#endif
84#ifdef EFL_DEBUG_THREADS
85 pthread_t self;
86#endif
87 Eina_Lock mutex;
88};
89
90typedef struct _Chained_Pool Chained_Pool;
91struct _Chained_Pool
92{
93 EINA_INLIST;
94 EINA_RBTREE;
95 Eina_Trash *base;
96 int usage;
97
98 unsigned char *last;
99 unsigned char *limit;
100};
101
102static inline Eina_Rbtree_Direction
103_eina_chained_mp_pool_cmp(const Eina_Rbtree *left, const Eina_Rbtree *right, __UNUSED__ void *data)
104{
105 if (left < right) return EINA_RBTREE_LEFT;
106 return EINA_RBTREE_RIGHT;
107}
108
109static inline int
110_eina_chained_mp_pool_key_cmp(const Eina_Rbtree *node, const void *key,
111 __UNUSED__ int length, __UNUSED__ void *data)
112{
113 const Chained_Pool *r = EINA_RBTREE_CONTAINER_GET(node, const Chained_Pool);
114
115 if (key > (void *) r->limit) return -1;
116 if (key < (void *) r) return 1;
117 return 0;
118}
119
120static inline Chained_Pool *
121_eina_chained_mp_pool_new(Chained_Mempool *pool)
122{
123 Chained_Pool *p;
124 unsigned char *ptr;
125 unsigned int alignof;
126
127 eina_error_set(0);
128 p = malloc(pool->alloc_size);
129 if (!p)
130 {
131 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
132 return NULL;
133 }
134
135#ifdef EINA_DEBUG_MALLOC
136 {
137 size_t sz;
138
139 sz = malloc_usable_size(p);
140 if (sz - pool->minimal_size > 0)
141 INF("Just allocated %0.2f%% to much memory in '%s' for one block of size %i that means %i bytes to much.",
142 ((float)(sz - pool->minimal_size) * 100) / (float) (pool->alloc_size),
143 pool->name,
144 pool->alloc_size,
145 sz - pool->minimal_size);
146 }
147#endif
148
149 alignof = eina_mempool_alignof(sizeof(Chained_Pool));
150 ptr = (unsigned char *)p + alignof;
151 p->usage = 0;
152 p->base = NULL;
153
154 p->last = ptr;
155 p->limit = ptr + pool->item_alloc * pool->pool_size;
156
157#ifndef NVALGRIND
158 VALGRIND_MAKE_MEM_NOACCESS(ptr, pool->alloc_size - alignof);
159#endif
160
161 return p;
162}
163
164static inline void
165_eina_chained_mp_pool_free(Chained_Pool *p)
166{
167 free(p);
168}
169
170static int
171_eina_chained_mempool_usage_cmp(const Eina_Inlist *l1, const Eina_Inlist *l2)
172{
173 const Chained_Pool *p1;
174 const Chained_Pool *p2;
175
176 p1 = EINA_INLIST_CONTAINER_GET(l1, const Chained_Pool);
177 p2 = EINA_INLIST_CONTAINER_GET(l2, const Chained_Pool);
178
179 return p2->usage - p1->usage;
180}
181
182static void *
183_eina_chained_mempool_alloc_in(Chained_Mempool *pool, Chained_Pool *p)
184{
185 void *mem;
186
187 if (p->last)
188 {
189 mem = p->last;
190 p->last += pool->item_alloc;
191 if (p->last >= p->limit)
192 p->last = NULL;
193 }
194 else
195 {
196#ifndef NVALGRIND
197 VALGRIND_MAKE_MEM_DEFINED(p->base, pool->item_alloc);
198#endif
199 // Request a free pointer
200 mem = eina_trash_pop(&p->base);
201 }
202
203 // move to end - it just filled up
204 if (!p->base && !p->last)
205 pool->first = eina_inlist_demote(pool->first, EINA_INLIST_GET(p));
206
207 p->usage++;
208 pool->usage++;
209
210#ifndef NVALGRIND
211 VALGRIND_MEMPOOL_ALLOC(pool, mem, pool->item_alloc);
212#endif
213
214 return mem;
215}
216
217static Eina_Bool
218_eina_chained_mempool_free_in(Chained_Mempool *pool, Chained_Pool *p, void *ptr)
219{
220 void *pmem;
221
222 // pool mem base
223 pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool));
224
225 // is it in pool mem?
226 if (ptr < pmem)
227 {
228#ifdef DEBUG
229 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);
230#endif
231 return EINA_FALSE;
232 }
233
234 // freed node points to prev free node
235 eina_trash_push(&p->base, ptr);
236 // next free node is now the one we freed
237 p->usage--;
238 pool->usage--;
239 if (p->usage == 0)
240 {
241 // free bucket
242 pool->first = eina_inlist_remove(pool->first, EINA_INLIST_GET(p));
243 pool->root = eina_rbtree_inline_remove(pool->root, EINA_RBTREE_GET(p),
244 _eina_chained_mp_pool_cmp, NULL);
245 _eina_chained_mp_pool_free(p);
246
247 return EINA_TRUE;
248 }
249 else
250 {
251 // move to front
252 pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p));
253 }
254
255 return EINA_FALSE;
256}
257
258static void *
259eina_chained_mempool_malloc(void *data, __UNUSED__ unsigned int size)
260{
261 Chained_Mempool *pool = data;
262 Chained_Pool *p = NULL;
263 void *mem;
264
265 if (!eina_lock_take(&pool->mutex))
266 {
267#ifdef EFL_DEBUG_THREADS
268 assert(pthread_equal(pool->self, pthread_self()));
269#endif
270 }
271
272 // Either we have some free space in the first one, or there is no free space.
273 if (pool->first) p = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool);
274
275 // base is not NULL - has a free slot
276 if (p && !p->base && !p->last)
277 p = NULL;
278
279#ifdef DEBUG
280 if (p == NULL)
281 EINA_INLIST_FOREACH(pool->first, p)
282 assert(!p->base && !p->last);
283#endif
284
285 // we have reached the end of the list - no free pools
286 if (!p)
287 {
288 p = _eina_chained_mp_pool_new(pool);
289 if (!p)
290 {
291 eina_lock_release(&pool->mutex);
292 return NULL;
293 }
294
295 pool->first = eina_inlist_prepend(pool->first, EINA_INLIST_GET(p));
296 pool->root = eina_rbtree_inline_insert(pool->root, EINA_RBTREE_GET(p),
297 _eina_chained_mp_pool_cmp, NULL);
298 }
299
300 mem = _eina_chained_mempool_alloc_in(pool, p);
301
302 eina_lock_release(&pool->mutex);
303
304 return mem;
305}
306
307static void
308eina_chained_mempool_free(void *data, void *ptr)
309{
310 Chained_Mempool *pool = data;
311 Eina_Rbtree *r;
312 Chained_Pool *p;
313
314 // look 4 pool
315 if (!eina_lock_take(&pool->mutex))
316 {
317#ifdef EFL_DEBUG_THREADS
318 assert(pthread_equal(pool->self, pthread_self()));
319#endif
320 }
321
322 // searching for the right mempool
323 r = eina_rbtree_inline_lookup(pool->root, ptr, 0, _eina_chained_mp_pool_key_cmp, NULL);
324
325 // related mempool not found
326 if (!r)
327 {
328#ifdef DEBUG
329 INF("%p is not the property of %p Chained_Mempool", ptr, pool);
330#endif
331 goto on_error;
332 }
333
334 p = EINA_RBTREE_CONTAINER_GET(r, Chained_Pool);
335
336 _eina_chained_mempool_free_in(pool, p, ptr);
337
338 on_error:
339#ifndef NVALGRIND
340 if (ptr)
341 {
342 VALGRIND_MEMPOOL_FREE(pool, ptr);
343 }
344#endif
345
346 eina_lock_release(&pool->mutex);
347 return;
348}
349
350static void
351eina_chained_mempool_repack(void *data,
352 Eina_Mempool_Repack_Cb cb,
353 void *cb_data)
354{
355 Chained_Mempool *pool = data;
356 Chained_Pool *start;
357 Chained_Pool *tail;
358
359 /* FIXME: Improvement - per Chained_Pool lock */
360 if (!eina_lock_take(&pool->mutex))
361 {
362#ifdef EFL_DEBUG_THREADS
363 assert(pthread_equal(pool->self, pthread_self()));
364#endif
365 }
366
367 pool->first = eina_inlist_sort(pool->first,
368 (Eina_Compare_Cb) _eina_chained_mempool_usage_cmp);
369
370 /*
371 idea : remove the almost empty pool at the beginning of the list by
372 moving data in the last pool with empty slot
373 */
374 tail = EINA_INLIST_CONTAINER_GET(pool->first->last, Chained_Pool);
375 while (tail && tail->usage == pool->pool_size)
376 tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev), Chained_Pool);
377
378 while (tail)
379 {
380 unsigned char *src;
381 unsigned char *dst;
382
383 start = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool);
384
385 if (start == tail || start->usage == pool->pool_size)
386 break;
387
388 for (src = start->limit - pool->group_size;
389 src != start->limit;
390 src += pool->item_alloc)
391 {
392 Eina_Bool is_free = EINA_FALSE;
393 Eina_Bool is_dead;
394
395 /* Do we have something inside that piece of memory */
396 if (start->last != NULL && src >= start->last)
397 {
398 is_free = EINA_TRUE;
399 }
400 else
401 {
402 Eina_Trash *over = start->base;
403
404 while (over != NULL && (unsigned char*) over != src)
405 over = over->next;
406
407 if (over == NULL)
408 is_free = EINA_TRUE;
409 }
410
411 if (is_free) continue ;
412
413 /* get a new memory pointer from the latest most occuped pool */
414 dst = _eina_chained_mempool_alloc_in(pool, tail);
415 /* move data from one to another */
416 memcpy(dst, src, pool->item_alloc);
417 /* notify caller */
418 cb(dst, src, cb_data);
419 /* destroy old pointer */
420 is_dead = _eina_chained_mempool_free_in(pool, start, src);
421
422 /* search last tail with empty slot */
423 while (tail && tail->usage == pool->pool_size)
424 tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev),
425 Chained_Pool);
426 /* no more free space */
427 if (!tail || tail == start) break;
428 if (is_dead) break;
429 }
430 }
431
432 /* FIXME: improvement - reorder pool so that the most used one get in front */
433 eina_lock_release(&pool->mutex);
434}
435
436static void *
437eina_chained_mempool_realloc(__UNUSED__ void *data,
438 __UNUSED__ void *element,
439 __UNUSED__ unsigned int size)
440{
441 return NULL;
442}
443
444static void *
445eina_chained_mempool_init(const char *context,
446 __UNUSED__ const char *option,
447 va_list args)
448{
449 Chained_Mempool *mp;
450 int item_size;
451 size_t length;
452
453 length = context ? strlen(context) + 1 : 0;
454
455 mp = calloc(1, sizeof(Chained_Mempool) + length);
456 if (!mp)
457 return NULL;
458
459 item_size = va_arg(args, int);
460 mp->pool_size = va_arg(args, int);
461
462 if (length)
463 {
464 mp->name = (const char *)(mp + 1);
465 memcpy((char *)mp->name, context, length);
466 }
467
468#ifdef EINA_DEBUG_MALLOC
469 mp->minimal_size = item_size * mp->pool_size + sizeof(Chained_Pool);
470#endif
471
472 mp->item_alloc = eina_mempool_alignof(item_size);
473 mp->group_size = mp->item_alloc * mp->pool_size;
474 mp->alloc_size = mp->group_size + eina_mempool_alignof(sizeof(Chained_Pool));
475
476#ifndef NVALGRIND
477 VALGRIND_CREATE_MEMPOOL(mp, 0, 1);
478#endif
479
480#ifdef EFL_DEBUG_THREADS
481 mp->self = pthread_self();
482#endif
483
484 eina_lock_new(&mp->mutex);
485
486 return mp;
487}
488
489static void
490eina_chained_mempool_shutdown(void *data)
491{
492 Chained_Mempool *mp;
493
494 mp = (Chained_Mempool *)data;
495
496 while (mp->first)
497 {
498 Chained_Pool *p = (Chained_Pool *)mp->first;
499
500#ifdef DEBUG
501 if (p->usage > 0)
502 INF("Bad news we are destroying not an empty mempool [%s]\n",
503 mp->name);
504
505#endif
506
507 mp->first = eina_inlist_remove(mp->first, mp->first);
508 mp->root = eina_rbtree_inline_remove(mp->root, EINA_RBTREE_GET(p),
509 _eina_chained_mp_pool_cmp, NULL);
510 _eina_chained_mp_pool_free(p);
511 }
512
513#ifdef DEBUG
514 if (mp->root)
515 INF("Bad news, list of pool and rbtree are out of sync for %p !", mp);
516#endif
517
518#ifndef NVALGRIND
519 VALGRIND_DESTROY_MEMPOOL(mp);
520#endif
521
522 eina_lock_free(&mp->mutex);
523
524#ifdef EFL_DEBUG_THREADS
525 assert(pthread_equal(mp->self, pthread_self()));
526#endif
527
528 free(mp);
529}
530
531static Eina_Mempool_Backend _eina_chained_mp_backend = {
532 "chained_mempool",
533 &eina_chained_mempool_init,
534 &eina_chained_mempool_free,
535 &eina_chained_mempool_malloc,
536 &eina_chained_mempool_realloc,
537 NULL,
538 NULL,
539 &eina_chained_mempool_shutdown,
540 &eina_chained_mempool_repack
541};
542
543Eina_Bool chained_init(void)
544{
545#if defined DEBUG || defined EINA_DEBUG_MALLOC
546 _eina_chained_mp_log_dom = eina_log_domain_register("eina_mempool",
547 EINA_LOG_COLOR_DEFAULT);
548 if (_eina_chained_mp_log_dom < 0)
549 {
550 EINA_LOG_ERR("Could not register log domain: eina_mempool");
551 return EINA_FALSE;
552 }
553
554#endif
555 return eina_mempool_register(&_eina_chained_mp_backend);
556}
557
558void chained_shutdown(void)
559{
560 eina_mempool_unregister(&_eina_chained_mp_backend);
561#if defined DEBUG || defined EINA_DEBUG_MALLOC
562 eina_log_domain_unregister(_eina_chained_mp_log_dom);
563 _eina_chained_mp_log_dom = -1;
564#endif
565}
566
567#ifndef EINA_STATIC_BUILD_CHAINED_POOL
568
569EINA_MODULE_INIT(chained_init);
570EINA_MODULE_SHUTDOWN(chained_shutdown);
571
572#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
deleted file mode 100644
index 242b446..0000000
--- a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
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@EMEMOA_CFLAGS@ \
10@EFL_EINA_BUILD@
11
12controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_ememoa_fixed.c
17
18module_la_CFLAGS = @EINA_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @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/ememoa_fixed/Makefile.in b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in
deleted file mode 100644
index d16d123..0000000
--- a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in
+++ /dev/null
@@ -1,651 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_ememoa_fixed.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EMEMOA_CFLAGS@ \
309@EFL_EINA_BUILD@
310
311controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH)
312controller_LTLIBRARIES = module.la
313module_la_SOURCES = \
314eina_ememoa_fixed.c
315
316module_la_CFLAGS = @EINA_CFLAGS@
317module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
318module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
319module_la_LIBTOOLFLAGS = --tag=disable-static
320all: all-am
321
322.SUFFIXES:
323.SUFFIXES: .c .lo .o .obj
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/modules/mp/ememoa_fixed/Makefile'; \
334 $(am__cd) $(top_srcdir) && \
335 $(AUTOMAKE) --gnu src/modules/mp/ememoa_fixed/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):
354install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
355 @$(NORMAL_INSTALL)
356 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
357 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
358 list2=; for p in $$list; do \
359 if test -f $$p; then \
360 list2="$$list2 $$p"; \
361 else :; fi; \
362 done; \
363 test -z "$$list2" || { \
364 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
365 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
366 }
367
368uninstall-controllerLTLIBRARIES:
369 @$(NORMAL_UNINSTALL)
370 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
371 for p in $$list; do \
372 $(am__strip_dir) \
373 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
374 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
375 done
376
377clean-controllerLTLIBRARIES:
378 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
379 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
380 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
381 test "$$dir" != "$$p" || dir=.; \
382 echo "rm -f \"$${dir}/so_locations\""; \
383 rm -f "$${dir}/so_locations"; \
384 done
385module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
386 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
387
388mostlyclean-compile:
389 -rm -f *.$(OBJEXT)
390
391distclean-compile:
392 -rm -f *.tab.c
393
394@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_fixed.Plo@am__quote@
395
396.c.o:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
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 $<
403
404.c.obj:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
411
412.c.lo:
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
419
420module_la-eina_ememoa_fixed.lo: eina_ememoa_fixed.c
421@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
422@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_fixed.Tpo $(DEPDIR)/module_la-eina_ememoa_fixed.Plo
423@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_fixed.c' object='module_la-eina_ememoa_fixed.lo' libtool=yes @AMDEPBACKSLASH@
425@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
426@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
427
428mostlyclean-libtool:
429 -rm -f *.lo
430
431clean-libtool:
432 -rm -rf .libs _libs
433
434ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
435 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
436 unique=`for i in $$list; do \
437 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
438 done | \
439 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
440 END { if (nonempty) { for (i in files) print i; }; }'`; \
441 mkid -fID $$unique
442tags: TAGS
443
444TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
445 $(TAGS_FILES) $(LISP)
446 set x; \
447 here=`pwd`; \
448 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
449 unique=`for i in $$list; do \
450 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
451 done | \
452 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
453 END { if (nonempty) { for (i in files) print i; }; }'`; \
454 shift; \
455 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
456 test -n "$$unique" || unique=$$empty_fix; \
457 if test $$# -gt 0; then \
458 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
459 "$$@" $$unique; \
460 else \
461 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
462 $$unique; \
463 fi; \
464 fi
465ctags: CTAGS
466CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
467 $(TAGS_FILES) $(LISP)
468 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
469 unique=`for i in $$list; do \
470 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
471 done | \
472 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
473 END { if (nonempty) { for (i in files) print i; }; }'`; \
474 test -z "$(CTAGS_ARGS)$$unique" \
475 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
476 $$unique
477
478GTAGS:
479 here=`$(am__cd) $(top_builddir) && pwd` \
480 && $(am__cd) $(top_srcdir) \
481 && gtags -i $(GTAGS_ARGS) "$$here"
482
483distclean-tags:
484 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
485
486distdir: $(DISTFILES)
487 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
489 list='$(DISTFILES)'; \
490 dist_files=`for file in $$list; do echo $$file; done | \
491 sed -e "s|^$$srcdirstrip/||;t" \
492 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
493 case $$dist_files in \
494 */*) $(MKDIR_P) `echo "$$dist_files" | \
495 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
496 sort -u` ;; \
497 esac; \
498 for file in $$dist_files; do \
499 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
500 if test -d $$d/$$file; then \
501 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
502 if test -d "$(distdir)/$$file"; then \
503 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
504 fi; \
505 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
506 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
507 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
508 fi; \
509 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
510 else \
511 test -f "$(distdir)/$$file" \
512 || cp -p $$d/$$file "$(distdir)/$$file" \
513 || exit 1; \
514 fi; \
515 done
516check-am: all-am
517check: check-am
518all-am: Makefile $(LTLIBRARIES)
519installdirs:
520 for dir in "$(DESTDIR)$(controllerdir)"; do \
521 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
522 done
523install: install-am
524install-exec: install-exec-am
525install-data: install-data-am
526uninstall: uninstall-am
527
528install-am: all-am
529 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
530
531installcheck: installcheck-am
532install-strip:
533 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
534 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
535 `test -z '$(STRIP)' || \
536 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
537mostlyclean-generic:
538
539clean-generic:
540
541distclean-generic:
542 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
543 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
544
545maintainer-clean-generic:
546 @echo "This command is intended for maintainers to use"
547 @echo "it deletes files that may require special tools to rebuild."
548 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
549clean: clean-am
550
551clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
552 clean-local mostlyclean-am
553
554distclean: distclean-am
555 -rm -rf ./$(DEPDIR)
556 -rm -f Makefile
557distclean-am: clean-am distclean-compile distclean-generic \
558 distclean-tags
559
560dvi: dvi-am
561
562dvi-am:
563
564html: html-am
565
566html-am:
567
568info: info-am
569
570info-am:
571
572install-data-am: install-controllerLTLIBRARIES
573 @$(NORMAL_INSTALL)
574 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
575install-dvi: install-dvi-am
576
577install-dvi-am:
578
579install-exec-am:
580
581install-html: install-html-am
582
583install-html-am:
584
585install-info: install-info-am
586
587install-info-am:
588
589install-man:
590
591install-pdf: install-pdf-am
592
593install-pdf-am:
594
595install-ps: install-ps-am
596
597install-ps-am:
598
599installcheck-am:
600
601maintainer-clean: maintainer-clean-am
602 -rm -rf ./$(DEPDIR)
603 -rm -f Makefile
604maintainer-clean-am: distclean-am maintainer-clean-generic
605
606mostlyclean: mostlyclean-am
607
608mostlyclean-am: mostlyclean-compile mostlyclean-generic \
609 mostlyclean-libtool
610
611pdf: pdf-am
612
613pdf-am:
614
615ps: ps-am
616
617ps-am:
618
619uninstall-am: uninstall-controllerLTLIBRARIES
620 @$(NORMAL_INSTALL)
621 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
622.MAKE: install-am install-data-am install-strip uninstall-am
623
624.PHONY: CTAGS GTAGS all all-am check check-am clean \
625 clean-controllerLTLIBRARIES clean-generic clean-libtool \
626 clean-local ctags distclean distclean-compile \
627 distclean-generic distclean-libtool distclean-tags distdir dvi \
628 dvi-am html html-am info info-am install install-am \
629 install-controllerLTLIBRARIES install-data install-data-am \
630 install-data-hook install-dvi install-dvi-am install-exec \
631 install-exec-am install-html install-html-am install-info \
632 install-info-am install-man install-pdf install-pdf-am \
633 install-ps install-ps-am install-strip installcheck \
634 installcheck-am installdirs maintainer-clean \
635 maintainer-clean-generic mostlyclean mostlyclean-compile \
636 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
637 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
638 uninstall-hook
639
640
641install-data-hook:
642 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
643uninstall-hook:
644 rm -f $(DESTDIR)$(controllerdir)/module.*
645
646clean-local:
647 rm -rf *.gcno
648
649# Tell versions [3.59,3.63) of GNU make to not export all variables.
650# Otherwise a system limit (for SysV at least) may be exceeded.
651.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
deleted file mode 100644
index 0d02f80..0000000
--- a/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
+++ /dev/null
@@ -1,176 +0,0 @@
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
deleted file mode 100644
index 249541a..0000000
--- a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
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@EMEMOA_CFLAGS@ \
10@EFL_EINA_BUILD@
11
12controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_ememoa_unknown.c
17
18module_la_CFLAGS = @EINA_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @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/ememoa_unknown/Makefile.in b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in
deleted file mode 100644
index 18a43a5..0000000
--- a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in
+++ /dev/null
@@ -1,651 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_ememoa_unknown.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EMEMOA_CFLAGS@ \
309@EFL_EINA_BUILD@
310
311controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH)
312controller_LTLIBRARIES = module.la
313module_la_SOURCES = \
314eina_ememoa_unknown.c
315
316module_la_CFLAGS = @EINA_CFLAGS@
317module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
318module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
319module_la_LIBTOOLFLAGS = --tag=disable-static
320all: all-am
321
322.SUFFIXES:
323.SUFFIXES: .c .lo .o .obj
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/modules/mp/ememoa_unknown/Makefile'; \
334 $(am__cd) $(top_srcdir) && \
335 $(AUTOMAKE) --gnu src/modules/mp/ememoa_unknown/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):
354install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
355 @$(NORMAL_INSTALL)
356 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
357 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
358 list2=; for p in $$list; do \
359 if test -f $$p; then \
360 list2="$$list2 $$p"; \
361 else :; fi; \
362 done; \
363 test -z "$$list2" || { \
364 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
365 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
366 }
367
368uninstall-controllerLTLIBRARIES:
369 @$(NORMAL_UNINSTALL)
370 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
371 for p in $$list; do \
372 $(am__strip_dir) \
373 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
374 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
375 done
376
377clean-controllerLTLIBRARIES:
378 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
379 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
380 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
381 test "$$dir" != "$$p" || dir=.; \
382 echo "rm -f \"$${dir}/so_locations\""; \
383 rm -f "$${dir}/so_locations"; \
384 done
385module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
386 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
387
388mostlyclean-compile:
389 -rm -f *.$(OBJEXT)
390
391distclean-compile:
392 -rm -f *.tab.c
393
394@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_unknown.Plo@am__quote@
395
396.c.o:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
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 $<
403
404.c.obj:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
411
412.c.lo:
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
419
420module_la-eina_ememoa_unknown.lo: eina_ememoa_unknown.c
421@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
422@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_unknown.Tpo $(DEPDIR)/module_la-eina_ememoa_unknown.Plo
423@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_unknown.c' object='module_la-eina_ememoa_unknown.lo' libtool=yes @AMDEPBACKSLASH@
425@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
426@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
427
428mostlyclean-libtool:
429 -rm -f *.lo
430
431clean-libtool:
432 -rm -rf .libs _libs
433
434ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
435 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
436 unique=`for i in $$list; do \
437 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
438 done | \
439 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
440 END { if (nonempty) { for (i in files) print i; }; }'`; \
441 mkid -fID $$unique
442tags: TAGS
443
444TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
445 $(TAGS_FILES) $(LISP)
446 set x; \
447 here=`pwd`; \
448 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
449 unique=`for i in $$list; do \
450 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
451 done | \
452 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
453 END { if (nonempty) { for (i in files) print i; }; }'`; \
454 shift; \
455 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
456 test -n "$$unique" || unique=$$empty_fix; \
457 if test $$# -gt 0; then \
458 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
459 "$$@" $$unique; \
460 else \
461 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
462 $$unique; \
463 fi; \
464 fi
465ctags: CTAGS
466CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
467 $(TAGS_FILES) $(LISP)
468 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
469 unique=`for i in $$list; do \
470 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
471 done | \
472 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
473 END { if (nonempty) { for (i in files) print i; }; }'`; \
474 test -z "$(CTAGS_ARGS)$$unique" \
475 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
476 $$unique
477
478GTAGS:
479 here=`$(am__cd) $(top_builddir) && pwd` \
480 && $(am__cd) $(top_srcdir) \
481 && gtags -i $(GTAGS_ARGS) "$$here"
482
483distclean-tags:
484 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
485
486distdir: $(DISTFILES)
487 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
489 list='$(DISTFILES)'; \
490 dist_files=`for file in $$list; do echo $$file; done | \
491 sed -e "s|^$$srcdirstrip/||;t" \
492 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
493 case $$dist_files in \
494 */*) $(MKDIR_P) `echo "$$dist_files" | \
495 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
496 sort -u` ;; \
497 esac; \
498 for file in $$dist_files; do \
499 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
500 if test -d $$d/$$file; then \
501 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
502 if test -d "$(distdir)/$$file"; then \
503 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
504 fi; \
505 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
506 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
507 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
508 fi; \
509 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
510 else \
511 test -f "$(distdir)/$$file" \
512 || cp -p $$d/$$file "$(distdir)/$$file" \
513 || exit 1; \
514 fi; \
515 done
516check-am: all-am
517check: check-am
518all-am: Makefile $(LTLIBRARIES)
519installdirs:
520 for dir in "$(DESTDIR)$(controllerdir)"; do \
521 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
522 done
523install: install-am
524install-exec: install-exec-am
525install-data: install-data-am
526uninstall: uninstall-am
527
528install-am: all-am
529 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
530
531installcheck: installcheck-am
532install-strip:
533 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
534 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
535 `test -z '$(STRIP)' || \
536 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
537mostlyclean-generic:
538
539clean-generic:
540
541distclean-generic:
542 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
543 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
544
545maintainer-clean-generic:
546 @echo "This command is intended for maintainers to use"
547 @echo "it deletes files that may require special tools to rebuild."
548 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
549clean: clean-am
550
551clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
552 clean-local mostlyclean-am
553
554distclean: distclean-am
555 -rm -rf ./$(DEPDIR)
556 -rm -f Makefile
557distclean-am: clean-am distclean-compile distclean-generic \
558 distclean-tags
559
560dvi: dvi-am
561
562dvi-am:
563
564html: html-am
565
566html-am:
567
568info: info-am
569
570info-am:
571
572install-data-am: install-controllerLTLIBRARIES
573 @$(NORMAL_INSTALL)
574 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
575install-dvi: install-dvi-am
576
577install-dvi-am:
578
579install-exec-am:
580
581install-html: install-html-am
582
583install-html-am:
584
585install-info: install-info-am
586
587install-info-am:
588
589install-man:
590
591install-pdf: install-pdf-am
592
593install-pdf-am:
594
595install-ps: install-ps-am
596
597install-ps-am:
598
599installcheck-am:
600
601maintainer-clean: maintainer-clean-am
602 -rm -rf ./$(DEPDIR)
603 -rm -f Makefile
604maintainer-clean-am: distclean-am maintainer-clean-generic
605
606mostlyclean: mostlyclean-am
607
608mostlyclean-am: mostlyclean-compile mostlyclean-generic \
609 mostlyclean-libtool
610
611pdf: pdf-am
612
613pdf-am:
614
615ps: ps-am
616
617ps-am:
618
619uninstall-am: uninstall-controllerLTLIBRARIES
620 @$(NORMAL_INSTALL)
621 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
622.MAKE: install-am install-data-am install-strip uninstall-am
623
624.PHONY: CTAGS GTAGS all all-am check check-am clean \
625 clean-controllerLTLIBRARIES clean-generic clean-libtool \
626 clean-local ctags distclean distclean-compile \
627 distclean-generic distclean-libtool distclean-tags distdir dvi \
628 dvi-am html html-am info info-am install install-am \
629 install-controllerLTLIBRARIES install-data install-data-am \
630 install-data-hook install-dvi install-dvi-am install-exec \
631 install-exec-am install-html install-html-am install-info \
632 install-info-am install-man install-pdf install-pdf-am \
633 install-ps install-ps-am install-strip installcheck \
634 installcheck-am installdirs maintainer-clean \
635 maintainer-clean-generic mostlyclean mostlyclean-compile \
636 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
637 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
638 uninstall-hook
639
640
641install-data-hook:
642 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
643uninstall-hook:
644 rm -f $(DESTDIR)$(controllerdir)/module.*
645
646clean-local:
647 rm -rf *.gcno
648
649# Tell versions [3.59,3.63) of GNU make to not export all variables.
650# Otherwise a system limit (for SysV at least) may be exceeded.
651.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
deleted file mode 100644
index 56b99f6..0000000
--- a/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
+++ /dev/null
@@ -1,182 +0,0 @@
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
deleted file mode 100644
index 1f2527b..0000000
--- a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
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@EFL_EINA_BUILD@
10
11controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH)
12controller_LTLIBRARIES = module.la
13
14module_la_SOURCES = \
15eina_fixed_bitmap.c
16
17module_la_CFLAGS = @EINA_CFLAGS@
18module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
19module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
20module_la_LIBTOOLFLAGS = --tag=disable-static
21
22install-data-hook:
23 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
24uninstall-hook:
25 rm -f $(DESTDIR)$(controllerdir)/module.*
26
27clean-local:
28 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
deleted file mode 100644
index 2a6b782..0000000
--- a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in
+++ /dev/null
@@ -1,650 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_fixed_bitmap.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EFL_EINA_BUILD@
309
310controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH)
311controller_LTLIBRARIES = module.la
312module_la_SOURCES = \
313eina_fixed_bitmap.c
314
315module_la_CFLAGS = @EINA_CFLAGS@
316module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
317module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
318module_la_LIBTOOLFLAGS = --tag=disable-static
319all: all-am
320
321.SUFFIXES:
322.SUFFIXES: .c .lo .o .obj
323$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
324 @for dep in $?; do \
325 case '$(am__configure_deps)' in \
326 *$$dep*) \
327 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
328 && { if test -f $@; then exit 0; else break; fi; }; \
329 exit 1;; \
330 esac; \
331 done; \
332 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile'; \
333 $(am__cd) $(top_srcdir) && \
334 $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile
335.PRECIOUS: Makefile
336Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
337 @case '$?' in \
338 *config.status*) \
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
340 *) \
341 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
342 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
343 esac;
344
345$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
346 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
347
348$(top_srcdir)/configure: $(am__configure_deps)
349 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
350$(ACLOCAL_M4): $(am__aclocal_m4_deps)
351 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
352$(am__aclocal_m4_deps):
353install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
354 @$(NORMAL_INSTALL)
355 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
356 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
357 list2=; for p in $$list; do \
358 if test -f $$p; then \
359 list2="$$list2 $$p"; \
360 else :; fi; \
361 done; \
362 test -z "$$list2" || { \
363 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
364 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
365 }
366
367uninstall-controllerLTLIBRARIES:
368 @$(NORMAL_UNINSTALL)
369 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
370 for p in $$list; do \
371 $(am__strip_dir) \
372 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
373 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
374 done
375
376clean-controllerLTLIBRARIES:
377 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
378 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
379 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
380 test "$$dir" != "$$p" || dir=.; \
381 echo "rm -f \"$${dir}/so_locations\""; \
382 rm -f "$${dir}/so_locations"; \
383 done
384module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
385 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
386
387mostlyclean-compile:
388 -rm -f *.$(OBJEXT)
389
390distclean-compile:
391 -rm -f *.tab.c
392
393@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_fixed_bitmap.Plo@am__quote@
394
395.c.o:
396@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
397@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
398@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
399@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
401@am__fastdepCC_FALSE@ $(COMPILE) -c $<
402
403.c.obj:
404@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
405@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
406@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
407@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
409@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
410
411.c.lo:
412@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
413@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
414@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
415@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
417@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
418
419module_la-eina_fixed_bitmap.lo: eina_fixed_bitmap.c
420@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
421@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_fixed_bitmap.Tpo $(DEPDIR)/module_la-eina_fixed_bitmap.Plo
422@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
423@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fixed_bitmap.c' object='module_la-eina_fixed_bitmap.lo' libtool=yes @AMDEPBACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
425@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
426
427mostlyclean-libtool:
428 -rm -f *.lo
429
430clean-libtool:
431 -rm -rf .libs _libs
432
433ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
434 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
435 unique=`for i in $$list; do \
436 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
437 done | \
438 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
439 END { if (nonempty) { for (i in files) print i; }; }'`; \
440 mkid -fID $$unique
441tags: TAGS
442
443TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
444 $(TAGS_FILES) $(LISP)
445 set x; \
446 here=`pwd`; \
447 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
448 unique=`for i in $$list; do \
449 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
450 done | \
451 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
452 END { if (nonempty) { for (i in files) print i; }; }'`; \
453 shift; \
454 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
455 test -n "$$unique" || unique=$$empty_fix; \
456 if test $$# -gt 0; then \
457 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
458 "$$@" $$unique; \
459 else \
460 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
461 $$unique; \
462 fi; \
463 fi
464ctags: CTAGS
465CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
466 $(TAGS_FILES) $(LISP)
467 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
468 unique=`for i in $$list; do \
469 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
470 done | \
471 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
472 END { if (nonempty) { for (i in files) print i; }; }'`; \
473 test -z "$(CTAGS_ARGS)$$unique" \
474 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
475 $$unique
476
477GTAGS:
478 here=`$(am__cd) $(top_builddir) && pwd` \
479 && $(am__cd) $(top_srcdir) \
480 && gtags -i $(GTAGS_ARGS) "$$here"
481
482distclean-tags:
483 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
484
485distdir: $(DISTFILES)
486 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
487 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 list='$(DISTFILES)'; \
489 dist_files=`for file in $$list; do echo $$file; done | \
490 sed -e "s|^$$srcdirstrip/||;t" \
491 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
492 case $$dist_files in \
493 */*) $(MKDIR_P) `echo "$$dist_files" | \
494 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
495 sort -u` ;; \
496 esac; \
497 for file in $$dist_files; do \
498 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
499 if test -d $$d/$$file; then \
500 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
501 if test -d "$(distdir)/$$file"; then \
502 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
503 fi; \
504 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
505 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
506 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
507 fi; \
508 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
509 else \
510 test -f "$(distdir)/$$file" \
511 || cp -p $$d/$$file "$(distdir)/$$file" \
512 || exit 1; \
513 fi; \
514 done
515check-am: all-am
516check: check-am
517all-am: Makefile $(LTLIBRARIES)
518installdirs:
519 for dir in "$(DESTDIR)$(controllerdir)"; do \
520 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
521 done
522install: install-am
523install-exec: install-exec-am
524install-data: install-data-am
525uninstall: uninstall-am
526
527install-am: all-am
528 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
529
530installcheck: installcheck-am
531install-strip:
532 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
533 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
534 `test -z '$(STRIP)' || \
535 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
536mostlyclean-generic:
537
538clean-generic:
539
540distclean-generic:
541 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
542 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
543
544maintainer-clean-generic:
545 @echo "This command is intended for maintainers to use"
546 @echo "it deletes files that may require special tools to rebuild."
547 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
548clean: clean-am
549
550clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
551 clean-local mostlyclean-am
552
553distclean: distclean-am
554 -rm -rf ./$(DEPDIR)
555 -rm -f Makefile
556distclean-am: clean-am distclean-compile distclean-generic \
557 distclean-tags
558
559dvi: dvi-am
560
561dvi-am:
562
563html: html-am
564
565html-am:
566
567info: info-am
568
569info-am:
570
571install-data-am: install-controllerLTLIBRARIES
572 @$(NORMAL_INSTALL)
573 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
574install-dvi: install-dvi-am
575
576install-dvi-am:
577
578install-exec-am:
579
580install-html: install-html-am
581
582install-html-am:
583
584install-info: install-info-am
585
586install-info-am:
587
588install-man:
589
590install-pdf: install-pdf-am
591
592install-pdf-am:
593
594install-ps: install-ps-am
595
596install-ps-am:
597
598installcheck-am:
599
600maintainer-clean: maintainer-clean-am
601 -rm -rf ./$(DEPDIR)
602 -rm -f Makefile
603maintainer-clean-am: distclean-am maintainer-clean-generic
604
605mostlyclean: mostlyclean-am
606
607mostlyclean-am: mostlyclean-compile mostlyclean-generic \
608 mostlyclean-libtool
609
610pdf: pdf-am
611
612pdf-am:
613
614ps: ps-am
615
616ps-am:
617
618uninstall-am: uninstall-controllerLTLIBRARIES
619 @$(NORMAL_INSTALL)
620 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
621.MAKE: install-am install-data-am install-strip uninstall-am
622
623.PHONY: CTAGS GTAGS all all-am check check-am clean \
624 clean-controllerLTLIBRARIES clean-generic clean-libtool \
625 clean-local ctags distclean distclean-compile \
626 distclean-generic distclean-libtool distclean-tags distdir dvi \
627 dvi-am html html-am info info-am install install-am \
628 install-controllerLTLIBRARIES install-data install-data-am \
629 install-data-hook install-dvi install-dvi-am install-exec \
630 install-exec-am install-html install-html-am install-info \
631 install-info-am install-man install-pdf install-pdf-am \
632 install-ps install-ps-am install-strip installcheck \
633 installcheck-am installdirs maintainer-clean \
634 maintainer-clean-generic mostlyclean mostlyclean-compile \
635 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
636 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
637 uninstall-hook
638
639
640install-data-hook:
641 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
642uninstall-hook:
643 rm -f $(DESTDIR)$(controllerdir)/module.*
644
645clean-local:
646 rm -rf *.gcno
647
648# Tell versions [3.59,3.63) of GNU make to not export all variables.
649# Otherwise a system limit (for SysV at least) may be exceeded.
650.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
deleted file mode 100644
index e053e15..0000000
--- a/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
+++ /dev/null
@@ -1,270 +0,0 @@
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
deleted file mode 100644
index 35069a2..0000000
--- a/libraries/eina/src/modules/mp/one_big/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
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@EFL_EINA_BUILD@ \
10@VALGRIND_CFLAGS@
11
12controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_one_big.c
17
18module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
20module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
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/one_big/Makefile.in b/libraries/eina/src/modules/mp/one_big/Makefile.in
deleted file mode 100644
index 4a2c229..0000000
--- a/libraries/eina/src/modules/mp/one_big/Makefile.in
+++ /dev/null
@@ -1,651 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_one_big.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EFL_EINA_BUILD@ \
309@VALGRIND_CFLAGS@
310
311controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH)
312controller_LTLIBRARIES = module.la
313module_la_SOURCES = \
314eina_one_big.c
315
316module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
317module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
318module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
319module_la_LIBTOOLFLAGS = --tag=disable-static
320all: all-am
321
322.SUFFIXES:
323.SUFFIXES: .c .lo .o .obj
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/modules/mp/one_big/Makefile'; \
334 $(am__cd) $(top_srcdir) && \
335 $(AUTOMAKE) --gnu src/modules/mp/one_big/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):
354install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
355 @$(NORMAL_INSTALL)
356 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
357 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
358 list2=; for p in $$list; do \
359 if test -f $$p; then \
360 list2="$$list2 $$p"; \
361 else :; fi; \
362 done; \
363 test -z "$$list2" || { \
364 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
365 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
366 }
367
368uninstall-controllerLTLIBRARIES:
369 @$(NORMAL_UNINSTALL)
370 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
371 for p in $$list; do \
372 $(am__strip_dir) \
373 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
374 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
375 done
376
377clean-controllerLTLIBRARIES:
378 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
379 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
380 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
381 test "$$dir" != "$$p" || dir=.; \
382 echo "rm -f \"$${dir}/so_locations\""; \
383 rm -f "$${dir}/so_locations"; \
384 done
385module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
386 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
387
388mostlyclean-compile:
389 -rm -f *.$(OBJEXT)
390
391distclean-compile:
392 -rm -f *.tab.c
393
394@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_one_big.Plo@am__quote@
395
396.c.o:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
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 $<
403
404.c.obj:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
411
412.c.lo:
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
419
420module_la-eina_one_big.lo: eina_one_big.c
421@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
422@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_one_big.Tpo $(DEPDIR)/module_la-eina_one_big.Plo
423@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_one_big.c' object='module_la-eina_one_big.lo' libtool=yes @AMDEPBACKSLASH@
425@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
426@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
427
428mostlyclean-libtool:
429 -rm -f *.lo
430
431clean-libtool:
432 -rm -rf .libs _libs
433
434ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
435 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
436 unique=`for i in $$list; do \
437 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
438 done | \
439 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
440 END { if (nonempty) { for (i in files) print i; }; }'`; \
441 mkid -fID $$unique
442tags: TAGS
443
444TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
445 $(TAGS_FILES) $(LISP)
446 set x; \
447 here=`pwd`; \
448 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
449 unique=`for i in $$list; do \
450 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
451 done | \
452 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
453 END { if (nonempty) { for (i in files) print i; }; }'`; \
454 shift; \
455 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
456 test -n "$$unique" || unique=$$empty_fix; \
457 if test $$# -gt 0; then \
458 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
459 "$$@" $$unique; \
460 else \
461 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
462 $$unique; \
463 fi; \
464 fi
465ctags: CTAGS
466CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
467 $(TAGS_FILES) $(LISP)
468 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
469 unique=`for i in $$list; do \
470 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
471 done | \
472 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
473 END { if (nonempty) { for (i in files) print i; }; }'`; \
474 test -z "$(CTAGS_ARGS)$$unique" \
475 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
476 $$unique
477
478GTAGS:
479 here=`$(am__cd) $(top_builddir) && pwd` \
480 && $(am__cd) $(top_srcdir) \
481 && gtags -i $(GTAGS_ARGS) "$$here"
482
483distclean-tags:
484 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
485
486distdir: $(DISTFILES)
487 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
489 list='$(DISTFILES)'; \
490 dist_files=`for file in $$list; do echo $$file; done | \
491 sed -e "s|^$$srcdirstrip/||;t" \
492 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
493 case $$dist_files in \
494 */*) $(MKDIR_P) `echo "$$dist_files" | \
495 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
496 sort -u` ;; \
497 esac; \
498 for file in $$dist_files; do \
499 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
500 if test -d $$d/$$file; then \
501 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
502 if test -d "$(distdir)/$$file"; then \
503 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
504 fi; \
505 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
506 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
507 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
508 fi; \
509 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
510 else \
511 test -f "$(distdir)/$$file" \
512 || cp -p $$d/$$file "$(distdir)/$$file" \
513 || exit 1; \
514 fi; \
515 done
516check-am: all-am
517check: check-am
518all-am: Makefile $(LTLIBRARIES)
519installdirs:
520 for dir in "$(DESTDIR)$(controllerdir)"; do \
521 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
522 done
523install: install-am
524install-exec: install-exec-am
525install-data: install-data-am
526uninstall: uninstall-am
527
528install-am: all-am
529 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
530
531installcheck: installcheck-am
532install-strip:
533 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
534 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
535 `test -z '$(STRIP)' || \
536 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
537mostlyclean-generic:
538
539clean-generic:
540
541distclean-generic:
542 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
543 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
544
545maintainer-clean-generic:
546 @echo "This command is intended for maintainers to use"
547 @echo "it deletes files that may require special tools to rebuild."
548 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
549clean: clean-am
550
551clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
552 clean-local mostlyclean-am
553
554distclean: distclean-am
555 -rm -rf ./$(DEPDIR)
556 -rm -f Makefile
557distclean-am: clean-am distclean-compile distclean-generic \
558 distclean-tags
559
560dvi: dvi-am
561
562dvi-am:
563
564html: html-am
565
566html-am:
567
568info: info-am
569
570info-am:
571
572install-data-am: install-controllerLTLIBRARIES
573 @$(NORMAL_INSTALL)
574 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
575install-dvi: install-dvi-am
576
577install-dvi-am:
578
579install-exec-am:
580
581install-html: install-html-am
582
583install-html-am:
584
585install-info: install-info-am
586
587install-info-am:
588
589install-man:
590
591install-pdf: install-pdf-am
592
593install-pdf-am:
594
595install-ps: install-ps-am
596
597install-ps-am:
598
599installcheck-am:
600
601maintainer-clean: maintainer-clean-am
602 -rm -rf ./$(DEPDIR)
603 -rm -f Makefile
604maintainer-clean-am: distclean-am maintainer-clean-generic
605
606mostlyclean: mostlyclean-am
607
608mostlyclean-am: mostlyclean-compile mostlyclean-generic \
609 mostlyclean-libtool
610
611pdf: pdf-am
612
613pdf-am:
614
615ps: ps-am
616
617ps-am:
618
619uninstall-am: uninstall-controllerLTLIBRARIES
620 @$(NORMAL_INSTALL)
621 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
622.MAKE: install-am install-data-am install-strip uninstall-am
623
624.PHONY: CTAGS GTAGS all all-am check check-am clean \
625 clean-controllerLTLIBRARIES clean-generic clean-libtool \
626 clean-local ctags distclean distclean-compile \
627 distclean-generic distclean-libtool distclean-tags distdir dvi \
628 dvi-am html html-am info info-am install install-am \
629 install-controllerLTLIBRARIES install-data install-data-am \
630 install-data-hook install-dvi install-dvi-am install-exec \
631 install-exec-am install-html install-html-am install-info \
632 install-info-am install-man install-pdf install-pdf-am \
633 install-ps install-ps-am install-strip installcheck \
634 installcheck-am installdirs maintainer-clean \
635 maintainer-clean-generic mostlyclean mostlyclean-compile \
636 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
637 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
638 uninstall-hook
639
640
641install-data-hook:
642 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
643uninstall-hook:
644 rm -f $(DESTDIR)$(controllerdir)/module.*
645
646clean-local:
647 rm -rf *.gcno
648
649# Tell versions [3.59,3.63) of GNU make to not export all variables.
650# Otherwise a system limit (for SysV at least) may be exceeded.
651.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
deleted file mode 100644
index 1159378..0000000
--- a/libraries/eina/src/modules/mp/one_big/eina_one_big.c
+++ /dev/null
@@ -1,336 +0,0 @@
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 <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
deleted file mode 100644
index 33bd58c..0000000
--- a/libraries/eina/src/modules/mp/pass_through/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
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@EFL_EINA_BUILD@
10
11controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH)
12controller_LTLIBRARIES = module.la
13
14module_la_SOURCES = \
15eina_pass_through.c
16
17module_la_CFLAGS = @EINA_CFLAGS@
18module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
19module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
20module_la_LIBTOOLFLAGS = --tag=disable-static
21
22install-data-hook:
23 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
24uninstall-hook:
25 rm -f $(DESTDIR)$(controllerdir)/module.*
26
27clean-local:
28 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
deleted file mode 100644
index 5c84e6b..0000000
--- a/libraries/eina/src/modules/mp/pass_through/Makefile.in
+++ /dev/null
@@ -1,650 +0,0 @@
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/eina/eina_bench.m4 \
41 $(top_srcdir)/m4/eina/eina_check.m4 \
42 $(top_srcdir)/m4/common/efl_attribute.m4 \
43 $(top_srcdir)/m4/common/efl_benchmark.m4 \
44 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
45 $(top_srcdir)/m4/common/efl_coverage.m4 \
46 $(top_srcdir)/m4/common/efl_cpu.m4 \
47 $(top_srcdir)/m4/common/efl_doxygen.m4 \
48 $(top_srcdir)/m4/common/efl_examples.m4 \
49 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
50 $(top_srcdir)/m4/common/efl_path_max.m4 \
51 $(top_srcdir)/m4/common/efl_tests.m4 \
52 $(top_srcdir)/m4/common/efl_threads.m4 \
53 $(top_srcdir)/m4/common/efl_voltron.m4 \
54 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
55 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
56 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
57 $(top_srcdir)/configure.ac
58am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
59 $(ACLOCAL_M4)
60mkinstalldirs = $(install_sh) -d
61CONFIG_HEADER = $(top_builddir)/config.h
62CONFIG_CLEAN_FILES =
63CONFIG_CLEAN_VPATH_FILES =
64am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
65am__vpath_adj = case $$p in \
66 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
67 *) f=$$p;; \
68 esac;
69am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
70am__install_max = 40
71am__nobase_strip_setup = \
72 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
73am__nobase_strip = \
74 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
75am__nobase_list = $(am__nobase_strip_setup); \
76 for p in $$list; do echo "$$p $$p"; done | \
77 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
78 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
79 if (++n[$$2] == $(am__install_max)) \
80 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
81 END { for (dir in files) print dir, files[dir] }'
82am__base_list = \
83 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
84 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
85am__installdirs = "$(DESTDIR)$(controllerdir)"
86LTLIBRARIES = $(controller_LTLIBRARIES)
87module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
88am_module_la_OBJECTS = module_la-eina_pass_through.lo
89module_la_OBJECTS = $(am_module_la_OBJECTS)
90AM_V_lt = $(am__v_lt_$(V))
91am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
92am__v_lt_0 = --silent
93module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
94 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
95 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
96 -o $@
97DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
98depcomp = $(SHELL) $(top_srcdir)/depcomp
99am__depfiles_maybe = depfiles
100am__mv = mv -f
101COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
102 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
103LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
104 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
105 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
106 $(AM_CFLAGS) $(CFLAGS)
107AM_V_CC = $(am__v_CC_$(V))
108am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
109am__v_CC_0 = @echo " CC " $@;
110AM_V_at = $(am__v_at_$(V))
111am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
112am__v_at_0 = @
113CCLD = $(CC)
114LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
115 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
116 $(AM_LDFLAGS) $(LDFLAGS) -o $@
117AM_V_CCLD = $(am__v_CCLD_$(V))
118am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
119am__v_CCLD_0 = @echo " CCLD " $@;
120AM_V_GEN = $(am__v_GEN_$(V))
121am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
122am__v_GEN_0 = @echo " GEN " $@;
123SOURCES = $(module_la_SOURCES)
124DIST_SOURCES = $(module_la_SOURCES)
125ETAGS = etags
126CTAGS = ctags
127DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
128ACLOCAL = @ACLOCAL@
129ALLOCA = @ALLOCA@
130AMTAR = @AMTAR@
131AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
132AR = @AR@
133AS = @AS@
134AUTOCONF = @AUTOCONF@
135AUTOHEADER = @AUTOHEADER@
136AUTOMAKE = @AUTOMAKE@
137AWK = @AWK@
138CC = @CC@
139CCDEPMODE = @CCDEPMODE@
140CFLAGS = @CFLAGS@
141CHECK_CFLAGS = @CHECK_CFLAGS@
142CHECK_LIBS = @CHECK_LIBS@
143CPP = @CPP@
144CPPFLAGS = @CPPFLAGS@
145CXX = @CXX@
146CXXCPP = @CXXCPP@
147CXXDEPMODE = @CXXDEPMODE@
148CXXFLAGS = @CXXFLAGS@
149CYGPATH_W = @CYGPATH_W@
150DEFS = @DEFS@
151DEPDIR = @DEPDIR@
152DLLTOOL = @DLLTOOL@
153DSYMUTIL = @DSYMUTIL@
154DUMPBIN = @DUMPBIN@
155ECHO_C = @ECHO_C@
156ECHO_N = @ECHO_N@
157ECHO_T = @ECHO_T@
158ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
159ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
160EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
161EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
162EFL_EINA_BUILD = @EFL_EINA_BUILD@
163EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
164EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
165EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
166EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
167EGREP = @EGREP@
168EINA_CFLAGS = @EINA_CFLAGS@
169EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
170EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
171EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
172EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
173EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
174EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
175EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
176EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
177EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
178EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
179EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
180EINA_LIBS = @EINA_LIBS@
181EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
182EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
183EMEMOA_LIBS = @EMEMOA_LIBS@
184ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
185ESCAPE_LIBS = @ESCAPE_LIBS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
190EXOTIC_LIBS = @EXOTIC_LIBS@
191FGREP = @FGREP@
192GLIB_CFLAGS = @GLIB_CFLAGS@
193GLIB_LIBS = @GLIB_LIBS@
194GREP = @GREP@
195INSTALL = @INSTALL@
196INSTALL_DATA = @INSTALL_DATA@
197INSTALL_PROGRAM = @INSTALL_PROGRAM@
198INSTALL_SCRIPT = @INSTALL_SCRIPT@
199INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
200LD = @LD@
201LDFLAGS = @LDFLAGS@
202LIBOBJS = @LIBOBJS@
203LIBS = @LIBS@
204LIBTOOL = @LIBTOOL@
205LIPO = @LIPO@
206LN_S = @LN_S@
207LTLIBOBJS = @LTLIBOBJS@
208MAKEINFO = @MAKEINFO@
209MKDIR_P = @MKDIR_P@
210MODULE_ARCH = @MODULE_ARCH@
211NM = @NM@
212NMEDIT = @NMEDIT@
213OBJDUMP = @OBJDUMP@
214OBJEXT = @OBJEXT@
215OTOOL = @OTOOL@
216OTOOL64 = @OTOOL64@
217PACKAGE = @PACKAGE@
218PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
219PACKAGE_NAME = @PACKAGE_NAME@
220PACKAGE_STRING = @PACKAGE_STRING@
221PACKAGE_TARNAME = @PACKAGE_TARNAME@
222PACKAGE_URL = @PACKAGE_URL@
223PACKAGE_VERSION = @PACKAGE_VERSION@
224PATH_SEPARATOR = @PATH_SEPARATOR@
225PKG_CONFIG = @PKG_CONFIG@
226PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
227PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
228RANLIB = @RANLIB@
229SED = @SED@
230SET_MAKE = @SET_MAKE@
231SHELL = @SHELL@
232STRIP = @STRIP@
233VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
234VALGRIND_LIBS = @VALGRIND_LIBS@
235VERSION = @VERSION@
236VMAJ = @VMAJ@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244am__include = @am__include@
245am__leading_dot = @am__leading_dot@
246am__quote = @am__quote@
247am__tar = @am__tar@
248am__untar = @am__untar@
249bindir = @bindir@
250build = @build@
251build_alias = @build_alias@
252build_cpu = @build_cpu@
253build_os = @build_os@
254build_vendor = @build_vendor@
255builddir = @builddir@
256datadir = @datadir@
257datarootdir = @datarootdir@
258dlopen_libs = @dlopen_libs@
259docdir = @docdir@
260dvidir = @dvidir@
261efl_doxygen = @efl_doxygen@
262efl_have_doxygen = @efl_have_doxygen@
263exec_prefix = @exec_prefix@
264have_lcov = @have_lcov@
265host = @host@
266host_alias = @host_alias@
267host_cpu = @host_cpu@
268host_os = @host_os@
269host_vendor = @host_vendor@
270htmldir = @htmldir@
271iconv_libs = @iconv_libs@
272includedir = @includedir@
273infodir = @infodir@
274install_sh = @install_sh@
275libdir = @libdir@
276libexecdir = @libexecdir@
277localedir = @localedir@
278localstatedir = @localstatedir@
279lt_ECHO = @lt_ECHO@
280lt_enable_auto_import = @lt_enable_auto_import@
281mandir = @mandir@
282mkdir_p = @mkdir_p@
283oldincludedir = @oldincludedir@
284pdfdir = @pdfdir@
285pkgconfig_requires_private = @pkgconfig_requires_private@
286prefix = @prefix@
287program_transform_name = @program_transform_name@
288psdir = @psdir@
289release_info = @release_info@
290requirement_eina = @requirement_eina@
291rt_libs = @rt_libs@
292sbindir = @sbindir@
293sharedstatedir = @sharedstatedir@
294srcdir = @srcdir@
295sysconfdir = @sysconfdir@
296target_alias = @target_alias@
297top_build_prefix = @top_build_prefix@
298top_builddir = @top_builddir@
299top_srcdir = @top_srcdir@
300version_info = @version_info@
301MAINTAINERCLEANFILES = Makefile.in
302AM_CPPFLAGS = \
303-I. \
304-I$(top_srcdir)/src/include \
305-I$(top_builddir)/src/include \
306-I$(top_srcdir)/src/lib \
307-I$(top_builddir)/src/lib \
308@EFL_EINA_BUILD@
309
310controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH)
311controller_LTLIBRARIES = module.la
312module_la_SOURCES = \
313eina_pass_through.c
314
315module_la_CFLAGS = @EINA_CFLAGS@
316module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
317module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
318module_la_LIBTOOLFLAGS = --tag=disable-static
319all: all-am
320
321.SUFFIXES:
322.SUFFIXES: .c .lo .o .obj
323$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
324 @for dep in $?; do \
325 case '$(am__configure_deps)' in \
326 *$$dep*) \
327 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
328 && { if test -f $@; then exit 0; else break; fi; }; \
329 exit 1;; \
330 esac; \
331 done; \
332 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile'; \
333 $(am__cd) $(top_srcdir) && \
334 $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile
335.PRECIOUS: Makefile
336Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
337 @case '$?' in \
338 *config.status*) \
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
340 *) \
341 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
342 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
343 esac;
344
345$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
346 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
347
348$(top_srcdir)/configure: $(am__configure_deps)
349 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
350$(ACLOCAL_M4): $(am__aclocal_m4_deps)
351 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
352$(am__aclocal_m4_deps):
353install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
354 @$(NORMAL_INSTALL)
355 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
356 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
357 list2=; for p in $$list; do \
358 if test -f $$p; then \
359 list2="$$list2 $$p"; \
360 else :; fi; \
361 done; \
362 test -z "$$list2" || { \
363 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
364 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
365 }
366
367uninstall-controllerLTLIBRARIES:
368 @$(NORMAL_UNINSTALL)
369 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
370 for p in $$list; do \
371 $(am__strip_dir) \
372 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
373 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
374 done
375
376clean-controllerLTLIBRARIES:
377 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
378 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
379 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
380 test "$$dir" != "$$p" || dir=.; \
381 echo "rm -f \"$${dir}/so_locations\""; \
382 rm -f "$${dir}/so_locations"; \
383 done
384module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
385 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
386
387mostlyclean-compile:
388 -rm -f *.$(OBJEXT)
389
390distclean-compile:
391 -rm -f *.tab.c
392
393@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_pass_through.Plo@am__quote@
394
395.c.o:
396@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
397@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
398@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
399@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
401@am__fastdepCC_FALSE@ $(COMPILE) -c $<
402
403.c.obj:
404@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
405@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
406@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
407@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
409@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
410
411.c.lo:
412@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
413@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
414@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
415@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
417@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
418
419module_la-eina_pass_through.lo: eina_pass_through.c
420@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
421@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_pass_through.Tpo $(DEPDIR)/module_la-eina_pass_through.Plo
422@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
423@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_pass_through.c' object='module_la-eina_pass_through.lo' libtool=yes @AMDEPBACKSLASH@
424@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
425@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
426
427mostlyclean-libtool:
428 -rm -f *.lo
429
430clean-libtool:
431 -rm -rf .libs _libs
432
433ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
434 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
435 unique=`for i in $$list; do \
436 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
437 done | \
438 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
439 END { if (nonempty) { for (i in files) print i; }; }'`; \
440 mkid -fID $$unique
441tags: TAGS
442
443TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
444 $(TAGS_FILES) $(LISP)
445 set x; \
446 here=`pwd`; \
447 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
448 unique=`for i in $$list; do \
449 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
450 done | \
451 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
452 END { if (nonempty) { for (i in files) print i; }; }'`; \
453 shift; \
454 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
455 test -n "$$unique" || unique=$$empty_fix; \
456 if test $$# -gt 0; then \
457 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
458 "$$@" $$unique; \
459 else \
460 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
461 $$unique; \
462 fi; \
463 fi
464ctags: CTAGS
465CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
466 $(TAGS_FILES) $(LISP)
467 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
468 unique=`for i in $$list; do \
469 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
470 done | \
471 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
472 END { if (nonempty) { for (i in files) print i; }; }'`; \
473 test -z "$(CTAGS_ARGS)$$unique" \
474 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
475 $$unique
476
477GTAGS:
478 here=`$(am__cd) $(top_builddir) && pwd` \
479 && $(am__cd) $(top_srcdir) \
480 && gtags -i $(GTAGS_ARGS) "$$here"
481
482distclean-tags:
483 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
484
485distdir: $(DISTFILES)
486 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
487 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
488 list='$(DISTFILES)'; \
489 dist_files=`for file in $$list; do echo $$file; done | \
490 sed -e "s|^$$srcdirstrip/||;t" \
491 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
492 case $$dist_files in \
493 */*) $(MKDIR_P) `echo "$$dist_files" | \
494 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
495 sort -u` ;; \
496 esac; \
497 for file in $$dist_files; do \
498 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
499 if test -d $$d/$$file; then \
500 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
501 if test -d "$(distdir)/$$file"; then \
502 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
503 fi; \
504 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
505 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
506 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
507 fi; \
508 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
509 else \
510 test -f "$(distdir)/$$file" \
511 || cp -p $$d/$$file "$(distdir)/$$file" \
512 || exit 1; \
513 fi; \
514 done
515check-am: all-am
516check: check-am
517all-am: Makefile $(LTLIBRARIES)
518installdirs:
519 for dir in "$(DESTDIR)$(controllerdir)"; do \
520 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
521 done
522install: install-am
523install-exec: install-exec-am
524install-data: install-data-am
525uninstall: uninstall-am
526
527install-am: all-am
528 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
529
530installcheck: installcheck-am
531install-strip:
532 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
533 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
534 `test -z '$(STRIP)' || \
535 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
536mostlyclean-generic:
537
538clean-generic:
539
540distclean-generic:
541 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
542 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
543
544maintainer-clean-generic:
545 @echo "This command is intended for maintainers to use"
546 @echo "it deletes files that may require special tools to rebuild."
547 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
548clean: clean-am
549
550clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
551 clean-local mostlyclean-am
552
553distclean: distclean-am
554 -rm -rf ./$(DEPDIR)
555 -rm -f Makefile
556distclean-am: clean-am distclean-compile distclean-generic \
557 distclean-tags
558
559dvi: dvi-am
560
561dvi-am:
562
563html: html-am
564
565html-am:
566
567info: info-am
568
569info-am:
570
571install-data-am: install-controllerLTLIBRARIES
572 @$(NORMAL_INSTALL)
573 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
574install-dvi: install-dvi-am
575
576install-dvi-am:
577
578install-exec-am:
579
580install-html: install-html-am
581
582install-html-am:
583
584install-info: install-info-am
585
586install-info-am:
587
588install-man:
589
590install-pdf: install-pdf-am
591
592install-pdf-am:
593
594install-ps: install-ps-am
595
596install-ps-am:
597
598installcheck-am:
599
600maintainer-clean: maintainer-clean-am
601 -rm -rf ./$(DEPDIR)
602 -rm -f Makefile
603maintainer-clean-am: distclean-am maintainer-clean-generic
604
605mostlyclean: mostlyclean-am
606
607mostlyclean-am: mostlyclean-compile mostlyclean-generic \
608 mostlyclean-libtool
609
610pdf: pdf-am
611
612pdf-am:
613
614ps: ps-am
615
616ps-am:
617
618uninstall-am: uninstall-controllerLTLIBRARIES
619 @$(NORMAL_INSTALL)
620 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
621.MAKE: install-am install-data-am install-strip uninstall-am
622
623.PHONY: CTAGS GTAGS all all-am check check-am clean \
624 clean-controllerLTLIBRARIES clean-generic clean-libtool \
625 clean-local ctags distclean distclean-compile \
626 distclean-generic distclean-libtool distclean-tags distdir dvi \
627 dvi-am html html-am info info-am install install-am \
628 install-controllerLTLIBRARIES install-data install-data-am \
629 install-data-hook install-dvi install-dvi-am install-exec \
630 install-exec-am install-html install-html-am install-info \
631 install-info-am install-man install-pdf install-pdf-am \
632 install-ps install-ps-am install-strip installcheck \
633 installcheck-am installdirs maintainer-clean \
634 maintainer-clean-generic mostlyclean mostlyclean-compile \
635 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
636 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
637 uninstall-hook
638
639
640install-data-hook:
641 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
642uninstall-hook:
643 rm -f $(DESTDIR)$(controllerdir)/module.*
644
645clean-local:
646 rm -rf *.gcno
647
648# Tell versions [3.59,3.63) of GNU make to not export all variables.
649# Otherwise a system limit (for SysV at least) may be exceeded.
650.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
deleted file mode 100644
index 196868e..0000000
--- a/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c
+++ /dev/null
@@ -1,90 +0,0 @@
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
deleted file mode 100644
index 50d42f1..0000000
--- a/libraries/eina/src/tests/Ecore_Data.h
+++ /dev/null
@@ -1,557 +0,0 @@
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
deleted file mode 100644
index 9784892..0000000
--- a/libraries/eina/src/tests/Evas_Data.h
+++ /dev/null
@@ -1,195 +0,0 @@
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
deleted file mode 100644
index cf500f5..0000000
--- a/libraries/eina/src/tests/Makefile.am
+++ /dev/null
@@ -1,143 +0,0 @@
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 cxx_compile_test
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_inarray.c \
42eina_test_array.c \
43eina_test_clist.c \
44eina_test_error.c \
45eina_test_sched.c \
46eina_test_log.c \
47eina_test_magic.c \
48eina_test_inlist.c \
49eina_test_main.c \
50eina_test_counter.c \
51eina_test_lalloc.c \
52eina_test_hash.c \
53eina_test_iterator.c \
54eina_test_accessor.c \
55eina_test_module.c \
56eina_test_convert.c \
57eina_test_rbtree.c \
58eina_test_file.c \
59eina_test_benchmark.c \
60eina_test_mempool.c \
61eina_test_rectangle.c \
62eina_test_list.c \
63eina_test_matrixsparse.c \
64eina_test_tiler.c \
65eina_test_strbuf.c \
66eina_test_str.c \
67eina_test_quadtree.c \
68eina_test_simple_xml_parser.c \
69eina_test_value.c \
70eina_test_model.c
71
72eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
73
74cxx_compile_test_SOURCES = cxx_compile_test.cxx
75cxx_compile_test_LDADD = $(top_builddir)/src/lib/libeina.la
76
77module_dummydir = $(libdir)/eina/test
78module_dummy_LTLIBRARIES = module_dummy.la
79
80module_dummy_la_SOURCES = \
81eina_test_module_dummy.c
82
83module_dummy_la_CPPFLAGS = \
84-I$(top_srcdir)/src/lib \
85-I$(top_srcdir)/src/include \
86-I$(top_builddir)/src/include \
87-I$(top_builddir)/src/lib \
88@EFL_EINA_BUILD@
89module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
90module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
91module_dummy_la_LIBTOOLFLAGS = --tag=disable-static
92
93endif
94
95if EFL_ENABLE_BENCHMARK
96
97bench_PROGRAMS = eina_bench
98
99eina_bench_SOURCES = \
100eina_bench.c \
101eina_bench_sort.c \
102eina_bench_hash.c \
103eina_bench_stringshare.c \
104eina_bench_convert.c \
105eina_bench_mempool.c \
106eina_bench_stringshare_e17.c \
107eina_bench_array.c \
108eina_bench_rectangle_pool.c \
109ecore_list.c \
110ecore_strings.c \
111ecore_hash.c \
112ecore_sheap.c \
113evas_hash.c \
114evas_list.c \
115evas_mempool.c \
116evas_object_list.c \
117evas_stringshare.c \
118eina_bench_quad.c
119
120if CITYHASH_BENCH
121noinst_LTLIBRARIES = libcity.la
122libcity_la_SOURCES = city.cc
123
124nodist_EXTRA_eina_bench_SOURCES = dummy.cc
125eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la
126else
127eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la
128
129endif
130
131
132
133endif
134
135EXTRA_DIST = eina_bench.h \
136 eina_suite.h \
137 Ecore_Data.h \
138 Evas_Data.h \
139 evas_mempool.h \
140 strlog
141
142clean-local:
143 rm -rf *.gcno *.gcda
diff --git a/libraries/eina/src/tests/Makefile.in b/libraries/eina/src/tests/Makefile.in
deleted file mode 100644
index 81e58ba..0000000
--- a/libraries/eina/src/tests/Makefile.in
+++ /dev/null
@@ -1,1039 +0,0 @@
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_TESTS_TRUE@ cxx_compile_test$(EXEEXT)
42@EFL_ENABLE_BENCHMARK_TRUE@bench_PROGRAMS = eina_bench$(EXEEXT)
43subdir = src/tests
44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
46am__aclocal_m4_deps = $(top_srcdir)/m4/eina/eina_bench.m4 \
47 $(top_srcdir)/m4/eina/eina_check.m4 \
48 $(top_srcdir)/m4/common/efl_attribute.m4 \
49 $(top_srcdir)/m4/common/efl_benchmark.m4 \
50 $(top_srcdir)/m4/common/efl_compiler_flag.m4 \
51 $(top_srcdir)/m4/common/efl_coverage.m4 \
52 $(top_srcdir)/m4/common/efl_cpu.m4 \
53 $(top_srcdir)/m4/common/efl_doxygen.m4 \
54 $(top_srcdir)/m4/common/efl_examples.m4 \
55 $(top_srcdir)/m4/common/efl_fnmatch.m4 \
56 $(top_srcdir)/m4/common/efl_path_max.m4 \
57 $(top_srcdir)/m4/common/efl_tests.m4 \
58 $(top_srcdir)/m4/common/efl_threads.m4 \
59 $(top_srcdir)/m4/common/efl_voltron.m4 \
60 $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
61 $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
62 $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
63 $(top_srcdir)/configure.ac
64am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
65 $(ACLOCAL_M4)
66mkinstalldirs = $(install_sh) -d
67CONFIG_HEADER = $(top_builddir)/config.h
68CONFIG_CLEAN_FILES =
69CONFIG_CLEAN_VPATH_FILES =
70am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
71am__vpath_adj = case $$p in \
72 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
73 *) f=$$p;; \
74 esac;
75am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
76am__install_max = 40
77am__nobase_strip_setup = \
78 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
79am__nobase_strip = \
80 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
81am__nobase_list = $(am__nobase_strip_setup); \
82 for p in $$list; do echo "$$p $$p"; done | \
83 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
84 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
85 if (++n[$$2] == $(am__install_max)) \
86 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
87 END { for (dir in files) print dir, files[dir] }'
88am__base_list = \
89 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
90 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
91am__installdirs = "$(DESTDIR)$(module_dummydir)" \
92 "$(DESTDIR)$(benchdir)"
93LTLIBRARIES = $(module_dummy_LTLIBRARIES) $(noinst_LTLIBRARIES)
94libcity_la_LIBADD =
95am__libcity_la_SOURCES_DIST = city.cc
96@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_OBJECTS = \
97@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ city.lo
98libcity_la_OBJECTS = $(am_libcity_la_OBJECTS)
99AM_V_lt = $(am__v_lt_$(V))
100am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
101am__v_lt_0 = --silent
102@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_rpath =
103@EFL_ENABLE_TESTS_TRUE@module_dummy_la_DEPENDENCIES = \
104@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
105am__module_dummy_la_SOURCES_DIST = eina_test_module_dummy.c
106@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_OBJECTS = module_dummy_la-eina_test_module_dummy.lo
107module_dummy_la_OBJECTS = $(am_module_dummy_la_OBJECTS)
108module_dummy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
109 $(module_dummy_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
110 $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(module_dummy_la_LDFLAGS) \
111 $(LDFLAGS) -o $@
112@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_rpath = -rpath \
113@EFL_ENABLE_TESTS_TRUE@ $(module_dummydir)
114PROGRAMS = $(bench_PROGRAMS)
115am__cxx_compile_test_SOURCES_DIST = cxx_compile_test.cxx
116@EFL_ENABLE_TESTS_TRUE@am_cxx_compile_test_OBJECTS = \
117@EFL_ENABLE_TESTS_TRUE@ cxx_compile_test.$(OBJEXT)
118cxx_compile_test_OBJECTS = $(am_cxx_compile_test_OBJECTS)
119@EFL_ENABLE_TESTS_TRUE@cxx_compile_test_DEPENDENCIES = \
120@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
121am__eina_bench_SOURCES_DIST = eina_bench.c eina_bench_sort.c \
122 eina_bench_hash.c eina_bench_stringshare.c \
123 eina_bench_convert.c eina_bench_mempool.c \
124 eina_bench_stringshare_e17.c eina_bench_array.c \
125 eina_bench_rectangle_pool.c ecore_list.c ecore_strings.c \
126 ecore_hash.c ecore_sheap.c evas_hash.c evas_list.c \
127 evas_mempool.c evas_object_list.c evas_stringshare.c \
128 eina_bench_quad.c
129@EFL_ENABLE_BENCHMARK_TRUE@am_eina_bench_OBJECTS = \
130@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench.$(OBJEXT) \
131@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_sort.$(OBJEXT) \
132@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_hash.$(OBJEXT) \
133@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare.$(OBJEXT) \
134@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_convert.$(OBJEXT) \
135@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_mempool.$(OBJEXT) \
136@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare_e17.$(OBJEXT) \
137@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_array.$(OBJEXT) \
138@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_rectangle_pool.$(OBJEXT) \
139@EFL_ENABLE_BENCHMARK_TRUE@ ecore_list.$(OBJEXT) \
140@EFL_ENABLE_BENCHMARK_TRUE@ ecore_strings.$(OBJEXT) \
141@EFL_ENABLE_BENCHMARK_TRUE@ ecore_hash.$(OBJEXT) \
142@EFL_ENABLE_BENCHMARK_TRUE@ ecore_sheap.$(OBJEXT) \
143@EFL_ENABLE_BENCHMARK_TRUE@ evas_hash.$(OBJEXT) \
144@EFL_ENABLE_BENCHMARK_TRUE@ evas_list.$(OBJEXT) \
145@EFL_ENABLE_BENCHMARK_TRUE@ evas_mempool.$(OBJEXT) \
146@EFL_ENABLE_BENCHMARK_TRUE@ evas_object_list.$(OBJEXT) \
147@EFL_ENABLE_BENCHMARK_TRUE@ evas_stringshare.$(OBJEXT) \
148@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_quad.$(OBJEXT)
149eina_bench_OBJECTS = $(am_eina_bench_OBJECTS)
150@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
151@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la \
152@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ libcity.la
153am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \
154 eina_test_stringshare.c eina_test_ustringshare.c \
155 eina_test_ustr.c eina_test_binshare.c eina_test_binbuf.c \
156 eina_test_inarray.c eina_test_array.c eina_test_clist.c \
157 eina_test_error.c eina_test_sched.c eina_test_log.c \
158 eina_test_magic.c eina_test_inlist.c eina_test_main.c \
159 eina_test_counter.c eina_test_lalloc.c eina_test_hash.c \
160 eina_test_iterator.c eina_test_accessor.c eina_test_module.c \
161 eina_test_convert.c eina_test_rbtree.c eina_test_file.c \
162 eina_test_benchmark.c eina_test_mempool.c \
163 eina_test_rectangle.c eina_test_list.c \
164 eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \
165 eina_test_str.c eina_test_quadtree.c \
166 eina_test_simple_xml_parser.c eina_test_value.c \
167 eina_test_model.c
168@EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \
169@EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \
170@EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \
171@EFL_ENABLE_TESTS_TRUE@ eina_test_ustringshare.$(OBJEXT) \
172@EFL_ENABLE_TESTS_TRUE@ eina_test_ustr.$(OBJEXT) \
173@EFL_ENABLE_TESTS_TRUE@ eina_test_binshare.$(OBJEXT) \
174@EFL_ENABLE_TESTS_TRUE@ eina_test_binbuf.$(OBJEXT) \
175@EFL_ENABLE_TESTS_TRUE@ eina_test_inarray.$(OBJEXT) \
176@EFL_ENABLE_TESTS_TRUE@ eina_test_array.$(OBJEXT) \
177@EFL_ENABLE_TESTS_TRUE@ eina_test_clist.$(OBJEXT) \
178@EFL_ENABLE_TESTS_TRUE@ eina_test_error.$(OBJEXT) \
179@EFL_ENABLE_TESTS_TRUE@ eina_test_sched.$(OBJEXT) \
180@EFL_ENABLE_TESTS_TRUE@ eina_test_log.$(OBJEXT) \
181@EFL_ENABLE_TESTS_TRUE@ eina_test_magic.$(OBJEXT) \
182@EFL_ENABLE_TESTS_TRUE@ eina_test_inlist.$(OBJEXT) \
183@EFL_ENABLE_TESTS_TRUE@ eina_test_main.$(OBJEXT) \
184@EFL_ENABLE_TESTS_TRUE@ eina_test_counter.$(OBJEXT) \
185@EFL_ENABLE_TESTS_TRUE@ eina_test_lalloc.$(OBJEXT) \
186@EFL_ENABLE_TESTS_TRUE@ eina_test_hash.$(OBJEXT) \
187@EFL_ENABLE_TESTS_TRUE@ eina_test_iterator.$(OBJEXT) \
188@EFL_ENABLE_TESTS_TRUE@ eina_test_accessor.$(OBJEXT) \
189@EFL_ENABLE_TESTS_TRUE@ eina_test_module.$(OBJEXT) \
190@EFL_ENABLE_TESTS_TRUE@ eina_test_convert.$(OBJEXT) \
191@EFL_ENABLE_TESTS_TRUE@ eina_test_rbtree.$(OBJEXT) \
192@EFL_ENABLE_TESTS_TRUE@ eina_test_file.$(OBJEXT) \
193@EFL_ENABLE_TESTS_TRUE@ eina_test_benchmark.$(OBJEXT) \
194@EFL_ENABLE_TESTS_TRUE@ eina_test_mempool.$(OBJEXT) \
195@EFL_ENABLE_TESTS_TRUE@ eina_test_rectangle.$(OBJEXT) \
196@EFL_ENABLE_TESTS_TRUE@ eina_test_list.$(OBJEXT) \
197@EFL_ENABLE_TESTS_TRUE@ eina_test_matrixsparse.$(OBJEXT) \
198@EFL_ENABLE_TESTS_TRUE@ eina_test_tiler.$(OBJEXT) \
199@EFL_ENABLE_TESTS_TRUE@ eina_test_strbuf.$(OBJEXT) \
200@EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \
201@EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \
202@EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) \
203@EFL_ENABLE_TESTS_TRUE@ eina_test_value.$(OBJEXT) \
204@EFL_ENABLE_TESTS_TRUE@ eina_test_model.$(OBJEXT)
205eina_suite_OBJECTS = $(am_eina_suite_OBJECTS)
206@EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \
207@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
208DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
209depcomp = $(SHELL) $(top_srcdir)/depcomp
210am__depfiles_maybe = depfiles
211am__mv = mv -f
212COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
213 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
214LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
215 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
216 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
217 $(AM_CFLAGS) $(CFLAGS)
218AM_V_CC = $(am__v_CC_$(V))
219am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
220am__v_CC_0 = @echo " CC " $@;
221AM_V_at = $(am__v_at_$(V))
222am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
223am__v_at_0 = @
224CCLD = $(CC)
225LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
226 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
227 $(AM_LDFLAGS) $(LDFLAGS) -o $@
228AM_V_CCLD = $(am__v_CCLD_$(V))
229am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
230am__v_CCLD_0 = @echo " CCLD " $@;
231CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
232 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
233LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
234 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
235 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
236 $(AM_CXXFLAGS) $(CXXFLAGS)
237AM_V_CXX = $(am__v_CXX_$(V))
238am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
239am__v_CXX_0 = @echo " CXX " $@;
240CXXLD = $(CXX)
241CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
242 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
243 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
244AM_V_CXXLD = $(am__v_CXXLD_$(V))
245am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
246am__v_CXXLD_0 = @echo " CXXLD " $@;
247AM_V_GEN = $(am__v_GEN_$(V))
248am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
249am__v_GEN_0 = @echo " GEN " $@;
250SOURCES = $(libcity_la_SOURCES) $(module_dummy_la_SOURCES) \
251 $(cxx_compile_test_SOURCES) $(eina_bench_SOURCES) \
252 $(nodist_EXTRA_eina_bench_SOURCES) $(eina_suite_SOURCES)
253DIST_SOURCES = $(am__libcity_la_SOURCES_DIST) \
254 $(am__module_dummy_la_SOURCES_DIST) \
255 $(am__cxx_compile_test_SOURCES_DIST) \
256 $(am__eina_bench_SOURCES_DIST) $(am__eina_suite_SOURCES_DIST)
257ETAGS = etags
258CTAGS = ctags
259DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
260ACLOCAL = @ACLOCAL@
261ALLOCA = @ALLOCA@
262AMTAR = @AMTAR@
263AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
264AR = @AR@
265AS = @AS@
266AUTOCONF = @AUTOCONF@
267AUTOHEADER = @AUTOHEADER@
268AUTOMAKE = @AUTOMAKE@
269AWK = @AWK@
270CC = @CC@
271CCDEPMODE = @CCDEPMODE@
272CFLAGS = @CFLAGS@
273CHECK_CFLAGS = @CHECK_CFLAGS@
274CHECK_LIBS = @CHECK_LIBS@
275CPP = @CPP@
276CPPFLAGS = @CPPFLAGS@
277CXX = @CXX@
278CXXCPP = @CXXCPP@
279CXXDEPMODE = @CXXDEPMODE@
280CXXFLAGS = @CXXFLAGS@
281CYGPATH_W = @CYGPATH_W@
282DEFS = @DEFS@
283DEPDIR = @DEPDIR@
284DLLTOOL = @DLLTOOL@
285DSYMUTIL = @DSYMUTIL@
286DUMPBIN = @DUMPBIN@
287ECHO_C = @ECHO_C@
288ECHO_N = @ECHO_N@
289ECHO_T = @ECHO_T@
290ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
291ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
292EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
293EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
294EFL_EINA_BUILD = @EFL_EINA_BUILD@
295EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
296EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
297EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
298EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
299EGREP = @EGREP@
300EINA_CFLAGS = @EINA_CFLAGS@
301EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
302EINA_CONFIGURE_ENABLE_LOG = @EINA_CONFIGURE_ENABLE_LOG@
303EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
304EINA_CONFIGURE_HAVE_DIRENT_H = @EINA_CONFIGURE_HAVE_DIRENT_H@
305EINA_CONFIGURE_HAVE_EXOTIC = @EINA_CONFIGURE_HAVE_EXOTIC@
306EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
307EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
308EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
309EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
310EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
311EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
312EINA_LIBS = @EINA_LIBS@
313EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
314EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
315EMEMOA_LIBS = @EMEMOA_LIBS@
316ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
317ESCAPE_LIBS = @ESCAPE_LIBS@
318EVIL_CFLAGS = @EVIL_CFLAGS@
319EVIL_LIBS = @EVIL_LIBS@
320EXEEXT = @EXEEXT@
321EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
322EXOTIC_LIBS = @EXOTIC_LIBS@
323FGREP = @FGREP@
324GLIB_CFLAGS = @GLIB_CFLAGS@
325GLIB_LIBS = @GLIB_LIBS@
326GREP = @GREP@
327INSTALL = @INSTALL@
328INSTALL_DATA = @INSTALL_DATA@
329INSTALL_PROGRAM = @INSTALL_PROGRAM@
330INSTALL_SCRIPT = @INSTALL_SCRIPT@
331INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
332LD = @LD@
333LDFLAGS = @LDFLAGS@
334LIBOBJS = @LIBOBJS@
335LIBS = @LIBS@
336LIBTOOL = @LIBTOOL@
337LIPO = @LIPO@
338LN_S = @LN_S@
339LTLIBOBJS = @LTLIBOBJS@
340MAKEINFO = @MAKEINFO@
341MKDIR_P = @MKDIR_P@
342MODULE_ARCH = @MODULE_ARCH@
343NM = @NM@
344NMEDIT = @NMEDIT@
345OBJDUMP = @OBJDUMP@
346OBJEXT = @OBJEXT@
347OTOOL = @OTOOL@
348OTOOL64 = @OTOOL64@
349PACKAGE = @PACKAGE@
350PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
351PACKAGE_NAME = @PACKAGE_NAME@
352PACKAGE_STRING = @PACKAGE_STRING@
353PACKAGE_TARNAME = @PACKAGE_TARNAME@
354PACKAGE_URL = @PACKAGE_URL@
355PACKAGE_VERSION = @PACKAGE_VERSION@
356PATH_SEPARATOR = @PATH_SEPARATOR@
357PKG_CONFIG = @PKG_CONFIG@
358PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
359PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
360RANLIB = @RANLIB@
361SED = @SED@
362SET_MAKE = @SET_MAKE@
363SHELL = @SHELL@
364STRIP = @STRIP@
365VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
366VALGRIND_LIBS = @VALGRIND_LIBS@
367VERSION = @VERSION@
368VMAJ = @VMAJ@
369abs_builddir = @abs_builddir@
370abs_srcdir = @abs_srcdir@
371abs_top_builddir = @abs_top_builddir@
372abs_top_srcdir = @abs_top_srcdir@
373ac_ct_CC = @ac_ct_CC@
374ac_ct_CXX = @ac_ct_CXX@
375ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
376am__include = @am__include@
377am__leading_dot = @am__leading_dot@
378am__quote = @am__quote@
379am__tar = @am__tar@
380am__untar = @am__untar@
381bindir = @bindir@
382build = @build@
383build_alias = @build_alias@
384build_cpu = @build_cpu@
385build_os = @build_os@
386build_vendor = @build_vendor@
387builddir = @builddir@
388datadir = @datadir@
389datarootdir = @datarootdir@
390dlopen_libs = @dlopen_libs@
391docdir = @docdir@
392dvidir = @dvidir@
393efl_doxygen = @efl_doxygen@
394efl_have_doxygen = @efl_have_doxygen@
395exec_prefix = @exec_prefix@
396have_lcov = @have_lcov@
397host = @host@
398host_alias = @host_alias@
399host_cpu = @host_cpu@
400host_os = @host_os@
401host_vendor = @host_vendor@
402htmldir = @htmldir@
403iconv_libs = @iconv_libs@
404includedir = @includedir@
405infodir = @infodir@
406install_sh = @install_sh@
407libdir = @libdir@
408libexecdir = @libexecdir@
409localedir = @localedir@
410localstatedir = @localstatedir@
411lt_ECHO = @lt_ECHO@
412lt_enable_auto_import = @lt_enable_auto_import@
413mandir = @mandir@
414mkdir_p = @mkdir_p@
415oldincludedir = @oldincludedir@
416pdfdir = @pdfdir@
417pkgconfig_requires_private = @pkgconfig_requires_private@
418prefix = @prefix@
419program_transform_name = @program_transform_name@
420psdir = @psdir@
421release_info = @release_info@
422requirement_eina = @requirement_eina@
423rt_libs = @rt_libs@
424sbindir = @sbindir@
425sharedstatedir = @sharedstatedir@
426srcdir = @srcdir@
427sysconfdir = @sysconfdir@
428target_alias = @target_alias@
429top_build_prefix = @top_build_prefix@
430top_builddir = @top_builddir@
431top_srcdir = @top_srcdir@
432version_info = @version_info@
433MAINTAINERCLEANFILES = Makefile.in
434benchdir = $(bindir)
435AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/include \
436 -I$(top_builddir)/src/include -I$(top_builddir)/src/lib \
437 -DPACKAGE_BIN_DIR=\"$(bindir)\" \
438 -DPACKAGE_LIB_DIR=\"$(libdir)\" \
439 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
440 -DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" @CHECK_CFLAGS@ \
441 @GLIB_CFLAGS@ $(am__append_1) $(am__append_2)
442@EFL_ENABLE_TESTS_TRUE@eina_suite_SOURCES = \
443@EFL_ENABLE_TESTS_TRUE@eina_suite.c \
444@EFL_ENABLE_TESTS_TRUE@eina_test_fp.c \
445@EFL_ENABLE_TESTS_TRUE@eina_test_stringshare.c \
446@EFL_ENABLE_TESTS_TRUE@eina_test_ustringshare.c\
447@EFL_ENABLE_TESTS_TRUE@eina_test_ustr.c \
448@EFL_ENABLE_TESTS_TRUE@eina_test_binshare.c \
449@EFL_ENABLE_TESTS_TRUE@eina_test_binbuf.c \
450@EFL_ENABLE_TESTS_TRUE@eina_test_inarray.c \
451@EFL_ENABLE_TESTS_TRUE@eina_test_array.c \
452@EFL_ENABLE_TESTS_TRUE@eina_test_clist.c \
453@EFL_ENABLE_TESTS_TRUE@eina_test_error.c \
454@EFL_ENABLE_TESTS_TRUE@eina_test_sched.c \
455@EFL_ENABLE_TESTS_TRUE@eina_test_log.c \
456@EFL_ENABLE_TESTS_TRUE@eina_test_magic.c \
457@EFL_ENABLE_TESTS_TRUE@eina_test_inlist.c \
458@EFL_ENABLE_TESTS_TRUE@eina_test_main.c \
459@EFL_ENABLE_TESTS_TRUE@eina_test_counter.c \
460@EFL_ENABLE_TESTS_TRUE@eina_test_lalloc.c \
461@EFL_ENABLE_TESTS_TRUE@eina_test_hash.c \
462@EFL_ENABLE_TESTS_TRUE@eina_test_iterator.c \
463@EFL_ENABLE_TESTS_TRUE@eina_test_accessor.c \
464@EFL_ENABLE_TESTS_TRUE@eina_test_module.c \
465@EFL_ENABLE_TESTS_TRUE@eina_test_convert.c \
466@EFL_ENABLE_TESTS_TRUE@eina_test_rbtree.c \
467@EFL_ENABLE_TESTS_TRUE@eina_test_file.c \
468@EFL_ENABLE_TESTS_TRUE@eina_test_benchmark.c \
469@EFL_ENABLE_TESTS_TRUE@eina_test_mempool.c \
470@EFL_ENABLE_TESTS_TRUE@eina_test_rectangle.c \
471@EFL_ENABLE_TESTS_TRUE@eina_test_list.c \
472@EFL_ENABLE_TESTS_TRUE@eina_test_matrixsparse.c \
473@EFL_ENABLE_TESTS_TRUE@eina_test_tiler.c \
474@EFL_ENABLE_TESTS_TRUE@eina_test_strbuf.c \
475@EFL_ENABLE_TESTS_TRUE@eina_test_str.c \
476@EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \
477@EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c \
478@EFL_ENABLE_TESTS_TRUE@eina_test_value.c \
479@EFL_ENABLE_TESTS_TRUE@eina_test_model.c
480
481@EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
482@EFL_ENABLE_TESTS_TRUE@cxx_compile_test_SOURCES = cxx_compile_test.cxx
483@EFL_ENABLE_TESTS_TRUE@cxx_compile_test_LDADD = $(top_builddir)/src/lib/libeina.la
484@EFL_ENABLE_TESTS_TRUE@module_dummydir = $(libdir)/eina/test
485@EFL_ENABLE_TESTS_TRUE@module_dummy_LTLIBRARIES = module_dummy.la
486@EFL_ENABLE_TESTS_TRUE@module_dummy_la_SOURCES = \
487@EFL_ENABLE_TESTS_TRUE@eina_test_module_dummy.c
488
489@EFL_ENABLE_TESTS_TRUE@module_dummy_la_CPPFLAGS = \
490@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/lib \
491@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/include \
492@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/include \
493@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/lib \
494@EFL_ENABLE_TESTS_TRUE@@EFL_EINA_BUILD@
495
496@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
497@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
498@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBTOOLFLAGS = --tag=disable-static
499@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_SOURCES = \
500@EFL_ENABLE_BENCHMARK_TRUE@eina_bench.c \
501@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_sort.c \
502@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_hash.c \
503@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare.c \
504@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_convert.c \
505@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_mempool.c \
506@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare_e17.c \
507@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_array.c \
508@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_rectangle_pool.c \
509@EFL_ENABLE_BENCHMARK_TRUE@ecore_list.c \
510@EFL_ENABLE_BENCHMARK_TRUE@ecore_strings.c \
511@EFL_ENABLE_BENCHMARK_TRUE@ecore_hash.c \
512@EFL_ENABLE_BENCHMARK_TRUE@ecore_sheap.c \
513@EFL_ENABLE_BENCHMARK_TRUE@evas_hash.c \
514@EFL_ENABLE_BENCHMARK_TRUE@evas_list.c \
515@EFL_ENABLE_BENCHMARK_TRUE@evas_mempool.c \
516@EFL_ENABLE_BENCHMARK_TRUE@evas_object_list.c \
517@EFL_ENABLE_BENCHMARK_TRUE@evas_stringshare.c \
518@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_quad.c
519
520@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@noinst_LTLIBRARIES = libcity.la
521@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@libcity_la_SOURCES = city.cc
522@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@nodist_EXTRA_eina_bench_SOURCES = dummy.cc
523@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la
524@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la
525EXTRA_DIST = eina_bench.h \
526 eina_suite.h \
527 Ecore_Data.h \
528 Evas_Data.h \
529 evas_mempool.h \
530 strlog
531
532all: all-am
533
534.SUFFIXES:
535.SUFFIXES: .c .cc .cxx .lo .o .obj
536$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
537 @for dep in $?; do \
538 case '$(am__configure_deps)' in \
539 *$$dep*) \
540 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
541 && { if test -f $@; then exit 0; else break; fi; }; \
542 exit 1;; \
543 esac; \
544 done; \
545 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \
546 $(am__cd) $(top_srcdir) && \
547 $(AUTOMAKE) --gnu src/tests/Makefile
548.PRECIOUS: Makefile
549Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
550 @case '$?' in \
551 *config.status*) \
552 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
553 *) \
554 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
555 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
556 esac;
557
558$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
559 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
560
561$(top_srcdir)/configure: $(am__configure_deps)
562 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
563$(ACLOCAL_M4): $(am__aclocal_m4_deps)
564 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
565$(am__aclocal_m4_deps):
566install-module_dummyLTLIBRARIES: $(module_dummy_LTLIBRARIES)
567 @$(NORMAL_INSTALL)
568 test -z "$(module_dummydir)" || $(MKDIR_P) "$(DESTDIR)$(module_dummydir)"
569 @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \
570 list2=; for p in $$list; do \
571 if test -f $$p; then \
572 list2="$$list2 $$p"; \
573 else :; fi; \
574 done; \
575 test -z "$$list2" || { \
576 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(module_dummydir)'"; \
577 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(module_dummydir)"; \
578 }
579
580uninstall-module_dummyLTLIBRARIES:
581 @$(NORMAL_UNINSTALL)
582 @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \
583 for p in $$list; do \
584 $(am__strip_dir) \
585 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(module_dummydir)/$$f'"; \
586 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(module_dummydir)/$$f"; \
587 done
588
589clean-module_dummyLTLIBRARIES:
590 -test -z "$(module_dummy_LTLIBRARIES)" || rm -f $(module_dummy_LTLIBRARIES)
591 @list='$(module_dummy_LTLIBRARIES)'; for p in $$list; do \
592 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
593 test "$$dir" != "$$p" || dir=.; \
594 echo "rm -f \"$${dir}/so_locations\""; \
595 rm -f "$${dir}/so_locations"; \
596 done
597
598clean-noinstLTLIBRARIES:
599 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
600 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
601 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
602 test "$$dir" != "$$p" || dir=.; \
603 echo "rm -f \"$${dir}/so_locations\""; \
604 rm -f "$${dir}/so_locations"; \
605 done
606libcity.la: $(libcity_la_OBJECTS) $(libcity_la_DEPENDENCIES)
607 $(AM_V_CXXLD)$(CXXLINK) $(am_libcity_la_rpath) $(libcity_la_OBJECTS) $(libcity_la_LIBADD) $(LIBS)
608module_dummy.la: $(module_dummy_la_OBJECTS) $(module_dummy_la_DEPENDENCIES)
609 $(AM_V_CCLD)$(module_dummy_la_LINK) $(am_module_dummy_la_rpath) $(module_dummy_la_OBJECTS) $(module_dummy_la_LIBADD) $(LIBS)
610install-benchPROGRAMS: $(bench_PROGRAMS)
611 @$(NORMAL_INSTALL)
612 test -z "$(benchdir)" || $(MKDIR_P) "$(DESTDIR)$(benchdir)"
613 @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \
614 for p in $$list; do echo "$$p $$p"; done | \
615 sed 's/$(EXEEXT)$$//' | \
616 while read p p1; do if test -f $$p || test -f $$p1; \
617 then echo "$$p"; echo "$$p"; else :; fi; \
618 done | \
619 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
620 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
621 sed 'N;N;N;s,\n, ,g' | \
622 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
623 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
624 if ($$2 == $$4) files[d] = files[d] " " $$1; \
625 else { print "f", $$3 "/" $$4, $$1; } } \
626 END { for (d in files) print "f", d, files[d] }' | \
627 while read type dir files; do \
628 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
629 test -z "$$files" || { \
630 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(benchdir)$$dir'"; \
631 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(benchdir)$$dir" || exit $$?; \
632 } \
633 ; done
634
635uninstall-benchPROGRAMS:
636 @$(NORMAL_UNINSTALL)
637 @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \
638 files=`for p in $$list; do echo "$$p"; done | \
639 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
640 -e 's/$$/$(EXEEXT)/' `; \
641 test -n "$$list" || exit 0; \
642 echo " ( cd '$(DESTDIR)$(benchdir)' && rm -f" $$files ")"; \
643 cd "$(DESTDIR)$(benchdir)" && rm -f $$files
644
645clean-benchPROGRAMS:
646 @list='$(bench_PROGRAMS)'; test -n "$$list" || exit 0; \
647 echo " rm -f" $$list; \
648 rm -f $$list || exit $$?; \
649 test -n "$(EXEEXT)" || exit 0; \
650 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
651 echo " rm -f" $$list; \
652 rm -f $$list
653
654clean-checkPROGRAMS:
655 @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
656 echo " rm -f" $$list; \
657 rm -f $$list || exit $$?; \
658 test -n "$(EXEEXT)" || exit 0; \
659 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
660 echo " rm -f" $$list; \
661 rm -f $$list
662cxx_compile_test$(EXEEXT): $(cxx_compile_test_OBJECTS) $(cxx_compile_test_DEPENDENCIES)
663 @rm -f cxx_compile_test$(EXEEXT)
664 $(AM_V_CXXLD)$(CXXLINK) $(cxx_compile_test_OBJECTS) $(cxx_compile_test_LDADD) $(LIBS)
665eina_bench$(EXEEXT): $(eina_bench_OBJECTS) $(eina_bench_DEPENDENCIES)
666 @rm -f eina_bench$(EXEEXT)
667 $(AM_V_CXXLD)$(CXXLINK) $(eina_bench_OBJECTS) $(eina_bench_LDADD) $(LIBS)
668eina_suite$(EXEEXT): $(eina_suite_OBJECTS) $(eina_suite_DEPENDENCIES)
669 @rm -f eina_suite$(EXEEXT)
670 $(AM_V_CCLD)$(LINK) $(eina_suite_OBJECTS) $(eina_suite_LDADD) $(LIBS)
671
672mostlyclean-compile:
673 -rm -f *.$(OBJEXT)
674
675distclean-compile:
676 -rm -f *.tab.c
677
678@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/city.Plo@am__quote@
679@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_compile_test.Po@am__quote@
680@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@
681@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_hash.Po@am__quote@
682@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_list.Po@am__quote@
683@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_sheap.Po@am__quote@
684@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_strings.Po@am__quote@
685@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench.Po@am__quote@
686@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_array.Po@am__quote@
687@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_convert.Po@am__quote@
688@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_hash.Po@am__quote@
689@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_mempool.Po@am__quote@
690@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_quad.Po@am__quote@
691@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_rectangle_pool.Po@am__quote@
692@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_sort.Po@am__quote@
693@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare.Po@am__quote@
694@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare_e17.Po@am__quote@
695@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_suite.Po@am__quote@
696@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_accessor.Po@am__quote@
697@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_array.Po@am__quote@
698@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_benchmark.Po@am__quote@
699@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binbuf.Po@am__quote@
700@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binshare.Po@am__quote@
701@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_clist.Po@am__quote@
702@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_convert.Po@am__quote@
703@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_counter.Po@am__quote@
704@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_error.Po@am__quote@
705@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_file.Po@am__quote@
706@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_fp.Po@am__quote@
707@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_hash.Po@am__quote@
708@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_inarray.Po@am__quote@
709@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_inlist.Po@am__quote@
710@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_iterator.Po@am__quote@
711@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_lalloc.Po@am__quote@
712@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_list.Po@am__quote@
713@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_log.Po@am__quote@
714@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_magic.Po@am__quote@
715@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@
716@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@
717@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@
718@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_model.Po@am__quote@
719@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@
720@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@
721@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@
722@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rectangle.Po@am__quote@
723@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_sched.Po@am__quote@
724@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_simple_xml_parser.Po@am__quote@
725@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_str.Po@am__quote@
726@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_strbuf.Po@am__quote@
727@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_stringshare.Po@am__quote@
728@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_tiler.Po@am__quote@
729@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustr.Po@am__quote@
730@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustringshare.Po@am__quote@
731@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_value.Po@am__quote@
732@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_hash.Po@am__quote@
733@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_list.Po@am__quote@
734@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_mempool.Po@am__quote@
735@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_object_list.Po@am__quote@
736@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_stringshare.Po@am__quote@
737@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_dummy_la-eina_test_module_dummy.Plo@am__quote@
738
739.c.o:
740@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
741@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
742@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
743@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
744@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
745@am__fastdepCC_FALSE@ $(COMPILE) -c $<
746
747.c.obj:
748@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
749@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
750@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
751@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
752@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
753@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
754
755.c.lo:
756@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
757@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
758@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
759@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
760@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
761@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
762
763module_dummy_la-eina_test_module_dummy.lo: eina_test_module_dummy.c
764@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
765@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
766@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
767@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_test_module_dummy.c' object='module_dummy_la-eina_test_module_dummy.lo' libtool=yes @AMDEPBACKSLASH@
768@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
769@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
770
771.cc.o:
772@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
773@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
774@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
775@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
776@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
777@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
778
779.cc.obj:
780@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
781@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
782@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
783@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
784@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
785@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
786
787.cc.lo:
788@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
789@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
790@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
791@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
792@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
793@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
794
795.cxx.o:
796@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
797@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
798@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
799@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
800@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
801@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
802
803.cxx.obj:
804@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
805@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
806@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
807@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
808@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
809@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
810
811.cxx.lo:
812@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
813@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
814@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
815@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
816@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
817@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
818
819mostlyclean-libtool:
820 -rm -f *.lo
821
822clean-libtool:
823 -rm -rf .libs _libs
824
825ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
826 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
827 unique=`for i in $$list; do \
828 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
829 done | \
830 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
831 END { if (nonempty) { for (i in files) print i; }; }'`; \
832 mkid -fID $$unique
833tags: TAGS
834
835TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
836 $(TAGS_FILES) $(LISP)
837 set x; \
838 here=`pwd`; \
839 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
840 unique=`for i in $$list; do \
841 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
842 done | \
843 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
844 END { if (nonempty) { for (i in files) print i; }; }'`; \
845 shift; \
846 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
847 test -n "$$unique" || unique=$$empty_fix; \
848 if test $$# -gt 0; then \
849 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
850 "$$@" $$unique; \
851 else \
852 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
853 $$unique; \
854 fi; \
855 fi
856ctags: CTAGS
857CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
858 $(TAGS_FILES) $(LISP)
859 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
860 unique=`for i in $$list; do \
861 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
862 done | \
863 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
864 END { if (nonempty) { for (i in files) print i; }; }'`; \
865 test -z "$(CTAGS_ARGS)$$unique" \
866 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
867 $$unique
868
869GTAGS:
870 here=`$(am__cd) $(top_builddir) && pwd` \
871 && $(am__cd) $(top_srcdir) \
872 && gtags -i $(GTAGS_ARGS) "$$here"
873
874distclean-tags:
875 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
876
877distdir: $(DISTFILES)
878 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
879 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
880 list='$(DISTFILES)'; \
881 dist_files=`for file in $$list; do echo $$file; done | \
882 sed -e "s|^$$srcdirstrip/||;t" \
883 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
884 case $$dist_files in \
885 */*) $(MKDIR_P) `echo "$$dist_files" | \
886 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
887 sort -u` ;; \
888 esac; \
889 for file in $$dist_files; do \
890 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
891 if test -d $$d/$$file; then \
892 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
893 if test -d "$(distdir)/$$file"; then \
894 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
895 fi; \
896 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
897 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
898 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
899 fi; \
900 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
901 else \
902 test -f "$(distdir)/$$file" \
903 || cp -p $$d/$$file "$(distdir)/$$file" \
904 || exit 1; \
905 fi; \
906 done
907check-am: all-am
908 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
909check: check-am
910all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
911installdirs:
912 for dir in "$(DESTDIR)$(module_dummydir)" "$(DESTDIR)$(benchdir)"; do \
913 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
914 done
915install: install-am
916install-exec: install-exec-am
917install-data: install-data-am
918uninstall: uninstall-am
919
920install-am: all-am
921 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
922
923installcheck: installcheck-am
924install-strip:
925 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
926 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
927 `test -z '$(STRIP)' || \
928 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
929mostlyclean-generic:
930
931clean-generic:
932
933distclean-generic:
934 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
935 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
936
937maintainer-clean-generic:
938 @echo "This command is intended for maintainers to use"
939 @echo "it deletes files that may require special tools to rebuild."
940 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
941clean: clean-am
942
943clean-am: clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \
944 clean-libtool clean-local clean-module_dummyLTLIBRARIES \
945 clean-noinstLTLIBRARIES mostlyclean-am
946
947distclean: distclean-am
948 -rm -rf ./$(DEPDIR)
949 -rm -f Makefile
950distclean-am: clean-am distclean-compile distclean-generic \
951 distclean-tags
952
953dvi: dvi-am
954
955dvi-am:
956
957html: html-am
958
959html-am:
960
961info: info-am
962
963info-am:
964
965install-data-am: install-benchPROGRAMS install-module_dummyLTLIBRARIES
966
967install-dvi: install-dvi-am
968
969install-dvi-am:
970
971install-exec-am:
972
973install-html: install-html-am
974
975install-html-am:
976
977install-info: install-info-am
978
979install-info-am:
980
981install-man:
982
983install-pdf: install-pdf-am
984
985install-pdf-am:
986
987install-ps: install-ps-am
988
989install-ps-am:
990
991installcheck-am:
992
993maintainer-clean: maintainer-clean-am
994 -rm -rf ./$(DEPDIR)
995 -rm -f Makefile
996maintainer-clean-am: distclean-am maintainer-clean-generic
997
998mostlyclean: mostlyclean-am
999
1000mostlyclean-am: mostlyclean-compile mostlyclean-generic \
1001 mostlyclean-libtool
1002
1003pdf: pdf-am
1004
1005pdf-am:
1006
1007ps: ps-am
1008
1009ps-am:
1010
1011uninstall-am: uninstall-benchPROGRAMS \
1012 uninstall-module_dummyLTLIBRARIES
1013
1014.MAKE: check-am install-am install-strip
1015
1016.PHONY: CTAGS GTAGS all all-am check check-am clean \
1017 clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \
1018 clean-libtool clean-local clean-module_dummyLTLIBRARIES \
1019 clean-noinstLTLIBRARIES ctags distclean distclean-compile \
1020 distclean-generic distclean-libtool distclean-tags distdir dvi \
1021 dvi-am html html-am info info-am install install-am \
1022 install-benchPROGRAMS install-data install-data-am install-dvi \
1023 install-dvi-am install-exec install-exec-am install-html \
1024 install-html-am install-info install-info-am install-man \
1025 install-module_dummyLTLIBRARIES install-pdf install-pdf-am \
1026 install-ps install-ps-am install-strip installcheck \
1027 installcheck-am installdirs maintainer-clean \
1028 maintainer-clean-generic mostlyclean mostlyclean-compile \
1029 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1030 tags uninstall uninstall-am uninstall-benchPROGRAMS \
1031 uninstall-module_dummyLTLIBRARIES
1032
1033
1034clean-local:
1035 rm -rf *.gcno *.gcda
1036
1037# Tell versions [3.59,3.63) of GNU make to not export all variables.
1038# Otherwise a system limit (for SysV at least) may be exceeded.
1039.NOEXPORT:
diff --git a/libraries/eina/src/tests/city.cc b/libraries/eina/src/tests/city.cc
deleted file mode 100644
index 36ff93b..0000000
--- a/libraries/eina/src/tests/city.cc
+++ /dev/null
@@ -1,307 +0,0 @@
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/cxx_compile_test.cxx b/libraries/eina/src/tests/cxx_compile_test.cxx
deleted file mode 100644
index 7d8af76..0000000
--- a/libraries/eina/src/tests/cxx_compile_test.cxx
+++ /dev/null
@@ -1,34 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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#include "Eina.h"
24
25#include <iostream>
26using namespace std;
27
28int main()
29{
30 eina_init();
31 cout << "Eina compiles with C++!";
32 eina_shutdown();
33 return 0;
34}
diff --git a/libraries/eina/src/tests/ecore_hash.c b/libraries/eina/src/tests/ecore_hash.c
deleted file mode 100644
index f957d52..0000000
--- a/libraries/eina/src/tests/ecore_hash.c
+++ /dev/null
@@ -1,949 +0,0 @@
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
deleted file mode 100644
index 7da4417..0000000
--- a/libraries/eina/src/tests/ecore_list.c
+++ /dev/null
@@ -1,2162 +0,0 @@
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
deleted file mode 100644
index 448be97..0000000
--- a/libraries/eina/src/tests/ecore_sheap.c
+++ /dev/null
@@ -1,467 +0,0 @@
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
deleted file mode 100644
index d76e4c5..0000000
--- a/libraries/eina/src/tests/ecore_strings.c
+++ /dev/null
@@ -1,160 +0,0 @@
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
deleted file mode 100644
index 03aaaf9..0000000
--- a/libraries/eina/src/tests/eina_bench.c
+++ /dev/null
@@ -1,104 +0,0 @@
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 unsigned int i;
77
78 if (argc != 2)
79 return -1;
80
81 _mempool_init();
82
83 eina_init();
84
85 for (i = 0; etc[i].bench_case; ++i)
86 {
87 test = eina_benchmark_new(etc[i].bench_case, argv[1]);
88 if (!test)
89 continue;
90
91 etc[i].build(test);
92
93 eina_benchmark_run(test);
94
95 eina_benchmark_free(test);
96 }
97
98 eina_bench_e17();
99
100 eina_shutdown();
101
102 _mempool_shutdown();
103 return 0;
104}
diff --git a/libraries/eina/src/tests/eina_bench.h b/libraries/eina/src/tests/eina_bench.h
deleted file mode 100644
index d575822..0000000
--- a/libraries/eina/src/tests/eina_bench.h
+++ /dev/null
@@ -1,36 +0,0 @@
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
deleted file mode 100644
index 425eddd..0000000
--- a/libraries/eina/src/tests/eina_bench_array.c
+++ /dev/null
@@ -1,699 +0,0 @@
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
deleted file mode 100644
index aafe9ea..0000000
--- a/libraries/eina/src/tests/eina_bench_convert.c
+++ /dev/null
@@ -1,183 +0,0 @@
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
deleted file mode 100644
index 0429097..0000000
--- a/libraries/eina/src/tests/eina_bench_hash.c
+++ /dev/null
@@ -1,547 +0,0 @@
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 /* Suppress warnings as we really don't want to do anything. */
143 (void) tmp;
144 }
145
146 eina_rbtree_delete(root, EINA_RBTREE_FREE_CB(_eina_bench_rbtree_free), NULL);
147}
148
149static void
150eina_bench_lookup_murmur(int request)
151{
152 Eina_Hash *hash = NULL;
153 int *tmp_val;
154 unsigned int i;
155 unsigned int j;
156
157 hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
158 EINA_KEY_CMP(_eina_string_key_cmp),
159 EINA_KEY_HASH(eina_hash_murmur3),
160 free,
161 8);
162
163 for (i = 0; i < (unsigned int)request; ++i)
164 {
165 char tmp_key[10];
166
167 tmp_val = malloc(sizeof (int));
168
169 if (!tmp_val)
170 continue;
171
172 eina_convert_itoa(i, tmp_key);
173 *tmp_val = i;
174
175 eina_hash_add(hash, tmp_key, tmp_val);
176 }
177
178 srand(time(NULL));
179
180 for (j = 0; j < 200; ++j)
181 for (i = 0; i < (unsigned int)request; ++i)
182 {
183 char tmp_key[10];
184
185 eina_convert_itoa(rand() % request, tmp_key);
186 tmp_val = eina_hash_find(hash, tmp_key);
187 }
188
189 eina_hash_free(hash);
190}
191
192#ifdef CITYHASH_BENCH
193static void
194eina_bench_lookup_cityhash(int request)
195{
196 Eina_Hash *hash = NULL;
197 int *tmp_val;
198 unsigned int i;
199 unsigned int j;
200
201 hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
202 EINA_KEY_CMP(_eina_string_key_cmp),
203 EINA_KEY_HASH(CityHash64),
204 free,
205 8);
206
207 for (i = 0; i < (unsigned int)request; ++i)
208 {
209 char tmp_key[10];
210
211 tmp_val = malloc(sizeof (int));
212
213 if (!tmp_val)
214 continue;
215
216 eina_convert_itoa(i, tmp_key);
217 *tmp_val = i;
218
219 eina_hash_add(hash, tmp_key, tmp_val);
220 }
221
222 srand(time(NULL));
223
224 for (j = 0; j < 200; ++j)
225 for (i = 0; i < (unsigned int)request; ++i)
226 {
227 char tmp_key[10];
228
229 eina_convert_itoa(rand() % request, tmp_key);
230 tmp_val = eina_hash_find(hash, tmp_key);
231 }
232
233 eina_hash_free(hash);
234}
235#endif
236
237static void
238eina_bench_lookup_superfast(int request)
239{
240 Eina_Hash *hash = NULL;
241 int *tmp_val;
242 unsigned int i;
243 unsigned int j;
244
245 hash = eina_hash_string_superfast_new(free);
246
247 for (i = 0; i < (unsigned int)request; ++i)
248 {
249 char tmp_key[10];
250
251 tmp_val = malloc(sizeof (int));
252
253 if (!tmp_val)
254 continue;
255
256 eina_convert_itoa(i, tmp_key);
257 *tmp_val = i;
258
259 eina_hash_add(hash, tmp_key, tmp_val);
260 }
261
262 srand(time(NULL));
263
264 for (j = 0; j < 200; ++j)
265 for (i = 0; i < (unsigned int)request; ++i)
266 {
267 char tmp_key[10];
268
269 eina_convert_itoa(rand() % request, tmp_key);
270 tmp_val = eina_hash_find(hash, tmp_key);
271 }
272
273 eina_hash_free(hash);
274}
275
276static void
277eina_bench_lookup_djb2(int request)
278{
279 Eina_Hash *hash = NULL;
280 int *tmp_val;
281 unsigned int i;
282 unsigned int j;
283
284 hash = eina_hash_string_djb2_new(free);
285
286 for (i = 0; i < (unsigned int)request; ++i)
287 {
288 char tmp_key[10];
289
290 tmp_val = malloc(sizeof (int));
291
292 if (!tmp_val)
293 continue;
294
295 eina_convert_itoa(i, tmp_key);
296 *tmp_val = i;
297
298 eina_hash_add(hash, tmp_key, tmp_val);
299 }
300
301 srand(time(NULL));
302
303 for (j = 0; j < 200; ++j)
304 for (i = 0; i < (unsigned int)request; ++i)
305 {
306 char tmp_key[10];
307
308 eina_convert_itoa(rand() % request, tmp_key);
309
310 tmp_val = eina_hash_find(hash, tmp_key);
311 }
312
313 eina_hash_free(hash);
314}
315
316typedef struct _Eina_Bench_DJB2 Eina_Bench_DJB2;
317struct _Eina_Bench_DJB2
318{
319 char *key;
320 int value;
321};
322
323static void
324eina_bench_lookup_djb2_inline(int request)
325{
326 Eina_Hash *hash = NULL;
327 Eina_Bench_DJB2 *elm;
328 unsigned int i;
329 unsigned int j;
330
331 hash = eina_hash_string_djb2_new(free);
332
333 for (i = 0; i < (unsigned int)request; ++i)
334 {
335 int length;
336
337 elm = malloc(sizeof (Eina_Bench_DJB2) + 10);
338 if (!elm)
339 continue;
340
341 elm->key = (char *)(elm + 1);
342
343 length = eina_convert_itoa(i, elm->key) + 1;
344 elm->value = i;
345
346 eina_hash_direct_add_by_hash(hash, elm->key, length,
347 eina_hash_djb2(elm->key, length), elm);
348 }
349
350 srand(time(NULL));
351
352 for (j = 0; j < 200; ++j)
353 for (i = 0; i < (unsigned int)request; ++i)
354 {
355 char tmp_key[10];
356 int length = 6;
357
358 length = eina_convert_itoa(rand() % request, tmp_key) + 1;
359
360 elm =
361 eina_hash_find_by_hash(hash, tmp_key, length,
362 eina_hash_djb2(tmp_key, length));
363 }
364
365 eina_hash_free(hash);
366}
367
368#ifdef EINA_BENCH_HAVE_GLIB
369typedef struct _Eina_Bench_Glib Eina_Bench_Glib;
370struct _Eina_Bench_Glib
371{
372 char *key;
373 int value;
374};
375
376static void
377eina_bench_lookup_ghash(int request)
378{
379 Eina_Bench_Glib *elm;
380 GHashTable *hash;
381 unsigned int i;
382 unsigned int j;
383
384 hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free);
385
386 for (i = 0; i < (unsigned int)request; ++i)
387 {
388 elm = malloc(sizeof (Eina_Bench_Glib) + 10);
389 if (!elm)
390 continue;
391
392 elm->key = (char *)(elm + 1);
393
394 eina_convert_itoa(i, elm->key);
395 elm->value = i;
396
397 g_hash_table_insert(hash, elm->key, elm);
398 }
399
400 srand(time(NULL));
401
402 for (j = 0; j < 200; ++j)
403 for (i = 0; i < (unsigned int)request; ++i)
404 {
405 char tmp_key[10];
406
407 eina_convert_itoa(rand() % request, tmp_key);
408
409 elm = g_hash_table_lookup(hash, tmp_key);
410 }
411
412 g_hash_table_destroy(hash);
413}
414#endif
415
416static void
417eina_bench_lookup_evas(int request)
418{
419 Evas_Hash *hash = NULL;
420 Eina_Array *array = NULL;
421 int *tmp_val;
422 Eina_Array_Iterator it;
423 unsigned int i;
424 unsigned int j;
425
426 array = eina_array_new(10000);
427
428 for (i = 0; i < (unsigned int)request; ++i)
429 {
430 char tmp_key[10];
431
432 tmp_val = malloc(sizeof (int));
433
434 if (!tmp_val)
435 continue;
436
437 eina_convert_itoa(i, tmp_key);
438 *tmp_val = i;
439
440 hash = evas_hash_add(hash, tmp_key, tmp_val);
441
442 eina_array_push(array, tmp_val);
443 }
444
445 srand(time(NULL));
446
447 for (j = 0; j < 200; ++j)
448 for (i = 0; i < (unsigned int)request; ++i)
449 {
450 char tmp_key[10];
451
452 eina_convert_itoa(rand() % request, tmp_key);
453
454 tmp_val = evas_hash_find(hash, tmp_key);
455 }
456
457 evas_hash_free(hash);
458
459 EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
460 free(tmp_val);
461
462 eina_array_free(array);
463}
464
465typedef struct _Eina_Bench_Ecore Eina_Bench_Ecore;
466struct _Eina_Bench_Ecore
467{
468 char *key;
469 int value;
470};
471
472static void
473eina_bench_lookup_ecore(int request)
474{
475 Ecore_Hash *hash = NULL;
476 Eina_Bench_Ecore *elm;
477 unsigned int i;
478 unsigned int j;
479
480 hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
481
482 ecore_hash_free_key_cb_set(hash, NULL);
483 ecore_hash_free_value_cb_set(hash, free);
484
485 for (i = 0; i < (unsigned int)request; ++i)
486 {
487 elm = malloc(sizeof (Eina_Bench_Ecore) + 10);
488 if (!elm)
489 continue;
490
491 elm->key = (char *)(elm + 1);
492 eina_convert_itoa(i, elm->key);
493 elm->value = i;
494
495 ecore_hash_set(hash, elm->key, elm);
496 }
497
498 srand(time(NULL));
499
500 for (j = 0; j < 200; ++j)
501 for (i = 0; i < (unsigned int)request; ++i)
502 {
503 char tmp_key[10];
504
505 eina_convert_itoa(rand() % request, tmp_key);
506
507 elm = ecore_hash_get(hash, tmp_key);
508 }
509
510 ecore_hash_destroy(hash);
511}
512
513void eina_bench_hash(Eina_Benchmark *bench)
514{
515 eina_benchmark_register(bench, "superfast-lookup",
516 EINA_BENCHMARK(
517 eina_bench_lookup_superfast), 10, 10000, 10);
518 eina_benchmark_register(bench, "djb2-lookup",
519 EINA_BENCHMARK(
520 eina_bench_lookup_djb2), 10, 10000, 10);
521 eina_benchmark_register(bench, "djb2-lookup-inline",
522 EINA_BENCHMARK(
523 eina_bench_lookup_djb2_inline), 10, 10000, 10);
524 eina_benchmark_register(bench, "murmur",
525 EINA_BENCHMARK(
526 eina_bench_lookup_murmur), 10, 10000, 10);
527#ifdef CITYHASH_BENCH
528 eina_benchmark_register(bench, "cityhash",
529 EINA_BENCHMARK(
530 eina_bench_lookup_cityhash), 10, 10000, 10);
531#endif
532 eina_benchmark_register(bench, "rbtree",
533 EINA_BENCHMARK(
534 eina_bench_lookup_rbtree), 10, 10000, 10);
535#ifdef EINA_BENCH_HAVE_GLIB
536 eina_benchmark_register(bench, "ghash-lookup",
537 EINA_BENCHMARK(
538 eina_bench_lookup_ghash), 10, 10000, 10);
539#endif
540 eina_benchmark_register(bench, "evas-lookup",
541 EINA_BENCHMARK(
542 eina_bench_lookup_evas), 10, 10000, 10);
543 eina_benchmark_register(bench, "ecore-lookup",
544 EINA_BENCHMARK(
545 eina_bench_lookup_ecore), 10, 10000, 10);
546
547}
diff --git a/libraries/eina/src/tests/eina_bench_mempool.c b/libraries/eina/src/tests/eina_bench_mempool.c
deleted file mode 100644
index d7e2c62..0000000
--- a/libraries/eina/src/tests/eina_bench_mempool.c
+++ /dev/null
@@ -1,188 +0,0 @@
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
deleted file mode 100644
index 8401fd4..0000000
--- a/libraries/eina/src/tests/eina_bench_quad.c
+++ /dev/null
@@ -1,320 +0,0 @@
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 <stdlib.h>
23
24#include "eina_main.h"
25#include "eina_mempool.h"
26#include "eina_rectangle.h"
27#include "eina_quadtree.h"
28#include "eina_list.h"
29#include "eina_bench.h"
30
31static void
32eina_bench_render_loop(int request)
33{
34 Eina_List *objects = NULL;
35 Eina_Rectangle *r;
36 int i;
37 int j;
38
39 eina_init();
40
41 for (i = 0; i < request; ++i)
42 objects = eina_list_append(objects,
43 eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
44 (rand() *
45 HEIGHT) / RAND_MAX,
46 (rand() * WIDTH /
47 2) / RAND_MAX,
48 (rand() * HEIGHT /
49 2) / RAND_MAX));
50
51 for (j = 0; j < 100; ++j)
52 {
53 Eina_Rectangle *collide;
54 Eina_List *collided = NULL;
55 Eina_List *changed = NULL;
56 Eina_List *l;
57
58 /* Delete 25% of all objects */
59 i = request * 25 / 100;
60 for (; i > 0; --i)
61 {
62 eina_rectangle_free(eina_list_data_get(objects));
63 objects = eina_list_remove_list(objects, objects);
64 }
65
66 /* Add them back */
67 i = request * 25 / 100;
68 for (; i > 0; --i)
69 {
70 r = eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
71 (rand() * HEIGHT) / RAND_MAX,
72 (rand() * WIDTH / 3) / RAND_MAX,
73 (rand() * HEIGHT / 3) / RAND_MAX);
74 objects = eina_list_prepend(objects, r);
75 changed = eina_list_append(changed, r);
76 }
77
78 /* Do one collide search */
79 collide = eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
80 (rand() * HEIGHT) / RAND_MAX,
81 (rand() * WIDTH / 4) / RAND_MAX,
82 (rand() * HEIGHT / 4) / RAND_MAX);
83 EINA_LIST_FOREACH(objects, l, r)
84 if (eina_rectangles_intersect(r, collide))
85 collided = eina_list_append(collided, r);
86
87 collided = eina_list_free(collided);
88 eina_rectangle_free(collide);
89
90 /* Modify 50% of all objects */
91 i = request * 50 / 100;
92 for (; i > 0; --i)
93 {
94 r = eina_list_data_get(eina_list_last(objects));
95 objects = eina_list_remove_list(objects, eina_list_last(objects));
96
97 r->x = (rand() * WIDTH) / RAND_MAX;
98 r->y = (rand() * HEIGHT) / RAND_MAX;
99 r->w = (rand() * WIDTH / 3) / RAND_MAX;
100 r->h = (rand() * HEIGHT / 3) / RAND_MAX;
101
102 objects = eina_list_prepend(objects, r);
103 changed = eina_list_append(changed, r);
104 }
105
106 /* Emulating the render loop by colliding all modified
107 object with all intersecting object */
108 EINA_LIST_FREE(changed, r)
109 {
110 EINA_LIST_FOREACH(objects, l, collide)
111 if (r != collide && eina_rectangles_intersect(collide, r))
112 collided = eina_list_append(collided, collide);
113
114 collided = eina_list_append(collided, r);
115 }
116
117 /* Ok, we compute it, now it's done */
118 collided = eina_list_free(collided);
119 }
120
121 EINA_LIST_FREE(objects, r)
122 eina_rectangle_free(r);
123
124 eina_shutdown();
125}
126
127typedef struct _Eina_Bench_Quad Eina_Bench_Quad;
128struct _Eina_Bench_Quad
129{
130 Eina_Rectangle r;
131 Eina_QuadTree_Item *item;
132};
133
134static Eina_Quad_Direction
135_eina_bench_quadtree_vertical(const void *object, size_t middle)
136{
137 const Eina_Bench_Quad *b = object;
138 size_t y;
139
140 y = b->r.y < 0 ? 0 : (size_t)b->r.y;
141
142 if (y + b->r.h < middle)
143 return EINA_QUAD_LEFT;
144
145 if (y > middle)
146 return EINA_QUAD_RIGHT;
147
148 return EINA_QUAD_BOTH;
149}
150
151static Eina_Quad_Direction
152_eina_bench_quadtree_horizontal(const void *object, size_t middle)
153{
154 const Eina_Bench_Quad *b = object;
155 size_t x;
156
157 x = b->r.x < 0 ? 0 : (size_t)b->r.x;
158
159 if (x + b->r.w < middle)
160 return EINA_QUAD_LEFT;
161
162 if (x > middle)
163 return EINA_QUAD_RIGHT;
164
165 return EINA_QUAD_BOTH;
166}
167
168static void
169eina_bench_quadtree_render_loop(int request)
170{
171 Eina_List *objects = NULL;
172 Eina_Inlist *possibility;
173 Eina_Bench_Quad *b;
174 Eina_QuadTree *q;
175 Eina_Mempool *mp;
176 int i;
177 int j;
178
179 eina_init();
180
181 mp = eina_mempool_add("chained_mempool", "bench-quad", NULL,
182 sizeof (Eina_Bench_Quad), 320);
183
184 q = eina_quadtree_new(WIDTH, HEIGHT,
185 _eina_bench_quadtree_vertical,
186 _eina_bench_quadtree_horizontal);
187
188 /* Create requested object */
189 for (i = 0; i < request; ++i)
190 {
191 b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
192 EINA_RECTANGLE_SET(&b->r,
193 (rand() * WIDTH) / RAND_MAX,
194 (rand() * HEIGHT) / RAND_MAX,
195 (rand() * WIDTH / 2) / RAND_MAX,
196 (rand() * HEIGHT / 2) / RAND_MAX);
197 b->item = eina_quadtree_add(q, b);
198
199 objects = eina_list_append(objects, b);
200 }
201
202 for (j = 0; j < 100; ++j)
203 {
204 Eina_Bench_Quad *collide;
205 Eina_List *changed = NULL;
206 Eina_List *collided = NULL;
207
208 /* Delete 25% of all objects */
209 i = request * 25 / 100;
210 for (; i > 0; --i)
211 {
212 b = eina_list_data_get(objects);
213 eina_quadtree_del(b->item);
214 eina_mempool_free(mp, b);
215
216 objects = eina_list_remove_list(objects, objects);
217 }
218
219 /* Add them back */
220 i = request * 25 / 100;
221 for (; i > 0; --i)
222 {
223 b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
224 EINA_RECTANGLE_SET(&b->r,
225 (rand() * WIDTH) / RAND_MAX,
226 (rand() * HEIGHT) / RAND_MAX,
227 (rand() * WIDTH / 3) / RAND_MAX,
228 (rand() * HEIGHT / 3) / RAND_MAX);
229 b->item = eina_quadtree_add(q, b);
230
231 objects = eina_list_prepend(objects, b);
232 changed = eina_list_append(changed, b);
233 }
234
235 /* Do one collide search */
236 collide = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
237 EINA_RECTANGLE_SET(&collide->r,
238 (rand() * WIDTH) / RAND_MAX,
239 (rand() * HEIGHT) / RAND_MAX,
240 (rand() * WIDTH / 4) / RAND_MAX,
241 (rand() * HEIGHT / 4) / RAND_MAX);
242 possibility = eina_quadtree_collide(q,
243 collide->r.x, collide->r.y,
244 collide->r.w, collide->r.h);
245 while (possibility)
246 {
247 b = eina_quadtree_object(possibility);
248 possibility = possibility->next;
249
250 if (eina_rectangles_intersect(&b->r, &collide->r))
251 collided = eina_list_append(collided, b);
252 }
253
254 collided = eina_list_free(collided);
255 eina_mempool_free(mp, collide);
256
257 /* Modify 50% of all objects */
258 i = request * 50 / 100;
259 for (; i > 0; --i)
260 {
261 b = eina_list_data_get(eina_list_last(objects));
262 objects = eina_list_remove_list(objects, eina_list_last(objects));
263
264 b->r.x = (rand() * WIDTH) / RAND_MAX;
265 b->r.y = (rand() * HEIGHT) / RAND_MAX;
266 b->r.w = (rand() * WIDTH / 3) / RAND_MAX;
267 b->r.h = (rand() * HEIGHT / 3) / RAND_MAX;
268
269 eina_quadtree_change(b->item);
270
271 objects = eina_list_prepend(objects, b);
272 changed = eina_list_append(changed, b);
273 }
274
275 /* Emulating the render loop by colliding all modified
276 object with all intersecting object */
277 EINA_LIST_FREE(changed, b)
278 {
279 possibility = eina_quadtree_collide(q,
280 b->r.x, b->r.y, b->r.w, b->r.h);
281 while (possibility)
282 {
283 collide = eina_quadtree_object(possibility);
284 possibility = possibility->next;
285
286 if (collide != b &&
287 eina_rectangles_intersect(&b->r, &collide->r))
288 collided = eina_list_append(collided, collide);
289 }
290
291 collided = eina_list_append(collided, b);
292 }
293
294 /* Ok, we compute it, now it's done */
295 collided = eina_list_free(collided);
296 }
297
298 EINA_LIST_FREE(objects, b)
299 {
300 eina_quadtree_del(b->item);
301 eina_mempool_free(mp, b);
302 }
303
304 eina_mempool_del(mp);
305
306 eina_quadtree_free(q);
307
308 eina_shutdown();
309}
310
311void
312eina_bench_quadtree(Eina_Benchmark *bench)
313{
314 eina_benchmark_register(bench, "collide-all",
315 EINA_BENCHMARK(eina_bench_render_loop),
316 100, 1500, 50);
317 eina_benchmark_register(bench, "collide-quad-tree",
318 EINA_BENCHMARK(eina_bench_quadtree_render_loop),
319 100, 1500, 50);
320}
diff --git a/libraries/eina/src/tests/eina_bench_rectangle_pool.c b/libraries/eina/src/tests/eina_bench_rectangle_pool.c
deleted file mode 100644
index 96d4b1b..0000000
--- a/libraries/eina/src/tests/eina_bench_rectangle_pool.c
+++ /dev/null
@@ -1,76 +0,0 @@
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
deleted file mode 100644
index c3c9d9f..0000000
--- a/libraries/eina/src/tests/eina_bench_sort.c
+++ /dev/null
@@ -1,222 +0,0 @@
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
deleted file mode 100644
index 22d18fa..0000000
--- a/libraries/eina/src/tests/eina_bench_stringshare.c
+++ /dev/null
@@ -1,185 +0,0 @@
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 /* Suppress warnings as we really don't want to do anything. */
68 (void) tmp;
69 eina_shutdown();
70}
71
72#ifdef EINA_BENCH_HAVE_GLIB
73static void
74eina_bench_stringchunk_job(int request)
75{
76 GStringChunk *chunk;
77 unsigned int j;
78 int i;
79
80 chunk = g_string_chunk_new(4096);
81
82 for (i = 0; i < request; ++i)
83 {
84 char build[64] = "string_";
85
86 eina_convert_xtoa(i, build + 7);
87 g_string_chunk_insert_const(chunk, build);
88 }
89
90 srand(time(NULL));
91
92 for (j = 0; j < 200; ++j)
93 for (i = 0; i < request; ++i)
94 {
95 char build[64] = "string_";
96
97 eina_convert_xtoa(rand() % request, build + 7);
98 g_string_chunk_insert_const(chunk, build);
99 }
100
101 g_string_chunk_free(chunk);
102}
103#endif
104
105static void
106eina_bench_evas_job(int request)
107{
108 const char *tmp;
109 unsigned int j;
110 int i;
111
112 for (i = 0; i < request; ++i)
113 {
114 char build[64] = "string_";
115
116 eina_convert_xtoa(i, build + 7);
117 tmp = evas_stringshare_add(build);
118 }
119
120 srand(time(NULL));
121
122 for (j = 0; j < 200; ++j)
123 for (i = 0; i < request; ++i)
124 {
125 char build[64] = "string_";
126
127 eina_convert_xtoa(rand() % request, build + 7);
128 tmp = evas_stringshare_add(build);
129 }
130
131 /* Suppress warnings as we really don't want to do anything. */
132 (void) tmp;
133}
134
135static void
136eina_bench_ecore_job(int request)
137{
138 const char *tmp;
139 unsigned int j;
140 int i;
141
142 ecore_string_init();
143
144 for (i = 0; i < request; ++i)
145 {
146 char build[64] = "string_";
147
148 eina_convert_xtoa(i, build + 7);
149 tmp = ecore_string_instance(build);
150 }
151
152 srand(time(NULL));
153
154 for (j = 0; j < 200; ++j)
155 for (i = 0; i < request; ++i)
156 {
157 char build[64] = "string_";
158
159 eina_convert_xtoa(rand() % request, build + 7);
160 tmp = ecore_string_instance(build);
161 }
162
163 /* Suppress warnings as we really don't want to do anything. */
164 (void) tmp;
165
166 ecore_string_shutdown();
167}
168
169void eina_bench_stringshare(Eina_Benchmark *bench)
170{
171 eina_benchmark_register(bench, "stringshare",
172 EINA_BENCHMARK(
173 eina_bench_stringshare_job), 100, 20100, 500);
174#ifdef EINA_BENCH_HAVE_GLIB
175 eina_benchmark_register(bench, "stringchunk (glib)",
176 EINA_BENCHMARK(
177 eina_bench_stringchunk_job), 100, 20100, 500);
178#endif
179 eina_benchmark_register(bench, "stringshare (evas)",
180 EINA_BENCHMARK(
181 eina_bench_evas_job), 100, 20100, 500);
182 eina_benchmark_register(bench, "stringshare (ecore)",
183 EINA_BENCHMARK(
184 eina_bench_ecore_job), 100, 20100, 500);
185}
diff --git a/libraries/eina/src/tests/eina_bench_stringshare_e17.c b/libraries/eina/src/tests/eina_bench_stringshare_e17.c
deleted file mode 100644
index 6ab0a80..0000000
--- a/libraries/eina/src/tests/eina_bench_stringshare_e17.c
+++ /dev/null
@@ -1,118 +0,0 @@
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
deleted file mode 100644
index b34d016..0000000
--- a/libraries/eina/src/tests/eina_suite.c
+++ /dev/null
@@ -1,182 +0,0 @@
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 { "Inarray", eina_test_inarray },
38 { "Array", eina_test_array },
39 { "Binary Share", eina_test_binshare },
40 { "String Share", eina_test_stringshare },
41 { "UString Share", eina_test_ustringshare },
42 { "Log", eina_test_log },
43 { "Error", eina_test_error },
44 { "Magic", eina_test_magic },
45 { "Inlist", eina_test_inlist },
46 { "Lazy alloc", eina_test_lalloc },
47 { "Main", eina_test_main },
48 { "Counter", eina_test_counter },
49 { "Hash", eina_test_hash },
50 { "List", eina_test_list },
51 { "CList", eina_test_clist },
52 { "Iterator", eina_test_iterator },
53 { "Accessor", eina_test_accessor },
54 { "Module", eina_test_module },
55 { "Convert", eina_test_convert },
56 { "Rbtree", eina_test_rbtree },
57 { "File", eina_test_file },
58 { "Benchmark", eina_test_benchmark },
59 { "Mempool", eina_test_mempool },
60 { "Rectangle", eina_test_rectangle },
61 { "Matrix Sparse", eina_test_matrixsparse },
62 { "Eina Tiler", eina_test_tiler },
63 { "Eina Strbuf", eina_test_strbuf },
64 { "Eina Binbuf", eina_test_binbuf },
65 { "String", eina_test_str },
66 { "Unicode String", eina_test_ustr },
67 { "QuadTree", eina_test_quadtree },
68 { "Sched", eina_test_sched },
69 { "Simple Xml Parser", eina_test_simple_xml_parser},
70 { "Value", eina_test_value },
71 { "Model", eina_test_model },
72 { NULL, NULL }
73};
74
75static void
76_list_tests(void)
77{
78 const Eina_Test_Case *itr = etc;
79 fputs("Available Test Cases:\n", stderr);
80 for (; itr->test_case; itr++)
81 fprintf(stderr, "\t%s\n", itr->test_case);
82}
83
84static Eina_Bool
85_use_test(int argc, const char **argv, const char *test_case)
86{
87 if (argc < 1)
88 return 1;
89
90 for (; argc > 0; argc--, argv++)
91 if (strcmp(test_case, *argv) == 0)
92 return 1;
93
94 return 0;
95}
96
97Suite *
98eina_build_suite(int argc, const char **argv)
99{
100 TCase *tc;
101 Suite *s;
102 int i;
103
104 s = suite_create("Eina");
105
106 for (i = 0; etc[i].test_case; ++i)
107 {
108 if (!_use_test(argc, argv, etc[i].test_case))
109 continue;
110
111 tc = tcase_create(etc[i].test_case);
112
113 etc[i].build(tc);
114
115 suite_add_tcase(s, tc);
116 tcase_set_timeout(tc, 0);
117 }
118
119 return s;
120}
121
122/* FIXME this is a copy from eina_test_mempool
123 * we should remove the duplication
124 */
125static Eina_Array *_modules;
126static void _mempool_init(void)
127{
128 eina_init();
129 /* force modules to be loaded in case they are not installed */
130 _modules = eina_module_list_get(NULL,
131 PACKAGE_BUILD_DIR "/src/modules",
132 EINA_TRUE,
133 NULL,
134 NULL);
135 eina_module_list_load(_modules);
136}
137
138static void _mempool_shutdown(void)
139{
140 eina_module_list_free(_modules);
141 if (_modules)
142 eina_array_free(_modules);
143 /* TODO delete the list */
144 eina_shutdown();
145}
146
147int
148main(int argc, char **argv)
149{
150 Suite *s;
151 SRunner *sr;
152 int i, failed_count;
153
154 for (i = 1; i < argc; i++)
155 if ((strcmp(argv[i], "-h") == 0) ||
156 (strcmp(argv[i], "--help") == 0))
157 {
158 fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n",
159 argv[0]);
160 _list_tests();
161 return 0;
162 }
163 else if ((strcmp(argv[i], "-l") == 0) ||
164 (strcmp(argv[i], "--list") == 0))
165 {
166 _list_tests();
167 return 0;
168 }
169
170 s = eina_build_suite(argc - 1, (const char **)argv + 1);
171 sr = srunner_create(s);
172
173 _mempool_init();
174
175 srunner_run_all(sr, CK_ENV);
176 failed_count = srunner_ntests_failed(sr);
177 srunner_free(sr);
178
179 _mempool_shutdown();
180
181 return (failed_count == 0) ? 0 : 255;
182}
diff --git a/libraries/eina/src/tests/eina_suite.h b/libraries/eina/src/tests/eina_suite.h
deleted file mode 100644
index d399298..0000000
--- a/libraries/eina/src/tests/eina_suite.h
+++ /dev/null
@@ -1,61 +0,0 @@
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_inarray(TCase *tc);
28void eina_test_array(TCase *tc);
29void eina_test_log(TCase *tc);
30void eina_test_error(TCase *tc);
31void eina_test_magic(TCase *tc);
32void eina_test_inlist(TCase *tc);
33void eina_test_clist(TCase *tc);
34void eina_test_lalloc(TCase *tc);
35void eina_test_main(TCase *tc);
36void eina_test_counter(TCase *tc);
37void eina_test_hash(TCase *tc);
38void eina_test_list(TCase *tc);
39void eina_test_iterator(TCase *tc);
40void eina_test_accessor(TCase *tc);
41void eina_test_module(TCase *tc);
42void eina_test_convert(TCase *tc);
43void eina_test_rbtree(TCase *tc);
44void eina_test_file(TCase *tc);
45void eina_test_benchmark(TCase *tc);
46void eina_test_mempool(TCase *tc);
47void eina_test_rectangle(TCase *tc);
48void eina_test_matrixsparse(TCase *tc);
49void eina_test_tiler(TCase *tc);
50void eina_test_strbuf(TCase *tc);
51void eina_test_binbuf(TCase *tc);
52void eina_test_str(TCase *tc);
53void eina_test_ustr(TCase *tc);
54void eina_test_quadtree(TCase *tc);
55void eina_test_fp(TCase *tc);
56void eina_test_sched(TCase *tc);
57void eina_test_simple_xml_parser(TCase *tc);
58void eina_test_value(TCase *tc);
59void eina_test_model(TCase *tc);
60
61#endif /* EINA_SUITE_H_ */
diff --git a/libraries/eina/src/tests/eina_test_accessor.c b/libraries/eina/src/tests/eina_test_accessor.c
deleted file mode 100644
index 3c85ef0..0000000
--- a/libraries/eina/src/tests/eina_test_accessor.c
+++ /dev/null
@@ -1,243 +0,0 @@
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
deleted file mode 100644
index 1929601..0000000
--- a/libraries/eina/src/tests/eina_test_array.c
+++ /dev/null
@@ -1,191 +0,0 @@
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(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(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(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
deleted file mode 100644
index 4352c16..0000000
--- a/libraries/eina/src/tests/eina_test_benchmark.c
+++ /dev/null
@@ -1,76 +0,0 @@
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
deleted file mode 100644
index d62072e..0000000
--- a/libraries/eina/src/tests/eina_test_binbuf.c
+++ /dev/null
@@ -1,263 +0,0 @@
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 unsigned char *txt;
31 const unsigned 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 unsigned 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_manage_simple)
102{
103 Eina_Binbuf *buf;
104 const char *_cbuf = "12\0 456 78\0 abcthis is some more random junk here!";
105 const unsigned char *cbuf = (const unsigned char *) _cbuf;
106 size_t size = sizeof(cbuf) - 1; /* We don't care about the real NULL */
107 unsigned char *alloc_buf = malloc(size);
108 memcpy(alloc_buf, cbuf, size);
109
110 eina_init();
111
112 buf = eina_binbuf_manage_new_length(alloc_buf, size);
113 fail_if(!buf);
114
115 fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size));
116 fail_if(size != eina_binbuf_length_get(buf));
117 eina_binbuf_append_length(buf, cbuf, size);
118 fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size));
119 fail_if(memcmp(eina_binbuf_string_get(buf) + size, cbuf, size));
120 fail_if(2 * size != eina_binbuf_length_get(buf));
121
122 eina_binbuf_free(buf);
123
124 eina_shutdown();
125}
126END_TEST
127
128START_TEST(binbuf_insert)
129{
130#if 0
131 Eina_Binbuf *buf;
132
133 eina_init();
134
135 buf = eina_binbuf_new();
136 fail_if(!buf);
137
138 eina_binbuf_insert(buf, "abc", 10);
139 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
140 fail_if(strcmp(eina_binbuf_string_get(buf), "abc"));
141
142 eina_binbuf_insert(buf, "123", 0);
143 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
144 fail_if(strcmp(eina_binbuf_string_get(buf), "123abc"));
145
146 eina_binbuf_insert(buf, "xyz", eina_binbuf_length_get(buf));
147 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
148 fail_if(strcmp(eina_binbuf_string_get(buf), "123abcxyz"));
149
150 eina_binbuf_insert(buf, "xyz", 1);
151 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
152 fail_if(strcmp(eina_binbuf_string_get(buf), "1xyz23abcxyz"));
153
154 eina_binbuf_insert_n(buf, "ABCDEF", 2, 1);
155 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
156 fail_if(strcmp(eina_binbuf_string_get(buf), "1ABxyz23abcxyz"));
157
158 eina_binbuf_insert_n(buf, "EINA", 2, 3);
159 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
160 fail_if(strcmp(eina_binbuf_string_get(buf), "1ABEIxyz23abcxyz"));
161
162 eina_binbuf_insert_escaped(buf, "678", 3);
163 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
164 fail_if(strncmp(eina_binbuf_string_get(buf) + 3, "678", 3));
165
166 eina_binbuf_insert_escaped(buf, "089 '\\", 9);
167 fail_if(strlen(eina_binbuf_string_get(
168 buf)) != eina_binbuf_length_get(buf));
169 fail_if(strncmp(eina_binbuf_string_get(buf) + 9,
170 "089\\ \\'\\\\",
171 strlen("089\\ \\'\\\\")));
172 eina_binbuf_reset(buf);
173
174 eina_binbuf_free(buf);
175
176 eina_shutdown();
177#endif
178}
179END_TEST
180
181START_TEST(binbuf_realloc)
182{
183 Eina_Binbuf *buf;
184 unsigned char pattern[1024 * 16];
185 unsigned int i;
186 size_t sz;
187
188 for (i = 0; i < sizeof(pattern) - 1; i++)
189 {
190 if (i % 27 == 26)
191 pattern[i] = '\0';
192 else
193 pattern[i] = 'a' + (i % 27);
194 }
195 pattern[i] = '\0';
196
197 eina_init();
198
199 buf = eina_binbuf_new();
200 fail_if(!buf);
201
202 sz = 0;
203
204 eina_binbuf_append_length(buf, pattern, 1);
205 fail_if(eina_binbuf_length_get(buf) != sz + 1);
206 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 1));
207 sz += 1;
208
209 eina_binbuf_append_length(buf, pattern, 32);
210 fail_if(eina_binbuf_length_get(buf) != sz + 32);
211 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 32));
212 sz += 32;
213
214 eina_binbuf_append_length(buf, pattern, 64);
215 fail_if(eina_binbuf_length_get(buf) != sz + 64);
216 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 64));
217 sz += 64;
218
219 eina_binbuf_append_length(buf, pattern, 128);
220 fail_if(eina_binbuf_length_get(buf) != sz + 128);
221 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 128));
222 sz += 128;
223
224 eina_binbuf_append_length(buf, pattern, 4096);
225 fail_if(eina_binbuf_length_get(buf) != sz + 4096);
226 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 4096));
227 sz += 4096;
228
229 eina_binbuf_append_length(buf, pattern, sizeof(pattern) - 1);
230 fail_if(eina_binbuf_length_get(buf) != sz + sizeof(pattern) - 1);
231 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, sizeof(pattern) -
232 1));
233 sz += sizeof(pattern) - 1;
234
235
236 eina_binbuf_remove(buf, 1024, 1024 + 1234);
237 fail_if(eina_binbuf_length_get(buf) != sz - 1234);
238 sz -= 1234;
239
240 eina_binbuf_remove(buf, 0, 0 + 8192);
241 fail_if(eina_binbuf_length_get(buf) != sz - 8192);
242 sz -= 8192;
243
244 eina_binbuf_remove(buf, 0, 0 + 32);
245 fail_if(eina_binbuf_length_get(buf) != sz - 32);
246 sz -= 32;
247
248
249 eina_binbuf_free(buf);
250
251 eina_shutdown();
252}
253END_TEST
254
255void
256eina_test_binbuf(TCase *tc)
257{
258 tcase_add_test(tc, binbuf_simple);
259 tcase_add_test(tc, binbuf_remove);
260 tcase_add_test(tc, binbuf_insert);
261 tcase_add_test(tc, binbuf_realloc);
262 tcase_add_test(tc, binbuf_manage_simple);
263}
diff --git a/libraries/eina/src/tests/eina_test_binshare.c b/libraries/eina/src/tests/eina_test_binshare.c
deleted file mode 100644
index b2e77ae..0000000
--- a/libraries/eina/src/tests/eina_test_binshare.c
+++ /dev/null
@@ -1,199 +0,0 @@
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
deleted file mode 100644
index 115afc2..0000000
--- a/libraries/eina/src/tests/eina_test_clist.c
+++ /dev/null
@@ -1,89 +0,0 @@
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
deleted file mode 100644
index 8e7f58c..0000000
--- a/libraries/eina/src/tests/eina_test_convert.c
+++ /dev/null
@@ -1,165 +0,0 @@
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
deleted file mode 100644
index 4d956fd..0000000
--- a/libraries/eina/src/tests/eina_test_counter.c
+++ /dev/null
@@ -1,198 +0,0 @@
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
30#ifdef EINA_SAFETY_CHECKS
31struct log_ctx {
32 const char *msg;
33 const char *fnc;
34 Eina_Bool did;
35};
36
37/* tests should not output on success, just uncomment this for debugging */
38//#define SHOW_LOG 1
39
40static void
41_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
42{
43 struct log_ctx *ctx = data;
44 va_list cp_args;
45 const char *str;
46
47 va_copy(cp_args, args);
48 str = va_arg(cp_args, const char *);
49 va_end(cp_args);
50
51 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
52 ck_assert_str_eq(fmt, "%s");
53 ck_assert_str_eq(ctx->msg, str);
54 ck_assert_str_eq(ctx->fnc, fnc);
55 ctx->did = EINA_TRUE;
56
57#ifdef SHOW_LOG
58 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
59#else
60 (void)d;
61 (void)file;
62 (void)line;
63#endif
64}
65#endif
66
67START_TEST(eina_counter_simple)
68{
69 Eina_Counter *cnt;
70 char *dump;
71 int i;
72
73 eina_init();
74
75 cnt = eina_counter_new("eina_test");
76 fail_if(!cnt);
77
78 eina_counter_start(cnt);
79
80 for (i = 0; i < 100000; ++i)
81 {
82 void *tmp = malloc(sizeof(long int));
83 free(tmp);
84 }
85
86 eina_counter_stop(cnt, i);
87
88 eina_counter_start(cnt);
89
90 for (i = 0; i < 200000; ++i)
91 {
92 void *tmp = malloc(sizeof(long int));
93 free(tmp);
94 }
95
96 eina_counter_stop(cnt, i);
97
98 dump = eina_counter_dump(cnt);
99 fail_if(!dump);
100
101 /* TODO: parse dump and check if it's right */
102 fprintf(stderr, "%s", dump);
103
104 free(dump);
105
106 eina_counter_free(cnt);
107
108 eina_shutdown();
109}
110END_TEST
111
112START_TEST(eina_counter_break)
113{
114 Eina_Counter *cnt;
115
116 eina_init();
117
118 cnt = eina_counter_new("eina_test");
119 fail_if(!cnt);
120
121 eina_counter_stop(cnt, 10);
122
123 eina_counter_free(cnt);
124
125#ifdef EINA_SAFETY_CHECKS
126 {
127 struct log_ctx ctx;
128 char *dump;
129
130#define TEST_MAGIC_SAFETY(fn, _msg) \
131 ctx.msg = _msg; \
132 ctx.fnc = fn; \
133 ctx.did = EINA_FALSE
134
135 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
136
137#ifdef SHOW_LOG
138 fprintf(stderr, "you should have a safety check failure below:\n");
139#endif
140 TEST_MAGIC_SAFETY("eina_counter_new",
141 "safety check failed: name == NULL");
142 cnt = eina_counter_new(NULL);
143 fail_if(cnt);
144 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
145 fail_unless(ctx.did);
146
147#ifdef SHOW_LOG
148 fprintf(stderr, "you should have a safety check failure below:\n");
149#endif
150 TEST_MAGIC_SAFETY("eina_counter_free",
151 "safety check failed: counter == NULL");
152 eina_counter_free(NULL);
153 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
154 fail_unless(ctx.did);
155
156#ifdef SHOW_LOG
157 fprintf(stderr, "you should have a safety check failure below:\n");
158#endif
159 TEST_MAGIC_SAFETY("eina_counter_start",
160 "safety check failed: counter == NULL");
161 eina_counter_start(NULL);
162 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
163 fail_unless(ctx.did);
164
165#ifdef SHOW_LOG
166 fprintf(stderr, "you should have a safety check failure below:\n");
167#endif
168 TEST_MAGIC_SAFETY("eina_counter_stop",
169 "safety check failed: counter == NULL");
170 eina_counter_stop(NULL, 0);
171 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
172 fail_unless(ctx.did);
173
174
175#ifdef SHOW_LOG
176 fprintf(stderr, "you should have a safety check failure below:\n");
177#endif
178 TEST_MAGIC_SAFETY("eina_counter_dump",
179 "safety check failed: counter == NULL");
180 dump = eina_counter_dump(NULL);
181 fail_if(dump);
182 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
183 fail_unless(ctx.did);
184
185 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
186 }
187#endif
188
189 eina_shutdown();
190}
191END_TEST
192
193void eina_test_counter(TCase *tc)
194{
195 tcase_add_test(tc, eina_counter_simple);
196 tcase_add_test(tc, eina_counter_break);
197}
198
diff --git a/libraries/eina/src/tests/eina_test_error.c b/libraries/eina/src/tests/eina_test_error.c
deleted file mode 100644
index 57f6950..0000000
--- a/libraries/eina/src/tests/eina_test_error.c
+++ /dev/null
@@ -1,243 +0,0 @@
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
36struct log_ctx {
37 const char *msg;
38 const char *fnc;
39 Eina_Bool did;
40};
41
42/* tests should not output on success, just uncomment this for debugging */
43//#define SHOW_LOG 1
44
45static void
46_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
47{
48 struct log_ctx *ctx = data;
49 va_list cp_args;
50 const char *str;
51
52 va_copy(cp_args, args);
53 str = va_arg(cp_args, const char *);
54 va_end(cp_args);
55
56 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
57 ck_assert_str_eq(fmt, "%s");
58 ck_assert_str_eq(ctx->msg, str);
59 ck_assert_str_eq(ctx->fnc, fnc);
60 ctx->did = EINA_TRUE;
61
62#ifdef SHOW_LOG
63 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
64#else
65 (void)d;
66 (void)file;
67 (void)line;
68#endif
69}
70
71START_TEST(eina_error_errno)
72{
73 int test;
74
75 setenv("EINA_ERROR_LEVEL", "1", 0);
76
77 eina_init();
78
79 test = eina_error_msg_register(TEST_TEXT);
80 fail_if(!eina_error_msg_get(test));
81 fail_if(strcmp(eina_error_msg_get(test), TEST_TEXT) != 0);
82
83 eina_error_set(test);
84 fail_if(eina_error_get() != test);
85
86 eina_shutdown();
87}
88END_TEST
89
90START_TEST(eina_error_test_find)
91{
92 int test, r;
93 const char *str;
94
95 eina_init();
96
97 test = eina_error_msg_register(TEST_TEXT);
98 ck_assert_int_ne(test, 0);
99
100 str = eina_error_msg_get(test);
101 fail_unless(str != NULL);
102 ck_assert_str_eq(str, TEST_TEXT);
103
104 eina_error_set(test);
105 fail_if(eina_error_get() != test);
106
107 r = eina_error_find(TEST_TEXT);
108 ck_assert_int_eq(r, test);
109
110 eina_shutdown();
111}
112END_TEST
113
114START_TEST(eina_error_test_modify)
115{
116 int test, r;
117 const char *str, smsg[] = "Do not copy this string";
118
119 eina_init();
120
121 test = eina_error_msg_register("Some Test Error");
122 ck_assert_int_ne(test, 0);
123
124 str = eina_error_msg_get(test);
125 fail_unless(str != NULL);
126 ck_assert_str_eq(str, "Some Test Error");
127
128 eina_error_set(test);
129 fail_if(eina_error_get() != test);
130
131 fail_unless(eina_error_msg_modify(test, "ABCDE"));
132
133 r = eina_error_find("ABCDE");
134 ck_assert_int_eq(r, test);
135
136 test = eina_error_msg_static_register(smsg);
137 ck_assert_int_ne(test, 0);
138
139 str = eina_error_msg_get(test);
140 fail_unless(str != NULL);
141 fail_unless(str == smsg);
142
143 fail_unless(eina_error_msg_modify(test, "Change that!"));
144 r = eina_error_find("Change that!");
145 ck_assert_int_eq(r, test);
146
147 eina_shutdown();
148}
149END_TEST
150
151START_TEST(eina_error_test_lots)
152{
153 char buf[64];
154 int codes[512];
155 unsigned int i;
156
157 eina_init();
158
159 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
160 {
161 snprintf(buf, sizeof(buf), "myerr-%d", i);
162 codes[i] = eina_error_msg_register(buf);
163 ck_assert_int_ne(codes[i], 0);
164 }
165
166 for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++)
167 {
168 int found;
169
170 snprintf(buf, sizeof(buf), "myerr-%d", i);
171
172 found = eina_error_find(buf);
173 ck_assert_int_eq(codes[i], found);
174 }
175
176 eina_shutdown();
177}
178END_TEST
179
180#ifdef EINA_SAFETY_CHECKS
181START_TEST(eina_error_test_failures)
182{
183 struct log_ctx ctx;
184
185 eina_init();
186
187 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
188
189#define TEST_MAGIC_SAFETY(fn, _msg) \
190 ctx.msg = _msg; \
191 ctx.fnc = fn; \
192 ctx.did = EINA_FALSE
193
194 TEST_MAGIC_SAFETY("eina_error_msg_register",
195 "safety check failed: msg == NULL");
196 ck_assert_int_eq(eina_error_msg_register(NULL), 0);
197 fail_unless(ctx.did);
198
199 TEST_MAGIC_SAFETY("eina_error_msg_static_register",
200 "safety check failed: msg == NULL");
201 ck_assert_int_eq(eina_error_msg_static_register(NULL), 0);
202 fail_unless(ctx.did);
203
204 ck_assert_int_eq(eina_error_msg_modify(0, "X"), EINA_FALSE);
205 ck_assert_int_eq(eina_error_msg_modify(4096, "X"), EINA_FALSE);
206
207 TEST_MAGIC_SAFETY("eina_error_msg_modify",
208 "safety check failed: msg == NULL");
209 ck_assert_int_eq(eina_error_msg_modify(EINA_ERROR_OUT_OF_MEMORY, NULL),
210 EINA_FALSE);
211 fail_unless(ctx.did);
212
213 ck_assert_str_eq(eina_error_msg_get(EINA_ERROR_OUT_OF_MEMORY),
214 "Out of memory");
215
216 TEST_MAGIC_SAFETY("eina_error_find",
217 "safety check failed: msg == NULL");
218 ck_assert_int_eq(eina_error_find(NULL), 0);
219 fail_unless(ctx.did);
220
221 ck_assert_int_eq(eina_error_find("Non-existent Error..."), 0);
222
223 fail_if(eina_error_msg_get(0));
224 fail_if(eina_error_msg_get(4096));
225
226 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
227
228 eina_shutdown();
229}
230END_TEST
231#endif
232
233void
234eina_test_error(TCase *tc)
235{
236 tcase_add_test(tc, eina_error_errno);
237 tcase_add_test(tc, eina_error_test_find);
238 tcase_add_test(tc, eina_error_test_modify);
239 tcase_add_test(tc, eina_error_test_lots);
240#ifdef EINA_SAFETY_CHECKS
241 tcase_add_test(tc, eina_error_test_failures);
242#endif
243}
diff --git a/libraries/eina/src/tests/eina_test_file.c b/libraries/eina/src/tests/eina_test_file.c
deleted file mode 100644
index a3ba998..0000000
--- a/libraries/eina/src/tests/eina_test_file.c
+++ /dev/null
@@ -1,142 +0,0 @@
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
31#ifdef EINA_SAFETY_CHECKS
32struct log_ctx {
33 const char *msg;
34 const char *fnc;
35 Eina_Bool did;
36};
37
38/* tests should not output on success, just uncomment this for debugging */
39//#define SHOW_LOG 1
40
41static void
42_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
43{
44 struct log_ctx *ctx = data;
45 va_list cp_args;
46 const char *str;
47
48 va_copy(cp_args, args);
49 str = va_arg(cp_args, const char *);
50 va_end(cp_args);
51
52 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
53 ck_assert_str_eq(fmt, "%s");
54 ck_assert_str_eq(ctx->msg, str);
55 ck_assert_str_eq(ctx->fnc, fnc);
56 ctx->did = EINA_TRUE;
57
58#ifdef SHOW_LOG
59 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
60#else
61 (void)d;
62 (void)file;
63 (void)line;
64#endif
65}
66#endif
67
68
69START_TEST(eina_file_split_simple)
70{
71 Eina_Array *ea;
72
73 eina_init();
74
75#ifdef EINA_SAFETY_CHECKS
76#ifdef SHOW_LOG
77 fprintf(stderr, "you should have a safety check failure below:\n");
78#endif
79 struct log_ctx ctx;
80
81#define TEST_MAGIC_SAFETY(fn, _msg) \
82 ctx.msg = _msg; \
83 ctx.fnc = fn; \
84 ctx.did = EINA_FALSE
85
86 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
87
88 TEST_MAGIC_SAFETY("eina_file_split", "safety check failed: path == NULL");
89 ea = eina_file_split(NULL);
90 fail_if(ea);
91 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
92 fail_unless(ctx.did);
93
94 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
95#undef TEST_MAGIC_SAFETY
96#endif
97
98#ifdef _WIN32
99 ea = eina_file_split(strdup("\\this\\is\\a\\small\\test"));
100#else
101 ea = eina_file_split(strdup("/this/is/a/small/test"));
102#endif
103
104 fail_if(!ea);
105 fail_if(eina_array_count(ea) != 5);
106 fail_if(strcmp(eina_array_data_get(ea, 0), "this"));
107 fail_if(strcmp(eina_array_data_get(ea, 1), "is"));
108 fail_if(strcmp(eina_array_data_get(ea, 2), "a"));
109 fail_if(strcmp(eina_array_data_get(ea, 3), "small"));
110 fail_if(strcmp(eina_array_data_get(ea, 4), "test"));
111
112 eina_array_free(ea);
113
114#ifdef _WIN32
115 ea =
116 eina_file_split(strdup(
117 "this\\\\is\\\\\\a \\more\\complex\\\\\\case\\\\\\"));
118#else
119 ea = eina_file_split(strdup("this//is///a /more/complex///case///"));
120#endif
121
122 fail_if(!ea);
123 fail_if(eina_array_count(ea) != 6);
124 fail_if(strcmp(eina_array_data_get(ea, 0), "this"));
125 fail_if(strcmp(eina_array_data_get(ea, 1), "is"));
126 fail_if(strcmp(eina_array_data_get(ea, 2), "a "));
127 fail_if(strcmp(eina_array_data_get(ea, 3), "more"));
128 fail_if(strcmp(eina_array_data_get(ea, 4), "complex"));
129 fail_if(strcmp(eina_array_data_get(ea, 5), "case"));
130
131 eina_array_free(ea);
132
133 eina_shutdown();
134}
135END_TEST
136
137void
138eina_test_file(TCase *tc)
139{
140 tcase_add_test(tc, eina_file_split_simple);
141}
142
diff --git a/libraries/eina/src/tests/eina_test_fp.c b/libraries/eina/src/tests/eina_test_fp.c
deleted file mode 100644
index bdb3100..0000000
--- a/libraries/eina/src/tests/eina_test_fp.c
+++ /dev/null
@@ -1,93 +0,0 @@
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
deleted file mode 100644
index aeeb655..0000000
--- a/libraries/eina/src/tests/eina_test_hash.c
+++ /dev/null
@@ -1,206 +0,0 @@
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_inarray.c b/libraries/eina/src/tests/eina_test_inarray.c
deleted file mode 100644
index 22ba763..0000000
--- a/libraries/eina/src/tests/eina_test_inarray.c
+++ /dev/null
@@ -1,401 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28START_TEST(eina_inarray_test_simple)
29{
30 const int test_members = 5;
31 Eina_Inarray *array;
32 int i, pos, *member;
33 const struct spec {
34 int pos, value;
35 } *s, specs[] = {
36 {test_members, 1234},
37 {5, 0x1337},
38 {0, 0xbeef},
39 {-1, -1}
40 };
41
42 eina_init();
43
44 array = eina_inarray_new(sizeof(int), 2);
45 fail_unless(array != NULL);
46
47 for (i = 0; i < test_members; i++)
48 {
49 pos = eina_inarray_append(array, &i);
50 fail_unless(pos == i);
51 }
52 fail_unless(eina_inarray_count(array) == (unsigned)test_members);
53
54 for (i = 0; i < test_members; i++)
55 {
56 member = eina_inarray_nth(array, i);
57 fail_unless(*member == i);
58 }
59
60 for (s = specs; s->pos >= 0; s++)
61 {
62 fail_unless(eina_inarray_insert_at(array, s->pos, &s->value));
63
64 for (i = 0; i < s->pos; i++)
65 {
66 member = eina_inarray_nth(array, i);
67 fail_unless(*member == i);
68 }
69 member = eina_inarray_nth(array, s->pos);
70 fail_unless(*member == s->value);
71 for (i = s->pos + 1; i < test_members + 1; i++)
72 {
73 member = eina_inarray_nth(array, i);
74 fail_unless(*member == i - 1);
75 }
76
77 fail_unless(eina_inarray_remove_at(array, s->pos));
78 for (i = 0; i < test_members; i++)
79 {
80 member = eina_inarray_nth(array, i);
81 fail_unless(*member == i);
82 }
83 }
84
85 eina_inarray_free(array);
86 eina_shutdown();
87}
88END_TEST
89
90
91START_TEST(eina_inarray_test_alloc_at)
92{
93 Eina_Inarray *array;
94 int *member;
95 int i;
96
97 eina_init();
98
99 array = eina_inarray_new(sizeof(int), 2);
100 fail_unless(array != NULL);
101
102 member = eina_inarray_alloc_at(array, 0, 4);
103 fail_unless(member != NULL);
104 fail_unless(eina_inarray_count(array) == 4);
105
106 for (i = 0; i < 4; i++)
107 member[i] = i + 2;
108
109 member = eina_inarray_alloc_at(array, 0, 2);
110 fail_unless(member != NULL);
111 fail_unless(eina_inarray_count(array) == 6);
112 for (i = 0; i < 2; i++)
113 member[i] = i;
114
115 member = eina_inarray_alloc_at(array, 6, 2);
116 fail_unless(member != NULL);
117 fail_unless(eina_inarray_count(array) == 8);
118 for (i = 0; i < 2; i++)
119 member[i] = i + 6;
120
121 member = array->members;
122 for (i = 0; i < 8; i++)
123 fail_unless(member[i] == i);
124
125 eina_inarray_free(array);
126 eina_shutdown();
127}
128END_TEST
129
130static const short rand_numbers[] = {
131 9, 0, 2, 3, 6, 5, 4, 7, 8, 1, 10
132};
133static const int numbers_count = sizeof(rand_numbers)/sizeof(rand_numbers[0]);
134
135static void
136show_sort_array(const Eina_Inarray *array)
137{
138 int i, len = eina_inarray_count(array);
139 printf("array with %d members:\n", len);
140 for (i = 0; i < len; i++)
141 {
142 short *member = eina_inarray_nth(array, i);
143 printf("\tarray[%2d]=%5hd\n", i, *member);
144 }
145}
146
147static Eina_Bool
148check_short_sorted(const Eina_Inarray *array)
149{
150 int i;
151 for (i = 0; i < numbers_count; i++)
152 {
153 short *member = eina_inarray_nth(array, i);
154 if (*member != (short)i)
155 {
156 show_sort_array(array);
157 fprintf(stderr, "not sorted at %d: %hd\n", i, *member);
158 return EINA_FALSE;
159 }
160 }
161 return EINA_TRUE;
162}
163
164static int
165short_cmp(const void *pa, const void *pb)
166{
167 const short *a = pa, *b = pb;
168 return *a - *b;
169}
170
171START_TEST(eina_inarray_test_insert_sort)
172{
173 Eina_Inarray *array;
174 int i, pos;
175
176 eina_init();
177
178 array = eina_inarray_new(sizeof(short), 1);
179 fail_unless(array != NULL);
180
181 /* insert sorted and already sorted sequence */
182 for (i = 0; i < numbers_count; i++)
183 {
184 short val = i;
185 pos = eina_inarray_insert(array, &val, short_cmp);
186 fail_unless(pos == (int)val);
187 }
188 fail_unless(check_short_sorted(array));
189 eina_inarray_flush(array);
190
191 for (i = 0; i < numbers_count; i++)
192 {
193 short val = i;
194 pos = eina_inarray_insert_sorted(array, &val, short_cmp);
195 fail_unless(pos == (int)val);
196 }
197 fail_unless(check_short_sorted(array));
198 eina_inarray_flush(array);
199
200 /* insert sorted the reverse sequence */
201 for (i = 0; i < numbers_count; i++)
202 {
203 short val = numbers_count - i - 1;
204 pos = eina_inarray_insert(array, &val, short_cmp);
205 fail_unless(pos == 0);
206 }
207 fail_unless(check_short_sorted(array));
208 eina_inarray_flush(array);
209
210 for (i = 0; i < numbers_count; i++)
211 {
212 short val = numbers_count - i - 1;
213 pos = eina_inarray_insert_sorted(array, &val, short_cmp);
214 fail_unless(pos == 0);
215 }
216 fail_unless(check_short_sorted(array));
217 eina_inarray_flush(array);
218
219 /* insert sorted random numbers */
220 for (i = 0; i < numbers_count; i++)
221 {
222 short val = rand_numbers[i];
223 eina_inarray_insert(array, &val, short_cmp);
224 }
225 fail_unless(check_short_sorted(array));
226 eina_inarray_flush(array);
227
228 for (i = 0; i < numbers_count; i++)
229 {
230 short val = rand_numbers[i];
231 eina_inarray_insert_sorted(array, &val, short_cmp);
232 }
233 fail_unless(check_short_sorted(array));
234 eina_inarray_flush(array);
235
236 eina_inarray_free(array);
237 eina_shutdown();
238}
239END_TEST
240
241START_TEST(eina_inarray_test_sort)
242{
243 Eina_Inarray *array;
244 int i;
245
246 eina_init();
247
248 array = eina_inarray_new(sizeof(short), 1);
249 fail_unless(array != NULL);
250
251 for (i = 0; i < numbers_count; i++)
252 {
253 short val = rand_numbers[i];
254 eina_inarray_append(array, &val);
255 }
256 eina_inarray_sort(array, short_cmp);
257 fail_unless(check_short_sorted(array));
258 eina_inarray_free(array);
259 eina_shutdown();
260}
261END_TEST
262
263START_TEST(eina_inarray_test_reverse)
264{
265 Eina_Inarray *array;
266 int i;
267
268 eina_init();
269
270 array = eina_inarray_new(sizeof(short), 1);
271 fail_unless(array != NULL);
272
273 for (i = 0; i < numbers_count; i++)
274 {
275 short val = i;
276 eina_inarray_append(array, &val);
277 }
278 eina_inarray_reverse(array);
279
280 for (i = 0; i < numbers_count; i++)
281 {
282 short *member = eina_inarray_nth(array, i);
283 fail_unless(*member == (numbers_count - i - 1));
284 }
285
286 eina_inarray_free(array);
287 eina_shutdown();
288}
289END_TEST
290
291static Eina_Bool
292array_foreach(const void *array __UNUSED__, void *p, void *user_data __UNUSED__)
293{
294 short *member = p;
295 int *i = user_data;
296 fail_unless(*i == *member);
297 (*i)++;
298 return EINA_TRUE;
299}
300
301static Eina_Bool
302array_foreach_stop_2nd(const void *array __UNUSED__, void *p, void *user_data __UNUSED__)
303{
304 short *member = p;
305 int *i = user_data;
306 fail_unless(*i == *member);
307 if (*i == 1)
308 return EINA_FALSE;
309 (*i)++;
310 return EINA_TRUE;
311}
312
313START_TEST(eina_inarray_test_itr)
314{
315 Eina_Inarray *array;
316 Eina_Iterator *it;
317 Eina_Accessor *ac;
318 short *member;
319 int i;
320
321 eina_init();
322
323 array = eina_inarray_new(sizeof(short), 1);
324 fail_unless(array != NULL);
325
326 for (i = 0; i < numbers_count; i++)
327 {
328 short val = i;
329 eina_inarray_append(array, &val);
330 }
331 i = 0;
332 EINA_INARRAY_FOREACH(array, member)
333 {
334 fail_unless(*member == i);
335 i++;
336 }
337 fail_unless(i == numbers_count);
338
339 i--;
340 EINA_INARRAY_REVERSE_FOREACH(array, member)
341 {
342 fail_unless(*member == i);
343 i--;
344 }
345 fail_unless(i == -1);
346
347 i = 0;
348 fail_unless(eina_inarray_foreach(array, array_foreach, &i));
349 fail_unless(i == numbers_count);
350
351 i = 0;
352 fail_if(eina_inarray_foreach(array, array_foreach_stop_2nd, &i));
353 fail_unless(i == 1);
354
355 it = eina_inarray_iterator_new(array);
356 fail_unless(it != NULL);
357 i = 0;
358 EINA_ITERATOR_FOREACH(it, member)
359 {
360 fail_unless(*member == i);
361 i++;
362 }
363 fail_unless(i == numbers_count);
364 eina_iterator_free(it);
365
366 it = eina_inarray_iterator_reversed_new(array);
367 fail_unless(it != NULL);
368 i--;
369 EINA_ITERATOR_FOREACH(it, member)
370 {
371 fail_unless(*member == i);
372 i--;
373 }
374 fail_unless(i == -1);
375 eina_iterator_free(it);
376
377 ac = eina_inarray_accessor_new(array);
378 fail_unless(ac != NULL);
379 for (i = 0; i < numbers_count; i++)
380 {
381 fail_unless(eina_accessor_data_get(ac, i, (void **)&member));
382 fail_unless(*member == i);
383 }
384 fail_unless(i == numbers_count);
385 eina_accessor_free(ac);
386
387 eina_inarray_free(array);
388 eina_shutdown();
389}
390END_TEST
391
392void
393eina_test_inarray(TCase *tc)
394{
395 tcase_add_test(tc, eina_inarray_test_simple);
396 tcase_add_test(tc, eina_inarray_test_alloc_at);
397 tcase_add_test(tc, eina_inarray_test_insert_sort);
398 tcase_add_test(tc, eina_inarray_test_sort);
399 tcase_add_test(tc, eina_inarray_test_reverse);
400 tcase_add_test(tc, eina_inarray_test_itr);
401}
diff --git a/libraries/eina/src/tests/eina_test_inlist.c b/libraries/eina/src/tests/eina_test_inlist.c
deleted file mode 100644
index a8631e7..0000000
--- a/libraries/eina/src/tests/eina_test_inlist.c
+++ /dev/null
@@ -1,421 +0,0 @@
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
37#ifdef EINA_SAFETY_CHECKS
38struct log_ctx {
39 const char *msg;
40 const char *fnc;
41 Eina_Bool did;
42};
43
44/* tests should not output on success, just uncomment this for debugging */
45//#define SHOW_LOG 1
46
47static void
48_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
49{
50 struct log_ctx *ctx = data;
51 va_list cp_args;
52 const char *str;
53
54 va_copy(cp_args, args);
55 str = va_arg(cp_args, const char *);
56 va_end(cp_args);
57
58 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
59 ck_assert_str_eq(fmt, "%s");
60 ck_assert_str_eq(ctx->msg, str);
61 ck_assert_str_eq(ctx->fnc, fnc);
62 ctx->did = EINA_TRUE;
63
64#ifdef SHOW_LOG
65 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
66#else
67 (void)d;
68 (void)file;
69 (void)line;
70#endif
71}
72#endif
73
74static Eina_Test_Inlist *
75_eina_test_inlist_build(int i)
76{
77 Eina_Test_Inlist *tmp;
78
79 tmp = malloc(sizeof(Eina_Test_Inlist));
80 fail_if(!tmp);
81 tmp->i = i;
82
83 return tmp;
84}
85
86START_TEST(eina_inlist_simple)
87{
88 Eina_Inlist *lst = NULL;
89 Eina_Test_Inlist *tmp;
90 Eina_Test_Inlist *prev;
91 int i = 0;
92#ifdef EINA_SAFETY_CHECKS
93 Eina_Inlist *bkp;
94 struct log_ctx ctx;
95#endif
96
97 fail_if(!eina_init());
98
99 tmp = _eina_test_inlist_build(42);
100 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
101 fail_if(!lst);
102
103 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
104 lst = eina_inlist_prepend(lst, EINA_INLIST_GET(tmp));
105
106 tmp = _eina_test_inlist_build(1664);
107 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
108 fail_if(!lst);
109 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42);
110
111 prev = tmp;
112 tmp = _eina_test_inlist_build(3227);
113 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(
114 tmp), EINA_INLIST_GET(prev));
115 fail_if(!lst);
116 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42);
117
118 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
119
120 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
121 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
122
123 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), lst);
124
125 tmp = _eina_test_inlist_build(27);
126 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL);
127
128 tmp = _eina_test_inlist_build(81);
129 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL);
130
131 EINA_INLIST_FOREACH(lst, tmp)
132 {
133 switch (i)
134 {
135 case 0: fail_if(tmp->i != 27); break;
136
137 case 1: fail_if(tmp->i != 3227); break;
138
139 case 2: fail_if(tmp->i != 42); break;
140
141 case 3: fail_if(tmp->i != 1664); break;
142
143 case 4: fail_if(tmp->i != 81); break;
144 }
145
146 ++i;
147 }
148
149#ifdef EINA_SAFETY_CHECKS
150 bkp = lst;
151 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
152
153#define TEST_MAGIC_SAFETY(fn, _msg) \
154 ctx.msg = _msg; \
155 ctx.fnc = fn; \
156 ctx.did = EINA_FALSE
157
158#ifdef SHOW_LOG
159 fprintf(stderr, "you should have a safety check failure below:\n");
160#endif
161 {
162 Eina_Inlist *tmp2;
163
164 TEST_MAGIC_SAFETY("eina_inlist_remove",
165 "safety check failed: list == NULL");
166
167 tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp));
168 fail_if(tmp2 != NULL);
169 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
170 fail_unless(ctx.did);
171 }
172
173#ifdef SHOW_LOG
174 fprintf(stderr, "you should have a safety check failure below:\n");
175#endif
176 TEST_MAGIC_SAFETY("eina_inlist_remove",
177 "safety check failed: item == NULL");
178 lst = eina_inlist_remove(lst, NULL);
179 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
180 fail_unless(ctx.did);
181
182#ifdef SHOW_LOG
183 fprintf(stderr, "you should have a safety check failure below:\n");
184#endif
185 TEST_MAGIC_SAFETY("eina_inlist_append",
186 "safety check failed: new_l == NULL");
187 lst = eina_inlist_append(lst, NULL);
188 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
189 fail_unless(ctx.did);
190
191#ifdef SHOW_LOG
192 fprintf(stderr, "you should have a safety check failure below:\n");
193#endif
194 TEST_MAGIC_SAFETY("eina_inlist_append_relative",
195 "safety check failed: new_l == NULL");
196 lst = eina_inlist_append_relative(lst, NULL, NULL);
197 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
198 fail_unless(ctx.did);
199
200#ifdef SHOW_LOG
201 fprintf(stderr, "you should have a safety check failure below:\n");
202#endif
203 TEST_MAGIC_SAFETY("eina_inlist_prepend",
204 "safety check failed: new_l == NULL");
205 lst = eina_inlist_prepend(lst, NULL);
206 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
207 fail_unless(ctx.did);
208
209#ifdef SHOW_LOG
210 fprintf(stderr, "you should have a safety check failure below:\n");
211#endif
212 TEST_MAGIC_SAFETY("eina_inlist_prepend_relative",
213 "safety check failed: new_l == NULL");
214 lst = eina_inlist_prepend_relative(lst, NULL, NULL);
215 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
216 fail_unless(ctx.did);
217
218#ifdef SHOW_LOG
219 fprintf(stderr, "you should have a safety check failure below:\n");
220#endif
221 TEST_MAGIC_SAFETY("eina_inlist_find",
222 "safety check failed: item == NULL");
223 lst = eina_inlist_find(lst, NULL);
224 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
225 fail_unless(ctx.did);
226
227#ifdef SHOW_LOG
228 fprintf(stderr, "you should have a safety check failure below:\n");
229#endif
230 TEST_MAGIC_SAFETY("eina_inlist_demote",
231 "safety check failed: list == NULL");
232 lst = eina_inlist_demote(NULL, NULL);
233 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
234 fail_unless(ctx.did);
235
236#ifdef SHOW_LOG
237 fprintf(stderr, "you should have a safety check failure below:\n");
238#endif
239 TEST_MAGIC_SAFETY("eina_inlist_demote",
240 "safety check failed: item == NULL");
241 lst = eina_inlist_demote((void*)1L, NULL);
242 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
243 fail_unless(ctx.did);
244 lst = NULL;
245
246#ifdef SHOW_LOG
247 fprintf(stderr, "you should have a safety check failure below:\n");
248#endif
249 TEST_MAGIC_SAFETY("eina_inlist_promote",
250 "safety check failed: list == NULL");
251 lst = eina_inlist_promote(NULL, NULL);
252 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
253 fail_unless(ctx.did);
254
255#ifdef SHOW_LOG
256 fprintf(stderr, "you should have a safety check failure below:\n");
257#endif
258 TEST_MAGIC_SAFETY("eina_inlist_promote",
259 "safety check failed: item == NULL");
260 lst = eina_inlist_promote((void*)1L, NULL);
261 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
262 fail_unless(ctx.did);
263 lst = NULL;
264
265#ifdef SHOW_LOG
266 fprintf(stderr, "you should have a safety check failure below:\n");
267#endif
268 TEST_MAGIC_SAFETY("eina_inlist_sorted_insert",
269 "safety check failed: item == NULL");
270 lst = eina_inlist_sorted_insert(NULL, NULL, NULL);
271 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
272 fail_unless(ctx.did);
273
274#ifdef SHOW_LOG
275 fprintf(stderr, "you should have a safety check failure below:\n");
276#endif
277 TEST_MAGIC_SAFETY("eina_inlist_sorted_insert",
278 "safety check failed: func == NULL");
279 lst = eina_inlist_sorted_insert(NULL, (void*)1L, NULL);
280 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
281 fail_unless(ctx.did);
282 lst = NULL;
283
284 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
285 lst = bkp;
286#endif
287
288 tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist);
289 lst = eina_inlist_demote(lst, lst);
290 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist) == tmp);
291
292 lst = eina_inlist_promote(lst, EINA_INLIST_GET(tmp));
293 fail_if(lst != EINA_INLIST_GET(tmp));
294
295 tmp = EINA_INLIST_CONTAINER_GET(eina_inlist_find(lst, EINA_INLIST_GET(
296 prev)), Eina_Test_Inlist);
297 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
298 prev = (Eina_Test_Inlist *)eina_inlist_find(lst, EINA_INLIST_GET(tmp));
299 tmp = prev ? EINA_INLIST_CONTAINER_GET(prev, Eina_Test_Inlist) : NULL;
300 fail_if(tmp != NULL);
301
302 while (lst)
303 lst = eina_inlist_remove(lst, lst);
304
305 eina_shutdown();
306}
307END_TEST
308
309typedef struct _Eina_Test_Inlist_Sorted Eina_Test_Inlist_Sorted;
310struct _Eina_Test_Inlist_Sorted
311{
312 EINA_INLIST;
313
314 int value;
315};
316
317static int
318_eina_test_inlist_cmp(const void *d1, const void *d2)
319{
320 const Eina_Test_Inlist_Sorted *t1 = d1;
321 const Eina_Test_Inlist_Sorted *t2 = d2;
322
323 return t1->value - t2->value;
324}
325
326static void
327_eina_test_inlist_check(const Eina_Inlist *list)
328{
329 const Eina_Test_Inlist_Sorted *t;
330 int last_value = 0;
331
332 EINA_INLIST_FOREACH(list, t)
333 {
334 fail_if(t->value < last_value);
335 last_value = t->value;
336 }
337}
338
339START_TEST(eina_inlist_sorted)
340{
341 Eina_Test_Inlist_Sorted *tmp;
342 Eina_Inlist *list = NULL;
343 Eina_Inlist *sorted = NULL;
344 int i;
345
346 fail_if(!eina_init());
347
348 srand(time(NULL));
349
350 for (i = 0; i < 2000; ++i)
351 {
352 tmp = malloc(sizeof (Eina_Test_Inlist_Sorted));
353 if (!tmp) continue ;
354
355 tmp->value = rand();
356
357 list = eina_inlist_prepend(list, EINA_INLIST_GET(tmp));
358 }
359
360 list = eina_inlist_sort(list, _eina_test_inlist_cmp);
361
362 _eina_test_inlist_check(list);
363
364 EINA_INLIST_FOREACH(list, tmp)
365 tmp->value = rand();
366
367 i = 0;
368 while (list)
369 {
370 Eina_Inlist *p = list;
371
372 list = eina_inlist_remove(list, list);
373
374 sorted = eina_inlist_sorted_insert(sorted, p, _eina_test_inlist_cmp);
375 _eina_test_inlist_check(sorted);
376 }
377
378 _eina_test_inlist_check(sorted);
379
380 eina_shutdown();
381}
382END_TEST
383
384START_TEST(eina_inlist_sorted_state)
385{
386 Eina_Test_Inlist_Sorted *tmp;
387 Eina_Inlist_Sorted_State *state;
388 Eina_Inlist *list = NULL;
389 int i;
390
391 fail_if(!eina_init());
392
393 state = eina_inlist_sorted_state_new();
394 fail_if(!state);
395
396 for (i = 0; i < 2000; ++i)
397 {
398 tmp = malloc(sizeof (Eina_Test_Inlist_Sorted));
399 if (!tmp) continue ;
400
401 tmp->value = rand();
402
403 list = eina_inlist_sorted_state_insert(list, EINA_INLIST_GET(tmp), _eina_test_inlist_cmp, state);
404 _eina_test_inlist_check(list);
405 }
406
407 _eina_test_inlist_check(list);
408
409 eina_inlist_sorted_state_free(state);
410
411 eina_shutdown();
412}
413END_TEST
414
415void
416eina_test_inlist(TCase *tc)
417{
418 tcase_add_test(tc, eina_inlist_simple);
419 tcase_add_test(tc, eina_inlist_sorted);
420 tcase_add_test(tc, eina_inlist_sorted_state);
421}
diff --git a/libraries/eina/src/tests/eina_test_iterator.c b/libraries/eina/src/tests/eina_test_iterator.c
deleted file mode 100644
index 84bb336..0000000
--- a/libraries/eina/src/tests/eina_test_iterator.c
+++ /dev/null
@@ -1,465 +0,0 @@
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
deleted file mode 100644
index 13fd607..0000000
--- a/libraries/eina/src/tests/eina_test_lalloc.c
+++ /dev/null
@@ -1,89 +0,0 @@
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
deleted file mode 100644
index ce70d03..0000000
--- a/libraries/eina/src/tests/eina_test_list.c
+++ /dev/null
@@ -1,387 +0,0 @@
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
341START_TEST(eina_test_list_split)
342{
343 Eina_List *left = NULL, *right = NULL ;
344 Eina_List *list = NULL;
345 Eina_List *l;
346 void *list_data;
347 int i;
348
349 eina_init();
350
351 list = eina_list_append(list, "tigh");
352 list = eina_list_append(list, "adar");
353 list = eina_list_append(list, "baltar");
354 list = eina_list_append(list, "roslin");
355 list = eina_list_append(list, "baltar");
356 list = eina_list_append(list, "roslin");
357 list = eina_list_append(list, "baltar");
358 list = eina_list_append(list, "roslin");
359
360 fail_if(list == NULL);
361 fail_if(eina_list_count(list) != 8);
362
363 for ( i = 0; i < 200; i++)
364 {
365 left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right);
366
367 if (i % 2 == 0)
368 fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7);
369 else
370 fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7);
371
372 list = eina_list_merge(left, right);
373 list = eina_list_append(list, "roslin");
374 }
375
376 eina_shutdown();
377}
378END_TEST
379
380void
381eina_test_list(TCase *tc)
382{
383 tcase_add_test(tc, eina_test_simple);
384 tcase_add_test(tc, eina_test_merge);
385 tcase_add_test(tc, eina_test_sorted_insert);
386 tcase_add_test(tc, eina_test_list_split);
387}
diff --git a/libraries/eina/src/tests/eina_test_log.c b/libraries/eina/src/tests/eina_test_log.c
deleted file mode 100644
index e0f0363..0000000
--- a/libraries/eina/src/tests/eina_test_log.c
+++ /dev/null
@@ -1,424 +0,0 @@
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
30struct log_ctx {
31 int level;
32 int line;
33 const char *msg;
34 const char *fnc;
35 const char *dom;
36 Eina_Bool did;
37};
38
39/* tests should not output on success, just uncomment this for debugging */
40//#define SHOW_LOG 1
41
42static void
43_eina_test_log(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
44{
45 struct log_ctx *ctx = data;
46 ck_assert_int_eq(ctx->level, level);
47 ck_assert_int_eq(ctx->line, line);
48 ck_assert_str_eq(ctx->msg, fmt);
49 ck_assert_str_eq(ctx->fnc, fnc);
50 ck_assert_str_eq(file, __FILE__);
51 ctx->did = EINA_TRUE;
52#ifdef SHOW_LOG
53 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
54#else
55 (void)d;
56#endif
57}
58
59static void
60_eina_test_log_domain(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
61{
62 struct log_ctx *ctx = data;
63 ck_assert_int_eq(ctx->level, level);
64 ck_assert_int_eq(ctx->line, line);
65 ck_assert_str_eq(ctx->msg, fmt);
66 ck_assert_str_eq(ctx->fnc, fnc);
67 ck_assert_str_eq(file, __FILE__);
68 ck_assert_str_eq(ctx->dom, d->name);
69 ctx->did = EINA_TRUE;
70#ifdef SHOW_LOG
71 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
72#endif
73}
74
75static void
76_eina_test_log_safety(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
77{
78 struct log_ctx *ctx = data;
79 va_list cp_args;
80 const char *str;
81
82 va_copy(cp_args, args);
83 str = va_arg(cp_args, const char *);
84 va_end(cp_args);
85
86 ck_assert_int_eq(ctx->level, level);
87 ck_assert_str_eq(fmt, "%s");
88 ck_assert_str_eq(ctx->msg, str);
89 ck_assert_str_eq(ctx->fnc, fnc);
90 ctx->did = EINA_TRUE;
91
92#ifdef SHOW_LOG
93 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
94#else
95 (void)d;
96 (void)file;
97 (void)line;
98#endif
99}
100
101START_TEST(eina_log_macro)
102{
103 struct log_ctx ctx;
104 int oldlevel;
105
106 fail_if(!eina_init());
107
108 oldlevel = eina_log_level_get();
109 eina_log_level_set(EINA_LOG_LEVEL_DBG);
110 eina_log_print_cb_set(_eina_test_log, &ctx);
111
112#define TEST_LOG_CTX(lvl, _msg) \
113 ctx.level = lvl; \
114 ctx.line = __LINE__ + 1; \
115 ctx.msg = _msg; \
116 ctx.fnc = __FUNCTION__; \
117 ctx.did = EINA_FALSE
118
119 TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "Critical message");
120 EINA_LOG_CRIT("Critical message");
121 fail_unless(ctx.did);
122
123 TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error");
124 EINA_LOG_ERR("An error");
125 fail_unless(ctx.did);
126
127 TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning");
128 EINA_LOG_WARN("A warning");
129 fail_unless(ctx.did);
130
131 TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info");
132 EINA_LOG_INFO("An info");
133 fail_unless(ctx.did);
134
135 TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug");
136 EINA_LOG_DBG("A debug");
137 fail_unless(ctx.did);
138
139#undef TEST_LOG_CTX
140
141 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
142 eina_log_level_set(oldlevel);
143
144 eina_shutdown();
145}
146END_TEST
147
148START_TEST(eina_log_domains_macros)
149{
150 struct log_ctx ctx;
151 int oldlevel;
152
153 fail_if(!eina_init());
154
155 /* make global log level blocker */
156 oldlevel = eina_log_level_get();
157 eina_log_level_set(EINA_LOG_LEVEL_CRITICAL);
158 eina_log_print_cb_set(_eina_test_log_domain, &ctx);
159
160 int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN);
161 fail_if(d < 0);
162
163 /* make specific domain permissive */
164 eina_log_domain_level_set("MyDomain", EINA_LOG_LEVEL_DBG);
165
166#define TEST_LOG_CTX(lvl, _msg) \
167 ctx.level = lvl; \
168 ctx.line = __LINE__ + 1; \
169 ctx.msg = _msg; \
170 ctx.fnc = __FUNCTION__; \
171 ctx.dom = "MyDomain"; \
172 ctx.did = EINA_FALSE
173
174 TEST_LOG_CTX(EINA_LOG_LEVEL_CRITICAL, "A critical message");
175 EINA_LOG_DOM_CRIT(d, "A critical message");
176 fail_unless(ctx.did);
177
178 TEST_LOG_CTX(EINA_LOG_LEVEL_ERR, "An error");
179 EINA_LOG_DOM_ERR(d, "An error");
180 fail_unless(ctx.did);
181
182 TEST_LOG_CTX(EINA_LOG_LEVEL_WARN, "A warning");
183 EINA_LOG_DOM_WARN(d, "A warning");
184 fail_unless(ctx.did);
185
186 TEST_LOG_CTX(EINA_LOG_LEVEL_INFO, "An info");
187 EINA_LOG_DOM_INFO(d, "An info");
188 fail_unless(ctx.did);
189
190 TEST_LOG_CTX(EINA_LOG_LEVEL_DBG, "A debug");
191 EINA_LOG_DOM_DBG(d, "A debug");
192 fail_unless(ctx.did);
193
194#undef TEST_LOG_CTX
195
196 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
197 eina_log_level_set(oldlevel);
198
199 eina_shutdown();
200}
201END_TEST
202
203START_TEST(eina_log_domains_registry)
204{
205 fail_if(!eina_init());
206
207 int i;
208 int d[50];
209
210 for (i = 0; i < 50; i++)
211 {
212 d[i] = eina_log_domain_register("Test", EINA_COLOR_GREEN);
213 fail_if(d[i] < 0);
214 }
215
216 for (i = 0; i < 50; i++)
217 eina_log_domain_unregister(d[i]);
218
219 eina_shutdown();
220}
221END_TEST
222
223START_TEST(eina_log_domains_slot_reuse)
224{
225 fail_if(!eina_init());
226 fail_if(!eina_threads_init());
227
228 // Create 9 domains
229 int idx[9];
230 int i;
231
232 for (i = 0; i < 9; i++)
233 {
234 idx[i] = eina_log_domain_register("Test1", EINA_COLOR_GREEN);
235 fail_if(idx[i] < 0);
236 }
237
238 // Slot 0 by default contains the global logger. The above code created
239 // domains for slots indexes from 1 to 9.
240 //
241 // The global logger allocated the first 8 initial slots. The 8th domain
242 // registered on the for loop will create 8 more slots.
243 //
244 // Test will just unregister a domain between 1 and 9 and assure that a new
245 // domain register will be placed on the available slot and not at the end.
246
247 int removed = idx[5];
248 eina_log_domain_unregister(removed);
249
250 int new = eina_log_domain_register("Test Slot", EINA_COLOR_GREEN);
251
252 // Check for slot reuse
253 fail_if(new != removed);
254
255 eina_threads_shutdown();
256 eina_shutdown();
257}
258END_TEST
259
260START_TEST(eina_log_level_indexes)
261{
262 struct log_ctx ctx;
263
264 fail_if(!eina_init());
265 fail_if(!eina_threads_init());
266 fail_if(!eina_threads_init());
267
268 int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN);
269 fail_if(d < 0);
270
271 eina_log_print_cb_set(_eina_test_log_domain, &ctx);
272
273#define TEST_LOG_CTX(lvl, _msg) \
274 ctx.level = lvl; \
275 ctx.line = __LINE__ + 1; \
276 ctx.msg = _msg; \
277 ctx.fnc = __FUNCTION__; \
278 ctx.dom = "Levels"; \
279 ctx.did = EINA_FALSE;
280
281 // Displayed unless user sets level lower than -1
282 eina_log_domain_level_set("Levels", -1);
283 TEST_LOG_CTX(-1, "Negative index message");
284 EINA_LOG(d, -1, "Negative index message");
285 fail_unless(ctx.did);
286
287 eina_log_domain_level_set("Levels", -2);
288 TEST_LOG_CTX(-1, "Negative index message");
289 EINA_LOG(d, -1, "Negative index message");
290 fail_if(ctx.did);
291
292 // Displayed only if user sets level 6 or higher
293 eina_log_domain_level_set("Levels", 6);
294 TEST_LOG_CTX(6, "Higher level debug");
295 EINA_LOG(d, 6, "Higher level debug");
296 fail_unless(ctx.did);
297
298 eina_log_domain_level_set("Levels", 5);
299 TEST_LOG_CTX(6, "Higher level debug");
300 EINA_LOG(d, 6, "Higher level debug");
301 fail_if(ctx.did);
302
303#undef TEST_LOG_CTX
304
305 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
306
307 eina_threads_shutdown();
308 eina_threads_shutdown();
309 eina_shutdown();
310}
311END_TEST
312
313START_TEST(eina_log_customize)
314{
315 struct log_ctx ctx;
316 int d;
317
318 /* please don't define EINA_LOG_LEVELS for it */
319#define TEST_DOM "_Test_Log_Dom"
320
321 fail_if(!eina_init());
322
323#define test_set_get(func, val) \
324 eina_log_ ## func ## _set(val); \
325 fail_if(eina_log_ ## func ## _get() != val)
326
327 test_set_get(level, -1234);
328 test_set_get(level, 4567);
329
330#define test_set_get_bool(func) \
331 test_set_get(func, EINA_FALSE); \
332 test_set_get(func, EINA_TRUE)
333
334 test_set_get_bool(color_disable);
335 test_set_get_bool(file_disable);
336 test_set_get_bool(function_disable);
337 test_set_get_bool(abort_on_critical);
338
339 test_set_get(abort_on_critical_level, -1234);
340 test_set_get(abort_on_critical_level, 4567);
341
342 fail_if(eina_log_domain_level_get(TEST_DOM) != eina_log_level_get());
343
344 eina_log_domain_level_set(TEST_DOM, -123);
345 fail_if(eina_log_domain_level_get(TEST_DOM) != -123);
346
347 eina_log_domain_level_set(TEST_DOM, 890);
348 fail_if(eina_log_domain_level_get(TEST_DOM) != 890);
349
350 d = eina_log_domain_register(TEST_DOM, EINA_COLOR_GREEN);
351 fail_if(d < 0);
352
353 fail_if(eina_log_domain_level_get(TEST_DOM) != 890);
354 fail_if(eina_log_domain_registered_level_get(d) != 890);
355
356 eina_log_domain_unregister(d);
357
358#ifdef EINA_SAFETY_CHECKS
359#ifdef SHOW_LOG
360 fputs("NOTE: You should see a failed safety check or "
361 "a crash if compiled without safety checks support.\n",
362 stderr);
363#endif
364 eina_log_abort_on_critical_set(EINA_FALSE);
365 eina_log_function_disable_set(EINA_FALSE);
366
367 eina_log_print_cb_set(_eina_test_log_safety, &ctx);
368 ctx.level = EINA_LOG_LEVEL_ERR;
369 ctx.msg = "safety check failed: _log_domains[domain].deleted is true";
370 ctx.fnc = "eina_log_domain_registered_level_get";
371 ctx.did = EINA_FALSE;
372 fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN);
373 fail_unless(ctx.did);
374
375 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
376#else
377#warning "Compiled without safety checks"
378#endif
379
380#undef test_set_get_bool
381#undef test_set_get
382
383 eina_shutdown();
384}
385END_TEST
386
387START_TEST(eina_log_level_name)
388{
389 char name[4];
390
391 fail_if(!eina_init());
392
393#define tst(level, str) \
394 eina_log_level_name_get(level, name); \
395 fail_if(strcmp(name, str) != 0)
396
397 tst(0, "CRI");
398 tst(1, "ERR");
399 tst(2, "WRN");
400 tst(3, "INF");
401 tst(4, "DBG");
402 tst(5, "005");
403 tst(12, "012");
404 tst(369, "369");
405 tst(-1, "-01");
406 tst(-48, "-48");
407
408#undef tst
409
410 eina_shutdown();
411}
412END_TEST
413
414void
415eina_test_log(TCase *tc)
416{
417 tcase_add_test(tc, eina_log_macro);
418 tcase_add_test(tc, eina_log_domains_macros);
419 tcase_add_test(tc, eina_log_domains_registry);
420 tcase_add_test(tc, eina_log_domains_slot_reuse);
421 tcase_add_test(tc, eina_log_level_indexes);
422 tcase_add_test(tc, eina_log_customize);
423 tcase_add_test(tc, eina_log_level_name);
424}
diff --git a/libraries/eina/src/tests/eina_test_magic.c b/libraries/eina/src/tests/eina_test_magic.c
deleted file mode 100644
index d0a374e..0000000
--- a/libraries/eina/src/tests/eina_test_magic.c
+++ /dev/null
@@ -1,206 +0,0 @@
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
43struct log_ctx {
44 const char *msg;
45 const char *fnc;
46 Eina_Bool did;
47};
48
49/* tests should not output on success, just uncomment this for debugging */
50//#define SHOW_LOG 1
51
52static void
53_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
54{
55 struct log_ctx *ctx = data;
56 va_list cp_args;
57 const char *str;
58
59 va_copy(cp_args, args);
60 str = va_arg(cp_args, const char *);
61 va_end(cp_args);
62
63 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
64 ck_assert_str_eq(fmt, "%s");
65 ck_assert_str_eq(ctx->msg, str);
66 ck_assert_str_eq(ctx->fnc, fnc);
67 ctx->did = EINA_TRUE;
68
69#ifdef SHOW_LOG
70 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
71#else
72 (void)d;
73 (void)file;
74 (void)line;
75#endif
76}
77
78static void
79_eina_test_magic_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
80{
81 struct log_ctx *ctx = data;
82
83 ck_assert_int_eq(level, EINA_LOG_LEVEL_CRITICAL);
84 ck_assert_str_eq(ctx->msg, fmt);
85 ck_assert_str_eq(ctx->fnc, fnc);
86 ctx->did = EINA_TRUE;
87
88#ifdef SHOW_LOG
89 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
90#else
91 (void)d;
92 (void)file;
93 (void)line;
94#endif
95}
96
97#ifdef EINA_SAFETY_CHECKS
98#define TEST_MAGIC_SAFETY(fn, _msg) \
99 ctx.msg = _msg; \
100 ctx.fnc = fn; \
101 ctx.did = EINA_FALSE
102#endif
103
104START_TEST(eina_magic_simple)
105{
106 Eina_Magic_Struct *ems = NULL;
107 struct log_ctx ctx;
108
109 eina_init();
110
111 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
112
113 eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING);
114
115#ifdef EINA_SAFETY_CHECKS
116#ifdef SHOW_LOG
117 fprintf(stderr, "you should have a safety check failure below:\n");
118#endif
119 TEST_MAGIC_SAFETY("eina_magic_string_set",
120 "safety check failed: magic_name == NULL");
121 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
122 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
123 fail_unless(ctx.did);
124
125#ifdef SHOW_LOG
126 fprintf(stderr, "you should have a safety check failure below:\n");
127#endif
128 TEST_MAGIC_SAFETY("eina_magic_string_set",
129 "safety check failed: magic_name == NULL");
130 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
131 fail_unless(ctx.did);
132 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
133#endif
134
135 eina_magic_string_set(EINA_MAGIC_TEST2, EINA_MAGIC_STRING);
136
137 fail_if(eina_magic_string_get(EINA_MAGIC_TEST) == NULL);
138 fail_if(strcmp(eina_magic_string_get(
139 EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0);
140
141 eina_log_print_cb_set(_eina_test_magic_print_cb, &ctx);
142
143#ifdef EINA_MAGIC_DEBUG
144 fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
145#ifdef SHOW_LOG
146 fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n");
147#endif
148 TEST_MAGIC_SAFETY(__FUNCTION__,
149 "*** Eina Magic Check Failed !!!\n"
150 " Input handle pointer is NULL !\n"
151 "*** NAUGHTY PROGRAMMER!!!\n"
152 "*** SPANK SPANK SPANK!!!\n"
153 "*** Now go fix your code. Tut tut tut!\n"
154 "\n");
155 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
156 fail_unless(ctx.did);
157
158 ems = malloc(sizeof (Eina_Magic_Struct));
159 fail_if(!ems);
160 EINA_MAGIC_SET(ems, EINA_MAGIC_TEST);
161
162 fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
163
164 EINA_MAGIC_SET(ems, EINA_MAGIC_NONE);
165#ifdef SHOW_LOG
166 fprintf(stderr,
167 "you should see 'Input handle has already been freed' below\n");
168#endif
169 TEST_MAGIC_SAFETY(__FUNCTION__,
170 "*** Eina Magic Check Failed !!!\n"
171 " Input handle has already been freed!\n"
172 "*** NAUGHTY PROGRAMMER!!!\n"
173 "*** SPANK SPANK SPANK!!!\n"
174 "*** Now go fix your code. Tut tut tut!\n"
175 "\n");
176 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
177 fail_unless(ctx.did);
178
179 EINA_MAGIC_SET(ems, 42424242);
180#ifdef SHOW_LOG
181 fprintf(stderr, "you should see 'Input handle is wrong type' below\n");
182#endif
183 TEST_MAGIC_SAFETY(__FUNCTION__,
184 "*** Eina Magic Check Failed !!!\n"
185 " Input handle is wrong type\n"
186 " Expected: %08x - %s\n"
187 " Supplied: %08x - %s\n"
188 "*** NAUGHTY PROGRAMMER!!!\n"
189 "*** SPANK SPANK SPANK!!!\n"
190 "*** Now go fix your code. Tut tut tut!\n"
191 "\n");
192 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
193 fail_unless(ctx.did);
194#endif
195
196 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
197
198 eina_shutdown();
199}
200END_TEST
201
202void eina_test_magic(TCase *tc)
203{
204 tcase_add_test(tc, eina_magic_simple);
205}
206
diff --git a/libraries/eina/src/tests/eina_test_main.c b/libraries/eina/src/tests/eina_test_main.c
deleted file mode 100644
index 04364a1..0000000
--- a/libraries/eina/src/tests/eina_test_main.c
+++ /dev/null
@@ -1,62 +0,0 @@
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
deleted file mode 100644
index e07b1ee..0000000
--- a/libraries/eina/src/tests/eina_test_matrixsparse.c
+++ /dev/null
@@ -1,489 +0,0 @@
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
deleted file mode 100644
index 7106afa..0000000
--- a/libraries/eina/src/tests/eina_test_mempool.c
+++ /dev/null
@@ -1,187 +0,0 @@
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_model.c b/libraries/eina/src/tests/eina_test_model.c
deleted file mode 100644
index 54a2258..0000000
--- a/libraries/eina/src/tests/eina_test_model.c
+++ /dev/null
@@ -1,1288 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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#include <stdio.h>
24#include <inttypes.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28
29static void
30_eina_test_model_check_safety_null(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args)
31{
32 Eina_Bool *ck = data;
33
34 if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0))
35 {
36 const char *str;
37 va_list cp_args;
38
39 va_copy(cp_args, args);
40 str = va_arg(cp_args, const char *);
41 va_end(cp_args);
42 if (eina_str_has_prefix(str, "safety check failed: ") &&
43 eina_str_has_suffix(str, " == NULL"))
44 {
45 *ck = EINA_TRUE;
46 return;
47 }
48 }
49 *ck = EINA_FALSE;
50 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
51}
52
53static void
54_eina_test_model_check_safety_false(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args)
55{
56 Eina_Bool *ck = data;
57
58 if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0))
59 {
60 const char *str;
61 va_list cp_args;
62
63 va_copy(cp_args, args);
64 str = va_arg(cp_args, const char *);
65 va_end(cp_args);
66 if (eina_str_has_prefix(str, "safety check failed: ") &&
67 eina_str_has_suffix(str, " is false"))
68 {
69 *ck = EINA_TRUE;
70 return;
71 }
72 }
73 *ck = EINA_FALSE;
74 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
75}
76
77static void
78_eina_test_model_cb_count(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info)
79{
80 unsigned *count = data;
81 (*count)++;
82#if SHOW_LOG
83 if ((desc->type) && (strcmp(desc->type, "u") == 0))
84 {
85 unsigned *pos = event_info;
86 printf("%2u %p %s at %u\n", *count, model, desc->name, *pos);
87 }
88 else
89 printf("%2u %p %s\n", *count, model, desc->name);
90#else
91 (void)model;
92 (void)desc;
93 (void)event_info;
94#endif
95}
96
97START_TEST(eina_model_test_properties)
98{
99 unsigned int count_del = 0, count_pset = 0, count_pdel = 0;
100 Eina_Model *m;
101 Eina_Value inv, outv;
102 int i;
103 char *s;
104 Eina_List *lst;
105 Eina_Bool ck;
106
107 eina_init();
108
109 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
110 fail_unless(m != NULL);
111
112 eina_model_event_callback_add
113 (m, "deleted", _eina_test_model_cb_count, &count_del);
114 eina_model_event_callback_add
115 (m, "property,set", _eina_test_model_cb_count, &count_pset);
116 eina_model_event_callback_add
117 (m, "property,deleted", _eina_test_model_cb_count, &count_pdel);
118
119 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
120 fail_unless(eina_value_set(&inv, 1234));
121 fail_unless(eina_value_get(&inv, &i));
122 ck_assert_int_eq(i, 1234);
123
124 fail_unless(eina_model_property_set(m, "abc", &inv));
125
126 fail_unless(eina_value_set(&inv, 5678));
127 fail_unless(eina_model_property_set(m, "xyz", &inv));
128
129 fail_unless(eina_value_set(&inv, 171));
130 fail_unless(eina_model_property_set(m, "value", &inv));
131
132 lst = eina_model_properties_names_list_get(m);
133 ck_assert_int_eq(eina_list_count(lst), 3);
134
135 lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp));
136 ck_assert_str_eq("abc", eina_list_nth(lst, 0));
137 ck_assert_str_eq("value", eina_list_nth(lst, 1));
138 ck_assert_str_eq("xyz", eina_list_nth(lst, 2));
139
140 eina_model_properties_names_list_free(lst);
141
142 fail_unless(eina_model_property_get(m, "abc", &outv));
143 fail_unless(eina_value_get(&outv, &i));
144 ck_assert_int_eq(i, 1234);
145 eina_value_flush(&outv);
146
147 fail_unless(eina_model_property_get(m, "xyz", &outv));
148 fail_unless(eina_value_get(&outv, &i));
149 ck_assert_int_eq(i, 5678);
150 eina_value_flush(&outv);
151
152 fail_unless(eina_model_property_get(m, "value", &outv));
153 fail_unless(eina_value_get(&outv, &i));
154 ck_assert_int_eq(i, 171);
155 eina_value_flush(&outv);
156
157 fail_unless(eina_value_set(&inv, 666));
158 fail_unless(eina_model_property_set(m, "value", &inv));
159 fail_unless(eina_model_property_get(m, "value", &outv));
160 fail_unless(eina_value_get(&outv, &i));
161 ck_assert_int_eq(i, 666);
162
163 eina_value_flush(&outv);
164 eina_value_flush(&inv);
165
166 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING));
167 fail_unless(eina_value_set(&inv, "Hello world!"));
168 fail_unless(eina_model_property_set(m, "string", &inv));
169
170 fail_unless(eina_model_property_get(m, "string", &outv));
171 fail_unless(eina_value_get(&outv, &s));
172 fail_unless(s != NULL);
173 ck_assert_str_eq(s, "Hello world!");
174
175 eina_value_flush(&outv);
176 eina_value_flush(&inv);
177
178 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRINGSHARE));
179 fail_unless(eina_value_set(&inv, "Hello world-STRINGSHARED!"));
180 fail_unless(eina_model_property_set(m, "stringshare", &inv));
181 /* set twice to see if references drop to zero before new add, shouldn't */
182 fail_unless(eina_model_property_set(m, "stringshare", &inv));
183
184 fail_unless(eina_model_property_get(m, "stringshare", &outv));
185 fail_unless(eina_value_get(&outv, &s));
186 fail_unless(s != NULL);
187 ck_assert_str_eq(s, "Hello world-STRINGSHARED!");
188
189 eina_value_flush(&outv);
190 eina_value_flush(&inv);
191
192 s = eina_model_to_string(m);
193 fail_unless(s != NULL);
194 ck_assert_str_eq(s, "Eina_Model_Type_Generic({abc: 1234, string: Hello world!, stringshare: Hello world-STRINGSHARED!, value: 666, xyz: 5678}, [])");
195 free(s);
196
197 fail_unless(eina_model_property_del(m, "value"));
198
199 /* negative test (check safety was displayed by using print_cb) */
200 eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck);
201
202 ck = EINA_FALSE;
203 fail_if(eina_model_property_get(m, "non-existent", &outv));
204 fail_unless(ck == EINA_TRUE);
205
206 ck = EINA_FALSE;
207 fail_if(eina_model_property_get(m, NULL, &outv));
208 fail_unless(ck == EINA_TRUE);
209
210 ck = EINA_FALSE;
211 fail_if(eina_model_property_del(m, "value"));
212 fail_unless(ck == EINA_TRUE);
213
214 /* revert print_cb to default */
215 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
216
217 ck_assert_int_eq(eina_model_refcount(m), 1);
218
219 eina_model_unref(m);
220 ck_assert_int_eq(count_del, 1);
221 ck_assert_int_eq(count_pset, 7);
222 ck_assert_int_eq(count_pdel, 1);
223 eina_shutdown();
224}
225END_TEST
226
227static int
228eina_model_test_children_reverse_cmp(const Eina_Model *a, const Eina_Model *b)
229{
230 return - eina_model_compare(a, b);
231}
232
233START_TEST(eina_model_test_children)
234{
235 unsigned int count_del = 0, count_cset = 0, count_cins = 0, count_cdel = 0;
236 Eina_Model *m, *c;
237 char *s;
238 int i;
239
240 eina_init();
241
242 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
243 fail_unless(m != NULL);
244
245 eina_model_event_callback_add
246 (m, "deleted", _eina_test_model_cb_count, &count_del);
247 eina_model_event_callback_add
248 (m, "child,set", _eina_test_model_cb_count, &count_cset);
249 eina_model_event_callback_add
250 (m, "child,inserted", _eina_test_model_cb_count, &count_cins);
251 eina_model_event_callback_add
252 (m, "child,deleted", _eina_test_model_cb_count, &count_cdel);
253
254 for (i = 0; i < 10; i++)
255 {
256 Eina_Value val;
257
258 c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
259 fail_unless(c != NULL);
260
261 eina_model_event_callback_add
262 (c, "deleted", _eina_test_model_cb_count, &count_del);
263 eina_model_event_callback_add
264 (c, "child,set", _eina_test_model_cb_count, &count_cset);
265 eina_model_event_callback_add
266 (c, "child,inserted", _eina_test_model_cb_count, &count_cins);
267 eina_model_event_callback_add
268 (c, "child,deleted", _eina_test_model_cb_count, &count_cdel);
269
270 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
271 fail_unless(eina_value_set(&val, i));
272 fail_unless(eina_model_property_set(c, "value", &val));
273
274 fail_unless(eina_model_child_append(m, c) >= 0);
275 ck_assert_int_eq(eina_model_refcount(c), 2);
276
277 eina_value_flush(&val);
278 eina_model_unref(c);
279 }
280
281 ck_assert_int_eq(eina_model_child_count(m), 10);
282
283 for (i = 0; i < 10; i++)
284 {
285 Eina_Value val;
286 int x;
287
288 c = eina_model_child_get(m, i);
289 fail_unless(c != NULL);
290 ck_assert_int_eq(eina_model_refcount(c), 2);
291
292 fail_unless(eina_model_property_get(c, "value", &val));
293 fail_unless(eina_value_get(&val, &x));
294 ck_assert_int_eq(x, i);
295
296 eina_value_flush(&val);
297 eina_model_unref(c);
298 }
299
300 eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp));
301
302 for (i = 0; i < 10; i++)
303 {
304 Eina_Value val;
305 int x;
306
307 c = eina_model_child_get(m, i);
308 fail_unless(c != NULL);
309 ck_assert_int_eq(eina_model_refcount(c), 2);
310
311 fail_unless(eina_model_property_get(c, "value", &val));
312 fail_unless(eina_value_get(&val, &x));
313 ck_assert_int_eq(x, 10 - i - 1);
314
315 eina_value_flush(&val);
316 eina_model_unref(c);
317 }
318
319 eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_compare));
320
321 s = eina_model_to_string(m);
322 fail_unless(s != NULL);
323 ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 1}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, []), Eina_Model_Type_Generic({value: 9}, [])])");
324 free(s);
325
326 c = eina_model_child_get(m, 0);
327 eina_model_child_set(m, 1, c);
328 eina_model_unref(c);
329
330 eina_model_child_del(m, 0);
331 eina_model_child_del(m, 8);
332
333 s = eina_model_to_string(m);
334 fail_unless(s != NULL);
335 ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, [])])");
336 free(s);
337
338 ck_assert_int_eq(eina_model_refcount(m), 1);
339 eina_model_unref(m);
340
341 ck_assert_int_eq(count_del, 11);
342 ck_assert_int_eq(count_cins, 10);
343 ck_assert_int_eq(count_cset, 1);
344 ck_assert_int_eq(count_cdel, 2);
345
346 eina_shutdown();
347}
348END_TEST
349
350START_TEST(eina_model_test_copy)
351{
352 unsigned int count_del = 0;
353 Eina_Model *m, *cp;
354 char *s1, *s2;
355 int i;
356
357 eina_init();
358
359 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
360 fail_unless(m != NULL);
361
362 eina_model_event_callback_add
363 (m, "deleted", _eina_test_model_cb_count, &count_del);
364
365 for (i = 0; i < 5; i++)
366 {
367 Eina_Value val;
368 char name[2] = {'a'+ i, 0};
369 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
370 fail_unless(eina_value_set(&val, i));
371 fail_unless(eina_model_property_set(m, name, &val));
372 eina_value_flush(&val);
373 }
374
375 for (i = 0; i < 5; i++)
376 {
377 Eina_Value val;
378 Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
379 fail_unless(c != NULL);
380 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
381 fail_unless(eina_value_set(&val, i));
382 fail_unless(eina_model_property_set(c, "x", &val));
383
384 eina_model_event_callback_add
385 (c, "deleted", _eina_test_model_cb_count, &count_del);
386
387 fail_unless(eina_model_child_append(m, c) >= 0);
388 eina_model_unref(c);
389 eina_value_flush(&val);
390 }
391
392 s1 = eina_model_to_string(m);
393 fail_unless(s1 != NULL);
394 ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])");
395
396 cp = eina_model_copy(m);
397 fail_unless(cp != NULL);
398 fail_unless(cp != m);
399
400 eina_model_event_callback_add
401 (cp, "deleted", _eina_test_model_cb_count, &count_del);
402
403 s2 = eina_model_to_string(cp);
404 fail_unless(s2 != NULL);
405 ck_assert_str_eq(s1, s2);
406
407 for (i = 0; i < 5; i++)
408 {
409 Eina_Model *c1 = eina_model_child_get(m, i);
410 Eina_Model *c2 = eina_model_child_get(cp, i);
411
412 fail_unless(c1 != NULL);
413 fail_unless(c1 == c2);
414 ck_assert_int_eq(eina_model_refcount(c1), 4);
415
416 eina_model_unref(c1);
417 eina_model_unref(c2);
418 }
419
420 free(s1);
421 free(s2);
422
423 ck_assert_int_eq(eina_model_refcount(m), 1);
424 eina_model_unref(m);
425
426 ck_assert_int_eq(eina_model_refcount(cp), 1);
427 eina_model_unref(cp);
428
429 ck_assert_int_eq(count_del, 2 + 5);
430
431 eina_shutdown();
432}
433END_TEST
434
435START_TEST(eina_model_test_deep_copy)
436{
437 unsigned int count_del = 0;
438 Eina_Model *m, *cp;
439 char *s1, *s2;
440 int i;
441
442 eina_init();
443
444 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
445 fail_unless(m != NULL);
446
447 eina_model_event_callback_add
448 (m, "deleted", _eina_test_model_cb_count, &count_del);
449
450 for (i = 0; i < 5; i++)
451 {
452 Eina_Value val;
453 char name[2] = {'a'+ i, 0};
454 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
455 fail_unless(eina_value_set(&val, i));
456 fail_unless(eina_model_property_set(m, name, &val));
457 eina_value_flush(&val);
458 }
459
460 for (i = 0; i < 5; i++)
461 {
462 Eina_Value val;
463 Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
464 fail_unless(c != NULL);
465 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
466 fail_unless(eina_value_set(&val, i));
467 fail_unless(eina_model_property_set(c, "x", &val));
468
469 eina_model_event_callback_add
470 (c, "deleted", _eina_test_model_cb_count, &count_del);
471
472 fail_unless(eina_model_child_append(m, c) >= 0);
473 eina_model_unref(c);
474 eina_value_flush(&val);
475 }
476
477 s1 = eina_model_to_string(m);
478 fail_unless(s1 != NULL);
479 ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])");;
480
481 cp = eina_model_deep_copy(m);
482 fail_unless(cp != NULL);
483 fail_unless(cp != m);
484
485 eina_model_event_callback_add
486 (cp, "deleted", _eina_test_model_cb_count, &count_del);
487
488 s2 = eina_model_to_string(cp);
489 fail_unless(s2 != NULL);
490 ck_assert_str_eq(s1, s2);
491
492 for (i = 0; i < 5; i++)
493 {
494 Eina_Model *c1 = eina_model_child_get(m, i);
495 Eina_Model *c2 = eina_model_child_get(cp, i);
496
497 fail_unless(c1 != NULL);
498 fail_unless(c1 != c2);
499 ck_assert_int_eq(eina_model_refcount(c1), 2);
500 ck_assert_int_eq(eina_model_refcount(c2), 2);
501
502 eina_model_event_callback_add
503 (c2, "deleted", _eina_test_model_cb_count, &count_del);
504
505 eina_model_unref(c1);
506 eina_model_unref(c2);
507 }
508
509 free(s1);
510 free(s2);
511
512 ck_assert_int_eq(eina_model_refcount(m), 1);
513 eina_model_unref(m);
514
515 ck_assert_int_eq(eina_model_refcount(cp), 1);
516 eina_model_unref(cp);
517
518 ck_assert_int_eq(count_del, 2 + 10);
519
520 eina_shutdown();
521}
522END_TEST
523
524static Eina_Model *
525eina_model_test_iterator_setup(unsigned int *count_del)
526{
527 Eina_Model *m;
528 int i;
529
530 m = eina_model_new(EINA_MODEL_TYPE_GENERIC);
531 fail_unless(m != NULL);
532
533 eina_model_event_callback_add
534 (m, "deleted", _eina_test_model_cb_count, count_del);
535
536 for (i = 0; i < 5; i++)
537 {
538 Eina_Value val;
539 Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
540 fail_unless(c != NULL);
541 fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT));
542 fail_unless(eina_value_set(&val, i));
543 fail_unless(eina_model_property_set(c, "x", &val));
544
545 eina_model_event_callback_add
546 (c, "deleted", _eina_test_model_cb_count, count_del);
547
548 fail_unless(eina_model_child_append(m, c) >= 0);
549 eina_model_unref(c);
550 eina_value_flush(&val);
551 }
552
553 return m;
554}
555
556START_TEST(eina_model_test_child_iterator)
557{
558 unsigned int count_del = 0;
559 Eina_Iterator *it;
560 Eina_Model *m, *c;
561 int i = 0;
562
563 eina_init();
564
565 m = eina_model_test_iterator_setup(&count_del);
566
567 it = eina_model_child_iterator_get(m);
568 fail_unless(it != NULL);
569 EINA_ITERATOR_FOREACH(it, c)
570 {
571 Eina_Value tmp;
572 int x;
573
574 ck_assert_int_eq(eina_model_refcount(c), 2);
575 fail_unless(eina_model_property_get(c, "x", &tmp));
576 fail_unless(eina_value_get(&tmp, &x));
577 ck_assert_int_eq(x, i);
578
579 eina_model_unref(c);
580 i++;
581 }
582 ck_assert_int_eq(i, 5);
583 eina_iterator_free(it);
584
585 ck_assert_int_eq(eina_model_refcount(m), 1);
586 eina_model_unref(m);
587 ck_assert_int_eq(count_del, 6);
588 eina_shutdown();
589}
590END_TEST
591
592START_TEST(eina_model_test_child_reversed_iterator)
593{
594 unsigned int count_del = 0;
595 Eina_Iterator *it;
596 Eina_Model *m, *c;
597 int i = 4;
598
599 eina_init();
600
601 m = eina_model_test_iterator_setup(&count_del);
602
603 it = eina_model_child_reversed_iterator_get(m);
604 fail_unless(it != NULL);
605 EINA_ITERATOR_FOREACH(it, c)
606 {
607 Eina_Value tmp;
608 int x;
609
610 ck_assert_int_eq(eina_model_refcount(c), 2);
611 fail_unless(eina_model_property_get(c, "x", &tmp));
612 fail_unless(eina_value_get(&tmp, &x));
613 ck_assert_int_eq(x, i);
614
615 eina_model_unref(c);
616 i--;
617 }
618 ck_assert_int_eq(i, -1);
619 eina_iterator_free(it);
620
621 ck_assert_int_eq(eina_model_refcount(m), 1);
622 eina_model_unref(m);
623 ck_assert_int_eq(count_del, 6);
624 eina_shutdown();
625}
626END_TEST
627
628START_TEST(eina_model_test_child_sorted_iterator)
629{
630 unsigned int count_del = 0;
631 Eina_Iterator *it;
632 Eina_Model *m, *c;
633 int i = 4;
634
635 eina_init();
636
637 m = eina_model_test_iterator_setup(&count_del);
638
639 it = eina_model_child_sorted_iterator_get
640 (m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp));
641 fail_unless(it != NULL);
642 EINA_ITERATOR_FOREACH(it, c)
643 {
644 Eina_Value tmp;
645 int x;
646
647 /* 3 because sort takes an extra reference for its temp array */
648 ck_assert_int_eq(eina_model_refcount(c), 3);
649 fail_unless(eina_model_property_get(c, "x", &tmp));
650 fail_unless(eina_value_get(&tmp, &x));
651 ck_assert_int_eq(x, i);
652
653 eina_model_unref(c);
654 i--;
655 }
656 ck_assert_int_eq(i, -1);
657 eina_iterator_free(it);
658
659 it = eina_model_child_sorted_iterator_get
660 (m, EINA_COMPARE_CB(eina_model_compare));
661 fail_unless(it != NULL);
662 i = 0;
663 EINA_ITERATOR_FOREACH(it, c)
664 {
665 Eina_Value tmp;
666 int x;
667
668 /* 3 because sort takes an extra reference for its temp array */
669 ck_assert_int_eq(eina_model_refcount(c), 3);
670 fail_unless(eina_model_property_get(c, "x", &tmp));
671 fail_unless(eina_value_get(&tmp, &x));
672 ck_assert_int_eq(x, i);
673
674 eina_model_unref(c);
675 i++;
676 }
677 ck_assert_int_eq(i, 5);
678 eina_iterator_free(it);
679
680 ck_assert_int_eq(eina_model_refcount(m), 1);
681 eina_model_unref(m);
682 ck_assert_int_eq(count_del, 6);
683 eina_shutdown();
684}
685END_TEST
686
687static Eina_Bool
688eina_model_test_filter_event(const void *m, void *c, void *fdata)
689{
690 Eina_Value tmp;
691 int x;
692 fail_unless(m == fdata);
693 fail_unless(eina_model_property_get(c, "x", &tmp));
694 fail_unless(eina_value_get(&tmp, &x));
695 eina_value_flush(&tmp);
696 return x % 2 == 0;
697}
698
699START_TEST(eina_model_test_child_filtered_iterator)
700{
701 unsigned int count_del = 0;
702 Eina_Iterator *it;
703 Eina_Model *m;
704 int i = 0, idx;
705
706 eina_init();
707
708 m = eina_model_test_iterator_setup(&count_del);
709
710 it = eina_model_child_filtered_iterator_get
711 (m, eina_model_test_filter_event, m);
712 fail_unless(it != NULL);
713 EINA_ITERATOR_FOREACH(it, idx)
714 {
715 Eina_Model *c;
716 Eina_Value tmp;
717 int x;
718
719 ck_assert_int_eq(idx % 2, 0);
720 ck_assert_int_eq(idx, i);
721
722 c = eina_model_child_get(m, idx);
723 fail_unless(c != NULL);
724 ck_assert_int_eq(eina_model_refcount(c), 2);
725 fail_unless(eina_model_property_get(c, "x", &tmp));
726 fail_unless(eina_value_get(&tmp, &x));
727 ck_assert_int_eq(x, i);
728
729 eina_model_unref(c);
730 i += 2;
731 }
732 ck_assert_int_eq(i, 6);
733 eina_iterator_free(it);
734
735 ck_assert_int_eq(eina_model_refcount(m), 1);
736 eina_model_unref(m);
737 ck_assert_int_eq(count_del, 6);
738 eina_shutdown();
739}
740END_TEST
741
742START_TEST(eina_model_test_struct)
743{
744 unsigned int count_del = 0, count_pset = 0, count_pdel = 0;
745 Eina_Model *m;
746 struct myst {
747 int i;
748 char c;
749 };
750 const Eina_Value_Struct_Member myst_members[] = {
751 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, i),
752 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_CHAR, struct myst, c)
753 };
754 const Eina_Value_Struct_Desc myst_desc = {
755 EINA_VALUE_STRUCT_DESC_VERSION,
756 NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst)
757 };
758 Eina_Value inv, outv;
759 int i;
760 char c, *s;
761 Eina_List *lst;
762 Eina_Bool ck;
763
764 eina_init();
765
766 m = eina_model_struct_new(&myst_desc);
767 fail_unless(m != NULL);
768
769 eina_model_event_callback_add
770 (m, "deleted", _eina_test_model_cb_count, &count_del);
771 eina_model_event_callback_add
772 (m, "property,set", _eina_test_model_cb_count, &count_pset);
773 eina_model_event_callback_add
774 (m, "property,deleted", _eina_test_model_cb_count, &count_pdel);
775
776 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
777 fail_unless(eina_value_set(&inv, 1234));
778 fail_unless(eina_value_get(&inv, &i));
779 ck_assert_int_eq(i, 1234);
780 fail_unless(eina_model_property_set(m, "i", &inv));
781
782 eina_value_flush(&inv);
783 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_CHAR));
784 fail_unless(eina_value_set(&inv, 33));
785 fail_unless(eina_value_get(&inv, &c));
786 ck_assert_int_eq(c, 33);
787 fail_unless(eina_model_property_set(m, "c", &inv));
788
789 lst = eina_model_properties_names_list_get(m);
790 ck_assert_int_eq(eina_list_count(lst), 2);
791
792 lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp));
793 ck_assert_str_eq("c", eina_list_nth(lst, 0));
794 ck_assert_str_eq("i", eina_list_nth(lst, 1));
795
796 eina_model_properties_names_list_free(lst);
797
798 fail_unless(eina_model_property_get(m, "i", &outv));
799 fail_unless(outv.type == EINA_VALUE_TYPE_INT);
800 fail_unless(eina_value_get(&outv, &i));
801 ck_assert_int_eq(i, 1234);
802 eina_value_flush(&outv);
803
804 fail_unless(eina_model_property_get(m, "c", &outv));
805 fail_unless(outv.type == EINA_VALUE_TYPE_CHAR);
806 fail_unless(eina_value_get(&outv, &c));
807 ck_assert_int_eq(c, 33);
808 eina_value_flush(&outv);
809
810 eina_value_flush(&inv);
811
812 /* negative test (check safety was displayed by using print_cb) */
813 eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck);
814
815 fail_if(eina_model_property_get(m, "non-existent", &outv));
816
817 ck = EINA_FALSE;
818 fail_if(eina_model_property_get(m, NULL, &outv));
819 fail_unless(ck == EINA_TRUE);
820
821 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING));
822 fail_unless(eina_value_set(&inv, "hello world"));
823
824 eina_log_print_cb_set(_eina_test_model_check_safety_false, &ck);
825
826 ck = EINA_FALSE;
827 fail_if(eina_model_property_set(m, "i", &inv));
828 fail_unless(ck == EINA_TRUE);
829
830 ck = EINA_FALSE;
831 fail_if(eina_model_property_set(m, "c", &inv));
832 fail_unless(ck == EINA_TRUE);
833
834 /* revert print_cb to default */
835 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
836
837 fail_if(eina_model_property_del(m, "value"));
838 fail_if(eina_model_property_del(m, "i"));
839 fail_if(eina_model_property_del(m, "c"));
840
841 eina_value_flush(&inv);
842
843 s = eina_model_to_string(m);
844 fail_unless(s != NULL);
845 ck_assert_str_eq(s, "Eina_Model_Type_Struct({c: 33, i: 1234}, [])");
846 free(s);
847
848 ck_assert_int_eq(eina_model_refcount(m), 1);
849
850 eina_model_unref(m);
851 ck_assert_int_eq(count_del, 1);
852 ck_assert_int_eq(count_pset, 2);
853 ck_assert_int_eq(count_pdel, 0);
854 eina_shutdown();
855}
856END_TEST
857
858static Eina_Bool
859_struct_complex_members_constructor(Eina_Model *m)
860{
861 struct myst {
862 Eina_Value_Array a;
863 Eina_Value_List l;
864 Eina_Value_Hash h;
865 Eina_Value_Struct s;
866 } st;
867 struct subst {
868 int i, j;
869 };
870 static Eina_Value_Struct_Member myst_members[] = {
871 EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, a),
872 EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, l),
873 EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, h),
874 EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, s)
875 };
876 static Eina_Value_Struct_Desc myst_desc = {
877 EINA_VALUE_STRUCT_DESC_VERSION,
878 NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst)
879 };
880 static Eina_Value_Struct_Member subst_members[] = {
881 EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, i),
882 EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, j)
883 };
884 static Eina_Value_Struct_Desc subst_desc = {
885 EINA_VALUE_STRUCT_DESC_VERSION,
886 NULL, subst_members, EINA_C_ARRAY_LENGTH(subst_members),
887 sizeof(struct subst)
888 };
889
890 if (!myst_members[0].type)
891 {
892 myst_members[0].type = EINA_VALUE_TYPE_ARRAY;
893 myst_members[1].type = EINA_VALUE_TYPE_LIST;
894 myst_members[2].type = EINA_VALUE_TYPE_HASH;
895 myst_members[3].type = EINA_VALUE_TYPE_STRUCT;
896 }
897
898 if (!subst_members[0].type)
899 {
900 subst_members[0].type = EINA_VALUE_TYPE_INT;
901 subst_members[1].type = EINA_VALUE_TYPE_INT;
902 }
903
904 if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, m))
905 return EINA_FALSE;
906
907 memset(&st, 0, sizeof(st));
908
909 st.a.subtype = EINA_VALUE_TYPE_STRING;
910 st.l.subtype = EINA_VALUE_TYPE_STRING;
911 st.h.subtype = EINA_VALUE_TYPE_STRING;
912 st.s.desc = &subst_desc;
913 if (!eina_model_struct_set(m, &myst_desc, &st))
914 return EINA_FALSE;
915
916 return EINA_TRUE;
917}
918
919START_TEST(eina_model_test_struct_complex_members)
920{
921 Eina_Model *m;
922 Eina_Value outv;
923 char *s;
924 Eina_Model_Type type = EINA_MODEL_TYPE_INIT_NOPRIVATE
925 ("struct_complex_members", Eina_Model_Type, NULL, NULL, NULL);
926
927 eina_init();
928
929 type.constructor = _struct_complex_members_constructor;
930 type.parent = EINA_MODEL_TYPE_STRUCT;
931
932 m = eina_model_new(&type);
933 fail_unless(m != NULL);
934
935 fail_unless(eina_model_property_get(m, "a", &outv));
936 fail_unless(eina_value_array_append(&outv, "Hello"));
937 fail_unless(eina_value_array_append(&outv, "World"));
938 fail_unless(eina_model_property_set(m, "a", &outv));
939 eina_value_flush(&outv);
940
941 fail_unless(eina_model_property_get(m, "l", &outv));
942 fail_unless(eina_value_list_append(&outv, "Some"));
943 fail_unless(eina_value_list_append(&outv, "Thing"));
944 fail_unless(eina_model_property_set(m, "l", &outv));
945 eina_value_flush(&outv);
946
947 fail_unless(eina_model_property_get(m, "h", &outv));
948 fail_unless(eina_value_hash_set(&outv, "key", "value"));
949 fail_unless(eina_model_property_set(m, "h", &outv));
950 eina_value_flush(&outv);
951
952 fail_unless(eina_model_property_get(m, "s", &outv));
953 fail_unless(eina_value_struct_set(&outv, "i", 1234));
954 fail_unless(eina_value_struct_set(&outv, "j", 44));
955 fail_unless(eina_model_property_set(m, "s", &outv));
956 eina_value_flush(&outv);
957
958 s = eina_model_to_string(m);
959 fail_unless(s != NULL);
960 ck_assert_str_eq(s, "struct_complex_members({a: [Hello, World], h: {key: value}, l: [Some, Thing], s: {i: 1234, j: 44}}, [])");
961 free(s);
962
963 ck_assert_int_eq(eina_model_refcount(m), 1);
964
965 eina_model_unref(m);
966 eina_shutdown();
967}
968END_TEST
969
970typedef struct _Animal_Type
971{
972 Eina_Model_Type parent_class;
973 void (*eat)(Eina_Model *mdl);
974} Animal_Type;
975
976typedef struct _Human_Type
977{
978 Animal_Type parent_class;
979 void (*talk)(Eina_Model *mdl);
980} Human_Type;
981
982typedef struct _Pooper_Interface
983{
984 Eina_Model_Interface base_interface;
985 void (*poop)(Eina_Model *mdl);
986} Pooper_Interface;
987
988#define ANIMAL_TYPE(x) ((Animal_Type *) x)
989#define HUMAN_TYPE(x) ((Human_Type *) x)
990#define POOPER_IFACE(x) ((Pooper_Interface *) x)
991#define POOPER_IFACE_NAME "Pooper_Interace"
992
993#define INHER_CB_COUNT(prefix) \
994static int prefix ## _count = 0; \
995static void \
996prefix (Eina_Model *mdl) \
997{ \
998 (void) mdl; \
999 (prefix ## _count)++; \
1000}
1001
1002static void
1003animal_eat(Eina_Model *mdl)
1004{
1005 void (*pf)(Eina_Model *mdl);
1006 pf = eina_model_method_resolve(mdl, Animal_Type, eat);
1007 EINA_SAFETY_ON_NULL_RETURN(pf);
1008 pf(mdl);
1009}
1010
1011static void
1012pooper_poop(Eina_Model *mdl)
1013{
1014 const Eina_Model_Interface *iface = NULL;
1015 iface = eina_model_interface_get(mdl, POOPER_IFACE_NAME);
1016
1017 EINA_SAFETY_ON_NULL_RETURN(iface);
1018
1019 void (*pf)(Eina_Model *);
1020
1021 pf = eina_model_interface_method_resolve(iface, mdl, Pooper_Interface, poop);
1022 EINA_SAFETY_ON_NULL_RETURN(pf);
1023 pf(mdl);
1024}
1025
1026INHER_CB_COUNT(_animal_poop);
1027INHER_CB_COUNT(_human_poop);
1028INHER_CB_COUNT(_animal_eat);
1029INHER_CB_COUNT(_human_eat);
1030
1031START_TEST(eina_model_test_inheritance)
1032{
1033 eina_init();
1034
1035 Pooper_Interface _ANIMAL_POOPER_IFACE;
1036 Eina_Model_Interface *ANIMAL_POOPER_IFACE = (Eina_Model_Interface *) &_ANIMAL_POOPER_IFACE;
1037 memset(&_ANIMAL_POOPER_IFACE, 0, sizeof(_ANIMAL_POOPER_IFACE));
1038 ANIMAL_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION;
1039 ANIMAL_POOPER_IFACE->interface_size = sizeof(Pooper_Interface);
1040 ANIMAL_POOPER_IFACE->name = POOPER_IFACE_NAME;
1041 POOPER_IFACE(ANIMAL_POOPER_IFACE)->poop = _animal_poop;
1042
1043 Pooper_Interface _HUMAN_POOPER_IFACE;
1044 Eina_Model_Interface *HUMAN_POOPER_IFACE = (Eina_Model_Interface *) &_HUMAN_POOPER_IFACE;
1045 const Eina_Model_Interface *HUMAN_POOPER_IFACES[] = {
1046 ANIMAL_POOPER_IFACE, NULL
1047 };
1048 memset(&_HUMAN_POOPER_IFACE, 0, sizeof(_HUMAN_POOPER_IFACE));
1049 HUMAN_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION;
1050 HUMAN_POOPER_IFACE->interface_size = sizeof(Pooper_Interface);
1051 HUMAN_POOPER_IFACE->name = POOPER_IFACE_NAME;
1052 HUMAN_POOPER_IFACE->interfaces = HUMAN_POOPER_IFACES;
1053 POOPER_IFACE(HUMAN_POOPER_IFACE)->poop = _human_poop;
1054
1055 const Eina_Model_Interface *ANIMAL_IFACES[] = {ANIMAL_POOPER_IFACE, NULL};
1056 const Eina_Model_Interface *HUMAN_IFACES[] = {HUMAN_POOPER_IFACE, NULL};
1057
1058 /* Init Animal Type */
1059 Animal_Type _ANIMAL_TYPE;
1060 Eina_Model_Type *ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE;
1061
1062 memset(&_ANIMAL_TYPE, 0, sizeof(_ANIMAL_TYPE));
1063 Eina_Model_Type *type = (Eina_Model_Type *) &_ANIMAL_TYPE;
1064 type->version = EINA_MODEL_TYPE_VERSION;
1065 type->parent = EINA_MODEL_TYPE_BASE;
1066 type->type_size = sizeof(Animal_Type);
1067 type->name = "Animal_Type";
1068 type->parent = EINA_MODEL_TYPE_GENERIC;
1069 type->interfaces = ANIMAL_IFACES;
1070
1071 ANIMAL_TYPE(type)->eat = _animal_eat;
1072
1073 /* Init Human Type */
1074 Animal_Type _HUMAN_TYPE;
1075 Eina_Model_Type *HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE;
1076 memset(&_HUMAN_TYPE, 0, sizeof(_HUMAN_TYPE));
1077 type = (Eina_Model_Type *) &_HUMAN_TYPE;
1078 type->version = EINA_MODEL_TYPE_VERSION;
1079 type->parent = ANIMAL_TYPE;
1080 type->type_size = sizeof(Human_Type);
1081 type->name = "Human_Type";
1082 type->interfaces = HUMAN_IFACES;
1083
1084 ANIMAL_TYPE(type)->eat = _human_eat;
1085
1086 Eina_Model *hm, *am;
1087 am = eina_model_new(ANIMAL_TYPE);
1088 hm = eina_model_new(HUMAN_TYPE);
1089
1090 animal_eat(am);
1091 ck_assert_int_eq(_animal_eat_count, 1);
1092 animal_eat(hm);
1093 ck_assert_int_eq(_human_eat_count, 1);
1094
1095 pooper_poop(am);
1096 ck_assert_int_eq(_animal_poop_count, 1);
1097 pooper_poop(hm);
1098 ck_assert_int_eq(_human_poop_count, 1);
1099
1100 ck_assert_int_eq(_animal_eat_count, 1);
1101 ck_assert_int_eq(_human_eat_count, 1);
1102 ck_assert_int_eq(_animal_poop_count, 1);
1103 ck_assert_int_eq(_human_poop_count, 1);
1104
1105 ck_assert_int_eq(eina_model_refcount(am), 1);
1106 ck_assert_int_eq(eina_model_refcount(hm), 1);
1107
1108 eina_model_unref(am);
1109 eina_model_unref(hm);
1110
1111 eina_shutdown();
1112}
1113END_TEST
1114
1115static Eina_Bool
1116_myproperties_load(Eina_Model *m)
1117{
1118 Eina_Value v;
1119 Eina_Bool ret;
1120 int count;
1121
1122 if (!eina_model_property_get(m, "load_count", &v))
1123 return EINA_FALSE;
1124
1125 eina_value_get(&v, &count);
1126 count++;
1127 eina_value_set(&v, count);
1128
1129 ret = eina_model_property_set(m, "load_count", &v);
1130 eina_value_flush(&v);
1131
1132 return ret;
1133}
1134
1135static Eina_Bool
1136_myproperties_unload(Eina_Model *m)
1137{
1138 Eina_Value v;
1139 Eina_Bool ret;
1140 int count;
1141
1142 if (!eina_model_property_get(m, "load_count", &v))
1143 return EINA_FALSE;
1144
1145 eina_value_get(&v, &count);
1146 count--;
1147 eina_value_set(&v, count);
1148
1149 ret = eina_model_property_set(m, "load_count", &v);
1150 eina_value_flush(&v);
1151
1152 return ret;
1153}
1154
1155static Eina_Bool
1156_mychildren_load(Eina_Model *m)
1157{
1158 Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC);
1159 int ret = eina_model_child_append(m, c);
1160 eina_model_unref(c);
1161 return ret >= 0;
1162}
1163
1164static Eina_Bool
1165_mychildren_unload(Eina_Model *m)
1166{
1167 int count = eina_model_child_count(m);
1168 EINA_SAFETY_ON_FALSE_RETURN_VAL(count > 0, EINA_FALSE);
1169 return eina_model_child_del(m, count - 1);
1170}
1171
1172START_TEST(eina_model_test_ifaces_load_unload)
1173{
1174 unsigned int count_loaded = 0, count_unloaded = 0;
1175 unsigned int count_ploaded = 0, count_punloaded = 0;
1176 unsigned int count_cloaded = 0, count_cunloaded = 0;
1177 static Eina_Model_Interface_Properties piface;
1178 static Eina_Model_Interface_Children ciface;
1179 static const Eina_Model_Interface *piface_parents[2] = {NULL, NULL};
1180 static const Eina_Model_Interface *ciface_parents[2] = {NULL, NULL};
1181 static const Eina_Model_Interface *type_ifaces[3] = {
1182 &piface.base, &ciface.base, NULL
1183 };
1184 static Eina_Model_Type type;
1185 Eina_Model *m;
1186 Eina_Value v;
1187 int count;
1188
1189 eina_init();
1190
1191 /* do after eina_init() otherwise interfaces are not set */
1192 piface_parents[0] = EINA_MODEL_INTERFACE_PROPERTIES_HASH;
1193 ciface_parents[0] = EINA_MODEL_INTERFACE_CHILDREN_INARRAY;
1194
1195 memset(&piface, 0, sizeof(piface));
1196 piface.base.version = EINA_MODEL_INTERFACE_VERSION;
1197 piface.base.interface_size = sizeof(piface);
1198 piface.base.name = EINA_MODEL_INTERFACE_NAME_PROPERTIES;
1199 piface.base.interfaces = piface_parents;
1200 piface.load = _myproperties_load;
1201 piface.unload = _myproperties_unload;
1202
1203 memset(&ciface, 0, sizeof(ciface));
1204 ciface.base.version = EINA_MODEL_INTERFACE_VERSION;
1205 ciface.base.interface_size = sizeof(ciface);
1206 ciface.base.name = EINA_MODEL_INTERFACE_NAME_CHILDREN;
1207 ciface.base.interfaces = ciface_parents;
1208 ciface.load = _mychildren_load;
1209 ciface.unload = _mychildren_unload;
1210
1211 type.version = EINA_MODEL_TYPE_VERSION;
1212 type.private_size = 0;
1213 type.name = "MyType";
1214 eina_model_type_subclass_setup(&type, EINA_MODEL_TYPE_GENERIC);
1215 type.interfaces = type_ifaces;
1216
1217 m = eina_model_new(&type);
1218 fail_unless(m != NULL);
1219
1220 eina_model_event_callback_add
1221 (m, "loaded", _eina_test_model_cb_count, &count_loaded);
1222 eina_model_event_callback_add
1223 (m, "unloaded", _eina_test_model_cb_count, &count_unloaded);
1224
1225 eina_model_event_callback_add
1226 (m, "properties,loaded", _eina_test_model_cb_count, &count_ploaded);
1227 eina_model_event_callback_add
1228 (m, "properties,unloaded", _eina_test_model_cb_count, &count_punloaded);
1229
1230 eina_model_event_callback_add
1231 (m, "children,loaded", _eina_test_model_cb_count, &count_cloaded);
1232 eina_model_event_callback_add
1233 (m, "children,unloaded", _eina_test_model_cb_count, &count_cunloaded);
1234
1235 fail_unless(eina_value_setup(&v, EINA_VALUE_TYPE_INT));
1236 fail_unless(eina_value_set(&v, 0));
1237 fail_unless(eina_model_property_set(m, "load_count", &v));
1238 eina_value_flush(&v);
1239
1240 fail_unless(eina_model_load(m));
1241 fail_unless(eina_model_load(m));
1242 fail_unless(eina_model_load(m));
1243
1244 /* each load increments one for load_count property */
1245 fail_unless(eina_model_property_get(m, "load_count", &v));
1246 fail_unless(eina_value_pget(&v, &count));
1247 ck_assert_int_eq(count, 3);
1248 eina_value_flush(&v);
1249
1250 /* each load adds one child */
1251 ck_assert_int_eq(eina_model_child_count(m), 3);
1252
1253 fail_unless(eina_model_unload(m));
1254 fail_unless(eina_model_unload(m));
1255 fail_unless(eina_model_unload(m));
1256
1257 ck_assert_int_eq(count_loaded, 3);
1258 ck_assert_int_eq(count_unloaded, 3);
1259
1260 ck_assert_int_eq(count_ploaded, 3);
1261 ck_assert_int_eq(count_punloaded, 3);
1262
1263 ck_assert_int_eq(count_cloaded, 3);
1264 ck_assert_int_eq(count_cunloaded, 3);
1265
1266 ck_assert_int_eq(eina_model_refcount(m), 1);
1267 eina_model_unref(m);
1268
1269 eina_shutdown();
1270}
1271END_TEST
1272
1273void
1274eina_test_model(TCase *tc)
1275{
1276 tcase_add_test(tc, eina_model_test_properties);
1277 tcase_add_test(tc, eina_model_test_children);
1278 tcase_add_test(tc, eina_model_test_copy);
1279 tcase_add_test(tc, eina_model_test_deep_copy);
1280 tcase_add_test(tc, eina_model_test_child_iterator);
1281 tcase_add_test(tc, eina_model_test_child_reversed_iterator);
1282 tcase_add_test(tc, eina_model_test_child_sorted_iterator);
1283 tcase_add_test(tc, eina_model_test_child_filtered_iterator);
1284 tcase_add_test(tc, eina_model_test_struct);
1285 tcase_add_test(tc, eina_model_test_struct_complex_members);
1286 tcase_add_test(tc, eina_model_test_inheritance);
1287 tcase_add_test(tc, eina_model_test_ifaces_load_unload);
1288}
diff --git a/libraries/eina/src/tests/eina_test_module.c b/libraries/eina/src/tests/eina_test_module.c
deleted file mode 100644
index 56bdca7..0000000
--- a/libraries/eina/src/tests/eina_test_module.c
+++ /dev/null
@@ -1,70 +0,0 @@
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
deleted file mode 100644
index d42b530..0000000
--- a/libraries/eina/src/tests/eina_test_module_dummy.c
+++ /dev/null
@@ -1,22 +0,0 @@
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
deleted file mode 100644
index 52faeec..0000000
--- a/libraries/eina/src/tests/eina_test_quadtree.c
+++ /dev/null
@@ -1,195 +0,0 @@
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
deleted file mode 100644
index fabe2bf..0000000
--- a/libraries/eina/src/tests/eina_test_rbtree.c
+++ /dev/null
@@ -1,452 +0,0 @@
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
deleted file mode 100644
index 581ab76..0000000
--- a/libraries/eina/src/tests/eina_test_rectangle.c
+++ /dev/null
@@ -1,115 +0,0 @@
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
deleted file mode 100644
index ff83a7e..0000000
--- a/libraries/eina/src/tests/eina_test_sched.c
+++ /dev/null
@@ -1,85 +0,0 @@
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
deleted file mode 100644
index 7093019..0000000
--- a/libraries/eina/src/tests/eina_test_simple_xml_parser.c
+++ /dev/null
@@ -1,75 +0,0 @@
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 + 1);
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 buf[sz] = '\0';
55 char *out = eina_simple_xml_node_dump(&root->base, " ");
56 //puts(out);
57 ck_assert_str_eq(out, buf);
58 free(out);
59 eina_simple_xml_node_root_free(root);
60 free(buf);
61 }
62 }
63 }
64 fclose(f);
65 }
66
67 eina_shutdown();
68}
69END_TEST
70
71void
72eina_test_simple_xml_parser(TCase *tc)
73{
74 tcase_add_test(tc, eina_simple_xml_parser_node_dump);
75}
diff --git a/libraries/eina/src/tests/eina_test_str.c b/libraries/eina/src/tests/eina_test_str.c
deleted file mode 100644
index f0ea291..0000000
--- a/libraries/eina/src/tests/eina_test_str.c
+++ /dev/null
@@ -1,181 +0,0 @@
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
deleted file mode 100644
index 2205e3e..0000000
--- a/libraries/eina/src/tests/eina_test_strbuf.c
+++ /dev/null
@@ -1,449 +0,0 @@
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
deleted file mode 100644
index 0d34aec..0000000
--- a/libraries/eina/src/tests/eina_test_stringshare.c
+++ /dev/null
@@ -1,201 +0,0 @@
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
deleted file mode 100644
index f1ef8f0..0000000
--- a/libraries/eina/src/tests/eina_test_tiler.c
+++ /dev/null
@@ -1,184 +0,0 @@
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
deleted file mode 100644
index 75126cc..0000000
--- a/libraries/eina/src/tests/eina_test_ustr.c
+++ /dev/null
@@ -1,593 +0,0 @@
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
31#ifdef EINA_SAFETY_CHECKS
32struct log_ctx {
33 const char *msg;
34 const char *fnc;
35 Eina_Bool did;
36};
37
38/* tests should not output on success, just uncomment this for debugging */
39//#define SHOW_LOG 1
40
41static void
42_eina_test_safety_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args __UNUSED__)
43{
44 struct log_ctx *ctx = data;
45 va_list cp_args;
46 const char *str;
47
48 va_copy(cp_args, args);
49 str = va_arg(cp_args, const char *);
50 va_end(cp_args);
51
52 ck_assert_int_eq(level, EINA_LOG_LEVEL_ERR);
53 ck_assert_str_eq(fmt, "%s");
54 ck_assert_str_eq(ctx->msg, str);
55 ck_assert_str_eq(ctx->fnc, fnc);
56 ctx->did = EINA_TRUE;
57
58#ifdef SHOW_LOG
59 eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args);
60#else
61 (void)d;
62 (void)file;
63 (void)line;
64#endif
65}
66#endif
67
68static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
69static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0};
70static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
71static const Eina_Unicode STR4[] = {'A', 0};
72static const Eina_Unicode EMPTYSTR[] = {0};
73
74START_TEST(eina_unicode_strcmp_test)
75{
76 eina_init();
77
78 /* 1 & 2 */
79 fail_if(eina_unicode_strcmp(STR1,STR2) == 0);
80 fail_if(eina_unicode_strcmp(STR1,STR2) < 1);
81
82 /* 1 & 3 */
83 fail_if(eina_unicode_strcmp(STR1, STR3) != 0);
84
85 /* 1 & 4 */
86 fail_if(eina_unicode_strcmp(STR1, STR4) == 0);
87 fail_if(eina_unicode_strcmp(STR1, STR4) > 1);
88
89 /* 1 & empty */
90 fail_if(eina_unicode_strcmp(STR1, EMPTYSTR) < 1);
91
92 /* Self tests */
93 fail_if(eina_unicode_strcmp(STR1, STR1) != 0);
94 fail_if(eina_unicode_strcmp(STR2, STR2) != 0);
95 fail_if(eina_unicode_strcmp(STR3, STR3) != 0);
96 fail_if(eina_unicode_strcmp(STR4, STR4) != 0);
97 fail_if(eina_unicode_strcmp(EMPTYSTR, EMPTYSTR) != 0);
98
99 eina_shutdown();
100}
101END_TEST
102
103START_TEST(eina_unicode_strcpy_test)
104{
105 Eina_Unicode buf[10] = { 0 };
106 Eina_Unicode *rv;
107
108 eina_init();
109
110 rv = eina_unicode_strcpy(buf,STR1);
111 fail_if(rv != buf);
112 fail_if(eina_unicode_strcmp(buf,STR1) != 0);
113
114 rv = eina_unicode_strcpy(buf,STR2);
115 fail_if(rv != buf);
116 fail_if(eina_unicode_strcmp(buf,STR2) != 0);
117
118 /* Now a shorter string */
119 rv = eina_unicode_strcpy(buf,STR2);
120 fail_if(rv != buf);
121 fail_if(eina_unicode_strcmp(buf,STR2) != 0);
122
123 /* Really short string */
124 rv = eina_unicode_strcpy(buf,STR4);
125 fail_if(rv != buf);
126 fail_if(eina_unicode_strcmp(buf,STR4) != 0);
127 fail_if(buf[2] != 'n'); /* check old buf is there */
128
129 buf[1] = '7';
130 rv = eina_unicode_strcpy(buf,EMPTYSTR);
131 fail_if(rv != buf);
132 fail_if(buf[0] != 0);
133 fail_if(buf[1] != '7');
134
135 eina_shutdown();
136}
137END_TEST
138
139START_TEST(eina_unicode_strncpy_test)
140{
141 Eina_Unicode buf[10] = { 0 };
142 Eina_Unicode *rv;
143
144 eina_init();
145
146 rv = eina_unicode_strncpy(buf,STR1,9);
147 fail_if(rv != buf);
148 fail_if(eina_unicode_strcmp(buf,STR1) != 0);
149
150 buf[1] = '7';
151 rv = eina_unicode_strncpy(buf,STR1,1);
152 fail_if(rv != buf);
153 fail_if(buf[1] != '7');
154 fail_if(buf[0] != STR1[0]);
155
156 buf[9] = '7';
157 rv = eina_unicode_strncpy(buf, STR4, 10);
158 fail_if(rv != buf);
159 fail_if(eina_unicode_strcmp(buf,STR4) != 0);
160 fail_if(buf[9] != 0);
161
162 buf[0] = '7';
163 rv = eina_unicode_strncpy(buf, STR1, 0);
164 fail_if(buf[0] != '7');
165
166#ifdef EINA_SAFETY_CHECKS
167 {
168 struct log_ctx ctx;
169
170#define TEST_MAGIC_SAFETY(fn, _msg) \
171 ctx.msg = _msg; \
172 ctx.fnc = fn; \
173 ctx.did = EINA_FALSE
174
175 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
176
177 /* may segfault */
178 buf[0] = '7';
179#ifdef SHOW_LOG
180 fprintf(stderr, "you should have a safety check failure below:\n");
181#endif
182 TEST_MAGIC_SAFETY("eina_unicode_strncpy",
183 "safety check failed: source == NULL");
184 rv = eina_unicode_strncpy(buf, NULL, 0);
185 fail_if(buf[0] != '7');
186 fail_unless(ctx.did);
187
188 /* Hopefully won't segfault */
189#ifdef SHOW_LOG
190 fprintf(stderr, "you should have a safety check failure below:\n");
191#endif
192 TEST_MAGIC_SAFETY("eina_unicode_strncpy",
193 "safety check failed: dest == NULL");
194 rv = eina_unicode_strncpy(NULL, STR1, 0);
195 fail_if(rv != NULL);
196 fail_unless(ctx.did);
197
198 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
199#undef TEST_MAGIC_SAFETY
200 }
201#endif
202
203 eina_shutdown();
204}
205END_TEST
206
207
208
209START_TEST(eina_ustr_strlen_test)
210{
211
212 eina_init();
213
214 fail_if(eina_unicode_strlen(STR1) != 8);
215 fail_if(eina_unicode_strlen(STR2) != 9);
216 fail_if(eina_unicode_strlen(STR3) != 8);
217 fail_if(eina_unicode_strlen(STR4) != 1);
218 fail_if(eina_unicode_strlen(EMPTYSTR) != 0);
219
220#ifdef EINA_SAFETY_CHECKS
221 {
222 struct log_ctx ctx;
223
224#define TEST_MAGIC_SAFETY(fn, _msg) \
225 ctx.msg = _msg; \
226 ctx.fnc = fn; \
227 ctx.did = EINA_FALSE
228
229 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
230
231#ifdef SHOW_LOG
232 fprintf(stderr, "you should have a safety check failure below:\n");
233#endif
234 TEST_MAGIC_SAFETY("eina_unicode_strlen",
235 "safety check failed: ustr == NULL");
236 fail_if(eina_unicode_strlen(NULL));
237 fail_unless(ctx.did);
238
239 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
240#undef TEST_MAGIC_SAFETY
241 }
242#endif
243
244 eina_shutdown();
245}
246END_TEST
247
248START_TEST(eina_unicode_strnlen_test)
249{
250 eina_init();
251
252 /* Strlen style tests*/
253 fail_if(eina_unicode_strnlen(STR1,10) != 8);
254 fail_if(eina_unicode_strnlen(STR2,10) != 9);
255 fail_if(eina_unicode_strnlen(STR3,10) != 8);
256 fail_if(eina_unicode_strnlen(STR4,10) != 1);
257 fail_if(eina_unicode_strnlen(EMPTYSTR,10) != 0);
258
259 /* Too short tests */
260 fail_if(eina_unicode_strnlen(STR1,3) != 3);
261 fail_if(eina_unicode_strnlen(STR2,3) != 3);
262 fail_if(eina_unicode_strnlen(STR3,3) != 3);
263 fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0);
264
265#ifdef EINA_SAFETY_CHECKS
266 {
267 struct log_ctx ctx;
268
269#define TEST_MAGIC_SAFETY(fn, _msg) \
270 ctx.msg = _msg; \
271 ctx.fnc = fn; \
272 ctx.did = EINA_FALSE
273
274 eina_log_print_cb_set(_eina_test_safety_print_cb, &ctx);
275
276#ifdef SHOW_LOG
277 fprintf(stderr, "you should have a safety check failure below:\n");
278#endif
279 TEST_MAGIC_SAFETY("eina_unicode_strnlen",
280 "safety check failed: ustr == NULL");
281 fail_if(eina_unicode_strnlen(NULL,0) != 0);
282 fail_unless(ctx.did);
283
284 eina_log_print_cb_set(eina_log_print_cb_stderr, NULL);
285#undef TEST_MAGIC_SAFETY
286 }
287#endif
288
289 eina_shutdown();
290}
291END_TEST
292
293START_TEST(eina_unicode_strdup_test)
294{
295 Eina_Unicode *buf;
296
297 eina_init();
298
299 buf = eina_unicode_strdup(STR1);
300 fail_if(!buf);
301 fail_if(eina_unicode_strlen(buf) != eina_unicode_strlen(STR1));
302 fail_if(eina_unicode_strcmp(buf, STR1));
303 free(buf);
304
305 buf = eina_unicode_strdup(EMPTYSTR);
306 fail_if(!buf);
307 fail_if(buf[0] != 0);
308
309 eina_shutdown();
310}
311END_TEST
312
313START_TEST(eina_unicode_strstr_test)
314{
315 Eina_Unicode *buf;
316 Eina_Unicode on[] = { 'O', 'n', 0 };
317
318 eina_init();
319
320 buf = eina_unicode_strstr(STR1,on);
321 fail_if(!buf);
322 fail_if(buf != STR1 + 6);
323 fail_if(eina_unicode_strcmp(buf,on) != 0);
324
325 buf = eina_unicode_strstr(STR2,on);
326 fail_if(buf);
327
328 buf = eina_unicode_strstr(EMPTYSTR, on);
329 fail_if(buf);
330
331 buf = eina_unicode_strstr(STR1, EMPTYSTR);
332 fail_if(!buf);
333 fail_if(buf != STR1);
334
335 eina_shutdown();
336}
337END_TEST
338
339START_TEST(eina_unicode_utf8)
340{
341 int ind;
342 unsigned char ch;
343 eina_init();
344
345 /* Valid utf-8 cases */
346 /* First possible sequence of a certain length */
347 ind = 0;
348 fail_if((eina_unicode_utf8_get_next("\x00", &ind) != 0x00) ||
349 (ind != 0));
350 ind = 0;
351 fail_if((eina_unicode_utf8_get_next("\x01", &ind) != 0x01) ||
352 (ind != 1));
353 ind = 0;
354 fail_if((eina_unicode_utf8_get_next("\xC2\x80", &ind) != 0x80) ||
355 (ind != 2));
356 ind = 0;
357 fail_if((eina_unicode_utf8_get_next("\xE0\xA0\x80", &ind) != 0x800) ||
358 (ind != 3));
359 ind = 0;
360 fail_if((eina_unicode_utf8_get_next("\xF0\x90\x80\x80", &ind) != 0x10000) ||
361 (ind != 4));
362 ind = 0;
363 fail_if((eina_unicode_utf8_get_next("\xF8\x88\x80\x80\x80", &ind) != 0x200000) || (ind != 5));
364 ind = 0;
365 fail_if((eina_unicode_utf8_get_next("\xFC\x84\x80\x80\x80\x80", &ind) != 0x4000000) || (ind != 6));
366
367 /* Last possible sequence of a certain length */
368 ind = 0;
369 fail_if((eina_unicode_utf8_get_next("\x7F", &ind) != 0x7F) ||
370 (ind != 1));
371 ind = 0;
372 fail_if((eina_unicode_utf8_get_next("\xDF\xBF", &ind) != 0x7FF) ||
373 (ind != 2));
374 ind = 0;
375 fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBF", &ind) != 0xFFFF) ||
376 (ind != 3));
377 ind = 0;
378 fail_if((eina_unicode_utf8_get_next("\xF7\xBF\xBF\xBF", &ind) != 0x1FFFFF) ||
379 (ind != 4));
380 ind = 0;
381 fail_if((eina_unicode_utf8_get_next("\xFB\xBF\xBF\xBF\xBF", &ind) != 0x3FFFFFF) || (ind != 5));
382 ind = 0;
383 fail_if((eina_unicode_utf8_get_next("\xFD\xBF\xBF\xBF\xBF\xBF", &ind) != 0x7FFFFFFF) || (ind != 6));
384
385 /* Other boundary conditions */
386 ind = 0;
387 fail_if((eina_unicode_utf8_get_next("\xED\x9F\xBF", &ind) != 0xD7FF) ||
388 (ind != 3));
389 ind = 0;
390 fail_if((eina_unicode_utf8_get_next("\xEE\x80\x80", &ind) != 0xE000) ||
391 (ind != 3));
392 ind = 0;
393 fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBD", &ind) != 0xFFFD) ||
394 (ind != 3));
395 ind = 0;
396 fail_if((eina_unicode_utf8_get_next("\xF4\x8F\xBF\xBF", &ind) != 0x10FFFF) ||
397 (ind != 4));
398 ind = 0;
399 fail_if((eina_unicode_utf8_get_next("\xF4\x90\x80\x80", &ind) != 0x110000) ||
400 (ind != 4));
401
402 /* Error cases */
403 /* Standalone continuation bytes */
404 ind = 0;
405 fail_if((eina_unicode_utf8_get_next("\x80", &ind) != 0xDC80) ||
406 (ind != 1));
407 ind = 0;
408 fail_if((eina_unicode_utf8_get_next("\xBF", &ind) != 0xDCBF) ||
409 (ind != 1));
410 ind = 0;
411 fail_if((eina_unicode_utf8_get_next("\x80\xBF", &ind) != 0xDC80) ||
412 (ind != 1));
413 ind = 0;
414 fail_if((eina_unicode_utf8_get_next("\xBF\x80", &ind) != 0xDCBF) ||
415 (ind != 1));
416 /* All possible continuation bytes */
417 for (ch = 0x80 ; ch <= 0xBF ; ch++)
418 {
419 char buf[] = {ch, 0};
420 ind = 0;
421 fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) ||
422 (ind != 1));
423 }
424
425 /* Isolated starting sequences */
426#define _FIRST_SEQUENCES(start, end) \
427 do \
428 { \
429 int i; \
430 char *buf = alloca(((end - start + 1) * 2) + 1); \
431 for (i = 0, ch = start ; ch <= end ; i++, ch++) \
432 { \
433 buf[i * 2] = ch; \
434 buf[(i * 2) + 1] = ' '; \
435 } \
436 ind = 0; \
437 for (i = 0, ch = start ; ch <= end ; ch++) \
438 { \
439 fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) || \
440 (ind != ++i)); \
441 fail_if((eina_unicode_utf8_get_next(buf, &ind) != 0x20) || \
442 (ind != ++i)); \
443 } \
444 } \
445 while (0)
446 /* all first bytes of 2-byte sequences separated by spaces. */
447 _FIRST_SEQUENCES(0xC0, 0xDF);
448 /* all first bytes of 3-byte sequences separated by spaces. */
449 _FIRST_SEQUENCES(0xE0, 0xEF);
450 /* all first bytes of 4-byte sequences separated by spaces. */
451 _FIRST_SEQUENCES(0xF0, 0xF7);
452 /* all first bytes of 5-byte sequences separated by spaces. */
453 _FIRST_SEQUENCES(0xF8, 0xFB);
454 /* all first bytes of 6-byte sequences separated by spaces. */
455 _FIRST_SEQUENCES(0xFC, 0xFD);
456
457 /* Incomplete sequences first means the first utf8 char, len means
458 * the correct length */
459#define _INCOMPLETE_SEQUENCES(first, conti, len) \
460 do \
461 { \
462 int i, j; \
463 char *buf = alloca(len + 1); \
464 i = 0; \
465 buf[i++] = first; \
466 for ( ; i < len ; i++) \
467 { \
468 Eina_Unicode val; \
469 for (j = 1 ; j < i ; j++) \
470 { \
471 buf[j] = conti; \
472 } \
473 buf[j] = 0; \
474 ind = 0; \
475 fail_if( \
476 (eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | first))); \
477 while ((val = eina_unicode_utf8_get_next(buf, &ind))) \
478 { \
479 fail_if(val != (0xDC00 | conti)); \
480 } \
481 fail_if(ind != i); \
482 } \
483 } \
484 while (0)
485
486 /* Sequences with missing continuation */
487 _INCOMPLETE_SEQUENCES(0xC0, 0x81, 2);
488 _INCOMPLETE_SEQUENCES(0xDF, 0xBF, 2);
489 _INCOMPLETE_SEQUENCES(0xE0, 0x81, 3);
490 _INCOMPLETE_SEQUENCES(0xEF, 0xBF, 3);
491 _INCOMPLETE_SEQUENCES(0xF0, 0x81, 4);
492 _INCOMPLETE_SEQUENCES(0xF7, 0xBF, 4);
493 _INCOMPLETE_SEQUENCES(0xF8, 0x81, 5);
494 _INCOMPLETE_SEQUENCES(0xFB, 0xBF, 5);
495 _INCOMPLETE_SEQUENCES(0xFC, 0x81, 6);
496 _INCOMPLETE_SEQUENCES(0xFD, 0xBF, 6);
497
498 /* Impossible bytes */
499 ind = 0;
500 fail_if((eina_unicode_utf8_get_next("\xFE", &ind) != 0xDCFE) ||
501 (ind != 1));
502 ind = 0;
503 fail_if((eina_unicode_utf8_get_next("\xFF", &ind) != 0xDCFF) ||
504 (ind != 1));
505
506 /* Overlong sequences */
507 ind = 0;
508 fail_if((eina_unicode_utf8_get_next("\xC0\xAF", &ind) != 0xDCC0) ||
509 (ind != 1));
510 ind = 0;
511 fail_if((eina_unicode_utf8_get_next("\xE0\x80\xAF", &ind) != 0xDCE0) ||
512 (ind != 1));
513 ind = 0;
514 fail_if((eina_unicode_utf8_get_next("\xF0\x80\x80\xAF", &ind) != 0xDCF0) ||
515 (ind != 1));
516 ind = 0;
517 fail_if((eina_unicode_utf8_get_next("\xF8\x80\x80\x80\xAF", &ind) != 0xDCF8) ||
518 (ind != 1));
519 ind = 0;
520 fail_if((eina_unicode_utf8_get_next("\xFC\x80\x80\x80\x80\xAF", &ind) != 0xDCFC) ||
521 (ind != 1));
522
523 /* Maximum overlong sequences */
524 ind = 0;
525 fail_if((eina_unicode_utf8_get_next("\xC1\xBF", &ind) != 0xDCC1) ||
526 (ind != 1));
527 ind = 0;
528 fail_if((eina_unicode_utf8_get_next("\xE0\x9F\xBF", &ind) != 0xDCE0) ||
529 (ind != 1));
530 ind = 0;
531 fail_if((eina_unicode_utf8_get_next("\xF0\x8F\xBF\xBF", &ind) != 0xDCF0) ||
532 (ind != 1));
533 ind = 0;
534 fail_if((eina_unicode_utf8_get_next("\xF8\x87\xBF\xBF\xBF", &ind) != 0xDCF8) ||
535 (ind != 1));
536 ind = 0;
537 fail_if((eina_unicode_utf8_get_next("\xFC\x83\xBF\xBF\xBF\xBF", &ind) != 0xDCFC) ||
538 (ind != 1));
539 /* Add some more error cases here */
540
541 /* Just to cover prev/len. General utf-8 parsing was covered above */
542 fail_if(eina_unicode_utf8_get_len("\xF4\x90\x80\x80\xF4\x8F\xBF\xBF") != 2);
543 ind = 0;
544 fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0xD7FF) ||
545 (ind != 0));
546 ind = 3;
547 fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0x00) ||
548 (ind != 0));
549
550 eina_shutdown();
551}
552END_TEST
553
554START_TEST(eina_unicode_utf8_conversion)
555{
556 Eina_Unicode uni_in[] = {0x5D0, 0xFDF6, 0xDC80, 0x1F459, 0x3FFFFFF,
557 0x7FFFFFFF, 'a', 'b', 'c', 0};
558 Eina_Unicode *uni_out;
559 char c_in[] = "\xD7\x90""\xEF\xB7\xB6""\x80""\xF0\x9F\x91\x99"
560 "\xFB\xBF\xBF\xBF\xBF""\xFD\xBF\xBF\xBF\xBF\xBF""abc";
561 char *c_out;
562 int len;
563
564 eina_init();
565
566 uni_out = eina_unicode_utf8_to_unicode(c_in, &len);
567 fail_if((len != 9) || eina_unicode_strcmp(uni_in, uni_out));
568 free(uni_out);
569
570 c_out = eina_unicode_unicode_to_utf8(uni_in, &len);
571 fail_if((len != 24) || strcmp(c_in, c_out));
572 free(c_out);
573
574 eina_shutdown();
575}
576END_TEST
577
578void
579eina_test_ustr(TCase *tc)
580{
581 printf("ustr test\n");
582 tcase_add_test(tc,eina_unicode_strcmp_test);
583 tcase_add_test(tc,eina_unicode_strcpy_test);
584 tcase_add_test(tc,eina_unicode_strncpy_test);
585 tcase_add_test(tc,eina_ustr_strlen_test);
586 tcase_add_test(tc,eina_unicode_strnlen_test);
587 tcase_add_test(tc,eina_unicode_strdup_test);
588 tcase_add_test(tc,eina_unicode_strstr_test);
589 tcase_add_test(tc,eina_unicode_utf8);
590 tcase_add_test(tc,eina_unicode_utf8_conversion);
591
592}
593
diff --git a/libraries/eina/src/tests/eina_test_ustringshare.c b/libraries/eina/src/tests/eina_test_ustringshare.c
deleted file mode 100644
index 1b1ffb2..0000000
--- a/libraries/eina/src/tests/eina_test_ustringshare.c
+++ /dev/null
@@ -1,119 +0,0 @@
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/eina_test_value.c b/libraries/eina/src/tests/eina_test_value.c
deleted file mode 100644
index 94a5ab7..0000000
--- a/libraries/eina/src/tests/eina_test_value.c
+++ /dev/null
@@ -1,1874 +0,0 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2012 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#include <stdio.h>
24#include <inttypes.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28
29#define FP_ERR (0.0000001)
30#define CHECK_FP(a, b) ((a - b) < FP_ERR)
31
32START_TEST(eina_value_test_simple)
33{
34 Eina_Value *value;
35 char c;
36 short s;
37 int i;
38 long l;
39 int64_t i64;
40 unsigned char uc;
41 unsigned short us;
42 unsigned int ui;
43 unsigned long ul;
44 uint64_t u64;
45 float f;
46 double d;
47
48 eina_init();
49
50 value = eina_value_new(EINA_VALUE_TYPE_CHAR);
51 fail_unless(value != NULL);
52 fail_unless(eina_value_set(value, 'x'));
53 fail_unless(eina_value_get(value, &c));
54 fail_unless(c == 'x');
55 eina_value_flush(value);
56
57 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_SHORT));
58 fail_unless(eina_value_set(value, 300));
59 fail_unless(eina_value_get(value, &s));
60 fail_unless(s == 300);
61 eina_value_flush(value);
62
63 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT));
64 fail_unless(eina_value_set(value, -12345));
65 fail_unless(eina_value_get(value, &i));
66 fail_unless(i == -12345);
67 eina_value_flush(value);
68
69 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_LONG));
70 fail_unless(eina_value_set(value, 0xb33f));
71 fail_unless(eina_value_get(value, &l));
72 fail_unless(l == 0xb33f);
73 eina_value_flush(value);
74
75 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT64));
76 fail_unless(eina_value_set(value, 0x0011223344556677));
77 fail_unless(eina_value_get(value, &i64));
78 fail_unless(i64 == 0x0011223344556677);
79 eina_value_flush(value);
80
81 /* unsigned: */
82
83 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UCHAR));
84 fail_unless(eina_value_set(value, 200));
85 fail_unless(eina_value_get(value, &uc));
86 fail_unless(uc == 200);
87 eina_value_flush(value);
88
89 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_USHORT));
90 fail_unless(eina_value_set(value, 65535));
91 fail_unless(eina_value_get(value, &us));
92 fail_unless(us == 65535);
93 eina_value_flush(value);
94
95 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT));
96 fail_unless(eina_value_set(value, 4000000000U));
97 fail_unless(eina_value_get(value, &ui));
98 fail_unless(ui == 4000000000U);
99 eina_value_flush(value);
100
101 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_ULONG));
102 fail_unless(eina_value_set(value, 3000000001U));
103 fail_unless(eina_value_get(value, &ul));
104 fail_unless(ul == 3000000001U);
105 eina_value_flush(value);
106
107 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT64));
108 fail_unless(eina_value_set(value, 0x1122334455667788));
109 fail_unless(eina_value_get(value, &u64));
110 fail_unless(u64 == 0x1122334455667788);
111 eina_value_flush(value);
112
113 /* floating point */
114 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_FLOAT));
115 fail_unless(eina_value_set(value, 0.1234));
116 fail_unless(eina_value_get(value, &f));
117 fail_unless(CHECK_FP(0.1234, f));
118 eina_value_flush(value);
119
120 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_DOUBLE));
121 fail_unless(eina_value_set(value, 34567.8));
122 fail_unless(eina_value_get(value, &d));
123 fail_unless(CHECK_FP(34567.8, d));
124 eina_value_flush(value);
125
126 eina_value_free(value);
127 eina_shutdown();
128}
129END_TEST
130
131START_TEST(eina_value_test_compare)
132{
133 Eina_Value *a, *b;
134
135 eina_init();
136
137 a = eina_value_new(EINA_VALUE_TYPE_CHAR);
138 fail_unless(a != NULL);
139 b = eina_value_new(EINA_VALUE_TYPE_CHAR);
140 fail_unless(b != NULL);
141
142 fail_unless(eina_value_set(a, 123));
143 fail_unless(eina_value_set(b, 123));
144 fail_unless(eina_value_compare(a, b) == 0);
145 fail_unless(eina_value_set(a, -10));
146 fail_unless(eina_value_set(b, 123));
147 fail_unless(eina_value_compare(a, b) < 0);
148 fail_unless(eina_value_set(a, 123));
149 fail_unless(eina_value_set(b, 10));
150 fail_unless(eina_value_compare(a, b) > 0);
151 eina_value_flush(a);
152 eina_value_flush(b);
153
154 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_SHORT));
155 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_SHORT));
156 fail_unless(eina_value_set(a, 1230));
157 fail_unless(eina_value_set(b, 1230));
158 fail_unless(eina_value_compare(a, b) == 0);
159 fail_unless(eina_value_set(a, -100));
160 fail_unless(eina_value_set(b, 1230));
161 fail_unless(eina_value_compare(a, b) < 0);
162 fail_unless(eina_value_set(a, 1230));
163 fail_unless(eina_value_set(b, -100));
164 fail_unless(eina_value_compare(a, b) > 0);
165 eina_value_flush(a);
166 eina_value_flush(b);
167
168 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_INT));
169 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_INT));
170 fail_unless(eina_value_set(a, 300000));
171 fail_unless(eina_value_set(b, 300000));
172 fail_unless(eina_value_compare(a, b) == 0);
173 fail_unless(eina_value_set(a, -100));
174 fail_unless(eina_value_set(b, 300000));
175 fail_unless(eina_value_compare(a, b) < 0);
176 fail_unless(eina_value_set(a, 300000));
177 fail_unless(eina_value_set(b, -100));
178 fail_unless(eina_value_compare(a, b) > 0);
179 eina_value_flush(a);
180 eina_value_flush(b);
181
182 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_LONG));
183 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_LONG));
184 fail_unless(eina_value_set(a, 300000L));
185 fail_unless(eina_value_set(b, 300000L));
186 fail_unless(eina_value_compare(a, b) == 0);
187 fail_unless(eina_value_set(a, -100L));
188 fail_unless(eina_value_set(b, 300000L));
189 fail_unless(eina_value_compare(a, b) < 0);
190 fail_unless(eina_value_set(a, 300000L));
191 fail_unless(eina_value_set(b, -100L));
192 fail_unless(eina_value_compare(a, b) > 0);
193 eina_value_flush(a);
194 eina_value_flush(b);
195
196 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_INT64));
197 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_INT64));
198 fail_unless(eina_value_set(a, (int64_t)800000));
199 fail_unless(eina_value_set(b, (int64_t)800000));
200 fail_unless(eina_value_compare(a, b) == 0);
201 fail_unless(eina_value_set(a, (int64_t)-100));
202 fail_unless(eina_value_set(b, (int64_t)8000000));
203 fail_unless(eina_value_compare(a, b) < 0);
204 fail_unless(eina_value_set(a, (int64_t)8000000));
205 fail_unless(eina_value_set(b, (int64_t)-100));
206 fail_unless(eina_value_compare(a, b) > 0);
207 eina_value_flush(a);
208 eina_value_flush(b);
209
210 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_UCHAR));
211 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_UCHAR));
212 fail_unless(eina_value_set(a, 123));
213 fail_unless(eina_value_set(b, 123));
214 fail_unless(eina_value_compare(a, b) == 0);
215 fail_unless(eina_value_set(a, 10));
216 fail_unless(eina_value_set(b, 123));
217 fail_unless(eina_value_compare(a, b) < 0);
218 fail_unless(eina_value_set(a, 123));
219 fail_unless(eina_value_set(b, 10));
220 fail_unless(eina_value_compare(a, b) > 0);
221 eina_value_flush(a);
222 eina_value_flush(b);
223
224 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_USHORT));
225 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_USHORT));
226 fail_unless(eina_value_set(a, 1230));
227 fail_unless(eina_value_set(b, 1230));
228 fail_unless(eina_value_compare(a, b) == 0);
229 fail_unless(eina_value_set(a, 100));
230 fail_unless(eina_value_set(b, 1230));
231 fail_unless(eina_value_compare(a, b) < 0);
232 fail_unless(eina_value_set(a, 1230));
233 fail_unless(eina_value_set(b, 100));
234 fail_unless(eina_value_compare(a, b) > 0);
235 eina_value_flush(a);
236 eina_value_flush(b);
237
238 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_UINT));
239 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_UINT));
240 fail_unless(eina_value_set(a, 300000));
241 fail_unless(eina_value_set(b, 300000));
242 fail_unless(eina_value_compare(a, b) == 0);
243 fail_unless(eina_value_set(a, 100));
244 fail_unless(eina_value_set(b, 300000));
245 fail_unless(eina_value_compare(a, b) < 0);
246 fail_unless(eina_value_set(a, 300000));
247 fail_unless(eina_value_set(b, 100));
248 fail_unless(eina_value_compare(a, b) > 0);
249 eina_value_flush(a);
250 eina_value_flush(b);
251
252 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_ULONG));
253 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_ULONG));
254 fail_unless(eina_value_set(a, 300000UL));
255 fail_unless(eina_value_set(b, 300000UL));
256 fail_unless(eina_value_compare(a, b) == 0);
257 fail_unless(eina_value_set(a, 100UL));
258 fail_unless(eina_value_set(b, 300000UL));
259 fail_unless(eina_value_compare(a, b) < 0);
260 fail_unless(eina_value_set(a, 300000UL));
261 fail_unless(eina_value_set(b, 100UL));
262 fail_unless(eina_value_compare(a, b) > 0);
263 eina_value_flush(a);
264 eina_value_flush(b);
265
266 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_UINT64));
267 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_UINT64));
268 fail_unless(eina_value_set(a, (uint64_t)8000000));
269 fail_unless(eina_value_set(b, (uint64_t)8000000));
270 fail_unless(eina_value_compare(a, b) == 0);
271 fail_unless(eina_value_set(a, (uint64_t)100));
272 fail_unless(eina_value_set(b, (uint64_t)8000000));
273 fail_unless(eina_value_compare(a, b) < 0);
274 fail_unless(eina_value_set(a, (uint64_t)8000000));
275 fail_unless(eina_value_set(b, (uint64_t)100));
276 fail_unless(eina_value_compare(a, b) > 0);
277 eina_value_flush(a);
278 eina_value_flush(b);
279
280 fail_unless(eina_value_setup(a, EINA_VALUE_TYPE_STRING));
281 fail_unless(eina_value_setup(b, EINA_VALUE_TYPE_STRING));
282 fail_unless(eina_value_set(a, "aaa"));
283 fail_unless(eina_value_set(b, "aaa"));
284 fail_unless(eina_value_compare(a, b) == 0);
285 fail_unless(eina_value_set(a, "abc"));
286 fail_unless(eina_value_set(b, "acd"));
287 fail_unless(eina_value_compare(a, b) < 0);
288 fail_unless(eina_value_set(a, "acd"));
289 fail_unless(eina_value_set(b, "abc"));
290 fail_unless(eina_value_compare(a, b) > 0);
291 eina_value_flush(a);
292 eina_value_flush(b);
293
294 fail_unless(eina_value_array_setup(a, EINA_VALUE_TYPE_CHAR, 0));
295 fail_unless(eina_value_array_setup(b, EINA_VALUE_TYPE_CHAR, 0));
296 fail_unless(eina_value_compare(a, b) == 0);
297
298 fail_unless(eina_value_array_append(a, 1));
299 fail_unless(eina_value_array_append(a, 2));
300 fail_unless(eina_value_array_append(a, 3));
301
302 fail_unless(eina_value_array_append(b, 1));
303 fail_unless(eina_value_array_append(b, 2));
304 fail_unless(eina_value_array_append(b, 3));
305
306 fail_unless(eina_value_compare(a, b) == 0);
307
308 fail_unless(eina_value_array_set(a, 0, 0));
309 fail_unless(eina_value_compare(a, b) < 0);
310
311 fail_unless(eina_value_array_set(a, 0, 10));
312 fail_unless(eina_value_compare(a, b) > 0);
313
314 fail_unless(eina_value_array_set(a, 0, 1));
315
316 fail_unless(eina_value_array_set(b, 0, 0));
317 fail_unless(eina_value_compare(a, b) > 0);
318
319 fail_unless(eina_value_array_set(b, 0, 10));
320 fail_unless(eina_value_compare(a, b) < 0);
321
322 fail_unless(eina_value_array_set(b, 0, 1));
323 fail_unless(eina_value_compare(a, b) == 0);
324
325 /* bigger arrays are greater */
326 fail_unless(eina_value_array_append(b, 0));
327 fail_unless(eina_value_compare(a, b) < 0);
328
329 fail_unless(eina_value_array_append(a, 0));
330 fail_unless(eina_value_array_append(a, 0));
331 fail_unless(eina_value_compare(a, b) > 0);
332
333 /* bigger arrays are greater, unless an element says otherwise */
334 fail_unless(eina_value_array_set(b, 0, 10));
335 fail_unless(eina_value_compare(a, b) < 0);
336
337 eina_value_flush(a);
338 eina_value_flush(b);
339
340 fail_unless(eina_value_list_setup(a, EINA_VALUE_TYPE_CHAR));
341 fail_unless(eina_value_list_setup(b, EINA_VALUE_TYPE_CHAR));
342 fail_unless(eina_value_compare(a, b) == 0);
343
344 fail_unless(eina_value_list_append(a, 1));
345 fail_unless(eina_value_list_append(a, 2));
346 fail_unless(eina_value_list_append(a, 3));
347
348 fail_unless(eina_value_list_append(b, 1));
349 fail_unless(eina_value_list_append(b, 2));
350 fail_unless(eina_value_list_append(b, 3));
351
352 fail_unless(eina_value_compare(a, b) == 0);
353
354 fail_unless(eina_value_list_set(a, 0, 0));
355 fail_unless(eina_value_compare(a, b) < 0);
356
357 fail_unless(eina_value_list_set(a, 0, 10));
358 fail_unless(eina_value_compare(a, b) > 0);
359
360 fail_unless(eina_value_list_set(a, 0, 1));
361
362 fail_unless(eina_value_list_set(b, 0, 0));
363 fail_unless(eina_value_compare(a, b) > 0);
364
365 fail_unless(eina_value_list_set(b, 0, 10));
366 fail_unless(eina_value_compare(a, b) < 0);
367
368 fail_unless(eina_value_list_set(b, 0, 1));
369 fail_unless(eina_value_compare(a, b) == 0);
370
371 /* bigger lists are greater */
372 fail_unless(eina_value_list_append(b, 0));
373 fail_unless(eina_value_compare(a, b) < 0);
374
375 fail_unless(eina_value_list_append(a, 0));
376 fail_unless(eina_value_list_append(a, 0));
377 fail_unless(eina_value_compare(a, b) > 0);
378
379 /* bigger lists are greater, unless an element says otherwise */
380 fail_unless(eina_value_list_set(b, 0, 10));
381 fail_unless(eina_value_compare(a, b) < 0);
382
383 eina_value_flush(a);
384 eina_value_flush(b);
385
386 fail_unless(eina_value_hash_setup(a, EINA_VALUE_TYPE_CHAR, 0));
387 fail_unless(eina_value_hash_setup(b, EINA_VALUE_TYPE_CHAR, 0));
388 fail_unless(eina_value_compare(a, b) == 0);
389
390 fail_unless(eina_value_hash_set(a, "abc", 1));
391 fail_unless(eina_value_hash_set(a, "xyz", 2));
392 fail_unless(eina_value_hash_set(a, "hello", 3));
393
394 fail_unless(eina_value_hash_set(b, "abc", 1));
395 fail_unless(eina_value_hash_set(b, "xyz", 2));
396 fail_unless(eina_value_hash_set(b, "hello", 3));
397
398 fail_unless(eina_value_compare(a, b) == 0);
399
400 fail_unless(eina_value_hash_set(a, "abc", 0));
401 fail_unless(eina_value_compare(a, b) < 0);
402
403 fail_unless(eina_value_hash_set(a, "abc", 10));
404 fail_unless(eina_value_compare(a, b) > 0);
405
406 fail_unless(eina_value_hash_set(a, "abc", 1));
407
408 fail_unless(eina_value_hash_set(b, "abc", 0));
409 fail_unless(eina_value_compare(a, b) > 0);
410
411 fail_unless(eina_value_hash_set(b, "abc", 10));
412 fail_unless(eina_value_compare(a, b) < 0);
413
414 fail_unless(eina_value_hash_set(b, "abc", 1));
415 fail_unless(eina_value_compare(a, b) == 0);
416
417 /* bigger hashs are greater */
418 fail_unless(eina_value_hash_set(b,"newkey", 0));
419 fail_unless(eina_value_compare(a, b) < 0);
420
421 fail_unless(eina_value_hash_set(a, "newkey", 0));
422 fail_unless(eina_value_hash_set(a, "onemorenewkey", 0));
423 fail_unless(eina_value_compare(a, b) > 0);
424
425 /* bigger hashs are greater, unless an element says otherwise */
426 fail_unless(eina_value_hash_set(b, "abc", 10));
427 fail_unless(eina_value_compare(a, b) < 0);
428
429 eina_value_free(a);
430 eina_value_free(b);
431 eina_shutdown();
432}
433END_TEST
434
435START_TEST(eina_value_test_string)
436{
437 Eina_Value *value;
438 const char *s;
439
440 eina_init();
441
442 value = eina_value_new(EINA_VALUE_TYPE_STRING);
443 fail_unless(value != NULL);
444 fail_unless(eina_value_set(value, "hello world!"));
445 fail_unless(eina_value_get(value, &s));
446 fail_unless(strcmp(s, "hello world!") == 0);
447
448 fail_unless(eina_value_set(value, "eina-value"));
449 fail_unless(eina_value_get(value, &s));
450 fail_unless(strcmp(s, "eina-value") == 0);
451
452 eina_value_flush(value);
453 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_STRING));
454
455 fail_unless(eina_value_set(value, "profusion"));
456 fail_unless(eina_value_get(value, &s));
457 fail_unless(strcmp(s, "profusion") == 0);
458
459 eina_value_free(value);
460 eina_shutdown();
461}
462END_TEST
463
464START_TEST(eina_value_test_pvariant)
465{
466 Eina_Value *value;
467 char c, in_c;
468 short s, in_s;
469 int i, in_i;
470 long l, in_l;
471 int64_t i64, in_i64;
472 unsigned char uc, in_uc;
473 unsigned short us, in_us;
474 unsigned int ui, in_ui;
475 unsigned long ul, in_ul;
476 uint64_t u64, in_u64;
477 float f, in_f;
478 double d, in_d;
479 const char *str, *in_str;
480
481 eina_init();
482
483 value = eina_value_new(EINA_VALUE_TYPE_CHAR);
484 fail_unless(value != NULL);
485 in_c = 'x';
486 fail_unless(eina_value_pset(value, &in_c));
487 fail_unless(eina_value_pget(value, &c));
488 fail_unless(c == 'x');
489 eina_value_flush(value);
490
491 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_SHORT));
492 in_s = 300;
493 fail_unless(eina_value_pset(value, &in_s));
494 fail_unless(eina_value_pget(value, &s));
495 fail_unless(s == 300);
496 eina_value_flush(value);
497
498 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT));
499 in_i = -12345;
500 fail_unless(eina_value_pset(value, &in_i));
501 fail_unless(eina_value_pget(value, &i));
502 fail_unless(i == -12345);
503 eina_value_flush(value);
504
505 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_LONG));
506 in_l = 0xb33f;
507 fail_unless(eina_value_pset(value, &in_l));
508 fail_unless(eina_value_pget(value, &l));
509 fail_unless(l == 0xb33f);
510 eina_value_flush(value);
511
512 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT64));
513 in_i64 = 0x0011223344556677;
514 fail_unless(eina_value_pset(value, &in_i64));
515 fail_unless(eina_value_pget(value, &i64));
516 fail_unless(i64 == 0x0011223344556677);
517 eina_value_flush(value);
518
519 /* unsigned: */
520
521 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UCHAR));
522 in_uc = 200;
523 fail_unless(eina_value_pset(value, &in_uc));
524 fail_unless(eina_value_pget(value, &uc));
525 fail_unless(uc == 200);
526 eina_value_flush(value);
527
528 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_USHORT));
529 in_us = 65535;
530 fail_unless(eina_value_pset(value, &in_us));
531 fail_unless(eina_value_pget(value, &us));
532 fail_unless(us == 65535);
533 eina_value_flush(value);
534
535 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT));
536 in_ui = 4000000000U;
537 fail_unless(eina_value_pset(value, &in_ui));
538 fail_unless(eina_value_pget(value, &ui));
539 fail_unless(ui == 4000000000U);
540 eina_value_flush(value);
541
542 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_ULONG));
543 in_ul = 3000000001U;
544 fail_unless(eina_value_pset(value, &in_ul));
545 fail_unless(eina_value_pget(value, &ul));
546 fail_unless(ul == 3000000001U);
547 eina_value_flush(value);
548
549 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT64));
550 in_u64 = 0x1122334455667788;
551 fail_unless(eina_value_pset(value, &in_u64));
552 fail_unless(eina_value_pget(value, &u64));
553 fail_unless(u64 == 0x1122334455667788);
554 eina_value_flush(value);
555
556 /* floating point */
557 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_FLOAT));
558 in_f = 0.1234;
559 fail_unless(eina_value_pset(value, &in_f));
560 fail_unless(eina_value_pget(value, &f));
561 fail_unless(CHECK_FP(0.1234, f));
562 eina_value_flush(value);
563
564 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_DOUBLE));
565 in_d = 34567.8;
566 fail_unless(eina_value_pset(value, &in_d));
567 fail_unless(eina_value_pget(value, &d));
568 fail_unless(CHECK_FP(34567.8, d));
569 eina_value_flush(value);
570
571 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_STRING));
572 in_str = "hello world!";
573 fail_unless(eina_value_pset(value, &in_str));
574 fail_unless(eina_value_pget(value, &str));
575 fail_unless(strcmp(str, "hello world!") == 0);
576
577 in_str = "eina-value";
578 fail_unless(eina_value_pset(value, &in_str));
579 fail_unless(eina_value_pget(value, &str));
580 fail_unless(strcmp(str, "eina-value") == 0);
581
582 eina_value_flush(value);
583 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_STRING));
584
585 in_str = "profusion";
586 fail_unless(eina_value_pset(value, &in_str));
587 fail_unless(eina_value_pget(value, &str));
588 fail_unless(strcmp(str, "profusion") == 0);
589
590 eina_value_free(value);
591 eina_shutdown();
592}
593END_TEST
594
595START_TEST(eina_value_test_to_string)
596{
597 Eina_Value *value;
598 char c, in_c;
599 short s, in_s;
600 int i, in_i;
601 long l, in_l;
602 int64_t i64, in_i64;
603 unsigned char uc, in_uc;
604 unsigned short us, in_us;
605 unsigned int ui, in_ui;
606 unsigned long ul, in_ul;
607 uint64_t u64, in_u64;
608 float f, in_f;
609 double d, in_d;
610 const char *str, *in_str;
611 char *out;
612 char buf[256];
613
614 eina_init();
615
616 value = eina_value_new(EINA_VALUE_TYPE_CHAR);
617 fail_unless(value != NULL);
618 in_c = 'x';
619 fail_unless(eina_value_pset(value, &in_c));
620 fail_unless(eina_value_pget(value, &c));
621 fail_unless(c == 'x');
622 snprintf(buf, sizeof(buf), "%hhd", in_c);
623 out = eina_value_to_string(value);
624 fail_unless(out != NULL);
625 fail_unless(strcmp(buf, out) == 0);
626 free(out);
627 eina_value_flush(value);
628
629 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_SHORT));
630 in_s = 300;
631 fail_unless(eina_value_pset(value, &in_s));
632 fail_unless(eina_value_pget(value, &s));
633 fail_unless(s == 300);
634 snprintf(buf, sizeof(buf), "%hd", in_s);
635 out = eina_value_to_string(value);
636 fail_unless(out != NULL);
637 fail_unless(strcmp(buf, out) == 0);
638 free(out);
639 eina_value_flush(value);
640
641 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT));
642 in_i = -12345;
643 fail_unless(eina_value_pset(value, &in_i));
644 fail_unless(eina_value_pget(value, &i));
645 fail_unless(i == -12345);
646 snprintf(buf, sizeof(buf), "%d", in_i);
647 out = eina_value_to_string(value);
648 fail_unless(out != NULL);
649 fail_unless(strcmp(buf, out) == 0);
650 free(out);
651 eina_value_flush(value);
652
653 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_LONG));
654 in_l = 0xb33f;
655 fail_unless(eina_value_pset(value, &in_l));
656 fail_unless(eina_value_pget(value, &l));
657 fail_unless(l == 0xb33f);
658 snprintf(buf, sizeof(buf), "%ld", in_l);
659 out = eina_value_to_string(value);
660 fail_unless(out != NULL);
661 fail_unless(strcmp(buf, out) == 0);
662 free(out);
663 eina_value_flush(value);
664
665 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_INT64));
666 in_i64 = 0x0011223344556677;
667 fail_unless(eina_value_pset(value, &in_i64));
668 fail_unless(eina_value_pget(value, &i64));
669 fail_unless(i64 == 0x0011223344556677);
670 snprintf(buf, sizeof(buf), "%"PRId64, in_i64);
671 out = eina_value_to_string(value);
672 fail_unless(out != NULL);
673 fail_unless(strcmp(buf, out) == 0);
674 free(out);
675 eina_value_flush(value);
676
677 /* unsigned: */
678
679 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UCHAR));
680 in_uc = 200;
681 fail_unless(eina_value_pset(value, &in_uc));
682 fail_unless(eina_value_pget(value, &uc));
683 fail_unless(uc == 200);
684 snprintf(buf, sizeof(buf), "%hhu", in_uc);
685 out = eina_value_to_string(value);
686 fail_unless(out != NULL);
687 fail_unless(strcmp(buf, out) == 0);
688 free(out);
689 eina_value_flush(value);
690
691 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_USHORT));
692 in_us = 65535;
693 fail_unless(eina_value_pset(value, &in_us));
694 fail_unless(eina_value_pget(value, &us));
695 fail_unless(us == 65535);
696 snprintf(buf, sizeof(buf), "%hu", in_us);
697 out = eina_value_to_string(value);
698 fail_unless(out != NULL);
699 fail_unless(strcmp(buf, out) == 0);
700 free(out);
701 eina_value_flush(value);
702
703 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT));
704 in_ui = 4000000000U;
705 fail_unless(eina_value_pset(value, &in_ui));
706 fail_unless(eina_value_pget(value, &ui));
707 fail_unless(ui == 4000000000U);
708 snprintf(buf, sizeof(buf), "%u", in_ui);
709 out = eina_value_to_string(value);
710 fail_unless(out != NULL);
711 fail_unless(strcmp(buf, out) == 0);
712 free(out);
713 eina_value_flush(value);
714
715 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_ULONG));
716 in_ul = 3000000001U;
717 fail_unless(eina_value_pset(value, &in_ul));
718 fail_unless(eina_value_pget(value, &ul));
719 fail_unless(ul == 3000000001U);
720 snprintf(buf, sizeof(buf), "%lu", in_ul);
721 out = eina_value_to_string(value);
722 fail_unless(out != NULL);
723 fail_unless(strcmp(buf, out) == 0);
724 free(out);
725 eina_value_flush(value);
726
727 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_UINT64));
728 in_u64 = 0x1122334455667788;
729 fail_unless(eina_value_pset(value, &in_u64));
730 fail_unless(eina_value_pget(value, &u64));
731 fail_unless(u64 == 0x1122334455667788);
732 snprintf(buf, sizeof(buf), "%"PRIu64, in_u64);
733 out = eina_value_to_string(value);
734 fail_unless(out != NULL);
735 fail_unless(strcmp(buf, out) == 0);
736 free(out);
737 eina_value_flush(value);
738
739 /* floating point */
740 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_FLOAT));
741 in_f = 0.1234;
742 fail_unless(eina_value_pset(value, &in_f));
743 fail_unless(eina_value_pget(value, &f));
744 fail_unless(CHECK_FP(0.1234, f));
745 snprintf(buf, sizeof(buf), "%g", in_f);
746 out = eina_value_to_string(value);
747 fail_unless(out != NULL);
748 fail_unless(strncmp(buf, out, 6) == 0); /* stupid float... */
749 free(out);
750 eina_value_flush(value);
751
752 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_DOUBLE));
753 in_d = 34567.8;
754 fail_unless(eina_value_pset(value, &in_d));
755 fail_unless(eina_value_pget(value, &d));
756 fail_unless(CHECK_FP(34567.8, d));
757 snprintf(buf, sizeof(buf), "%g", in_d);
758 out = eina_value_to_string(value);
759 fail_unless(out != NULL);
760 fail_unless(strncmp(buf, out, 7) == 0); /* stupid double... */
761 free(out);
762 eina_value_flush(value);
763
764 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_STRING));
765 in_str = "hello world!";
766 fail_unless(eina_value_pset(value, &in_str));
767 fail_unless(eina_value_pget(value, &str));
768 fail_unless(strcmp(str, "hello world!") == 0);
769 out = eina_value_to_string(value);
770 fail_unless(out != NULL);
771 fail_unless(strcmp(in_str, out) == 0);
772 free(out);
773
774 in_str = "eina-value";
775 fail_unless(eina_value_pset(value, &in_str));
776 fail_unless(eina_value_pget(value, &str));
777 fail_unless(strcmp(str, "eina-value") == 0);
778 out = eina_value_to_string(value);
779 fail_unless(out != NULL);
780 fail_unless(strcmp(in_str, out) == 0);
781 free(out);
782
783 eina_value_flush(value);
784 fail_unless(eina_value_setup(value, EINA_VALUE_TYPE_STRING));
785
786 in_str = "profusion";
787 fail_unless(eina_value_pset(value, &in_str));
788 fail_unless(eina_value_pget(value, &str));
789 fail_unless(strcmp(str, "profusion") == 0);
790 out = eina_value_to_string(value);
791 fail_unless(out != NULL);
792 fail_unless(strcmp(in_str, out) == 0);
793 free(out);
794
795 eina_value_free(value);
796 eina_shutdown();
797}
798END_TEST
799
800START_TEST(eina_value_test_convert_char)
801{
802 Eina_Value *value, conv;
803 char c;
804 short s;
805 int i;
806 long l;
807 int64_t i64;
808 unsigned char uc;
809 unsigned short us;
810 unsigned int ui;
811 unsigned long ul;
812 uint64_t u64;
813 float f;
814 double d;
815 const char *str;
816
817 eina_init();
818
819 value = eina_value_new(EINA_VALUE_TYPE_CHAR);
820 fail_unless(value != NULL);
821
822 fail_unless(eina_value_set(value, 123));
823
824 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UCHAR));
825 fail_unless(eina_value_convert(value, &conv));
826 fail_unless(eina_value_get(&conv, &uc));
827 fail_unless(uc == 123);
828 eina_value_flush(&conv);
829
830 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_USHORT));
831 fail_unless(eina_value_convert(value, &conv));
832 fail_unless(eina_value_get(&conv, &us));
833 fail_unless(us == 123);
834 eina_value_flush(&conv);
835
836 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT));
837 fail_unless(eina_value_convert(value, &conv));
838 fail_unless(eina_value_get(&conv, &ui));
839 fail_unless(ui == 123);
840 eina_value_flush(&conv);
841
842 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_ULONG));
843 fail_unless(eina_value_convert(value, &conv));
844 fail_unless(eina_value_get(&conv, &ul));
845 fail_unless(ul == 123);
846 eina_value_flush(&conv);
847
848 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT64));
849 fail_unless(eina_value_convert(value, &conv));
850 fail_unless(eina_value_get(&conv, &u64));
851 fail_unless(u64 == 123);
852 eina_value_flush(&conv);
853
854 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_CHAR));
855 fail_unless(eina_value_convert(value, &conv));
856 fail_unless(eina_value_get(&conv, &c));
857 fail_unless(c == 123);
858 eina_value_flush(&conv);
859
860 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_SHORT));
861 fail_unless(eina_value_convert(value, &conv));
862 fail_unless(eina_value_get(&conv, &s));
863 fail_unless(s == 123);
864 eina_value_flush(&conv);
865
866 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_INT));
867 fail_unless(eina_value_convert(value, &conv));
868 fail_unless(eina_value_get(&conv, &i));
869 fail_unless(i == 123);
870 eina_value_flush(&conv);
871
872 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_LONG));
873 fail_unless(eina_value_convert(value, &conv));
874 fail_unless(eina_value_get(&conv, &l));
875 fail_unless(l == 123);
876 eina_value_flush(&conv);
877
878 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_INT64));
879 fail_unless(eina_value_convert(value, &conv));
880 fail_unless(eina_value_get(&conv, &i64));
881 fail_unless(i64 == 123);
882 eina_value_flush(&conv);
883
884 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_FLOAT));
885 fail_unless(eina_value_convert(value, &conv));
886 fail_unless(eina_value_get(&conv, &f));
887 fail_unless(CHECK_FP(f, 123));
888 eina_value_flush(&conv);
889
890 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_DOUBLE));
891 fail_unless(eina_value_convert(value, &conv));
892 fail_unless(eina_value_get(&conv, &d));
893 fail_unless(CHECK_FP(d, 123));
894 eina_value_flush(&conv);
895
896 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_STRING));
897 fail_unless(eina_value_convert(value, &conv));
898 fail_unless(eina_value_get(&conv, &str));
899 fail_unless(str != NULL);
900 fail_unless(strcmp(str, "123") == 0);
901 eina_value_flush(&conv);
902
903 /* negative tests */
904 fail_unless(eina_value_set(value, -123));
905
906 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UCHAR));
907 fail_if(eina_value_convert(value, &conv));
908 eina_value_flush(&conv);
909
910 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_USHORT));
911 fail_if(eina_value_convert(value, &conv));
912 eina_value_flush(&conv);
913
914 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT));
915 fail_if(eina_value_convert(value, &conv));
916 eina_value_flush(&conv);
917
918 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_ULONG));
919 fail_if(eina_value_convert(value, &conv));
920 eina_value_flush(&conv);
921
922 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT64));
923 fail_if(eina_value_convert(value, &conv));
924 eina_value_flush(&conv);
925
926 eina_value_free(value);
927 eina_shutdown();
928}
929END_TEST
930
931START_TEST(eina_value_test_convert_uchar)
932{
933 Eina_Value *value, conv;
934 char c;
935 short s;
936 int i;
937 long l;
938 int64_t i64;
939 unsigned char uc;
940 unsigned short us;
941 unsigned int ui;
942 unsigned long ul;
943 uint64_t u64;
944 float f;
945 double d;
946 const char *str;
947
948 eina_init();
949
950 value = eina_value_new(EINA_VALUE_TYPE_UCHAR);
951 fail_unless(value != NULL);
952
953 fail_unless(eina_value_set(value, 31));
954
955 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UCHAR));
956 fail_unless(eina_value_convert(value, &conv));
957 fail_unless(eina_value_get(&conv, &uc));
958 fail_unless(uc == 31);
959 eina_value_flush(&conv);
960
961 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_USHORT));
962 fail_unless(eina_value_convert(value, &conv));
963 fail_unless(eina_value_get(&conv, &us));
964 fail_unless(us == 31);
965 eina_value_flush(&conv);
966
967 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT));
968 fail_unless(eina_value_convert(value, &conv));
969 fail_unless(eina_value_get(&conv, &ui));
970 fail_unless(ui == 31);
971 eina_value_flush(&conv);
972
973 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_ULONG));
974 fail_unless(eina_value_convert(value, &conv));
975 fail_unless(eina_value_get(&conv, &ul));
976 fail_unless(ul == 31);
977 eina_value_flush(&conv);
978
979 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_UINT64));
980 fail_unless(eina_value_convert(value, &conv));
981 fail_unless(eina_value_get(&conv, &u64));
982 fail_unless(u64 == 31);
983 eina_value_flush(&conv);
984
985 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_CHAR));
986 fail_unless(eina_value_convert(value, &conv));
987 fail_unless(eina_value_get(&conv, &c));
988 fail_unless(c == 31);
989 eina_value_flush(&conv);
990
991 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_SHORT));
992 fail_unless(eina_value_convert(value, &conv));
993 fail_unless(eina_value_get(&conv, &s));
994 fail_unless(s == 31);
995 eina_value_flush(&conv);
996
997 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_INT));
998 fail_unless(eina_value_convert(value, &conv));
999 fail_unless(eina_value_get(&conv, &i));
1000 fail_unless(i == 31);
1001 eina_value_flush(&conv);
1002
1003 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_LONG));
1004 fail_unless(eina_value_convert(value, &conv));
1005 fail_unless(eina_value_get(&conv, &l));
1006 fail_unless(l == 31);
1007 eina_value_flush(&conv);
1008
1009 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_INT64));
1010 fail_unless(eina_value_convert(value, &conv));
1011 fail_unless(eina_value_get(&conv, &i64));
1012 fail_unless(i64 == 31);
1013 eina_value_flush(&conv);
1014
1015 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_FLOAT));
1016 fail_unless(eina_value_convert(value, &conv));
1017 fail_unless(eina_value_get(&conv, &f));
1018 fail_unless(CHECK_FP(f, 31));
1019 eina_value_flush(&conv);
1020
1021 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_DOUBLE));
1022 fail_unless(eina_value_convert(value, &conv));
1023 fail_unless(eina_value_get(&conv, &d));
1024 fail_unless(CHECK_FP(d, 31));
1025 eina_value_flush(&conv);
1026
1027 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_STRING));
1028 fail_unless(eina_value_convert(value, &conv));
1029 fail_unless(eina_value_get(&conv, &str));
1030 fail_unless(str != NULL);
1031 fail_unless(strcmp(str, "31") == 0);
1032 eina_value_flush(&conv);
1033
1034 /* negative tests */
1035 fail_unless(eina_value_set(value, 200));
1036
1037 fail_unless(eina_value_setup(&conv, EINA_VALUE_TYPE_CHAR));
1038 fail_if(eina_value_convert(value, &conv));
1039 eina_value_flush(&conv);
1040
1041 eina_value_free(value);
1042 eina_shutdown();
1043}
1044END_TEST
1045
1046
1047START_TEST(eina_value_test_array)
1048{
1049 Eina_Value *value, other;
1050 Eina_Value_Array desc;
1051 Eina_Inarray *inarray;
1052 char c;
1053 char buf[1024];
1054 char *str;
1055
1056 eina_init();
1057
1058 value = eina_value_array_new(EINA_VALUE_TYPE_CHAR, 0);
1059 fail_unless(value != NULL);
1060
1061 fail_unless(eina_value_array_append(value, 'k'));
1062 fail_unless(eina_value_array_append(value, '-'));
1063 fail_unless(eina_value_array_append(value, 's'));
1064
1065 fail_unless(eina_value_array_get(value, 0, &c));
1066 fail_unless(c == 'k');
1067 fail_unless(eina_value_array_get(value, 1, &c));
1068 fail_unless(c == '-');
1069 fail_unless(eina_value_array_get(value, 2, &c));
1070 fail_unless(c == 's');
1071
1072 fail_unless(eina_value_array_insert(value, 0, '!'));
1073 fail_unless(eina_value_array_get(value, 0, &c));
1074 fail_unless(c == '!');
1075 fail_unless(eina_value_array_get(value, 1, &c));
1076 fail_unless(c == 'k');
1077 fail_unless(eina_value_array_get(value, 2, &c));
1078 fail_unless(c == '-');
1079 fail_unless(eina_value_array_get(value, 3, &c));
1080 fail_unless(c == 's');
1081
1082 fail_unless(eina_value_array_set(value, 0, '*'));
1083 fail_unless(eina_value_array_get(value, 0, &c));
1084 fail_unless(c == '*');
1085 fail_unless(eina_value_array_get(value, 1, &c));
1086 fail_unless(c == 'k');
1087 fail_unless(eina_value_array_get(value, 2, &c));
1088 fail_unless(c == '-');
1089 fail_unless(eina_value_array_get(value, 3, &c));
1090 fail_unless(c == 's');
1091
1092 snprintf(buf, sizeof(buf), "[%hhd, %hhd, %hhd, %hhd]",
1093 '*', 'k', '-', 's');
1094
1095 str = eina_value_to_string(value);
1096 fail_unless(str != NULL);
1097 fail_unless(strcmp(str, buf) == 0);
1098 free(str);
1099
1100 eina_value_flush(value);
1101 fail_unless(eina_value_array_setup(value, EINA_VALUE_TYPE_STRINGSHARE, 2));
1102
1103 fail_unless(eina_value_array_append(value, "Enlightenment.org"));
1104 fail_unless(eina_value_array_append(value, "X11"));
1105 fail_unless(eina_value_array_append(value, "Pants"));
1106 fail_unless(eina_value_array_append(value, "on!!!"));
1107 fail_unless(eina_value_array_append(value, "k-s"));
1108
1109 str = eina_value_to_string(value);
1110 fail_unless(str != NULL);
1111 fail_unless(strcmp(str, "[Enlightenment.org, X11, Pants, on!!!, k-s]") == 0);
1112 free(str);
1113
1114 eina_value_flush(value);
1115 fail_unless(eina_value_array_setup(value, EINA_VALUE_TYPE_CHAR, 0));
1116 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_CHAR));
1117
1118 fail_unless(eina_value_set(&other, 100));
1119 fail_unless(eina_value_get(&other, &c));
1120 fail_unless(c == 100);
1121
1122 fail_unless(eina_value_convert(&other, value));
1123 str = eina_value_to_string(value);
1124 fail_unless(str != NULL);
1125 fail_unless(strcmp(str, "[100]") == 0);
1126 free(str);
1127
1128 fail_unless(eina_value_array_set(value, 0, 33));
1129 fail_unless(eina_value_convert(value, &other));
1130 fail_unless(eina_value_get(&other, &c));
1131 fail_unless(c == 33);
1132
1133 inarray = eina_inarray_new(sizeof(char), 0);
1134 fail_unless(inarray != NULL);
1135 c = 11;
1136 fail_unless(eina_inarray_append(inarray, &c) >= 0);
1137 c = 21;
1138 fail_unless(eina_inarray_append(inarray, &c) >= 0);
1139 c = 31;
1140 fail_unless(eina_inarray_append(inarray, &c) >= 0);
1141 desc.subtype = EINA_VALUE_TYPE_CHAR;
1142 desc.step = 0;
1143 desc.array = inarray;
1144 fail_unless(eina_value_set(value, desc)); /* manually configure */
1145 eina_inarray_free(inarray);
1146
1147 fail_unless(eina_value_array_get(value, 0, &c));
1148 fail_unless(c == 11);
1149 fail_unless(eina_value_array_get(value, 1, &c));
1150 fail_unless(c == 21);
1151 fail_unless(eina_value_array_get(value, 2, &c));
1152 fail_unless(c == 31);
1153
1154 eina_value_free(value);
1155 eina_shutdown();
1156}
1157END_TEST
1158
1159START_TEST(eina_value_test_list)
1160{
1161 Eina_Value *value, other;
1162 Eina_Value_List desc;
1163 char c;
1164 char buf[1024];
1165 char *str;
1166 const char *s;
1167
1168 eina_init();
1169
1170 value = eina_value_list_new(EINA_VALUE_TYPE_CHAR);
1171 fail_unless(value != NULL);
1172
1173 fail_unless(eina_value_list_append(value, 'k'));
1174 fail_unless(eina_value_list_append(value, '-'));
1175 fail_unless(eina_value_list_append(value, 's'));
1176
1177 fail_unless(eina_value_list_get(value, 0, &c));
1178 fail_unless(c == 'k');
1179 fail_unless(eina_value_list_get(value, 1, &c));
1180 fail_unless(c == '-');
1181 fail_unless(eina_value_list_get(value, 2, &c));
1182 fail_unless(c == 's');
1183
1184 fail_unless(eina_value_list_insert(value, 0, '!'));
1185 fail_unless(eina_value_list_get(value, 0, &c));
1186 fail_unless(c == '!');
1187 fail_unless(eina_value_list_get(value, 1, &c));
1188 fail_unless(c == 'k');
1189 fail_unless(eina_value_list_get(value, 2, &c));
1190 fail_unless(c == '-');
1191 fail_unless(eina_value_list_get(value, 3, &c));
1192 fail_unless(c == 's');
1193
1194 fail_unless(eina_value_list_set(value, 0, '*'));
1195 fail_unless(eina_value_list_get(value, 0, &c));
1196 fail_unless(c == '*');
1197 fail_unless(eina_value_list_get(value, 1, &c));
1198 fail_unless(c == 'k');
1199 fail_unless(eina_value_list_get(value, 2, &c));
1200 fail_unless(c == '-');
1201 fail_unless(eina_value_list_get(value, 3, &c));
1202 fail_unless(c == 's');
1203
1204 snprintf(buf, sizeof(buf), "[%hhd, %hhd, %hhd, %hhd]",
1205 '*', 'k', '-', 's');
1206
1207 str = eina_value_to_string(value);
1208 fail_unless(str != NULL);
1209 fail_unless(strcmp(str, buf) == 0);
1210 free(str);
1211
1212 eina_value_flush(value);
1213 fail_unless(eina_value_list_setup(value, EINA_VALUE_TYPE_STRINGSHARE));
1214
1215 fail_unless(eina_value_list_append(value, "Enlightenment.org"));
1216 fail_unless(eina_value_list_append(value, "X11"));
1217 fail_unless(eina_value_list_append(value, "Pants"));
1218 fail_unless(eina_value_list_append(value, "on!!!"));
1219 fail_unless(eina_value_list_append(value, "k-s"));
1220
1221 str = eina_value_to_string(value);
1222 fail_unless(str != NULL);
1223 fail_unless(strcmp(str, "[Enlightenment.org, X11, Pants, on!!!, k-s]") == 0);
1224 free(str);
1225
1226 eina_value_flush(value);
1227 fail_unless(eina_value_list_setup(value, EINA_VALUE_TYPE_CHAR));
1228 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_CHAR));
1229
1230 fail_unless(eina_value_set(&other, 100));
1231 fail_unless(eina_value_get(&other, &c));
1232 fail_unless(c == 100);
1233
1234 fail_unless(eina_value_convert(&other, value));
1235 str = eina_value_to_string(value);
1236 fail_unless(str != NULL);
1237 fail_unless(strcmp(str, "[100]") == 0);
1238 free(str);
1239
1240 fail_unless(eina_value_list_set(value, 0, 33));
1241 fail_unless(eina_value_convert(value, &other));
1242 fail_unless(eina_value_get(&other, &c));
1243 fail_unless(c == 33);
1244
1245 desc.subtype = EINA_VALUE_TYPE_STRING;
1246 desc.list = NULL;
1247 desc.list = eina_list_append(desc.list, "hello");
1248 desc.list = eina_list_append(desc.list, "world");
1249 desc.list = eina_list_append(desc.list, "eina");
1250 fail_unless(eina_list_count(desc.list) == 3);
1251 fail_unless(eina_value_set(value, desc));
1252 eina_list_free(desc.list);
1253
1254 fail_unless(eina_value_list_get(value, 0, &s));
1255 fail_unless(s != NULL);
1256 fail_unless(strcmp(s, "hello") == 0);
1257 fail_unless(eina_value_list_get(value, 1, &s));
1258 fail_unless(s != NULL);
1259 fail_unless(strcmp(s, "world") == 0);
1260 fail_unless(eina_value_list_get(value, 2, &s));
1261 fail_unless(s != NULL);
1262 fail_unless(strcmp(s, "eina") == 0);
1263
1264 eina_value_free(value);
1265 eina_shutdown();
1266}
1267END_TEST
1268
1269START_TEST(eina_value_test_hash)
1270{
1271 Eina_Value *value, other;
1272 Eina_Value_Hash desc;
1273 char c;
1274 char buf[1024];
1275 char **ptr;
1276 char *str;
1277 const char *s;
1278
1279 eina_init();
1280
1281 value = eina_value_hash_new(EINA_VALUE_TYPE_CHAR, 0);
1282 fail_unless(value != NULL);
1283
1284 fail_unless(eina_value_hash_set(value, "first", 'k'));
1285 fail_unless(eina_value_hash_set(value, "second", '-'));
1286 fail_unless(eina_value_hash_set(value, "third", 's'));
1287
1288 fail_unless(eina_value_hash_get(value, "first", &c));
1289 fail_unless(c == 'k');
1290 fail_unless(eina_value_hash_get(value, "second", &c));
1291 fail_unless(c == '-');
1292 fail_unless(eina_value_hash_get(value, "third", &c));
1293 fail_unless(c == 's');
1294
1295 fail_unless(eina_value_hash_set(value, "first", '!'));
1296 fail_unless(eina_value_hash_get(value, "first", &c));
1297 fail_unless(c == '!');
1298 fail_unless(eina_value_hash_get(value, "second", &c));
1299 fail_unless(c == '-');
1300 fail_unless(eina_value_hash_get(value, "third", &c));
1301 fail_unless(c == 's');
1302
1303 puts("testing hash to string -- may fail due hash algorithm changes!");
1304
1305 /* watchout, this is the order I got -- hash algorithm changes may change
1306 * the order!
1307 */
1308 snprintf(buf, sizeof(buf), "{first: %hhd, second: %hhd, third: %hhd}",
1309 '!', '-', 's');
1310
1311 str = eina_value_to_string(value);
1312 fail_unless(str != NULL);
1313 printf("want: %s\n", buf);
1314 printf("got.: %s\n", str);
1315 fail_unless(strcmp(str, buf) == 0);
1316 free(str);
1317
1318 eina_value_flush(value);
1319 fail_unless(eina_value_hash_setup(value, EINA_VALUE_TYPE_STRINGSHARE, 0));
1320
1321 fail_unless(eina_value_hash_set(value, "a", "Enlightenment.org"));
1322 fail_unless(eina_value_hash_set(value, "b", "X11"));
1323 fail_unless(eina_value_hash_set(value, "c", "Pants"));
1324 fail_unless(eina_value_hash_set(value, "d", "on!!!"));
1325 fail_unless(eina_value_hash_set(value, "e", "k-s"));
1326
1327 /* watchout, this is the order I got -- hash algorithm changes may change
1328 * the order!
1329 */
1330 strcpy(buf, "{e: k-s, d: on!!!, a: Enlightenment.org, b: X11, c: Pants}");
1331
1332 str = eina_value_to_string(value);
1333 fail_unless(str != NULL);
1334 printf("want: %s\n", buf);
1335 printf("got.: %s\n", str);
1336 fail_unless(strcmp(str, buf) == 0);
1337 free(str);
1338
1339 eina_value_flush(value);
1340 fail_unless(eina_value_hash_setup(value, EINA_VALUE_TYPE_CHAR, 0));
1341 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_CHAR));
1342
1343 fail_unless(eina_value_set(&other, 100));
1344 fail_unless(eina_value_get(&other, &c));
1345 fail_unless(c == 100);
1346
1347 fail_unless(eina_value_hash_set(value, "first", 33));
1348 fail_unless(eina_value_convert(value, &other));
1349 fail_unless(eina_value_get(&other, &c));
1350 fail_unless(c == 33);
1351
1352 desc.subtype = EINA_VALUE_TYPE_STRING;
1353 desc.buckets_power_size = 0;
1354 desc.hash = eina_hash_string_small_new(NULL);
1355 fail_unless(desc.hash != NULL);
1356 /* watch out hash pointer is to a size of subtype->value_size! */
1357 ptr = malloc(sizeof(char *));
1358 *ptr = "there";
1359 fail_unless(eina_hash_add(desc.hash, "hi", ptr));
1360 ptr = malloc(sizeof(char *));
1361 *ptr = "y";
1362 fail_unless(eina_hash_add(desc.hash, "x", ptr));
1363 fail_unless(eina_value_set(value, desc));
1364
1365 free(eina_hash_find(desc.hash, "hi"));
1366 free(eina_hash_find(desc.hash, "x"));
1367 eina_hash_free(desc.hash);
1368
1369 fail_unless(eina_value_hash_get(value, "hi", &s));
1370 fail_unless(s != NULL);
1371 fail_unless(strcmp(s, "there") == 0);
1372
1373 fail_unless(eina_value_hash_get(value, "x", &s));
1374 fail_unless(s != NULL);
1375 fail_unless(strcmp(s, "y") == 0);
1376
1377 eina_value_free(value);
1378 eina_shutdown();
1379}
1380END_TEST
1381
1382
1383START_TEST(eina_value_test_timeval)
1384{
1385 Eina_Value *value, other;
1386 struct timeval itv, otv;
1387 char c;
1388 char *str;
1389
1390 eina_init();
1391
1392 value = eina_value_new(EINA_VALUE_TYPE_TIMEVAL);
1393 fail_unless(value != NULL);
1394
1395 itv.tv_sec = 1;
1396 itv.tv_usec = 123;
1397 fail_unless(eina_value_set(value, itv));
1398 fail_unless(eina_value_get(value, &otv));
1399 fail_unless(memcmp(&itv, &otv, sizeof(struct timeval)) == 0);
1400
1401 itv.tv_sec = 3;
1402 itv.tv_usec = -1;
1403 fail_unless(eina_value_set(value, itv));
1404 fail_unless(eina_value_get(value, &otv));
1405 itv.tv_sec = 2;
1406 itv.tv_usec = 999999;
1407 fail_unless(memcmp(&itv, &otv, sizeof(struct timeval)) == 0);
1408
1409 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_CHAR));
1410 fail_unless(eina_value_convert(value, &other));
1411 fail_unless(eina_value_get(&other, &c));
1412 fail_unless(c == 2);
1413 eina_value_flush(&other);
1414
1415 itv.tv_sec = 12345;
1416 itv.tv_usec = 6789;
1417 fail_unless(eina_value_set(value, itv));
1418 str = eina_value_to_string(value);
1419 fail_unless(str != NULL);
1420 fail_unless(strcmp(str, "12345.006789") == 0);
1421 free(str);
1422
1423 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_TIMEVAL));
1424 fail_unless(eina_value_set(&other, itv));
1425 fail_unless(eina_value_compare(value, &other) == 0);
1426
1427 itv.tv_sec++;
1428 fail_unless(eina_value_set(&other, itv));
1429 fail_unless(eina_value_compare(value, &other) < 0);
1430
1431 itv.tv_sec -= 2;
1432 fail_unless(eina_value_set(&other, itv));
1433 fail_unless(eina_value_compare(value, &other) > 0);
1434
1435 itv.tv_sec++;
1436 fail_unless(eina_value_set(&other, itv));
1437 fail_unless(eina_value_compare(value, &other) == 0);
1438
1439 itv.tv_usec++;
1440 fail_unless(eina_value_set(&other, itv));
1441 fail_unless(eina_value_compare(value, &other) < 0);
1442
1443 itv.tv_usec -= 2;
1444 fail_unless(eina_value_set(&other, itv));
1445 fail_unless(eina_value_compare(value, &other) > 0);
1446
1447 itv.tv_usec++;
1448 fail_unless(eina_value_set(&other, itv));
1449 fail_unless(eina_value_compare(value, &other) == 0);
1450
1451 eina_value_flush(&other);
1452
1453
1454 eina_value_free(value);
1455 eina_shutdown();
1456}
1457END_TEST
1458
1459
1460START_TEST(eina_value_test_blob)
1461{
1462 Eina_Value *value, other;
1463 Eina_Value_Blob in, out;
1464 unsigned char blob[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1465 int i = 0x11223344;
1466 char *str;
1467
1468 eina_init();
1469
1470 value = eina_value_new(EINA_VALUE_TYPE_BLOB);
1471 fail_unless(value != NULL);
1472
1473 in.ops = NULL;
1474 in.memory = blob;
1475 in.size = sizeof(blob);
1476 fail_unless(eina_value_set(value, in));
1477 fail_unless(eina_value_get(value, &out));
1478 fail_unless(out.memory == blob);
1479 fail_unless(out.size == sizeof(blob));
1480 fail_unless(memcmp(&in, &out, sizeof(Eina_Value_Blob)) == 0);
1481
1482 str = eina_value_to_string(value);
1483 fail_unless(str != NULL);
1484 fail_unless(strcmp(str, "BLOB(10, [01 02 03 04 05 06 07 08 09 0a])") == 0);
1485 free(str);
1486
1487 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_INT));
1488 fail_unless(eina_value_set(&other, i));
1489 fail_unless(eina_value_convert(&other, value));
1490 fail_unless(eina_value_get(value, &out));
1491
1492 fail_unless(out.memory != NULL);
1493 fail_unless(out.size == sizeof(int));
1494 fail_unless(memcmp(&i, out.memory, sizeof(int)) == 0);
1495
1496 eina_value_flush(&other);
1497
1498 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_STRING));
1499 fail_unless(eina_value_set(&other, "hi there!"));
1500 fail_unless(eina_value_convert(&other, value));
1501 fail_unless(eina_value_get(value, &out));
1502 fail_unless(out.memory != NULL);
1503 fail_unless(out.size == sizeof("hi there!"));
1504 fail_unless(strcmp(out.memory, "hi there!") == 0);
1505
1506 str = eina_value_to_string(value);
1507 fail_unless(str != NULL);
1508 fail_unless(strcmp(str, "BLOB(10, [68 69 20 74 68 65 72 65 21 00])") == 0);
1509 free(str);
1510
1511 eina_value_flush(&other);
1512
1513 fail_unless(eina_value_array_setup(&other, EINA_VALUE_TYPE_CHAR, 0));
1514 fail_unless(eina_value_array_append(&other, 0xa));
1515 fail_unless(eina_value_array_append(&other, 0xb));
1516 fail_unless(eina_value_array_append(&other, 0xc));
1517 fail_unless(eina_value_convert(&other, value));
1518 fail_unless(eina_value_get(value, &out));
1519 fail_unless(out.memory != NULL);
1520 fail_unless(out.size == 3);
1521
1522 str = eina_value_to_string(value);
1523 fail_unless(str != NULL);
1524 fail_unless(strcmp(str, "BLOB(3, [0a 0b 0c])") == 0);
1525 free(str);
1526
1527 eina_value_flush(&other);
1528
1529 fail_unless(eina_value_setup(&other, EINA_VALUE_TYPE_BLOB));
1530 fail_unless(eina_value_set(&other, in));
1531 fail_unless(eina_value_convert(value, &other));
1532 fail_unless(eina_value_get(&other, &out));
1533 fail_unless(out.memory != NULL);
1534 fail_unless(out.size == 3);
1535
1536 str = eina_value_to_string(&other);
1537 fail_unless(str != NULL);
1538 fail_unless(strcmp(str, "BLOB(3, [0a 0b 0c])") == 0);
1539 free(str);
1540
1541 eina_value_flush(&other);
1542
1543 eina_value_free(value);
1544 eina_shutdown();
1545}
1546END_TEST
1547
1548
1549START_TEST(eina_value_test_struct)
1550{
1551 struct mybigst {
1552 int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, x;
1553 };
1554 const Eina_Value_Struct_Member mybigst_members[] = {
1555 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, a),
1556 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, b),
1557 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, c),
1558 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, d),
1559 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, e),
1560 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, f),
1561 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, g),
1562 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, h),
1563 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, i),
1564 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, j),
1565 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, k),
1566 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, l),
1567 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, m),
1568 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, n),
1569 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, o),
1570 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, p),
1571 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, q),
1572 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, r),
1573 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, s),
1574 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, t),
1575 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, u),
1576 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, v),
1577 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct mybigst, x),
1578 EINA_VALUE_STRUCT_MEMBER_SENTINEL
1579 };
1580 const Eina_Value_Struct_Desc mybigst_desc = {
1581 EINA_VALUE_STRUCT_DESC_VERSION,
1582 EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH,
1583 mybigst_members, 23, sizeof(struct mybigst)
1584 };
1585 struct myst {
1586 int i;
1587 char c;
1588 };
1589 const Eina_Value_Struct_Member myst_members[] = {
1590 {"i", EINA_VALUE_TYPE_INT, 0},
1591 {"c", EINA_VALUE_TYPE_CHAR, 4},
1592 {NULL, NULL, 0}
1593 };
1594 const Eina_Value_Struct_Desc myst_desc = {
1595 EINA_VALUE_STRUCT_DESC_VERSION,
1596 NULL, myst_members, 2, sizeof(struct myst)
1597 };
1598 Eina_Value *value, other;
1599 int i;
1600 char c;
1601 char *str;
1602
1603 eina_init();
1604
1605 value = eina_value_struct_new(&myst_desc);
1606 fail_unless(value != NULL);
1607
1608 fail_unless(eina_value_struct_set(value, "i", 5678));
1609 fail_unless(eina_value_struct_set(value, "c", 0xf));
1610
1611 fail_unless(eina_value_struct_get(value, "i", &i));
1612 fail_unless(i == 5678);
1613 fail_unless(eina_value_struct_get(value, "c", &c));
1614 fail_unless(c == 0xf);
1615
1616 fail_unless(eina_value_struct_member_value_get
1617 (value, myst_members + 0, &other));
1618 fail_unless(other.type == EINA_VALUE_TYPE_INT);
1619 fail_unless(eina_value_get(&other, &i));
1620 fail_unless(i == 5678);
1621 eina_value_flush(&other);
1622
1623 fail_unless(eina_value_struct_member_value_get
1624 (value, myst_members + 1, &other));
1625 fail_unless(other.type == EINA_VALUE_TYPE_CHAR);
1626 fail_unless(eina_value_get(&other, &c));
1627 fail_unless(c = 0xf);
1628 eina_value_flush(&other);
1629
1630 str = eina_value_to_string(value);
1631 fail_unless(str != NULL);
1632 fail_unless(strcmp(str, "{i: 5678, c: 15}") == 0);
1633 free(str);
1634
1635 fail_if(eina_value_struct_get(value, "x", 1234));
1636
1637 i = 0x11223344;
1638 fail_unless(eina_value_struct_pset(value, "i", &i));
1639 i = -1;
1640 fail_unless(eina_value_struct_pget(value, "i", &i));
1641 fail_unless(i == 0x11223344);
1642
1643 fail_unless(eina_value_copy(value, &other));
1644 str = eina_value_to_string(&other);
1645 fail_unless(str != NULL);
1646 fail_unless(strcmp(str, "{i: 287454020, c: 15}") == 0);
1647 free(str);
1648
1649 eina_value_flush(&other);
1650
1651 fail_unless(eina_value_struct_setup(&other, &mybigst_desc));
1652 fail_unless(eina_value_struct_set(&other, "a", 1) );
1653 fail_unless(eina_value_struct_set(&other, "b", 2));
1654 fail_unless(eina_value_struct_set(&other, "c", 3));
1655 fail_unless(eina_value_struct_set(&other, "d", 4));
1656 fail_unless(eina_value_struct_set(&other, "e", 5));
1657 fail_unless(eina_value_struct_set(&other, "f", 6));
1658 fail_unless(eina_value_struct_set(&other, "g", 7));
1659 fail_unless(eina_value_struct_set(&other, "h", 8));
1660 fail_unless(eina_value_struct_set(&other, "i", 9));
1661 fail_unless(eina_value_struct_set(&other, "j", 10));
1662 fail_unless(eina_value_struct_set(&other, "k", 12));
1663 fail_unless(eina_value_struct_set(&other, "l", 13));
1664 fail_unless(eina_value_struct_set(&other, "m", 14));
1665 fail_unless(eina_value_struct_set(&other, "n", 15));
1666 fail_unless(eina_value_struct_set(&other, "o", 16));
1667 fail_unless(eina_value_struct_set(&other, "p", 17));
1668 fail_unless(eina_value_struct_set(&other, "q", 18));
1669 fail_unless(eina_value_struct_set(&other, "r", 19));
1670 fail_unless(eina_value_struct_set(&other, "s", 20));
1671 fail_unless(eina_value_struct_set(&other, "t", 21));
1672 fail_unless(eina_value_struct_set(&other, "u", 22));
1673 fail_unless(eina_value_struct_set(&other, "v", 23));
1674 fail_unless(eina_value_struct_set(&other, "x", 24));
1675
1676 fail_unless(eina_value_struct_get(&other, "a", &i));
1677 fail_unless(i == 1);
1678 fail_unless(eina_value_struct_get(&other, "b", &i));
1679 fail_unless(i == 2);
1680 fail_unless(eina_value_struct_get(&other, "c", &i));
1681 fail_unless(i == 3);
1682 fail_unless(eina_value_struct_get(&other, "d", &i));
1683 fail_unless(i == 4);
1684 fail_unless(eina_value_struct_get(&other, "e", &i));
1685 fail_unless(i == 5);
1686 fail_unless(eina_value_struct_get(&other, "f", &i));
1687 fail_unless(i == 6);
1688 fail_unless(eina_value_struct_get(&other, "g", &i));
1689 fail_unless(i == 7);
1690 fail_unless(eina_value_struct_get(&other, "h", &i));
1691 fail_unless(i == 8);
1692 fail_unless(eina_value_struct_get(&other, "i", &i));
1693 fail_unless(i == 9);
1694 fail_unless(eina_value_struct_get(&other, "j", &i));
1695 fail_unless(i == 10);
1696 fail_unless(eina_value_struct_get(&other, "k", &i));
1697 fail_unless(i == 12);
1698 fail_unless(eina_value_struct_get(&other, "l", &i));
1699 fail_unless(i == 13);
1700 fail_unless(eina_value_struct_get(&other, "m", &i));
1701 fail_unless(i == 14);
1702 fail_unless(eina_value_struct_get(&other, "n", &i));
1703 fail_unless(i == 15);
1704 fail_unless(eina_value_struct_get(&other, "o", &i));
1705 fail_unless(i == 16);
1706 fail_unless(eina_value_struct_get(&other, "p", &i));
1707 fail_unless(i == 17);
1708 fail_unless(eina_value_struct_get(&other, "q", &i));
1709 fail_unless(i == 18);
1710 fail_unless(eina_value_struct_get(&other, "r", &i));
1711 fail_unless(i == 19);
1712 fail_unless(eina_value_struct_get(&other, "s", &i));
1713 fail_unless(i == 20);
1714 fail_unless(eina_value_struct_get(&other, "t", &i));
1715 fail_unless(i == 21);
1716 fail_unless(eina_value_struct_get(&other, "u", &i));
1717 fail_unless(i == 22);
1718 fail_unless(eina_value_struct_get(&other, "v", &i));
1719 fail_unless(i == 23);
1720 fail_unless(eina_value_struct_get(&other, "x", &i));
1721 fail_unless(i == 24);
1722
1723 str = eina_value_to_string(&other);
1724 fail_unless(str != NULL);
1725 fail_unless(strcmp(str, "{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 12, l: 13, m: 14, n: 15, o: 16, p: 17, q: 18, r: 19, s: 20, t: 21, u: 22, v: 23, x: 24}") == 0);
1726 free(str);
1727
1728 eina_value_flush(&other);
1729 eina_value_free(value);
1730 eina_shutdown();
1731}
1732END_TEST
1733
1734
1735START_TEST(eina_value_test_array_of_struct)
1736{
1737 struct myst {
1738 int a, b, c;
1739 const char *s;
1740 };
1741 const Eina_Value_Struct_Member myst_members[] = {
1742 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, a),
1743 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, b),
1744 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, c),
1745 EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_STRING, struct myst, s),
1746 EINA_VALUE_STRUCT_MEMBER_SENTINEL
1747 };
1748 const Eina_Value_Struct_Desc myst_desc = {
1749 EINA_VALUE_STRUCT_DESC_VERSION,
1750 EINA_VALUE_STRUCT_OPERATIONS_BINSEARCH,
1751 myst_members, 4, sizeof(struct myst)
1752 };
1753 Eina_Value *value, array_item;
1754 char *str;
1755 int i;
1756
1757 eina_init();
1758
1759 value = eina_value_array_new(EINA_VALUE_TYPE_STRUCT, 0);
1760 fail_unless(value != NULL);
1761
1762 for (i = 0; i < 10; i++)
1763 {
1764 Eina_Value_Struct desc;
1765 struct myst st;
1766 char buf[64];
1767
1768 snprintf(buf, sizeof(buf), "item%02d", i);
1769 st.a = i;
1770 st.b = i * 10;
1771 st.c = i * 100;
1772 st.s = buf;
1773
1774 desc.desc = &myst_desc;
1775 desc.memory = &st;
1776 fail_unless(eina_value_array_append(value, desc));
1777 }
1778
1779 str = eina_value_to_string(value);
1780 fail_unless(str != NULL);
1781 fail_unless(strcmp(str, "["
1782 "{a: 0, b: 0, c: 0, s: item00}, "
1783 "{a: 1, b: 10, c: 100, s: item01}, "
1784 "{a: 2, b: 20, c: 200, s: item02}, "
1785 "{a: 3, b: 30, c: 300, s: item03}, "
1786 "{a: 4, b: 40, c: 400, s: item04}, "
1787 "{a: 5, b: 50, c: 500, s: item05}, "
1788 "{a: 6, b: 60, c: 600, s: item06}, "
1789 "{a: 7, b: 70, c: 700, s: item07}, "
1790 "{a: 8, b: 80, c: 800, s: item08}, "
1791 "{a: 9, b: 90, c: 900, s: item09}"
1792 "]") == 0);
1793 free(str);
1794
1795 eina_value_array_value_get(value, 2, &array_item);
1796 eina_value_struct_get(&array_item, "a", &i);
1797 ck_assert_int_eq(i, 2);
1798 eina_value_struct_get(&array_item, "b", &i);
1799 ck_assert_int_eq(i, 20);
1800 eina_value_struct_get(&array_item, "c", &i);
1801 ck_assert_int_eq(i, 200);
1802 eina_value_struct_get(&array_item, "s", &str);
1803 ck_assert_str_eq(str, "item02");
1804 eina_value_flush(&array_item);
1805
1806 eina_value_free(value);
1807 eina_shutdown();
1808}
1809END_TEST
1810
1811
1812START_TEST(eina_value_test_model)
1813{
1814 Eina_Value *value, inv;
1815 Eina_Model *model, *m;
1816 char *str;
1817
1818 eina_init();
1819
1820 value = eina_value_new(EINA_VALUE_TYPE_MODEL);
1821 fail_unless(value != NULL);
1822
1823 model = eina_model_new(EINA_MODEL_TYPE_GENERIC);
1824 fail_unless(model != NULL);
1825
1826 fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT));
1827 fail_unless(eina_value_set(&inv, 1234));
1828 fail_unless(eina_model_property_set(model, "i", &inv));
1829 eina_value_flush(&inv);
1830
1831 fail_unless(eina_value_set(value, model));
1832 fail_unless(eina_model_refcount(model) == 2);
1833
1834 fail_unless(eina_value_get(value, &m));
1835 fail_unless(m == model);
1836 fail_unless(eina_model_refcount(m) == 2);
1837
1838 fail_unless(eina_value_pset(value, &model));
1839 fail_unless(eina_model_refcount(model) == 2);
1840
1841 str = eina_value_to_string(value);
1842 fail_unless(str != NULL);
1843 fail_unless(strcmp(str, "Eina_Model_Type_Generic({i: 1234}, [])") == 0);
1844 free(str);
1845
1846 eina_value_free(value);
1847
1848 fail_unless(eina_model_refcount(model) == 1);
1849 eina_model_unref(model);
1850
1851 eina_shutdown();
1852}
1853END_TEST
1854
1855void
1856eina_test_value(TCase *tc)
1857{
1858 tcase_add_test(tc, eina_value_test_simple);
1859 tcase_add_test(tc, eina_value_test_string);
1860 tcase_add_test(tc, eina_value_test_pvariant);
1861 tcase_add_test(tc, eina_value_test_compare);
1862 tcase_add_test(tc, eina_value_test_to_string);
1863 tcase_add_test(tc, eina_value_test_convert_char);
1864 tcase_add_test(tc, eina_value_test_convert_uchar);
1865 // TODO: other converters...
1866 tcase_add_test(tc, eina_value_test_array);
1867 tcase_add_test(tc, eina_value_test_list);
1868 tcase_add_test(tc, eina_value_test_hash);
1869 tcase_add_test(tc, eina_value_test_timeval);
1870 tcase_add_test(tc, eina_value_test_blob);
1871 tcase_add_test(tc, eina_value_test_struct);
1872 tcase_add_test(tc, eina_value_test_array_of_struct);
1873 tcase_add_test(tc, eina_value_test_model);
1874}
diff --git a/libraries/eina/src/tests/evas_hash.c b/libraries/eina/src/tests/evas_hash.c
deleted file mode 100644
index 33615af..0000000
--- a/libraries/eina/src/tests/evas_hash.c
+++ /dev/null
@@ -1,536 +0,0 @@
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
deleted file mode 100644
index 3df15ed..0000000
--- a/libraries/eina/src/tests/evas_list.c
+++ /dev/null
@@ -1,1093 +0,0 @@
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 unsigned 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
deleted file mode 100644
index 7098214..0000000
--- a/libraries/eina/src/tests/evas_mempool.c
+++ /dev/null
@@ -1,200 +0,0 @@
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 __UNUSED__)
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
deleted file mode 100644
index 983c434..0000000
--- a/libraries/eina/src/tests/evas_mempool.h
+++ /dev/null
@@ -1,21 +0,0 @@
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
deleted file mode 100644
index 8ba4267..0000000
--- a/libraries/eina/src/tests/evas_object_list.c
+++ /dev/null
@@ -1,183 +0,0 @@
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
deleted file mode 100644
index 6e8797c..0000000
--- a/libraries/eina/src/tests/evas_stringshare.c
+++ /dev/null
@@ -1,275 +0,0 @@
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
deleted file mode 100644
index d9fc2af..0000000
--- a/libraries/eina/src/tests/strlog
+++ /dev/null
@@ -1,46999 +0,0 @@
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]);