From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje. Note that embryo wont be used, but I'm not sure yet if you can build edje without it. --- libraries/eina/src/Makefile.am | 17 + libraries/eina/src/Makefile.in | 637 + libraries/eina/src/examples/Makefile.am | 84 + libraries/eina/src/examples/Makefile.in | 954 + libraries/eina/src/examples/eina_accessor_01.c | 55 + libraries/eina/src/examples/eina_array_01.c | 51 + libraries/eina/src/examples/eina_array_02.c | 57 + libraries/eina/src/examples/eina_error_01.c | 80 + libraries/eina/src/examples/eina_file_01.c | 45 + libraries/eina/src/examples/eina_hash_01.c | 195 + libraries/eina/src/examples/eina_hash_02.c | 144 + libraries/eina/src/examples/eina_hash_03.c | 195 + libraries/eina/src/examples/eina_hash_04.c | 195 + libraries/eina/src/examples/eina_hash_05.c | 198 + libraries/eina/src/examples/eina_hash_06.c | 198 + libraries/eina/src/examples/eina_hash_07.c | 219 + libraries/eina/src/examples/eina_hash_08.c | 125 + libraries/eina/src/examples/eina_inlist_01.c | 96 + libraries/eina/src/examples/eina_inlist_02.c | 64 + libraries/eina/src/examples/eina_inlist_03.c | 73 + libraries/eina/src/examples/eina_iterator_01.c | 66 + libraries/eina/src/examples/eina_list_01.c | 44 + libraries/eina/src/examples/eina_list_02.c | 55 + libraries/eina/src/examples/eina_list_03.c | 45 + libraries/eina/src/examples/eina_list_04.c | 36 + libraries/eina/src/examples/eina_log_01.c | 27 + libraries/eina/src/examples/eina_log_02.c | 38 + libraries/eina/src/examples/eina_log_03.c | 78 + libraries/eina/src/examples/eina_str_01.c | 65 + libraries/eina/src/examples/eina_strbuf_01.c | 41 + libraries/eina/src/examples/eina_tiler_01.c | 316 + libraries/eina/src/include/Eina.h | 194 + libraries/eina/src/include/Makefile.am | 89 + libraries/eina/src/include/Makefile.in | 560 + libraries/eina/src/include/eina_accessor.h | 340 + libraries/eina/src/include/eina_array.h | 449 + libraries/eina/src/include/eina_benchmark.h | 453 + libraries/eina/src/include/eina_binbuf.h | 217 + libraries/eina/src/include/eina_binshare.h | 193 + libraries/eina/src/include/eina_clist.h | 456 + libraries/eina/src/include/eina_config.h | 67 + libraries/eina/src/include/eina_config.h.in | 67 + libraries/eina/src/include/eina_convert.h | 374 + libraries/eina/src/include/eina_counter.h | 213 + libraries/eina/src/include/eina_cpu.h | 39 + libraries/eina/src/include/eina_error.h | 198 + libraries/eina/src/include/eina_file.h | 392 + libraries/eina/src/include/eina_fp.h | 111 + libraries/eina/src/include/eina_hamster.h | 58 + libraries/eina/src/include/eina_hash.h | 1040 + libraries/eina/src/include/eina_inline_array.x | 164 + libraries/eina/src/include/eina_inline_f16p16.x | 83 + libraries/eina/src/include/eina_inline_f32p32.x | 110 + libraries/eina/src/include/eina_inline_f8p24.x | 82 + libraries/eina/src/include/eina_inline_fp.x | 153 + libraries/eina/src/include/eina_inline_hash.x | 151 + libraries/eina/src/include/eina_inline_list.x | 67 + .../eina/src/include/eina_inline_lock_posix.x | 509 + libraries/eina/src/include/eina_inline_lock_void.x | 247 + .../eina/src/include/eina_inline_lock_win32.x | 466 + .../eina/src/include/eina_inline_lock_wince.x | 178 + libraries/eina/src/include/eina_inline_log.x | 197 + libraries/eina/src/include/eina_inline_mempool.x | 127 + libraries/eina/src/include/eina_inline_rbtree.x | 50 + libraries/eina/src/include/eina_inline_rectangle.x | 254 + libraries/eina/src/include/eina_inline_str.x | 76 + .../eina/src/include/eina_inline_stringshare.x | 91 + libraries/eina/src/include/eina_inline_tiler.x | 151 + libraries/eina/src/include/eina_inline_trash.x | 90 + .../eina/src/include/eina_inline_ustringshare.x | 93 + libraries/eina/src/include/eina_inlist.h | 813 + libraries/eina/src/include/eina_iterator.h | 337 + libraries/eina/src/include/eina_lalloc.h | 60 + libraries/eina/src/include/eina_list.h | 1631 + libraries/eina/src/include/eina_lock.h | 125 + libraries/eina/src/include/eina_log.h | 888 + libraries/eina/src/include/eina_magic.h | 322 + libraries/eina/src/include/eina_main.h | 162 + libraries/eina/src/include/eina_matrixsparse.h | 399 + libraries/eina/src/include/eina_mempool.h | 123 + libraries/eina/src/include/eina_mmap.h | 59 + libraries/eina/src/include/eina_module.h | 343 + libraries/eina/src/include/eina_prefix.h | 228 + libraries/eina/src/include/eina_quadtree.h | 53 + libraries/eina/src/include/eina_rbtree.h | 271 + libraries/eina/src/include/eina_rectangle.h | 239 + libraries/eina/src/include/eina_refcount.h | 76 + libraries/eina/src/include/eina_safety_checks.h | 254 + libraries/eina/src/include/eina_sched.h | 39 + .../eina/src/include/eina_simple_xml_parser.h | 386 + libraries/eina/src/include/eina_str.h | 325 + libraries/eina/src/include/eina_strbuf.h | 605 + libraries/eina/src/include/eina_stringshare.h | 321 + libraries/eina/src/include/eina_tiler.h | 310 + libraries/eina/src/include/eina_trash.h | 100 + libraries/eina/src/include/eina_types.h | 282 + libraries/eina/src/include/eina_unicode.h | 177 + libraries/eina/src/include/eina_ustrbuf.h | 446 + libraries/eina/src/include/eina_ustringshare.h | 200 + libraries/eina/src/include/eina_xattr.h | 168 + libraries/eina/src/lib/Makefile.am | 171 + libraries/eina/src/lib/Makefile.in | 1226 + libraries/eina/src/lib/eina_accessor.c | 176 + libraries/eina/src/lib/eina_array.c | 491 + libraries/eina/src/lib/eina_benchmark.c | 372 + libraries/eina/src/lib/eina_binbuf.c | 62 + libraries/eina/src/lib/eina_binbuf_template_c.x | 144 + libraries/eina/src/lib/eina_binshare.c | 127 + libraries/eina/src/lib/eina_convert.c | 483 + libraries/eina/src/lib/eina_counter.c | 362 + libraries/eina/src/lib/eina_cpu.c | 207 + libraries/eina/src/lib/eina_error.c | 279 + libraries/eina/src/lib/eina_file.c | 1187 + libraries/eina/src/lib/eina_file_win32.c | 1021 + libraries/eina/src/lib/eina_fp.c | 532 + libraries/eina/src/lib/eina_hamster.c | 113 + libraries/eina/src/lib/eina_hash.c | 1375 + libraries/eina/src/lib/eina_inlist.c | 909 + libraries/eina/src/lib/eina_iterator.c | 172 + libraries/eina/src/lib/eina_lalloc.c | 158 + libraries/eina/src/lib/eina_list.c | 1490 + libraries/eina/src/lib/eina_log.c | 1852 + libraries/eina/src/lib/eina_magic.c | 320 + libraries/eina/src/lib/eina_main.c | 431 + libraries/eina/src/lib/eina_matrixsparse.c | 1421 + libraries/eina/src/lib/eina_mempool.c | 387 + libraries/eina/src/lib/eina_mmap.c | 185 + libraries/eina/src/lib/eina_module.c | 599 + libraries/eina/src/lib/eina_prefix.c | 727 + libraries/eina/src/lib/eina_private.h | 140 + libraries/eina/src/lib/eina_quadtree.c | 935 + libraries/eina/src/lib/eina_rbtree.c | 518 + libraries/eina/src/lib/eina_rectangle.c | 568 + libraries/eina/src/lib/eina_safety_checks.c | 90 + libraries/eina/src/lib/eina_sched.c | 94 + libraries/eina/src/lib/eina_share_common.c | 977 + libraries/eina/src/lib/eina_share_common.h | 103 + libraries/eina/src/lib/eina_simple_xml_parser.c | 1070 + libraries/eina/src/lib/eina_str.c | 462 + libraries/eina/src/lib/eina_strbuf.c | 202 + libraries/eina/src/lib/eina_strbuf_common.c | 874 + libraries/eina/src/lib/eina_strbuf_common.h | 120 + libraries/eina/src/lib/eina_strbuf_template_c.x | 97 + libraries/eina/src/lib/eina_stringshare.c | 751 + libraries/eina/src/lib/eina_tiler.c | 1276 + libraries/eina/src/lib/eina_unicode.c | 405 + libraries/eina/src/lib/eina_ustrbuf.c | 74 + libraries/eina/src/lib/eina_ustringshare.c | 132 + libraries/eina/src/lib/eina_value.c | 47 + libraries/eina/src/lib/eina_xattr.c | 292 + libraries/eina/src/modules/Makefile.am | 4 + libraries/eina/src/modules/Makefile.in | 631 + libraries/eina/src/modules/mp/Makefile.am | 45 + libraries/eina/src/modules/mp/Makefile.in | 639 + libraries/eina/src/modules/mp/buddy/Makefile.am | 29 + libraries/eina/src/modules/mp/buddy/Makefile.in | 643 + libraries/eina/src/modules/mp/buddy/eina_buddy.c | 292 + .../eina/src/modules/mp/chained_pool/Makefile.am | 30 + .../eina/src/modules/mp/chained_pool/Makefile.in | 644 + .../modules/mp/chained_pool/eina_chained_mempool.c | 547 + .../eina/src/modules/mp/ememoa_fixed/Makefile.am | 30 + .../eina/src/modules/mp/ememoa_fixed/Makefile.in | 644 + .../modules/mp/ememoa_fixed/eina_ememoa_fixed.c | 176 + .../eina/src/modules/mp/ememoa_unknown/Makefile.am | 30 + .../eina/src/modules/mp/ememoa_unknown/Makefile.in | 644 + .../mp/ememoa_unknown/eina_ememoa_unknown.c | 182 + .../eina/src/modules/mp/fixed_bitmap/Makefile.am | 29 + .../eina/src/modules/mp/fixed_bitmap/Makefile.in | 643 + .../modules/mp/fixed_bitmap/eina_fixed_bitmap.c | 270 + libraries/eina/src/modules/mp/one_big/Makefile.am | 30 + libraries/eina/src/modules/mp/one_big/Makefile.in | 644 + .../eina/src/modules/mp/one_big/eina_one_big.c | 336 + .../eina/src/modules/mp/pass_through/Makefile.am | 29 + .../eina/src/modules/mp/pass_through/Makefile.in | 643 + .../modules/mp/pass_through/eina_pass_through.c | 90 + libraries/eina/src/tests/Ecore_Data.h | 557 + libraries/eina/src/tests/Evas_Data.h | 195 + libraries/eina/src/tests/Makefile.am | 137 + libraries/eina/src/tests/Makefile.in | 982 + libraries/eina/src/tests/city.cc | 307 + libraries/eina/src/tests/ecore_hash.c | 949 + libraries/eina/src/tests/ecore_list.c | 2162 + libraries/eina/src/tests/ecore_sheap.c | 467 + libraries/eina/src/tests/ecore_strings.c | 160 + libraries/eina/src/tests/eina_bench.c | 105 + libraries/eina/src/tests/eina_bench.h | 36 + libraries/eina/src/tests/eina_bench_array.c | 699 + libraries/eina/src/tests/eina_bench_convert.c | 183 + libraries/eina/src/tests/eina_bench_hash.c | 545 + libraries/eina/src/tests/eina_bench_mempool.c | 188 + libraries/eina/src/tests/eina_bench_quad.c | 318 + .../eina/src/tests/eina_bench_rectangle_pool.c | 76 + libraries/eina/src/tests/eina_bench_sort.c | 222 + libraries/eina/src/tests/eina_bench_stringshare.c | 177 + .../eina/src/tests/eina_bench_stringshare_e17.c | 118 + libraries/eina/src/tests/eina_suite.c | 177 + libraries/eina/src/tests/eina_suite.h | 58 + libraries/eina/src/tests/eina_test_accessor.c | 243 + libraries/eina/src/tests/eina_test_array.c | 191 + libraries/eina/src/tests/eina_test_benchmark.c | 76 + libraries/eina/src/tests/eina_test_binbuf.c | 235 + libraries/eina/src/tests/eina_test_binshare.c | 199 + libraries/eina/src/tests/eina_test_clist.c | 89 + libraries/eina/src/tests/eina_test_convert.c | 165 + libraries/eina/src/tests/eina_test_counter.c | 108 + libraries/eina/src/tests/eina_test_error.c | 59 + libraries/eina/src/tests/eina_test_file.c | 88 + libraries/eina/src/tests/eina_test_fp.c | 93 + libraries/eina/src/tests/eina_test_hash.c | 206 + libraries/eina/src/tests/eina_test_inlist.c | 254 + libraries/eina/src/tests/eina_test_iterator.c | 465 + libraries/eina/src/tests/eina_test_lalloc.c | 89 + libraries/eina/src/tests/eina_test_list.c | 347 + libraries/eina/src/tests/eina_test_log.c | 235 + libraries/eina/src/tests/eina_test_magic.c | 96 + libraries/eina/src/tests/eina_test_main.c | 62 + libraries/eina/src/tests/eina_test_matrixsparse.c | 489 + libraries/eina/src/tests/eina_test_mempool.c | 187 + libraries/eina/src/tests/eina_test_module.c | 70 + libraries/eina/src/tests/eina_test_module_dummy.c | 22 + libraries/eina/src/tests/eina_test_quadtree.c | 195 + libraries/eina/src/tests/eina_test_rbtree.c | 452 + libraries/eina/src/tests/eina_test_rectangle.c | 115 + libraries/eina/src/tests/eina_test_sched.c | 85 + .../eina/src/tests/eina_test_simple_xml_parser.c | 73 + libraries/eina/src/tests/eina_test_str.c | 181 + libraries/eina/src/tests/eina_test_strbuf.c | 449 + libraries/eina/src/tests/eina_test_stringshare.c | 201 + libraries/eina/src/tests/eina_test_tiler.c | 184 + libraries/eina/src/tests/eina_test_ustr.c | 483 + libraries/eina/src/tests/eina_test_ustringshare.c | 119 + libraries/eina/src/tests/evas_hash.c | 536 + libraries/eina/src/tests/evas_list.c | 1093 + libraries/eina/src/tests/evas_mempool.c | 200 + libraries/eina/src/tests/evas_mempool.h | 21 + libraries/eina/src/tests/evas_object_list.c | 183 + libraries/eina/src/tests/evas_stringshare.c | 275 + libraries/eina/src/tests/strlog | 46999 +++++++++++++++++++ 238 files changed, 121944 insertions(+) create mode 100644 libraries/eina/src/Makefile.am create mode 100644 libraries/eina/src/Makefile.in create mode 100644 libraries/eina/src/examples/Makefile.am create mode 100644 libraries/eina/src/examples/Makefile.in create mode 100644 libraries/eina/src/examples/eina_accessor_01.c create mode 100644 libraries/eina/src/examples/eina_array_01.c create mode 100644 libraries/eina/src/examples/eina_array_02.c create mode 100644 libraries/eina/src/examples/eina_error_01.c create mode 100644 libraries/eina/src/examples/eina_file_01.c create mode 100644 libraries/eina/src/examples/eina_hash_01.c create mode 100644 libraries/eina/src/examples/eina_hash_02.c create mode 100644 libraries/eina/src/examples/eina_hash_03.c create mode 100644 libraries/eina/src/examples/eina_hash_04.c create mode 100644 libraries/eina/src/examples/eina_hash_05.c create mode 100644 libraries/eina/src/examples/eina_hash_06.c create mode 100644 libraries/eina/src/examples/eina_hash_07.c create mode 100644 libraries/eina/src/examples/eina_hash_08.c create mode 100644 libraries/eina/src/examples/eina_inlist_01.c create mode 100644 libraries/eina/src/examples/eina_inlist_02.c create mode 100644 libraries/eina/src/examples/eina_inlist_03.c create mode 100644 libraries/eina/src/examples/eina_iterator_01.c create mode 100644 libraries/eina/src/examples/eina_list_01.c create mode 100644 libraries/eina/src/examples/eina_list_02.c create mode 100644 libraries/eina/src/examples/eina_list_03.c create mode 100644 libraries/eina/src/examples/eina_list_04.c create mode 100644 libraries/eina/src/examples/eina_log_01.c create mode 100644 libraries/eina/src/examples/eina_log_02.c create mode 100644 libraries/eina/src/examples/eina_log_03.c create mode 100644 libraries/eina/src/examples/eina_str_01.c create mode 100644 libraries/eina/src/examples/eina_strbuf_01.c create mode 100644 libraries/eina/src/examples/eina_tiler_01.c create mode 100644 libraries/eina/src/include/Eina.h create mode 100644 libraries/eina/src/include/Makefile.am create mode 100644 libraries/eina/src/include/Makefile.in create mode 100644 libraries/eina/src/include/eina_accessor.h create mode 100644 libraries/eina/src/include/eina_array.h create mode 100644 libraries/eina/src/include/eina_benchmark.h create mode 100644 libraries/eina/src/include/eina_binbuf.h create mode 100644 libraries/eina/src/include/eina_binshare.h create mode 100644 libraries/eina/src/include/eina_clist.h create mode 100644 libraries/eina/src/include/eina_config.h create mode 100644 libraries/eina/src/include/eina_config.h.in create mode 100644 libraries/eina/src/include/eina_convert.h create mode 100644 libraries/eina/src/include/eina_counter.h create mode 100644 libraries/eina/src/include/eina_cpu.h create mode 100644 libraries/eina/src/include/eina_error.h create mode 100644 libraries/eina/src/include/eina_file.h create mode 100644 libraries/eina/src/include/eina_fp.h create mode 100644 libraries/eina/src/include/eina_hamster.h create mode 100644 libraries/eina/src/include/eina_hash.h create mode 100644 libraries/eina/src/include/eina_inline_array.x create mode 100644 libraries/eina/src/include/eina_inline_f16p16.x create mode 100644 libraries/eina/src/include/eina_inline_f32p32.x create mode 100644 libraries/eina/src/include/eina_inline_f8p24.x create mode 100644 libraries/eina/src/include/eina_inline_fp.x create mode 100644 libraries/eina/src/include/eina_inline_hash.x create mode 100644 libraries/eina/src/include/eina_inline_list.x create mode 100644 libraries/eina/src/include/eina_inline_lock_posix.x create mode 100644 libraries/eina/src/include/eina_inline_lock_void.x create mode 100644 libraries/eina/src/include/eina_inline_lock_win32.x create mode 100644 libraries/eina/src/include/eina_inline_lock_wince.x create mode 100644 libraries/eina/src/include/eina_inline_log.x create mode 100644 libraries/eina/src/include/eina_inline_mempool.x create mode 100644 libraries/eina/src/include/eina_inline_rbtree.x create mode 100644 libraries/eina/src/include/eina_inline_rectangle.x create mode 100644 libraries/eina/src/include/eina_inline_str.x create mode 100644 libraries/eina/src/include/eina_inline_stringshare.x create mode 100644 libraries/eina/src/include/eina_inline_tiler.x create mode 100644 libraries/eina/src/include/eina_inline_trash.x create mode 100644 libraries/eina/src/include/eina_inline_ustringshare.x create mode 100644 libraries/eina/src/include/eina_inlist.h create mode 100644 libraries/eina/src/include/eina_iterator.h create mode 100644 libraries/eina/src/include/eina_lalloc.h create mode 100644 libraries/eina/src/include/eina_list.h create mode 100644 libraries/eina/src/include/eina_lock.h create mode 100644 libraries/eina/src/include/eina_log.h create mode 100644 libraries/eina/src/include/eina_magic.h create mode 100644 libraries/eina/src/include/eina_main.h create mode 100644 libraries/eina/src/include/eina_matrixsparse.h create mode 100644 libraries/eina/src/include/eina_mempool.h create mode 100644 libraries/eina/src/include/eina_mmap.h create mode 100644 libraries/eina/src/include/eina_module.h create mode 100644 libraries/eina/src/include/eina_prefix.h create mode 100644 libraries/eina/src/include/eina_quadtree.h create mode 100644 libraries/eina/src/include/eina_rbtree.h create mode 100644 libraries/eina/src/include/eina_rectangle.h create mode 100644 libraries/eina/src/include/eina_refcount.h create mode 100644 libraries/eina/src/include/eina_safety_checks.h create mode 100644 libraries/eina/src/include/eina_sched.h create mode 100644 libraries/eina/src/include/eina_simple_xml_parser.h create mode 100644 libraries/eina/src/include/eina_str.h create mode 100644 libraries/eina/src/include/eina_strbuf.h create mode 100644 libraries/eina/src/include/eina_stringshare.h create mode 100644 libraries/eina/src/include/eina_tiler.h create mode 100644 libraries/eina/src/include/eina_trash.h create mode 100644 libraries/eina/src/include/eina_types.h create mode 100644 libraries/eina/src/include/eina_unicode.h create mode 100644 libraries/eina/src/include/eina_ustrbuf.h create mode 100644 libraries/eina/src/include/eina_ustringshare.h create mode 100644 libraries/eina/src/include/eina_xattr.h create mode 100644 libraries/eina/src/lib/Makefile.am create mode 100644 libraries/eina/src/lib/Makefile.in create mode 100644 libraries/eina/src/lib/eina_accessor.c create mode 100644 libraries/eina/src/lib/eina_array.c create mode 100644 libraries/eina/src/lib/eina_benchmark.c create mode 100644 libraries/eina/src/lib/eina_binbuf.c create mode 100644 libraries/eina/src/lib/eina_binbuf_template_c.x create mode 100644 libraries/eina/src/lib/eina_binshare.c create mode 100644 libraries/eina/src/lib/eina_convert.c create mode 100644 libraries/eina/src/lib/eina_counter.c create mode 100644 libraries/eina/src/lib/eina_cpu.c create mode 100644 libraries/eina/src/lib/eina_error.c create mode 100644 libraries/eina/src/lib/eina_file.c create mode 100644 libraries/eina/src/lib/eina_file_win32.c create mode 100644 libraries/eina/src/lib/eina_fp.c create mode 100644 libraries/eina/src/lib/eina_hamster.c create mode 100644 libraries/eina/src/lib/eina_hash.c create mode 100644 libraries/eina/src/lib/eina_inlist.c create mode 100644 libraries/eina/src/lib/eina_iterator.c create mode 100644 libraries/eina/src/lib/eina_lalloc.c create mode 100644 libraries/eina/src/lib/eina_list.c create mode 100644 libraries/eina/src/lib/eina_log.c create mode 100644 libraries/eina/src/lib/eina_magic.c create mode 100644 libraries/eina/src/lib/eina_main.c create mode 100644 libraries/eina/src/lib/eina_matrixsparse.c create mode 100644 libraries/eina/src/lib/eina_mempool.c create mode 100644 libraries/eina/src/lib/eina_mmap.c create mode 100644 libraries/eina/src/lib/eina_module.c create mode 100644 libraries/eina/src/lib/eina_prefix.c create mode 100644 libraries/eina/src/lib/eina_private.h create mode 100644 libraries/eina/src/lib/eina_quadtree.c create mode 100644 libraries/eina/src/lib/eina_rbtree.c create mode 100644 libraries/eina/src/lib/eina_rectangle.c create mode 100644 libraries/eina/src/lib/eina_safety_checks.c create mode 100644 libraries/eina/src/lib/eina_sched.c create mode 100644 libraries/eina/src/lib/eina_share_common.c create mode 100644 libraries/eina/src/lib/eina_share_common.h create mode 100644 libraries/eina/src/lib/eina_simple_xml_parser.c create mode 100644 libraries/eina/src/lib/eina_str.c create mode 100644 libraries/eina/src/lib/eina_strbuf.c create mode 100644 libraries/eina/src/lib/eina_strbuf_common.c create mode 100644 libraries/eina/src/lib/eina_strbuf_common.h create mode 100644 libraries/eina/src/lib/eina_strbuf_template_c.x create mode 100644 libraries/eina/src/lib/eina_stringshare.c create mode 100644 libraries/eina/src/lib/eina_tiler.c create mode 100644 libraries/eina/src/lib/eina_unicode.c create mode 100644 libraries/eina/src/lib/eina_ustrbuf.c create mode 100644 libraries/eina/src/lib/eina_ustringshare.c create mode 100644 libraries/eina/src/lib/eina_value.c create mode 100644 libraries/eina/src/lib/eina_xattr.c create mode 100644 libraries/eina/src/modules/Makefile.am create mode 100644 libraries/eina/src/modules/Makefile.in create mode 100644 libraries/eina/src/modules/mp/Makefile.am create mode 100644 libraries/eina/src/modules/mp/Makefile.in create mode 100644 libraries/eina/src/modules/mp/buddy/Makefile.am create mode 100644 libraries/eina/src/modules/mp/buddy/Makefile.in create mode 100644 libraries/eina/src/modules/mp/buddy/eina_buddy.c create mode 100644 libraries/eina/src/modules/mp/chained_pool/Makefile.am create mode 100644 libraries/eina/src/modules/mp/chained_pool/Makefile.in create mode 100644 libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c create mode 100644 libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am create mode 100644 libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in create mode 100644 libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c create mode 100644 libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am create mode 100644 libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in create mode 100644 libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c create mode 100644 libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am create mode 100644 libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in create mode 100644 libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c create mode 100644 libraries/eina/src/modules/mp/one_big/Makefile.am create mode 100644 libraries/eina/src/modules/mp/one_big/Makefile.in create mode 100644 libraries/eina/src/modules/mp/one_big/eina_one_big.c create mode 100644 libraries/eina/src/modules/mp/pass_through/Makefile.am create mode 100644 libraries/eina/src/modules/mp/pass_through/Makefile.in create mode 100644 libraries/eina/src/modules/mp/pass_through/eina_pass_through.c create mode 100644 libraries/eina/src/tests/Ecore_Data.h create mode 100644 libraries/eina/src/tests/Evas_Data.h create mode 100644 libraries/eina/src/tests/Makefile.am create mode 100644 libraries/eina/src/tests/Makefile.in create mode 100644 libraries/eina/src/tests/city.cc create mode 100644 libraries/eina/src/tests/ecore_hash.c create mode 100644 libraries/eina/src/tests/ecore_list.c create mode 100644 libraries/eina/src/tests/ecore_sheap.c create mode 100644 libraries/eina/src/tests/ecore_strings.c create mode 100644 libraries/eina/src/tests/eina_bench.c create mode 100644 libraries/eina/src/tests/eina_bench.h create mode 100644 libraries/eina/src/tests/eina_bench_array.c create mode 100644 libraries/eina/src/tests/eina_bench_convert.c create mode 100644 libraries/eina/src/tests/eina_bench_hash.c create mode 100644 libraries/eina/src/tests/eina_bench_mempool.c create mode 100644 libraries/eina/src/tests/eina_bench_quad.c create mode 100644 libraries/eina/src/tests/eina_bench_rectangle_pool.c create mode 100644 libraries/eina/src/tests/eina_bench_sort.c create mode 100644 libraries/eina/src/tests/eina_bench_stringshare.c create mode 100644 libraries/eina/src/tests/eina_bench_stringshare_e17.c create mode 100644 libraries/eina/src/tests/eina_suite.c create mode 100644 libraries/eina/src/tests/eina_suite.h create mode 100644 libraries/eina/src/tests/eina_test_accessor.c create mode 100644 libraries/eina/src/tests/eina_test_array.c create mode 100644 libraries/eina/src/tests/eina_test_benchmark.c create mode 100644 libraries/eina/src/tests/eina_test_binbuf.c create mode 100644 libraries/eina/src/tests/eina_test_binshare.c create mode 100644 libraries/eina/src/tests/eina_test_clist.c create mode 100644 libraries/eina/src/tests/eina_test_convert.c create mode 100644 libraries/eina/src/tests/eina_test_counter.c create mode 100644 libraries/eina/src/tests/eina_test_error.c create mode 100644 libraries/eina/src/tests/eina_test_file.c create mode 100644 libraries/eina/src/tests/eina_test_fp.c create mode 100644 libraries/eina/src/tests/eina_test_hash.c create mode 100644 libraries/eina/src/tests/eina_test_inlist.c create mode 100644 libraries/eina/src/tests/eina_test_iterator.c create mode 100644 libraries/eina/src/tests/eina_test_lalloc.c create mode 100644 libraries/eina/src/tests/eina_test_list.c create mode 100644 libraries/eina/src/tests/eina_test_log.c create mode 100644 libraries/eina/src/tests/eina_test_magic.c create mode 100644 libraries/eina/src/tests/eina_test_main.c create mode 100644 libraries/eina/src/tests/eina_test_matrixsparse.c create mode 100644 libraries/eina/src/tests/eina_test_mempool.c create mode 100644 libraries/eina/src/tests/eina_test_module.c create mode 100644 libraries/eina/src/tests/eina_test_module_dummy.c create mode 100644 libraries/eina/src/tests/eina_test_quadtree.c create mode 100644 libraries/eina/src/tests/eina_test_rbtree.c create mode 100644 libraries/eina/src/tests/eina_test_rectangle.c create mode 100644 libraries/eina/src/tests/eina_test_sched.c create mode 100644 libraries/eina/src/tests/eina_test_simple_xml_parser.c create mode 100644 libraries/eina/src/tests/eina_test_str.c create mode 100644 libraries/eina/src/tests/eina_test_strbuf.c create mode 100644 libraries/eina/src/tests/eina_test_stringshare.c create mode 100644 libraries/eina/src/tests/eina_test_tiler.c create mode 100644 libraries/eina/src/tests/eina_test_ustr.c create mode 100644 libraries/eina/src/tests/eina_test_ustringshare.c create mode 100644 libraries/eina/src/tests/evas_hash.c create mode 100644 libraries/eina/src/tests/evas_list.c create mode 100644 libraries/eina/src/tests/evas_mempool.c create mode 100644 libraries/eina/src/tests/evas_mempool.h create mode 100644 libraries/eina/src/tests/evas_object_list.c create mode 100644 libraries/eina/src/tests/evas_stringshare.c create mode 100644 libraries/eina/src/tests/strlog (limited to 'libraries/eina/src') diff --git a/libraries/eina/src/Makefile.am b/libraries/eina/src/Makefile.am new file mode 100644 index 0000000..7ae5ce9 --- /dev/null +++ b/libraries/eina/src/Makefile.am @@ -0,0 +1,17 @@ +SUBDIRS = lib include modules tests examples + +MAINTAINERCLEANFILES = Makefile.in + +.PHONY: benchmark + +if EFL_ENABLE_BENCHMARK + +benchmark: all + cd tests && make eina_bench + +else + +benchmark: + @echo "reconfigure with --enable-benchmark" + +endif diff --git a/libraries/eina/src/Makefile.in b/libraries/eina/src/Makefile.in new file mode 100644 index 0000000..c954fc5 --- /dev/null +++ b/libraries/eina/src/Makefile.in @@ -0,0 +1,637 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +SUBDIRS = lib include modules tests examples +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +.PHONY: benchmark + +@EFL_ENABLE_BENCHMARK_TRUE@benchmark: all +@EFL_ENABLE_BENCHMARK_TRUE@ cd tests && make eina_bench + +@EFL_ENABLE_BENCHMARK_FALSE@benchmark: +@EFL_ENABLE_BENCHMARK_FALSE@ @echo "reconfigure with --enable-benchmark" + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/examples/Makefile.am b/libraries/eina/src/examples/Makefile.am new file mode 100644 index 0000000..ea5ca6a --- /dev/null +++ b/libraries/eina/src/examples/Makefile.am @@ -0,0 +1,84 @@ +MAINTAINERCLEANFILES = Makefile.in + +pkglibdir = $(datadir)/$(PACKAGE)/examples + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include + +LDADD = \ + $(top_builddir)/src/lib/libeina.la + +SRCS = \ + eina_accessor_01.c \ + eina_array_01.c \ + eina_array_02.c \ + eina_error_01.c \ + eina_file_01.c \ + eina_hash_01.c \ + eina_hash_02.c \ + eina_hash_03.c \ + eina_hash_04.c \ + eina_hash_05.c \ + eina_hash_06.c \ + eina_hash_07.c \ + eina_hash_08.c \ + eina_iterator_01.c \ + eina_list_01.c \ + eina_list_02.c \ + eina_list_03.c \ + eina_list_04.c \ + eina_log_01.c \ + eina_log_02.c \ + eina_log_03.c \ + eina_inlist_01.c \ + eina_inlist_02.c \ + eina_inlist_03.c \ + eina_str_01.c \ + eina_strbuf_01.c \ + eina_tiler_01.c + +pkglib_PROGRAMS = + +if EFL_INSTALL_EXAMPLES +filesdir = $(datadir)/$(PACKAGE)/examples +files_DATA = $(SRCS) +endif + +if EFL_BUILD_EXAMPLES +pkglib_PROGRAMS += \ + eina_accessor_01 \ + eina_array_01 \ + eina_array_02 \ + eina_error_01 \ + eina_file_01 \ + eina_hash_01 \ + eina_hash_02 \ + eina_hash_03 \ + eina_hash_04 \ + eina_hash_05 \ + eina_hash_06 \ + eina_hash_07 \ + eina_hash_08 \ + eina_iterator_01 \ + eina_list_01 \ + eina_list_02 \ + eina_list_03 \ + eina_list_04 \ + eina_log_01 \ + eina_log_02 \ + eina_log_03 \ + eina_inlist_01 \ + eina_inlist_02 \ + eina_inlist_03 \ + eina_str_01 \ + eina_strbuf_01 + +if BUILD_TILER_EXAMPLE +AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@ +pkglib_PROGRAMS += eina_tiler_01 +eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@ +endif + +endif diff --git a/libraries/eina/src/examples/Makefile.in b/libraries/eina/src/examples/Makefile.in new file mode 100644 index 0000000..3379e55 --- /dev/null +++ b/libraries/eina/src/examples/Makefile.in @@ -0,0 +1,954 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +pkglib_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) +@EFL_BUILD_EXAMPLES_TRUE@am__append_1 = \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_accessor_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01 \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01 + +@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_2 = @ECORE_EVAS_CFLAGS@ +@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_3 = eina_tiler_01 +subdir = src/examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_1 = eina_accessor_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01$(EXEEXT) \ +@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01$(EXEEXT) +@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_2 = eina_tiler_01$(EXEEXT) +am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(filesdir)" +PROGRAMS = $(pkglib_PROGRAMS) +eina_accessor_01_SOURCES = eina_accessor_01.c +eina_accessor_01_OBJECTS = eina_accessor_01.$(OBJEXT) +eina_accessor_01_LDADD = $(LDADD) +eina_accessor_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +eina_array_01_SOURCES = eina_array_01.c +eina_array_01_OBJECTS = eina_array_01.$(OBJEXT) +eina_array_01_LDADD = $(LDADD) +eina_array_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_array_02_SOURCES = eina_array_02.c +eina_array_02_OBJECTS = eina_array_02.$(OBJEXT) +eina_array_02_LDADD = $(LDADD) +eina_array_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_error_01_SOURCES = eina_error_01.c +eina_error_01_OBJECTS = eina_error_01.$(OBJEXT) +eina_error_01_LDADD = $(LDADD) +eina_error_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_file_01_SOURCES = eina_file_01.c +eina_file_01_OBJECTS = eina_file_01.$(OBJEXT) +eina_file_01_LDADD = $(LDADD) +eina_file_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_01_SOURCES = eina_hash_01.c +eina_hash_01_OBJECTS = eina_hash_01.$(OBJEXT) +eina_hash_01_LDADD = $(LDADD) +eina_hash_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_02_SOURCES = eina_hash_02.c +eina_hash_02_OBJECTS = eina_hash_02.$(OBJEXT) +eina_hash_02_LDADD = $(LDADD) +eina_hash_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_03_SOURCES = eina_hash_03.c +eina_hash_03_OBJECTS = eina_hash_03.$(OBJEXT) +eina_hash_03_LDADD = $(LDADD) +eina_hash_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_04_SOURCES = eina_hash_04.c +eina_hash_04_OBJECTS = eina_hash_04.$(OBJEXT) +eina_hash_04_LDADD = $(LDADD) +eina_hash_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_05_SOURCES = eina_hash_05.c +eina_hash_05_OBJECTS = eina_hash_05.$(OBJEXT) +eina_hash_05_LDADD = $(LDADD) +eina_hash_05_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_06_SOURCES = eina_hash_06.c +eina_hash_06_OBJECTS = eina_hash_06.$(OBJEXT) +eina_hash_06_LDADD = $(LDADD) +eina_hash_06_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_07_SOURCES = eina_hash_07.c +eina_hash_07_OBJECTS = eina_hash_07.$(OBJEXT) +eina_hash_07_LDADD = $(LDADD) +eina_hash_07_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_hash_08_SOURCES = eina_hash_08.c +eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT) +eina_hash_08_LDADD = $(LDADD) +eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_inlist_01_SOURCES = eina_inlist_01.c +eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT) +eina_inlist_01_LDADD = $(LDADD) +eina_inlist_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_inlist_02_SOURCES = eina_inlist_02.c +eina_inlist_02_OBJECTS = eina_inlist_02.$(OBJEXT) +eina_inlist_02_LDADD = $(LDADD) +eina_inlist_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_inlist_03_SOURCES = eina_inlist_03.c +eina_inlist_03_OBJECTS = eina_inlist_03.$(OBJEXT) +eina_inlist_03_LDADD = $(LDADD) +eina_inlist_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_iterator_01_SOURCES = eina_iterator_01.c +eina_iterator_01_OBJECTS = eina_iterator_01.$(OBJEXT) +eina_iterator_01_LDADD = $(LDADD) +eina_iterator_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_list_01_SOURCES = eina_list_01.c +eina_list_01_OBJECTS = eina_list_01.$(OBJEXT) +eina_list_01_LDADD = $(LDADD) +eina_list_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_list_02_SOURCES = eina_list_02.c +eina_list_02_OBJECTS = eina_list_02.$(OBJEXT) +eina_list_02_LDADD = $(LDADD) +eina_list_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_list_03_SOURCES = eina_list_03.c +eina_list_03_OBJECTS = eina_list_03.$(OBJEXT) +eina_list_03_LDADD = $(LDADD) +eina_list_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_list_04_SOURCES = eina_list_04.c +eina_list_04_OBJECTS = eina_list_04.$(OBJEXT) +eina_list_04_LDADD = $(LDADD) +eina_list_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_log_01_SOURCES = eina_log_01.c +eina_log_01_OBJECTS = eina_log_01.$(OBJEXT) +eina_log_01_LDADD = $(LDADD) +eina_log_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_log_02_SOURCES = eina_log_02.c +eina_log_02_OBJECTS = eina_log_02.$(OBJEXT) +eina_log_02_LDADD = $(LDADD) +eina_log_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_log_03_SOURCES = eina_log_03.c +eina_log_03_OBJECTS = eina_log_03.$(OBJEXT) +eina_log_03_LDADD = $(LDADD) +eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_str_01_SOURCES = eina_str_01.c +eina_str_01_OBJECTS = eina_str_01.$(OBJEXT) +eina_str_01_LDADD = $(LDADD) +eina_str_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_strbuf_01_SOURCES = eina_strbuf_01.c +eina_strbuf_01_OBJECTS = eina_strbuf_01.$(OBJEXT) +eina_strbuf_01_LDADD = $(LDADD) +eina_strbuf_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +eina_tiler_01_SOURCES = eina_tiler_01.c +eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT) +@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ + eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ + eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ + eina_hash_07.c eina_hash_08.c eina_inlist_01.c \ + eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \ + eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \ + eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \ + eina_strbuf_01.c eina_tiler_01.c +DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \ + eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \ + eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \ + eina_hash_07.c eina_hash_08.c eina_inlist_01.c \ + eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \ + eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \ + eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \ + eina_strbuf_01.c eina_tiler_01.c +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +DATA = $(files_DATA) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibdir = $(datadir)/$(PACKAGE)/examples +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = -I. -I$(top_srcdir)/src/include \ + -I$(top_builddir)/src/include $(am__append_2) +LDADD = \ + $(top_builddir)/src/lib/libeina.la + +SRCS = \ + eina_accessor_01.c \ + eina_array_01.c \ + eina_array_02.c \ + eina_error_01.c \ + eina_file_01.c \ + eina_hash_01.c \ + eina_hash_02.c \ + eina_hash_03.c \ + eina_hash_04.c \ + eina_hash_05.c \ + eina_hash_06.c \ + eina_hash_07.c \ + eina_hash_08.c \ + eina_iterator_01.c \ + eina_list_01.c \ + eina_list_02.c \ + eina_list_03.c \ + eina_list_04.c \ + eina_log_01.c \ + eina_log_02.c \ + eina_log_03.c \ + eina_inlist_01.c \ + eina_inlist_02.c \ + eina_inlist_03.c \ + eina_str_01.c \ + eina_strbuf_01.c \ + eina_tiler_01.c + +@EFL_INSTALL_EXAMPLES_TRUE@filesdir = $(datadir)/$(PACKAGE)/examples +@EFL_INSTALL_EXAMPLES_TRUE@files_DATA = $(SRCS) +@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pkglibPROGRAMS: $(pkglib_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" + @list='$(pkglib_PROGRAMS)'; test -n "$(pkglibdir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-pkglibPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(pkglib_PROGRAMS)'; test -n "$(pkglibdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkglibdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkglibdir)" && rm -f $$files + +clean-pkglibPROGRAMS: + @list='$(pkglib_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +eina_accessor_01$(EXEEXT): $(eina_accessor_01_OBJECTS) $(eina_accessor_01_DEPENDENCIES) + @rm -f eina_accessor_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_accessor_01_OBJECTS) $(eina_accessor_01_LDADD) $(LIBS) +eina_array_01$(EXEEXT): $(eina_array_01_OBJECTS) $(eina_array_01_DEPENDENCIES) + @rm -f eina_array_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_array_01_OBJECTS) $(eina_array_01_LDADD) $(LIBS) +eina_array_02$(EXEEXT): $(eina_array_02_OBJECTS) $(eina_array_02_DEPENDENCIES) + @rm -f eina_array_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_array_02_OBJECTS) $(eina_array_02_LDADD) $(LIBS) +eina_error_01$(EXEEXT): $(eina_error_01_OBJECTS) $(eina_error_01_DEPENDENCIES) + @rm -f eina_error_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_error_01_OBJECTS) $(eina_error_01_LDADD) $(LIBS) +eina_file_01$(EXEEXT): $(eina_file_01_OBJECTS) $(eina_file_01_DEPENDENCIES) + @rm -f eina_file_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_file_01_OBJECTS) $(eina_file_01_LDADD) $(LIBS) +eina_hash_01$(EXEEXT): $(eina_hash_01_OBJECTS) $(eina_hash_01_DEPENDENCIES) + @rm -f eina_hash_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_01_OBJECTS) $(eina_hash_01_LDADD) $(LIBS) +eina_hash_02$(EXEEXT): $(eina_hash_02_OBJECTS) $(eina_hash_02_DEPENDENCIES) + @rm -f eina_hash_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_02_OBJECTS) $(eina_hash_02_LDADD) $(LIBS) +eina_hash_03$(EXEEXT): $(eina_hash_03_OBJECTS) $(eina_hash_03_DEPENDENCIES) + @rm -f eina_hash_03$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_03_OBJECTS) $(eina_hash_03_LDADD) $(LIBS) +eina_hash_04$(EXEEXT): $(eina_hash_04_OBJECTS) $(eina_hash_04_DEPENDENCIES) + @rm -f eina_hash_04$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_04_OBJECTS) $(eina_hash_04_LDADD) $(LIBS) +eina_hash_05$(EXEEXT): $(eina_hash_05_OBJECTS) $(eina_hash_05_DEPENDENCIES) + @rm -f eina_hash_05$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_05_OBJECTS) $(eina_hash_05_LDADD) $(LIBS) +eina_hash_06$(EXEEXT): $(eina_hash_06_OBJECTS) $(eina_hash_06_DEPENDENCIES) + @rm -f eina_hash_06$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_06_OBJECTS) $(eina_hash_06_LDADD) $(LIBS) +eina_hash_07$(EXEEXT): $(eina_hash_07_OBJECTS) $(eina_hash_07_DEPENDENCIES) + @rm -f eina_hash_07$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_07_OBJECTS) $(eina_hash_07_LDADD) $(LIBS) +eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES) + @rm -f eina_hash_08$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_hash_08_OBJECTS) $(eina_hash_08_LDADD) $(LIBS) +eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES) + @rm -f eina_inlist_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_inlist_01_OBJECTS) $(eina_inlist_01_LDADD) $(LIBS) +eina_inlist_02$(EXEEXT): $(eina_inlist_02_OBJECTS) $(eina_inlist_02_DEPENDENCIES) + @rm -f eina_inlist_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_inlist_02_OBJECTS) $(eina_inlist_02_LDADD) $(LIBS) +eina_inlist_03$(EXEEXT): $(eina_inlist_03_OBJECTS) $(eina_inlist_03_DEPENDENCIES) + @rm -f eina_inlist_03$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_inlist_03_OBJECTS) $(eina_inlist_03_LDADD) $(LIBS) +eina_iterator_01$(EXEEXT): $(eina_iterator_01_OBJECTS) $(eina_iterator_01_DEPENDENCIES) + @rm -f eina_iterator_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_iterator_01_OBJECTS) $(eina_iterator_01_LDADD) $(LIBS) +eina_list_01$(EXEEXT): $(eina_list_01_OBJECTS) $(eina_list_01_DEPENDENCIES) + @rm -f eina_list_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_list_01_OBJECTS) $(eina_list_01_LDADD) $(LIBS) +eina_list_02$(EXEEXT): $(eina_list_02_OBJECTS) $(eina_list_02_DEPENDENCIES) + @rm -f eina_list_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_list_02_OBJECTS) $(eina_list_02_LDADD) $(LIBS) +eina_list_03$(EXEEXT): $(eina_list_03_OBJECTS) $(eina_list_03_DEPENDENCIES) + @rm -f eina_list_03$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_list_03_OBJECTS) $(eina_list_03_LDADD) $(LIBS) +eina_list_04$(EXEEXT): $(eina_list_04_OBJECTS) $(eina_list_04_DEPENDENCIES) + @rm -f eina_list_04$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_list_04_OBJECTS) $(eina_list_04_LDADD) $(LIBS) +eina_log_01$(EXEEXT): $(eina_log_01_OBJECTS) $(eina_log_01_DEPENDENCIES) + @rm -f eina_log_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_log_01_OBJECTS) $(eina_log_01_LDADD) $(LIBS) +eina_log_02$(EXEEXT): $(eina_log_02_OBJECTS) $(eina_log_02_DEPENDENCIES) + @rm -f eina_log_02$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_log_02_OBJECTS) $(eina_log_02_LDADD) $(LIBS) +eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES) + @rm -f eina_log_03$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_log_03_OBJECTS) $(eina_log_03_LDADD) $(LIBS) +eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES) + @rm -f eina_str_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_str_01_OBJECTS) $(eina_str_01_LDADD) $(LIBS) +eina_strbuf_01$(EXEEXT): $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_DEPENDENCIES) + @rm -f eina_strbuf_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_LDADD) $(LIBS) +eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES) + @rm -f eina_tiler_01$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_tiler_01_OBJECTS) $(eina_tiler_01_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_accessor_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_error_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_file_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_03.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_04.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_05.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_06.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_07.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_08.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_03.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_iterator_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_03.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_04.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_02.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_03.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_str_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_strbuf_01.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_tiler_01.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-filesDATA: $(files_DATA) + @$(NORMAL_INSTALL) + test -z "$(filesdir)" || $(MKDIR_P) "$(DESTDIR)$(filesdir)" + @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filesdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(filesdir)" || exit $$?; \ + done + +uninstall-filesDATA: + @$(NORMAL_UNINSTALL) + @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(filesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(filesdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(filesdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pkglibPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-filesDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-pkglibPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-filesDATA uninstall-pkglibPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pkglibPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-filesDATA \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-pkglibPROGRAMS \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-filesDATA \ + uninstall-pkglibPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/examples/eina_accessor_01.c b/libraries/eina/src/examples/eina_accessor_01.c new file mode 100644 index 0000000..c48fdc6 --- /dev/null +++ b/libraries/eina/src/examples/eina_accessor_01.c @@ -0,0 +1,55 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_accessor_01.c -o eina_accessor_01 + +#include + +#include + +int +main(int argc, char **argv) +{ + const char *strings[] = { + "even", "odd", "even", "odd", "even", "odd", "even", "odd", "even", "odd" + }; + const char *more_strings[] = { + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" + }; + Eina_Array *array; + Eina_List *list = NULL; + Eina_Accessor *acc; + unsigned short int i; + void *data; + + eina_init(); + + array = eina_array_new(10); + + for (i = 0; i < 10; i++) + { + eina_array_push(array, strings[i]); + list = eina_list_append(list, more_strings[i]); + } + + acc = eina_array_accessor_new(array); + for(i = 1; i < 10; i += 2) + { + eina_accessor_data_get(acc, i, &data); + printf("%s\n", (const char *)data); + } + eina_accessor_free(acc); + eina_array_free(array); + + acc = eina_list_accessor_new(list); + for(i = 1; i < 10; i += 2) + { + eina_accessor_data_get(acc, i, &data); + printf("%s\n", (const char *)data); + } + + eina_list_free(eina_accessor_container_get(acc)); + eina_accessor_free(acc); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_array_01.c b/libraries/eina/src/examples/eina_array_01.c new file mode 100644 index 0000000..25e0944 --- /dev/null +++ b/libraries/eina/src/examples/eina_array_01.c @@ -0,0 +1,51 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_array_01.c -o eina_array_01 + +#include +#include + +#include + +static Eina_Bool +_print(const void *container, void *data, void *fdata) +{ + printf("%s\n", data); + return EINA_TRUE; +} + +int +main(int argc, char **argv) +{ + const char* strings[] = { + "helo", "hera", "starbuck", "kat", "boomer", + "hotdog", "longshot", "jammer", "crashdown", "hardball", + "duck", "racetrack", "apolo", "husker", "freaker", + "skulls", "bulldog", "flat top", "hammerhead", "gonzo" + }; + Eina_Array *array; + Eina_Array_Iterator iterator; + char *item; + unsigned int i; + + eina_init(); + + array = eina_array_new(10); + eina_array_step_set(array, sizeof(*array), 20); + + for (i = 0; i < 20; i++) + eina_array_push(array, strdup(strings[i])); + + printf("array count: %d\n", eina_array_count_get(array)); + eina_array_foreach(array, _print, NULL); + + printf("Top gun: %s\n", (char*)eina_array_data_get(array, 2)); + + while (eina_array_count_get(array)) + free(eina_array_pop(array)); + + eina_array_free(array); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_array_02.c b/libraries/eina/src/examples/eina_array_02.c new file mode 100644 index 0000000..e897321 --- /dev/null +++ b/libraries/eina/src/examples/eina_array_02.c @@ -0,0 +1,57 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_array_02.c -o eina_array_02 + +#include +#include + +#include + +Eina_Bool keep(void *data, void *gdata) +{ + if (strlen((const char*)data) <= 5) + return EINA_TRUE; + return EINA_FALSE; +} + +int +main(int argc, char **argv) +{ + const char* strs[] = { + "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", + "ten", "eleven", "twelve", "thirteen", "fourtenn", "fifteen", "sixteen", + "seventeen", "eighteen", "nineteen", "twenty" + }; + const char* strings[] = { + "helo", "hera", "starbuck", "kat", "boomer", + "hotdog", "longshot", "jammer", "crashdown", "hardball", + "duck", "racetrack", "apolo", "husker", "freaker", + "skulls", "bulldog", "flat top", "hammerhead", "gonzo" + }; + Eina_Array *array; + Eina_Array_Iterator iterator; + const char *item; + unsigned int i; + + eina_init(); + + array = eina_array_new(10); + + for (i = 0; i < 20; i++) + eina_array_push(array, strs[i]); + + eina_array_clean(array); + for (i = 0; i < 20; i++) + eina_array_push(array, strings[i]); + + eina_array_data_set(array, 17, "flattop"); + + eina_array_remove(array, keep, NULL); + EINA_ARRAY_ITER_NEXT(array, i, item, iterator) + printf("item #%d: %s\n", i, item); + + eina_array_free(array); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_error_01.c b/libraries/eina/src/examples/eina_error_01.c new file mode 100644 index 0000000..90e845d --- /dev/null +++ b/libraries/eina/src/examples/eina_error_01.c @@ -0,0 +1,80 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_error_01.c -o eina_error_01 + +#include +#include + +#include + +Eina_Error MY_ERROR_NEGATIVE; +Eina_Error MY_ERROR_NULL; + +void *data_new() +{ + eina_error_set(0); + + eina_error_set(MY_ERROR_NULL); + return NULL; +} + +int test(int n) +{ + eina_error_set(0); + + if (n < 0) + { + eina_error_set(MY_ERROR_NEGATIVE); + return 0; + } + + return 1; +} + +int main(void) +{ + void *data; + + if (!eina_init()) + { + printf ("Error during the initialization of eina_error module\n"); + return EXIT_FAILURE; + } + + MY_ERROR_NEGATIVE = eina_error_msg_static_register("Negative number"); + MY_ERROR_NULL = eina_error_msg_static_register("NULL pointer"); + + data = data_new(); + if (!data) + { + Eina_Error err; + + err = eina_error_get(); + if (err) + printf("Error during memory allocation: %s\n", + eina_error_msg_get(err)); + } + + if (!test(0)) + { + Eina_Error err; + + err = eina_error_get(); + if (err) + printf("Error during test function: %s\n", + eina_error_msg_get(err)); + } + + if (!test(-1)) + { + Eina_Error err; + + err = eina_error_get(); + if (err) + printf("Error during test function: %s\n", + eina_error_msg_get(err)); + } + + eina_shutdown(); + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/libraries/eina/src/examples/eina_file_01.c b/libraries/eina/src/examples/eina_file_01.c new file mode 100644 index 0000000..6490b62 --- /dev/null +++ b/libraries/eina/src/examples/eina_file_01.c @@ -0,0 +1,45 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_file_01.c -o eina_file_01 + +#include +#include + +static void +_print_cb(const char *name, const char *path, void *data) +{ + printf("file %s in %s\n", name, path); +} + +int +main(int argc, char **argv) +{ + Eina_Iterator *it; + const char *f_name; + const Eina_File_Direct_Info *f_info; + + eina_init(); + + eina_file_dir_list("/home/", EINA_FALSE, _print_cb, NULL); + + it = eina_file_ls("/home/"); + EINA_ITERATOR_FOREACH(it, f_name) + { + printf("%s\n", f_name); + eina_stringshare_del(f_name); + } + eina_iterator_free(it); + + it = eina_file_stat_ls("/home/"); + EINA_ITERATOR_FOREACH(it, f_info) + printf("%s if of type %d\n", f_info->path, f_info->type); + eina_iterator_free(it); + + it = eina_file_direct_ls("/home/"); + EINA_ITERATOR_FOREACH(it, f_info) + printf("%s if of type %d\n", f_info->path, f_info->type); + eina_iterator_free(it); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_hash_01.c b/libraries/eina/src/examples/eina_hash_01.c new file mode 100644 index 0000000..549ca80 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_01.c @@ -0,0 +1,195 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const char *name = key; + const char *number = data; + printf("%s: %s\n", name, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + const char *entry_name = "Heitor Villa-Lobos"; + char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].name != NULL; i++) + { + eina_hash_add(phone_book, _start_entries[i].name, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, entry_name); + if (phone) + { + printf("Printing entry.\n"); + printf("Name: %s\n", entry_name); + printf("Number: %s\n\n", phone); + } + + // Delete this entry + r = eina_hash_del(phone_book, entry_name, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + phone = eina_hash_modify(phone_book, "Richard Georg Strauss", + strdup("+23 45 111-11111")); + free(phone); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 01 234-56789")); + if (!phone) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting phone for Raul Seixas\n"); + } + else + { + printf("Old phone for Raul Seixas was %s\n", phone); + free(phone); + } + + printf("\n"); + + // Now change the phone number + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 02 222-22222")); + if (phone) + { + printf("Changing phone for Raul Seixas to +55 02 222-22222. "); + printf("Old phone was %s\n", phone); + free(phone); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing phone for Raul Seixas\n"); + else + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names and associated numbers. + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("List of phones:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + const char *name = t->key; + const char *number = t->data; + printf("%s: %s\n", name, number); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of names in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *name = data; + printf("%s\n", name); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (numbers) + printf("List of numbers in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *number = data; + printf("%s\n", number); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca"); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_02.c b/libraries/eina/src/examples/eina_hash_02.c new file mode 100644 index 0000000..d43d7a3 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_02.c @@ -0,0 +1,144 @@ +#include +#include +#include + +/* + * Eina Hash - Two more types of hash + * + * This example demonstrate two other types of hash in action - using + * eina_hash_stringshared_new and eina_hash_new. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with string + * keys, exactly the same as the other example. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static void +_phone_book_stringshared_free_cb(void *data) +{ + Phone_Entry *e = data; + eina_stringshare_del(e->name); + eina_stringshare_del(e->number); + free(e); +} + +static Eina_Bool +_phone_book_stringshared_foreach_cb(const Eina_Hash *phone_book, + const void *key, void *data, void *fdata) +{ + Phone_Entry *e = data; + const char *name = e->name; // e->name == key + const char *number = e->number; + printf("%s: %s\n", name, number); + + return EINA_TRUE; +} + +static void +example_hash_stringshared(void) +{ + Eina_Hash *phone_book = NULL; + int i; + + // Create the hash as before + phone_book = eina_hash_stringshared_new(_phone_book_stringshared_free_cb); + + // Add initial entries to our hash, using direct_add + for (i = 0; _start_entries[i].name != NULL; i++) + { + Phone_Entry *e = malloc(sizeof(Phone_Entry)); + e->name = eina_stringshare_add(_start_entries[i].name); + e->number = eina_stringshare_add(_start_entries[i].number); + // Since we are storing the key (name) in our struct, we can use + // eina_hash_direct_add. It could be used in the previous example + // too, since each key is already stored in the _start_entries + // static array, but we started it with the default add function. + eina_hash_direct_add(phone_book, e->name, e); + } + + // Iterate over the elements + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_stringshared_foreach_cb, NULL); + printf("\n"); + + eina_hash_free(phone_book); +} + +static unsigned int +_phone_book_string_key_length(const char *key) +{ + if (!key) + return 0; + + return (int)strlen(key) + 1; +} + +static int +_phone_book_string_key_cmp(const char *key1, int key1_length, + const char *key2, int key2_length) +{ + return strcmp(key1, key2); +} + +static void +example_hash_big(void) +{ + Eina_Hash *phone_book = NULL; + int i; + const char *phone; + + // Create the same hash as used in eina_hash_01.c, but + // use 1024 (2 ^ 10) buckets. + phone_book = eina_hash_new(EINA_KEY_LENGTH(_phone_book_string_key_length), + EINA_KEY_CMP(_phone_book_string_key_cmp), + EINA_KEY_HASH(eina_hash_superfast), + _phone_entry_free_cb, + 10); + for (i = 0; _start_entries[i].name != NULL; i++) + { + eina_hash_add(phone_book, _start_entries[i].name, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, "Heitor Villa-Lobos"); + if (phone) + { + printf("Printing entry.\n"); + printf("Name: Heitor Villa-Lobos\n"); + printf("Number: %s\n\n", phone); + } + + eina_hash_free(phone_book); +} + +int +main(int argc, const char *argv[]) +{ + eina_init(); + + example_hash_stringshared(); + example_hash_big(); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_03.c b/libraries/eina/src/examples/eina_hash_03.c new file mode 100644 index 0000000..719d0d7 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_03.c @@ -0,0 +1,195 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const char *name = key; + const char *number = data; + printf("%s: %s\n", name, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + const char *entry_name = "Heitor Villa-Lobos"; + char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_string_small_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].name != NULL; i++) + { + eina_hash_add(phone_book, _start_entries[i].name, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, entry_name); + if (phone) + { + printf("Printing entry.\n"); + printf("Name: %s\n", entry_name); + printf("Number: %s\n\n", phone); + } + + // Delete this entry + r = eina_hash_del(phone_book, entry_name, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + phone = eina_hash_modify(phone_book, "Richard Georg Strauss", + strdup("+23 45 111-11111")); + free(phone); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 01 234-56789")); + if (!phone) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting phone for Raul Seixas\n"); + } + else + { + printf("Old phone for Raul Seixas was %s\n", phone); + free(phone); + } + + printf("\n"); + + // Now change the phone number + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 02 222-22222")); + if (phone) + { + printf("Changing phone for Raul Seixas to +55 02 222-22222. "); + printf("Old phone was %s\n", phone); + free(phone); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing phone for Raul Seixas\n"); + else + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names and associated numbers. + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("List of phones:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + const char *name = t->key; + const char *number = t->data; + printf("%s: %s\n", name, number); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of names in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *name = data; + printf("%s\n", name); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (numbers) + printf("List of numbers in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *number = data; + printf("%s\n", number); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca"); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_04.c b/libraries/eina/src/examples/eina_hash_04.c new file mode 100644 index 0000000..e900475 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_04.c @@ -0,0 +1,195 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const char *name = key; + const char *number = data; + printf("%s: %s\n", name, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + const char *entry_name = "Heitor Villa-Lobos"; + char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_string_djb2_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].name != NULL; i++) + { + eina_hash_add(phone_book, _start_entries[i].name, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, entry_name); + if (phone) + { + printf("Printing entry.\n"); + printf("Name: %s\n", entry_name); + printf("Number: %s\n\n", phone); + } + + // Delete this entry + r = eina_hash_del(phone_book, entry_name, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + phone = eina_hash_modify(phone_book, "Richard Georg Strauss", + strdup("+23 45 111-11111")); + free(phone); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 01 234-56789")); + if (!phone) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting phone for Raul Seixas\n"); + } + else + { + printf("Old phone for Raul Seixas was %s\n", phone); + free(phone); + } + + printf("\n"); + + // Now change the phone number + eina_error_set(0); + phone = eina_hash_set(phone_book, "Raul Seixas", + strdup("+55 02 222-22222")); + if (phone) + { + printf("Changing phone for Raul Seixas to +55 02 222-22222. "); + printf("Old phone was %s\n", phone); + free(phone); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing phone for Raul Seixas\n"); + else + { + printf("No previous phone found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names and associated numbers. + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("List of phones:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + const char *name = t->key; + const char *number = t->data; + printf("%s: %s\n", name, number); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of names in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *name = data; + printf("%s\n", name); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (numbers) + printf("List of numbers in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *number = data; + printf("%s\n", number); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca"); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_05.c b/libraries/eina/src/examples/eina_hash_05.c new file mode 100644 index 0000000..f8dbf78 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_05.c @@ -0,0 +1,198 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + int32_t id; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { 1, "+01 23 456-78910" }, + { 2, "+12 34 567-89101" }, + { 3, "+23 45 678-91012" }, + { 4, "+34 56 789-10123" }, + { -1, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const int32_t *id = key; + const char *number = data; + printf("%d: %s\n", *id, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + int32_t entry_id = 4; + char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_int32_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].id != -1; i++) + { + eina_hash_add(phone_book, &_start_entries[i].id, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, &entry_id); + if (phone) + { + printf("Printing entry.\n"); + printf("Id: %d\n", entry_id); + printf("Number: %s\n\n", phone); + } + + // Delete this entry + r = eina_hash_del(phone_book, &entry_id, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + int32_t id3 = 3; + phone = eina_hash_modify(phone_book, &id3, + strdup("+23 45 111-11111")); + free(phone); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + int32_t id5 = 5; + eina_error_set(0); + phone = eina_hash_set(phone_book, &id5, + strdup("+55 01 234-56789")); + if (!phone) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous phone found for id5. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting phone for Raul Seixas\n"); + } + else + { + printf("Old phone for id5 was %s\n", phone); + free(phone); + } + + printf("\n"); + + // Now change the phone number + eina_error_set(0); + phone = eina_hash_set(phone_book, &id5, + strdup("+55 02 222-22222")); + if (phone) + { + printf("Changing phone for id5 to +55 02 222-22222. "); + printf("Old phone was %s\n", phone); + free(phone); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing phone for id5\n"); + else + { + printf("No previous phone found for id5. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names and associated numbers. + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("List of phones:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + const int32_t *id = t->key; + const char *number = t->data; + printf("%d: %s\n", *id, number); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of ids in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const int32_t *id = data; + printf("%d\n", *id); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (numbers) + printf("List of numbers in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *number = data; + printf("%s\n", number); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + int32_t id6 = 6; + eina_hash_move(phone_book, &id5, &id6); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_06.c b/libraries/eina/src/examples/eina_hash_06.c new file mode 100644 index 0000000..99a2bd7 --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_06.c @@ -0,0 +1,198 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + int64_t id; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { 1, "+01 23 456-78910" }, + { 2, "+12 34 567-89101" }, + { 3, "+23 45 678-91012" }, + { 4, "+34 56 789-10123" }, + { -1, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const int64_t *id = key; + const char *number = data; + printf("%ld: %s\n", *id, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + int64_t entry_id = 4; + char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_int64_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].id != -1; i++) + { + eina_hash_add(phone_book, &_start_entries[i].id, + strdup(_start_entries[i].number)); + } + + // Look for a specific entry and get its phone number + phone = eina_hash_find(phone_book, &entry_id); + if (phone) + { + printf("Printing entry.\n"); + printf("Id: %ld\n", entry_id); + printf("Number: %s\n\n", phone); + } + + // Delete this entry + r = eina_hash_del(phone_book, &entry_id, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + int64_t id3 = 3; + phone = eina_hash_modify(phone_book, &id3, + strdup("+23 45 111-11111")); + free(phone); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + int64_t id5 = 5; + eina_error_set(0); + phone = eina_hash_set(phone_book, &id5, + strdup("+55 01 234-56789")); + if (!phone) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous phone found for id5. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting phone for Raul Seixas\n"); + } + else + { + printf("Old phone for id5 was %s\n", phone); + free(phone); + } + + printf("\n"); + + // Now change the phone number + eina_error_set(0); + phone = eina_hash_set(phone_book, &id5, + strdup("+55 02 222-22222")); + if (phone) + { + printf("Changing phone for id5 to +55 02 222-22222. "); + printf("Old phone was %s\n", phone); + free(phone); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing phone for id5\n"); + else + { + printf("No previous phone found for id5. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names and associated numbers. + printf("List of phones:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("List of phones:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + const int64_t *id = t->key; + const char *number = t->data; + printf("%ld: %s\n", *id, number); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of ids in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const int64_t *id = data; + printf("%ld\n", *id); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (numbers) + printf("List of numbers in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + const char *number = data; + printf("%s\n", number); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + int64_t id6 = 6; + eina_hash_move(phone_book, &id5, &id6); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_07.c b/libraries/eina/src/examples/eina_hash_07.c new file mode 100644 index 0000000..b3e486a --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_07.c @@ -0,0 +1,219 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; // _start_entries + +static const char *_nicknames[] = { + "mozzart", + "betho", + "george", + "hector", + NULL +}; + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + Phone_Entry **pe = (Phone_Entry **)key; + const char *nick = data; + printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + Phone_Entry *entry_vl = &_start_entries[3]; + Phone_Entry *p = NULL; + char *nick = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_pointer_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].name != NULL; i++) + { + p = &_start_entries[i]; + eina_hash_add(phone_book, &p, + strdup(_nicknames[i])); + } + printf("Phonebook:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Look for a specific entry and get its nickname + nick = eina_hash_find(phone_book, &entry_vl); + if (nick) + { + printf("Printing entry.\n"); + printf("Name: %s\n", entry_vl->name); + printf("Number: %s\n", entry_vl->number); + printf("Nick: %s\n\n", nick); + } + + // Delete this entry + r = eina_hash_del(phone_book, &entry_vl, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + // Modify the pointer data of an entry and free the old one + p = &_start_entries[2]; + nick = eina_hash_modify(phone_book, &p, + strdup("el jorge")); + free(nick); + + // Modify or add an entry to the hash with eina_hash_set + // Let's first add a new entry + eina_error_set(0); + Phone_Entry *p1 = malloc(sizeof(*p1)); + p1->name = "Raul Seixas"; + p1->number = "+55 01 234-56789"; + nick = eina_hash_set(phone_book, &p1, + strdup("raulzito")); + if (!nick) + { + Eina_Error err = eina_error_get(); + if (!err) + { + printf("No previous nick found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + else + printf("Error when setting nick for Raul Seixas\n"); + } + else + { + printf("Old nick for Raul Seixas was %s\n", nick); + free(nick); + } + + printf("\n"); + + // Now change the nick + eina_error_set(0); + nick = eina_hash_set(phone_book, &p1, + strdup("raulzao")); + if (nick) + { + printf("Changing nick for Raul Seixas to raulzao. "); + printf("Old nick was %s\n", nick); + free(nick); + } + else + { + Eina_Error err = eina_error_get(); + if (err) + printf("Error when changing nick for Raul Seixas\n"); + else + { + printf("No previous nick found for Raul Seixas. "); + printf("Creating new entry.\n"); + } + } + + // There are many ways to iterate over our Phone book. + // First, iterate showing the names, phones and associated nicks. + printf("Phonebook:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Now iterate using an iterator + printf("Phonebook:\n"); + it = eina_hash_iterator_tuple_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Eina_Hash_Tuple *t = data; + Phone_Entry **pe = (Phone_Entry **)t->key; + nick = t->data; + printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick); + } + eina_iterator_free(it); // Always free the iterator after its use + printf("\n"); + + // Just iterate over the keys (names) + printf("List of names/numbers in the phone book:\n"); + it = eina_hash_iterator_key_new(phone_book); + while (eina_iterator_next(it, &data)) + { + Phone_Entry **pe = (Phone_Entry **)data; + printf("%s: %s\n", (*pe)->name, (*pe)->number); + } + eina_iterator_free(it); + printf("\n"); + + // Just iterate over the data (nicks) + printf("List of nicks in the phone book:\n"); + it = eina_hash_iterator_data_new(phone_book); + while (eina_iterator_next(it, &data)) + { + nick = data; + printf("%s\n", nick); + } + eina_iterator_free(it); + printf("\n"); + + // Check how many items are in the phone book + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Change the name (key) on an entry + Phone_Entry *p2 = malloc(sizeof(*p2)); + p2->name = "Alceu Valenca"; + p2->number = "000000000000"; + eina_hash_move(phone_book, p1, p2); + printf("List of phones after change:\n"); + eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL); + printf("\n"); + + // Empty the phone book, but don't destroy it + eina_hash_free_buckets(phone_book); + printf("There are %d items in the hash.\n\n", + eina_hash_population(phone_book)); + + // Phone book could still be used, but we are freeing it since we are + // done for now + eina_hash_free(phone_book); + + free(p1); + free(p2); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_hash_08.c b/libraries/eina/src/examples/eina_hash_08.c new file mode 100644 index 0000000..368a2fb --- /dev/null +++ b/libraries/eina/src/examples/eina_hash_08.c @@ -0,0 +1,125 @@ +#include +#include +#include + +/* + * Eina Hash - phonebook + * + * This example demonstrate the use of Eina Hash by implementing a phonebook + * that stores its contact data into the hash. + * + * It indexes the phone numbers by Contact Full Name, so it's a hash with + * string keys. + */ + +struct _Phone_Entry { + const char *name; // Full name. + const char *number; // Phone number. +}; + +typedef struct _Phone_Entry Phone_Entry; + +static Phone_Entry _start_entries[] = { + { "Wolfgang Amadeus Mozart", "+01 23 456-78910" }, + { "Ludwig van Beethoven", "+12 34 567-89101" }, + { "Richard Georg Strauss", "+23 45 678-91012" }, + { "Heitor Villa-Lobos", "+34 56 789-10123" }, + { NULL, NULL } +}; // _start_entries + +static void +_phone_entry_free_cb(void *data) +{ + free(data); +} + +static Eina_Bool +_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key, + void *data, void *fdata) +{ + const char *name = key; + const char *number = data; + printf("%s: %s\n", name, number); + + // Return EINA_FALSE to stop this callback from being called + return EINA_TRUE; +} + +int +main(int argc, const char *argv[]) +{ + Eina_Hash *phone_book = NULL; + int i; + const char *entry_name = "Heitor Villa-Lobos"; + int entry_size; + const char *saved_entry_name = "Alceu Valenca"; + int saved_entry_size = sizeof("Alceu Valenca"); + const char *phone = NULL; + Eina_Bool r; + Eina_Iterator *it; + void *data; + + eina_init(); + + phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb); + + // Add initial entries to our hash + for (i = 0; _start_entries[i].name != NULL; i++) + { + eina_hash_add(phone_book, _start_entries[i].name, + strdup(_start_entries[i].number)); + } + + // Delete entries + r = eina_hash_del(phone_book, entry_name, NULL); + printf("Hash entry successfully deleted? %d\n\n", r); + + int hash = eina_hash_superfast("Ludwig van Beethoven", + sizeof("Ludwig van Beethoven")); + + r = eina_hash_del_by_key_hash(phone_book, "Ludwig van Beethoven", + sizeof("Ludwig van Beethoven"), hash); + printf("Hash entry successfully deleted? %d\n\n", r); + + r = eina_hash_del_by_key(phone_book, "Richard Georg Strauss"); + printf("Hash entry successfully deleted? %d\n\n", r); + + // add entry by hash + entry_name = "Raul_Seixas"; + entry_size = sizeof("Raul Seixas"); + phone = strdup("+33 33 333-33333"); + hash = eina_hash_superfast(entry_name, entry_size); + eina_hash_add_by_hash(phone_book, entry_name, entry_size, hash, phone); + + // don't need to free 'phone' after the next del: + r = eina_hash_del_by_data(phone_book, phone); + printf("Hash entry successfully deleted? %d\n\n", r); + + // add entry by hash directly - no copy of the key will be done + hash = eina_hash_superfast(saved_entry_name, saved_entry_size); + phone = strdup("+44 44 444-44444"); + eina_hash_direct_add_by_hash(phone_book, saved_entry_name, + saved_entry_size, hash, phone); + + // find the added entry by its hash: + phone = eina_hash_find_by_hash(phone_book, saved_entry_name, + saved_entry_size, hash); + if (phone) + { + char *newphone = strdup("+55 55 555-55555"); + phone = eina_hash_modify_by_hash(phone_book, saved_entry_name, + saved_entry_size, hash, newphone); + if (phone) + printf("changing phone to %s, old one was %s\n", newphone, phone); + else + printf("couldn't modify entry identified by %d\n", hash); + } + else + { + printf("couldn't find entry identified by %d\n", hash); + } + + eina_hash_free(phone_book); + + eina_shutdown(); +} diff --git a/libraries/eina/src/examples/eina_inlist_01.c b/libraries/eina/src/examples/eina_inlist_01.c new file mode 100644 index 0000000..fa51553 --- /dev/null +++ b/libraries/eina/src/examples/eina_inlist_01.c @@ -0,0 +1,96 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + int a, b; +}; + +int +sort_cb(const void *d1, const void *d2) +{ + const Eina_Inlist *l1, *l2; + const struct my_struct *x1, *x2; + + l1 = d1; + l2 = d2; + + x1 = EINA_INLIST_CONTAINER_GET(l1, struct my_struct); + x2 = EINA_INLIST_CONTAINER_GET(l2, struct my_struct); + + return x1->a - x2->a; +} + +int +main(void) +{ + struct my_struct *d, *cur; + Eina_Inlist *list, *itr, *tmp; + + eina_init(); + + d = malloc(sizeof(*d)); + d->a = 1; + d->b = 10; + list = eina_inlist_append(NULL, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 2; + d->b = 20; + list = eina_inlist_append(list, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 3; + d->b = 30; + list = eina_inlist_prepend(list, EINA_INLIST_GET(d)); + + printf("list=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + list = eina_inlist_promote(list, EINA_INLIST_GET(d)); + + d = malloc(sizeof(*d)); + d->a = 4; + d->b = 40; + list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list); + + list = eina_inlist_demote(list, EINA_INLIST_GET(d)); + + list = eina_inlist_sort(list, sort_cb); + + printf("list after sort=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + tmp = eina_inlist_find(list, EINA_INLIST_GET(d)); + if (tmp) + cur = EINA_INLIST_CONTAINER_GET(tmp, struct my_struct); + else + cur = NULL; + + if (d != cur) + printf("wrong node! cur=%p\n", cur); + + list = eina_inlist_remove(list, EINA_INLIST_GET(d)); + free(d); + printf("list=%p\n", list); + for (itr = list; itr != NULL; itr = itr->next) + { + cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct); + printf("\ta=%d, b=%d\n", cur->a, cur->b); + } + + while (list) + { + Eina_Inlist *aux = list; + list = eina_inlist_remove(list, list); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_inlist_02.c b/libraries/eina/src/examples/eina_inlist_02.c new file mode 100644 index 0000000..7d23f13 --- /dev/null +++ b/libraries/eina/src/examples/eina_inlist_02.c @@ -0,0 +1,64 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + int a, b; +}; + +int +main(void) +{ + struct my_struct *d, *cur; + int i; + + Eina_Inlist *inlist = NULL; + Eina_List *list = NULL, *l_itr, *l_next; + + eina_init(); + + for (i = 0; i < 100; i++) + { + d = malloc(sizeof(*d)); + d->a = i; + d->b = i * 10; + inlist = eina_inlist_append(inlist, EINA_INLIST_GET(d)); + if ((i % 2) == 0) + list = eina_list_prepend(list, d); + } + + printf("inlist=%p\n", inlist); + EINA_INLIST_FOREACH(inlist, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("list=%p\n", list); + EINA_LIST_FOREACH(list, l_itr, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("inlist count=%d\n", eina_inlist_count(inlist)); + printf("list count=%d\n\n", eina_list_count(list)); + + EINA_LIST_FOREACH_SAFE(list, l_itr, l_next, cur) + { + if ((cur->a % 3) == 0) + list = eina_list_remove_list(list, l_itr); + } + + printf("inlist count=%d\n", eina_inlist_count(inlist)); + printf("list count=%d\n\n", eina_list_count(list)); + + eina_list_free(list); + + while (inlist) + { + Eina_Inlist *aux = inlist; + inlist = eina_inlist_remove(inlist, inlist); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_inlist_03.c b/libraries/eina/src/examples/eina_inlist_03.c new file mode 100644 index 0000000..a39a784 --- /dev/null +++ b/libraries/eina/src/examples/eina_inlist_03.c @@ -0,0 +1,73 @@ +// Compile with: +// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01 +#include +#include + +struct my_struct { + EINA_INLIST; + Eina_Inlist even; + int a, b; +}; + +#define EVEN_INLIST_GET(Inlist) (& ((Inlist)->even)) + +#define EVEN_INLIST_CONTAINER_GET(ptr, type) \ + ((type *)((char *)ptr - offsetof(type, even))) + +int +main(void) +{ + struct my_struct *d, *cur; + int i; + + Eina_Inlist *list = NULL, *list_even = NULL, *itr; + + eina_init(); + + for (i = 0; i < 100; i++) + { + d = malloc(sizeof(*d)); + d->a = i; + d->b = i * 10; + list = eina_inlist_append(list, EINA_INLIST_GET(d)); + if ((i % 2) == 0) + list_even = eina_inlist_prepend(list_even, EVEN_INLIST_GET(d)); + } + + printf("list=%p\n", list); + EINA_INLIST_FOREACH(list, cur) + printf("\ta=%d, b=%d\n", cur->a, cur->b); + + printf("list_even=%p\n", list_even); + for (itr = list_even; itr != NULL; itr = itr->next) + { + cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct); + printf("\ta=%d, b=%d\n", cur->a, cur->b); + } + + printf("list count=%d\n", eina_inlist_count(list)); + printf("list_even count=%d\n\n", eina_inlist_count(list_even)); + + itr = list_even; + while (itr) + { + Eina_Inlist *next = itr->next; + cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct); + if ((cur->a % 3) == 0) + list_even = eina_inlist_remove(list_even, itr); + itr = next; + } + printf("list count=%d\n", eina_inlist_count(list)); + printf("list_even count=%d\n\n", eina_inlist_count(list_even)); + + while (list) + { + Eina_Inlist *aux = list; + list = eina_inlist_remove(list, list); + free(aux); + } + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_iterator_01.c b/libraries/eina/src/examples/eina_iterator_01.c new file mode 100644 index 0000000..f467f90 --- /dev/null +++ b/libraries/eina/src/examples/eina_iterator_01.c @@ -0,0 +1,66 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_iterator_01.c -o eina_iterator_01 + +#include + +#include + +static Eina_Bool +print_one(const void *container, void *data, void *fdata) +{ + printf("%s\n", (char*)data); + return EINA_TRUE; +} + +static void +print_eina_container(Eina_Iterator *it) +{ + eina_iterator_foreach(it, print_one, NULL); + printf("\n"); +} + +int +main(int argc, char **argv) +{ + const char *strings[] = { + "unintersting string", "husker", "starbuck", "husker" + }; + const char *more_strings[] = { + "very unintersting string", + "what do your hear?", + "nothing but the rain", + "then grab your gun and bring the cat in" + }; + Eina_Array *array; + Eina_List *list = NULL; + Eina_Iterator *it; + unsigned short int i; + char *uninteresting; + + eina_init(); + + array = eina_array_new(4); + + for (i = 0; i < 4; i++) + { + eina_array_push(array, strings[i]); + list = eina_list_append(list, more_strings[i]); + } + + it = eina_array_iterator_new(array); + eina_iterator_next(it, &uninteresting); + print_eina_container(it); + eina_array_free(eina_iterator_container_get(it)); + eina_iterator_free(it); + + it = eina_list_iterator_new(list); + eina_iterator_next(it, &uninteresting); + print_eina_container(it); + eina_iterator_free(it); + + eina_list_free(list); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_list_01.c b/libraries/eina/src/examples/eina_list_01.c new file mode 100644 index 0000000..7807791 --- /dev/null +++ b/libraries/eina/src/examples/eina_list_01.c @@ -0,0 +1,44 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_list_01.c -o eina_list_01 + +#include +#include + +int +main(int argc, char **argv) +{ + Eina_List *list = NULL; + Eina_List *l; + void *list_data; + + eina_init(); + + list = eina_list_append(list, "tigh"); + list = eina_list_append(list, "adar"); + list = eina_list_append(list, "baltar"); + list = eina_list_append(list, "roslin"); + + EINA_LIST_FOREACH(list, l, list_data) + printf("%s\n", (char*)list_data); + printf("\n"); + + l = eina_list_nth_list(list, 1); + list = eina_list_append_relative_list(list, "cain", l); + + list = eina_list_append_relative(list, "zarek", "cain"); + + list = eina_list_prepend(list, "adama"); + + list = eina_list_prepend_relative(list, "gaeta", "cain"); + + list = eina_list_prepend_relative_list(list, "lampkin", l); + + EINA_LIST_FOREACH(list, l, list_data) + printf("%s\n", (char*)list_data); + + eina_list_free(list); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_list_02.c b/libraries/eina/src/examples/eina_list_02.c new file mode 100644 index 0000000..7def475 --- /dev/null +++ b/libraries/eina/src/examples/eina_list_02.c @@ -0,0 +1,55 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_list_02.c -o eina_list_02 + +#include +#include +#include + +int +main(int argc, char **argv) +{ + Eina_List *list = NULL, *other_list = NULL; + Eina_List *l; + void *data; + int cmp_result; + Eina_Compare_Cb cmp_func = (Eina_Compare_Cb)strcmp; + + eina_init(); + + list = eina_list_append(list, "starbuck"); + list = eina_list_append(list, "appolo"); + list = eina_list_append(list, "boomer"); + + data = eina_list_search_unsorted(list, cmp_func, "boomer"); + l = eina_list_search_unsorted_list(list, cmp_func, "boomer"); + if (l->data != data) + return 1; + + list = eina_list_sort(list, 0, cmp_func); + + data = eina_list_search_sorted(list, cmp_func, "starbuck"); + l = eina_list_search_sorted_list(list, cmp_func, "starbuck"); + if (l->data != data) + return 1; + + list = eina_list_sorted_insert(list, cmp_func, "helo"); + + l = eina_list_search_sorted_near_list(list, cmp_func, "hera", &cmp_result); + if (cmp_result > 0) + list = eina_list_prepend_relative_list(list, "hera", l); + else if (cmp_result < 0) + list = eina_list_append_relative_list(list, "hera", l); + + l = eina_list_search_sorted_list(list, cmp_func, "boomer"); + list = eina_list_split_list(list, l, &other_list); + + other_list = eina_list_sort(other_list, 0, cmp_func); + + list = eina_list_sorted_merge(list, other_list, cmp_func); + + eina_list_free(list); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_list_03.c b/libraries/eina/src/examples/eina_list_03.c new file mode 100644 index 0000000..8e15b91 --- /dev/null +++ b/libraries/eina/src/examples/eina_list_03.c @@ -0,0 +1,45 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_list_03.c -o eina_list_03 + +#include +#include + +int +main(int argc, char **argv) +{ + Eina_List *list = NULL, *r_list; + Eina_List *l; + Eina_Iterator *itr; + void *list_data; + + eina_init(); + + list = eina_list_append(list, "caprica"); + list = eina_list_append(list, "sagitarius"); + list = eina_list_append(list, "aerilon"); + list = eina_list_append(list, "gemenon"); + + list = eina_list_promote_list(list, eina_list_nth_list(list, 2)); + list = eina_list_demote_list(list, eina_list_nth_list(list, 2)); + + list = eina_list_remove(list, "sagitarius"); + + l = eina_list_data_find_list(list, "aerilon"); + eina_list_data_set(l, "aquarius"); + + printf("size: %d\n", eina_list_count(list)); + + r_list = eina_list_reverse_clone(list); + + itr = eina_list_iterator_new(r_list); + EINA_ITERATOR_FOREACH(itr, list_data) + printf("%s\n", (char*)list_data); + eina_iterator_free(itr); + + eina_list_free(list); + eina_list_free(r_list); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_list_04.c b/libraries/eina/src/examples/eina_list_04.c new file mode 100644 index 0000000..c153c06 --- /dev/null +++ b/libraries/eina/src/examples/eina_list_04.c @@ -0,0 +1,36 @@ +//Compile with: +//gcc -g `pkg-config --cflags --libs eina` eina_list_04.c -o eina_list_04 + +#include +#include + +int +main(int argc, char **argv) +{ + Eina_List *list = NULL; + Eina_List *l; + void *list_data; + + eina_init(); + + list = eina_list_append(list, eina_stringshare_add("calvin")); + list = eina_list_append(list, eina_stringshare_add("Leoben")); + list = eina_list_append(list, eina_stringshare_add("D'Anna")); + list = eina_list_append(list, eina_stringshare_add("Simon")); + list = eina_list_append(list, eina_stringshare_add("Doral")); + list = eina_list_append(list, eina_stringshare_add("Six")); + list = eina_list_append(list, eina_stringshare_add("Sharon")); + + for(l = list; l; l = eina_list_next(l)) + printf("%s\n", (char*)l->data); + + for(l = eina_list_last(list); l; l = eina_list_prev(l)) + printf("%s\n", (char*)eina_list_data_get(l)); + + EINA_LIST_FREE(list, list_data) + eina_stringshare_del(list_data); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_log_01.c b/libraries/eina/src/examples/eina_log_01.c new file mode 100644 index 0000000..7a20ca9 --- /dev/null +++ b/libraries/eina/src/examples/eina_log_01.c @@ -0,0 +1,27 @@ +//Compile with: +//gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina` + +#include +#include + +#include + +void test_warn(void) +{ + EINA_LOG_WARN("Here is a warning message"); +} + +int main(void) +{ + if (!eina_init()) + { + printf("log during the initialization of Eina_Log module\n"); + return EXIT_FAILURE; + } + + test_warn(); + + eina_shutdown(); + + return EXIT_SUCCESS; +} diff --git a/libraries/eina/src/examples/eina_log_02.c b/libraries/eina/src/examples/eina_log_02.c new file mode 100644 index 0000000..a056729 --- /dev/null +++ b/libraries/eina/src/examples/eina_log_02.c @@ -0,0 +1,38 @@ +//Compile with: +//gcc -Wall -o eina_log_02 eina_log_02.c `pkg-config --cflags --libs eina` + +#include +#include + +#include + +void test(int i) +{ + EINA_LOG_DBG("Entering test"); + + if (i < 0) + { + EINA_LOG_ERR("Argument is negative"); + return; + } + + EINA_LOG_INFO("argument non negative"); + + EINA_LOG_DBG("Exiting test"); +} + +int main(void) +{ + if (!eina_init()) + { + printf("log during the initialization of Eina_Log module\n"); + return EXIT_FAILURE; + } + + test(-1); + test(0); + + eina_shutdown(); + + return EXIT_SUCCESS; +} diff --git a/libraries/eina/src/examples/eina_log_03.c b/libraries/eina/src/examples/eina_log_03.c new file mode 100644 index 0000000..8dbe19e --- /dev/null +++ b/libraries/eina/src/examples/eina_log_03.c @@ -0,0 +1,78 @@ +//Compile with: +//gcc -Wall -o eina_log_03 eina_log_03.c `pkg-config --cflags --libs eina` + +#include +#include + +#include + +#define log(fmt, ...) \ + eina_log_print(EINA_LOG_LEVEL_ERR, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) + +typedef struct _Data Data; + +struct _Data +{ + int to_stderr; +}; + +void print_cb(const Eina_Log_Domain *domain, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + void *data, + va_list args) +{ + Data *d; + FILE *output; + char *str; + + d = (Data*)data; + if (d->to_stderr) + { + output = stderr; + str = "stderr"; + } + else + { + output = stdout; + str = "stdout"; + } + + fprintf(output, "%s:%s:%s (%d) %s: ", + domain->domain_str, file, fnc, line, str); + vfprintf(output, fmt, args); + putc('\n', output); +} + +void test(Data *data, int i) +{ + if (i < 0) + data->to_stderr = 0; + else + data->to_stderr = 1; + + EINA_LOG_INFO("Log message..."); +} + +int main(void) +{ + Data data; + + if (!eina_init()) + { + printf("log during the initialization of Eina_Log module\n"); + return EXIT_FAILURE; + } + + eina_log_print_cb_set(print_cb, &data); + + test(&data, -1); + test(&data, 0); + + eina_shutdown(); + + return EXIT_SUCCESS; +} diff --git a/libraries/eina/src/examples/eina_str_01.c b/libraries/eina/src/examples/eina_str_01.c new file mode 100644 index 0000000..089a766 --- /dev/null +++ b/libraries/eina/src/examples/eina_str_01.c @@ -0,0 +1,65 @@ +//Compile with: +//gcc -Wall -o eina_str_01 eina_str_01.c `pkg-config --cflags --libs eina` + +#include +#include + +int main(int argc, char **argv) +{ + char *names = "Calvin;Leoben;D'anna;Simon;Doral;Six;Daniel;Sharon"; + char *str; + char *tmp; + char *prologue; + char *part1 = "The Cylons were created by man. They evolved. They rebelled."; + char *part2 = "There are many copies. And they have a plan."; + char **arr; + int i; + + eina_init(); + + arr = eina_str_split(names, ";", 0); + for (i = 0; arr[i]; i++) + printf("%s\n", arr[i]); + + free(arr[0]); + free(arr); + + str = malloc(sizeof(char) * 4); + strcpy(str, "bsd"); + + eina_str_toupper((char **)&str); + printf("%s\n", str); + eina_str_tolower(&str); + printf("%s\n", str); + + if (eina_str_has_prefix(names, "Calvin")) + printf("Starts with 'Calvin'\n"); + if (eina_str_has_suffix(names, "sharon")) + printf("Ends with 'sharon'\n"); + if (eina_str_has_extension(names, "sharon")) + printf("Has extension 'sharon'\n"); + + tmp = eina_str_escape("They'll start going ripe on us pretty soon."); + printf("%s\n", tmp); + free(tmp); + + prologue = malloc(sizeof(char) * 106); + eina_str_join_len(prologue, 106, ' ', part1, strlen(part1), part2, strlen(part2)); + printf("%s\n", prologue); + + eina_strlcpy(str, prologue, 4); + printf("%s\n", str); + + free(prologue); + free(str); + + str = malloc(sizeof(char) * 14); + sprintf(str, "%s", "cylons+"); + eina_strlcat(str, "humans", 14); + printf("%s\n", str); + free(str); + + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_strbuf_01.c b/libraries/eina/src/examples/eina_strbuf_01.c new file mode 100644 index 0000000..eddfccf --- /dev/null +++ b/libraries/eina/src/examples/eina_strbuf_01.c @@ -0,0 +1,41 @@ +//Compile with: +//gcc -Wall -o eina_strbuf_01 eina_strbuf_01.c `pkg-config --cflags --libs eina` + +#include +#include + +int main(int argc, char **argv) +{ + Eina_Strbuf *buf; + + eina_init(); + + buf = eina_strbuf_new(); + + eina_strbuf_append_length(buf, "buffe", 5); + eina_strbuf_append_char(buf, 'r'); + printf("%s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_insert_escaped(buf, "my ", 0); + printf("%s\n", eina_strbuf_string_get(buf)); + eina_strbuf_reset(buf); + + eina_strbuf_append_escaped(buf, "my buffer"); + printf("%s\n", eina_strbuf_string_get(buf)); + eina_strbuf_reset(buf); + + eina_strbuf_append_printf(buf, "%s%c", "buffe", 'r'); + eina_strbuf_insert_printf(buf, " %s: %d", 6, "length", eina_strbuf_length_get(buf)); + printf("%s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_remove(buf, 0, 7); + printf("%s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_replace_all(buf, "length", "size"); + printf("%s\n", eina_strbuf_string_get(buf)); + + eina_strbuf_free(buf); + eina_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/examples/eina_tiler_01.c b/libraries/eina/src/examples/eina_tiler_01.c new file mode 100644 index 0000000..b2ff8be --- /dev/null +++ b/libraries/eina/src/examples/eina_tiler_01.c @@ -0,0 +1,316 @@ +//Compile with: +//gcc `pkg-config --cflags --libs ecore-evas ecore evas` eina_tiler_01.c -o eina_tiler_01 + +#include +#include +#include +#include + +#define WINDOW_PAD (20) + +static Eina_Tiler *tiler; +static Eina_Rectangle *input_rects; +static unsigned int input_count; +static unsigned int input_idx = 0, input_color_idx = 0, output_color_idx = 0; +static Eina_List *output_objs = NULL; +static Evas_Coord maxw, maxh, winw, winh; +static Evas *evas; + +static const struct color { + unsigned char r, g, b; +} colors[] = { + {255, 0, 0}, + {0, 255, 0}, + {0, 0, 255}, + + {255, 128, 0}, + {0, 255, 128}, + {128, 0, 255}, + + {255, 255, 0}, + {0, 255, 255}, + {255, 0, 255}, + + {255, 0, 128}, + {128, 255, 0}, + {0, 128, 255}, + + {128, 128, 0}, + {0, 128, 128}, + {128, 0, 128}, + + {128, 0, 0}, + {0, 128, 0}, + {0, 0, 128}, + + {255, 128, 0}, + {0, 255, 128}, + {128, 0, 255}, + + {64, 64, 0}, + {0, 64, 64}, + {64, 0, 64}, + + {128, 128, 0}, + {0, 128, 128}, + {128, 0, 128}, + + {255, 0, 128}, + {128, 255, 0}, + {0, 128, 255}, + + {128, 64, 0}, + {0, 128, 64}, + {64, 0, 128}, + + {128, 0, 64}, + {64, 128, 0}, + {0, 64, 128} +}; + +#define MAX_COLORS (sizeof(colors) / sizeof(colors[0])) + +static void +add_text(const char *text, int x, int y, int w) +{ + Evas_Object *o = evas_object_text_add(evas); + evas_object_color_set(o, 0, 0, 0, 255); + evas_object_move(o, x, y); + evas_object_resize(o, w, WINDOW_PAD); + evas_object_text_font_set(o, "Sans", 10); + evas_object_text_text_set(o, text); + evas_object_show(o); +} + +static void +output_rects_reset(void) +{ + Evas_Object *o; + EINA_LIST_FREE(output_objs, o) + evas_object_del(o); + output_color_idx = 0; +} + +static void +add_input_rect(const Eina_Rectangle *r) +{ + Evas_Object *o; + Evas_Coord bx, by; + + bx = WINDOW_PAD; + by = WINDOW_PAD; + + o = evas_object_rectangle_add(evas); +#define C(comp) (((int)colors[input_color_idx].comp * 128) / 255) + evas_object_color_set(o, C(r), C(g), C(b), 128); +#undef C + evas_object_move(o, r->x + bx, r->y + by); + evas_object_resize(o, r->w, r->h); + evas_object_show(o); + + input_color_idx = (input_color_idx + 1) % MAX_COLORS; + + bx += maxw + WINDOW_PAD; + + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 32, 32, 32, 128); + evas_object_move(o, r->x + bx, r->y + by); + evas_object_resize(o, r->w, 1); + evas_object_layer_set(o, EVAS_LAYER_MAX); + evas_object_show(o); + + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 32, 32, 32, 128); + evas_object_move(o, r->x + bx, r->y + by); + evas_object_resize(o, 1, r->h); + evas_object_layer_set(o, EVAS_LAYER_MAX); + evas_object_show(o); + + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 32, 32, 32, 128); + evas_object_move(o, r->x + bx, r->y + by + r->h); + evas_object_resize(o, r->w, 1); + evas_object_layer_set(o, EVAS_LAYER_MAX); + evas_object_show(o); + + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 32, 32, 32, 128); + evas_object_move(o, r->x + bx + r->w, r->y + by); + evas_object_resize(o, 1, r->h); + evas_object_layer_set(o, EVAS_LAYER_MAX); + evas_object_show(o); +} + +static void +add_output_rect(const Eina_Rectangle *r) +{ + Evas_Object *o = evas_object_rectangle_add(evas); +#define C(comp) (((int)colors[output_color_idx].comp * 128) / 255) + evas_object_color_set(o, C(r), C(g), C(b), 128); +#undef C + evas_object_move(o, r->x + maxw + 2 * WINDOW_PAD, r->y + WINDOW_PAD); + evas_object_resize(o, r->w, r->h); + evas_object_show(o); + + output_color_idx = (output_color_idx + 1) % MAX_COLORS; + + output_objs = eina_list_append(output_objs, o); +} + +static Eina_Bool +process_input(void *data) +{ + Eina_Iterator *itr; + Eina_Rectangle r, *r1; + unsigned int out = 0; + + if (input_idx == input_count) + { + add_text("Done. Close the window to exit", + WINDOW_PAD, winh - WINDOW_PAD, winw - 2 * WINDOW_PAD); + return EINA_FALSE; + } + + output_rects_reset(); + + r = input_rects[input_idx]; + printf("Iteration #%u: %dx%d%+d%+d\n", input_idx, r.w, r.h, r.x, r.y); + input_idx++; + add_input_rect(&r); + + eina_tiler_rect_add(tiler, &r); + itr = eina_tiler_iterator_new(tiler); + EINA_ITERATOR_FOREACH(itr, r1) + { + printf("\tOutput #%u: %dx%d%+d%+d\n", out, r1->w, r1->h, r1->x, r1->y); + add_output_rect(r1); + out++; + } + eina_iterator_free(itr); + + return EINA_TRUE; +} + +static void +usage(const char *progname) +{ + fprintf(stderr, + "Usage:\n\n" + "\t%s ... \n\n" + "with rectangles being in the format:\n" + "\tWIDTHxHEIGHT<+->X<+->Y\n" + "examples:\n" + "\t100x100+10+10 - width=100, height=100 at x=10, y=10\n" + "\t150x50+5+6 - width=150, height=50 at x=5, y=6\n", + progname); +} + +int +main(int argc, char *argv[]) +{ + Ecore_Evas *ee; + Evas_Object *o; + int i; + + if (argc < 2) + { + usage(argv[0]); + return -2; + } + + input_rects = calloc(argc - 1, sizeof(Eina_Rectangle)); + input_count = 0; + maxw = 0; + maxh = 0; + for (i = 1; i < argc; i++) + { + Eina_Rectangle *r = input_rects + input_count; + char sx, sy; + + if (sscanf(argv[i], "%dx%d%c%d%c%d", + &(r->w), &(r->h), &sx, &(r->x), &sy, &(r->y)) == 6) + { + if (sx == '-') r->x *= -1; + if (sy == '-') r->y *= -1; + + if (maxw < r->x + r->w) maxw = r->x + r->w; + if (maxh < r->y + r->h) maxh = r->y + r->h; + input_count++; + } + else + fprintf(stderr, "ERROR: invalid rectangle ignored: %s\n", argv[i]); + } + + if (input_count == 0) + { + fputs("ERROR: Could not find any valid rectangle. Exit!\n", stderr); + usage(argv[0]); + free(input_rects); + return -3; + } + + if ((maxw == 0) || (maxh == 0)) + { + fputs("ERROR: All rectangles with size 0x0. Exit!\n", stderr); + usage(argv[0]); + free(input_rects); + return -3; + } + + ecore_evas_init(); + ecore_init(); + evas_init(); + eina_init(); + + winw = 2 * maxw + 3 * WINDOW_PAD; + winh = maxh + 2 * WINDOW_PAD; + + ee = ecore_evas_new(NULL, 0, 0, winw, winh, NULL); + if (!ee) + { + fputs("ERROR: Could not create window. Check ecore-evas install.\n", + stderr); + goto end; + } + + evas = ecore_evas_get(ee); + + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 255, 255, 255, 255); + evas_object_resize(o, winw, winh); + evas_object_show(o); + + add_text("Input", WINDOW_PAD, 0, maxw); + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 200, 200, 200, 255); + evas_object_move(o, WINDOW_PAD, WINDOW_PAD); + evas_object_resize(o, maxw, maxh); + evas_object_show(o); + + add_text("Output", maxw + 2 * WINDOW_PAD, 0, maxw); + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 200, 200, 200, 255); + evas_object_move(o, maxw + 2 * WINDOW_PAD, WINDOW_PAD); + evas_object_resize(o, maxw, maxh); + evas_object_show(o); + + tiler = eina_tiler_new(maxw, maxh); + ecore_timer_add(2.0, process_input, NULL); + + ecore_evas_show(ee); + ecore_main_loop_begin(); + + eina_list_free(output_objs); + eina_tiler_free(tiler); + ecore_evas_free(ee); + + end: + free(input_rects); + + eina_shutdown(); + evas_shutdown(); + ecore_shutdown(); + ecore_evas_shutdown(); + + return 0; +} diff --git a/libraries/eina/src/include/Eina.h b/libraries/eina/src/include/Eina.h new file mode 100644 index 0000000..68c41f5 --- /dev/null +++ b/libraries/eina/src/include/Eina.h @@ -0,0 +1,194 @@ +/* EINA - EFL data type library + * Copyright (C) 2008-2011 Enlightenment Developers: + * Albin "Lutin" Tonnerre + * Alexandre "diaxen" Becoulet + * Andre Dieb + * Arnaud de Turckheim "quarium" + * Carsten Haitzler + * Cedric Bail + * Corey "atmos" Donohoe + * Fabiano Fidêncio + * Gustavo Chaves + * Gustavo Sverzut Barbieri + * Jorge Luis "turran" Zapata + * Peter "pfritz" Wehrfritz + * Raphael Kubo da Costa + * Tilman Sauerbeck + * Vincent "caro" Torri + * Tom Hacohen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_H_ +#define EINA_H_ + +/** + * @file + * @brief Eina Utility library + * + * These routines are used for Eina. + */ + +/** + * @mainpage Eina + * + * @version 1.1 + * @date 2008-2011 + * + * @section eina_intro_sec Introduction + * + * The Eina library is a library that implements an API for data types + * in an efficient way. It also provides some useful tools like + * opening shared libraries, errors management, type conversion, + * time accounting and memory pool. + * + * This library is cross-platform and can be compiled and used on + * Linux, BSD, Opensolaris and Windows (XP and CE). + * + * The data types that are available are (see @ref Eina_Data_Types_Group): + * @li @ref Eina_Array_Group standard array of @c void* data. + * @li @ref Eina_Hash_Group standard hash of @c void* data. + * @li @ref Eina_Inline_List_Group list with nodes inlined into user type. + * @li @ref Eina_CList_Group compact inlined list. + * @li @ref Eina_List_Group standard list of @c void* data. + * @li @ref Eina_Iterator_Group Iterator functions. + * @li @ref Eina_Matrixsparse_Group sparse matrix of @c void* data. + * @li @ref Eina_Rbtree_Group red-black tree with nodes inlined into user type. + * @li @ref Eina_String_Buffer_Group mutable string to prepend, insert or append strings to a buffer. + * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references. + * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions. + * @li @ref Eina_Trash_Group container of unused but allocated data. + * + * The tools that are available are (see @ref Eina_Tools_Group): + * @li @ref Eina_Benchmark_Group helper to write benchmarks. + * @li @ref Eina_Convert_Group faster conversion from strings to integers, double, etc. + * @li @ref Eina_Counter_Group measures number of calls and their time. + * @li @ref Eina_Error_Group error identifiers. + * @li @ref Eina_File_Group simple file list and path split. + * @li @ref Eina_Lalloc_Group simple lazy allocator. + * @li @ref Eina_Log_Group full-featured logging system. + * @li @ref Eina_Magic_Group provides runtime type checking. + * @li @ref Eina_Memory_Pool_Group abstraction for various memory allocators. + * @li @ref Eina_Module_Group lists, loads and share modules using Eina_Module standard. + * @li @ref Eina_Rectangle_Group rectangle structure and standard manipulation methods. + * @li @ref Eina_Safety_Checks_Group extra checks that will report unexpected conditions and can be disabled at compile time. + * @li @ref Eina_String_Group a set of functions that manages C strings. + * + * Please see the @ref authors page for contact details. + * + * @defgroup Eina_Data_Types_Group Data types + * + * Eina provide easy to use and optimized data types and structures. + * + * + * @defgroup Eina_Containers_Group Containers + * + * Containers are data types that hold data and allow iteration over + * their elements with an @ref Eina_Iterator_Group, or eventually an + * @ref Eina_Accessor_Group. + * + * + * @defgroup Eina_Tools_Group Tools + * + * Eina tools aims to help application development, providing ways to + * make it safer, log errors, manage memory more efficiently and more. + * + */ + +/** + * + * @page authors Authors + * + * @author Albin "Lutin" Tonnerre + * @author Alexandre "diaxen" Becoulet + * @author Andre Dieb + * @author Arnaud de Turckheim "quarium" + * @author Carsten Haitzler + * @author Cedric Bail + * @author Corey "atmos" Donohoe + * @author Fabiano Fidêncio + * @author Gustavo Chaves + * @author Gustavo Sverzut Barbieri + * @author Jorge Luis "turran" Zapata + * @author Peter "pfritz" Wehrfritz + * @author Raphael Kubo da Costa + * @author Tilman Sauerbeck + * @author Vincent "caro" Torri + * @author Tom Hacohen + * + * Please contact to get in + * contact with the developers and maintainers. + * + */ + +#ifdef _WIN32 +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "eina_config.h" +#include "eina_types.h" +#include "eina_main.h" +#include "eina_fp.h" +#include "eina_rectangle.h" +#include "eina_clist.h" +#include "eina_inlist.h" +#include "eina_file.h" +#include "eina_list.h" +#include "eina_hash.h" +#include "eina_trash.h" +#include "eina_lalloc.h" +#include "eina_module.h" +#include "eina_mempool.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_array.h" +#include "eina_binshare.h" +#include "eina_stringshare.h" +#include "eina_ustringshare.h" +#include "eina_magic.h" +#include "eina_counter.h" +#include "eina_rbtree.h" +#include "eina_accessor.h" +#include "eina_iterator.h" +#include "eina_benchmark.h" +#include "eina_convert.h" +#include "eina_cpu.h" +#include "eina_sched.h" +#include "eina_tiler.h" +#include "eina_hamster.h" +#include "eina_matrixsparse.h" +#include "eina_str.h" +#include "eina_strbuf.h" +#include "eina_binbuf.h" +#include "eina_ustrbuf.h" +#include "eina_unicode.h" +#include "eina_quadtree.h" +#include "eina_simple_xml_parser.h" +#include "eina_lock.h" +#include "eina_prefix.h" +#include "eina_refcount.h" +#include "eina_mmap.h" +#include "eina_xattr.h" + +#ifdef __cplusplus +} +#endif + +#endif /* EINA_H */ diff --git a/libraries/eina/src/include/Makefile.am b/libraries/eina/src/include/Makefile.am new file mode 100644 index 0000000..41a37cb --- /dev/null +++ b/libraries/eina/src/include/Makefile.am @@ -0,0 +1,89 @@ +MAINTAINERCLEANFILES = Makefile.in + +EINAHEADERS = \ +eina_safety_checks.h \ +eina_error.h \ +eina_log.h \ +eina_inline_log.x \ +eina_fp.h \ +eina_inline_f32p32.x \ +eina_inline_f16p16.x \ +eina_inline_f8p24.x \ +eina_inline_fp.x \ +eina_hash.h \ +eina_inline_hash.x \ +eina_lalloc.h \ +eina_clist.h \ +eina_inlist.h \ +eina_list.h \ +eina_file.h \ +eina_mempool.h \ +eina_module.h \ +eina_rectangle.h \ +eina_types.h \ +eina_array.h \ +eina_counter.h \ +eina_inline_array.x \ +eina_magic.h \ +eina_stringshare.h \ +eina_binshare.h \ +eina_binbuf.h \ +eina_ustringshare.h \ +eina_inline_stringshare.x \ +eina_inline_ustringshare.x \ +eina_inline_list.x \ +eina_accessor.h \ +eina_convert.h \ +eina_rbtree.h \ +eina_benchmark.h \ +eina_inline_rbtree.x \ +eina_inline_mempool.x \ +eina_inline_rectangle.x \ +eina_inline_trash.x \ +eina_trash.h \ +eina_iterator.h \ +eina_main.h \ +eina_cpu.h \ +eina_sched.h \ +eina_tiler.h \ +eina_hamster.h \ +eina_matrixsparse.h \ +eina_inline_tiler.x \ +eina_str.h \ +eina_inline_str.x \ +eina_strbuf.h \ +eina_ustrbuf.h \ +eina_unicode.h \ +eina_quadtree.h \ +eina_simple_xml_parser.h \ +eina_lock.h \ +eina_prefix.h \ +eina_refcount.h \ +eina_mmap.h \ +eina_xattr.h + +# Will be back for developper after 1.1. +# eina_object.h + +if EINA_HAVE_THREADS +if EINA_HAVE_WINCE +EINAHEADERS += eina_inline_lock_wince.x +else +if EINA_HAVE_WIN32 +EINAHEADERS += eina_inline_lock_win32.x +else +EINAHEADERS += eina_inline_lock_posix.x +endif +endif +else +EINAHEADERS += eina_inline_lock_void.x +endif + +installed_mainheaderdir = $(includedir)/eina-@VMAJ@ +dist_installed_mainheader_DATA = Eina.h eina_config.h + +installed_headersdir = $(includedir)/eina-@VMAJ@/eina +dist_installed_headers_DATA = $(EINAHEADERS) + +EXTRA_DIST = \ +eina_config.h.in diff --git a/libraries/eina/src/include/Makefile.in b/libraries/eina/src/include/Makefile.in new file mode 100644 index 0000000..f6e0074 --- /dev/null +++ b/libraries/eina/src/include/Makefile.in @@ -0,0 +1,560 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ + +# Will be back for developper after 1.1. +# eina_object.h +@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WINCE_TRUE@am__append_1 = eina_inline_lock_wince.x +@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WIN32_TRUE@@EINA_HAVE_WINCE_FALSE@am__append_2 = eina_inline_lock_win32.x +@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WIN32_FALSE@@EINA_HAVE_WINCE_FALSE@am__append_3 = eina_inline_lock_posix.x +@EINA_HAVE_THREADS_FALSE@am__append_4 = eina_inline_lock_void.x +subdir = src/include +DIST_COMMON = $(am__dist_installed_headers_DATA_DIST) \ + $(dist_installed_mainheader_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/eina_config.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = eina_config.h +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_installed_headers_DATA_DIST = eina_safety_checks.h \ + eina_error.h eina_log.h eina_inline_log.x eina_fp.h \ + eina_inline_f32p32.x eina_inline_f16p16.x eina_inline_f8p24.x \ + eina_inline_fp.x eina_hash.h eina_inline_hash.x eina_lalloc.h \ + eina_clist.h eina_inlist.h eina_list.h eina_file.h \ + eina_mempool.h eina_module.h eina_rectangle.h eina_types.h \ + eina_array.h eina_counter.h eina_inline_array.x eina_magic.h \ + eina_stringshare.h eina_binshare.h eina_binbuf.h \ + eina_ustringshare.h eina_inline_stringshare.x \ + eina_inline_ustringshare.x eina_inline_list.x eina_accessor.h \ + eina_convert.h eina_rbtree.h eina_benchmark.h \ + eina_inline_rbtree.x eina_inline_mempool.x \ + eina_inline_rectangle.x eina_inline_trash.x eina_trash.h \ + eina_iterator.h eina_main.h eina_cpu.h eina_sched.h \ + eina_tiler.h eina_hamster.h eina_matrixsparse.h \ + eina_inline_tiler.x eina_str.h eina_inline_str.x eina_strbuf.h \ + eina_ustrbuf.h eina_unicode.h eina_quadtree.h \ + eina_simple_xml_parser.h eina_lock.h eina_prefix.h \ + eina_refcount.h eina_mmap.h eina_xattr.h \ + eina_inline_lock_wince.x eina_inline_lock_win32.x \ + eina_inline_lock_posix.x eina_inline_lock_void.x +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(installed_headersdir)" \ + "$(DESTDIR)$(installed_mainheaderdir)" +DATA = $(dist_installed_headers_DATA) \ + $(dist_installed_mainheader_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +EINAHEADERS = eina_safety_checks.h eina_error.h eina_log.h \ + eina_inline_log.x eina_fp.h eina_inline_f32p32.x \ + eina_inline_f16p16.x eina_inline_f8p24.x eina_inline_fp.x \ + eina_hash.h eina_inline_hash.x eina_lalloc.h eina_clist.h \ + eina_inlist.h eina_list.h eina_file.h eina_mempool.h \ + eina_module.h eina_rectangle.h eina_types.h eina_array.h \ + eina_counter.h eina_inline_array.x eina_magic.h \ + eina_stringshare.h eina_binshare.h eina_binbuf.h \ + eina_ustringshare.h eina_inline_stringshare.x \ + eina_inline_ustringshare.x eina_inline_list.x eina_accessor.h \ + eina_convert.h eina_rbtree.h eina_benchmark.h \ + eina_inline_rbtree.x eina_inline_mempool.x \ + eina_inline_rectangle.x eina_inline_trash.x eina_trash.h \ + eina_iterator.h eina_main.h eina_cpu.h eina_sched.h \ + eina_tiler.h eina_hamster.h eina_matrixsparse.h \ + eina_inline_tiler.x eina_str.h eina_inline_str.x eina_strbuf.h \ + eina_ustrbuf.h eina_unicode.h eina_quadtree.h \ + eina_simple_xml_parser.h eina_lock.h eina_prefix.h \ + eina_refcount.h eina_mmap.h eina_xattr.h $(am__append_1) \ + $(am__append_2) $(am__append_3) $(am__append_4) +installed_mainheaderdir = $(includedir)/eina-@VMAJ@ +dist_installed_mainheader_DATA = Eina.h eina_config.h +installed_headersdir = $(includedir)/eina-@VMAJ@/eina +dist_installed_headers_DATA = $(EINAHEADERS) +EXTRA_DIST = \ +eina_config.h.in + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +eina_config.h: $(top_builddir)/config.status $(srcdir)/eina_config.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_installed_headersDATA: $(dist_installed_headers_DATA) + @$(NORMAL_INSTALL) + test -z "$(installed_headersdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_headersdir)" + @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_headersdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_headersdir)" || exit $$?; \ + done + +uninstall-dist_installed_headersDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(installed_headersdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(installed_headersdir)" && rm -f $$files +install-dist_installed_mainheaderDATA: $(dist_installed_mainheader_DATA) + @$(NORMAL_INSTALL) + test -z "$(installed_mainheaderdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_mainheaderdir)" + @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_mainheaderdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_mainheaderdir)" || exit $$?; \ + done + +uninstall-dist_installed_mainheaderDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(installed_mainheaderdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(installed_mainheaderdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(installed_headersdir)" "$(DESTDIR)$(installed_mainheaderdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_installed_headersDATA \ + install-dist_installed_mainheaderDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_installed_headersDATA \ + uninstall-dist_installed_mainheaderDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am \ + install-dist_installed_headersDATA \ + install-dist_installed_mainheaderDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_installed_headersDATA \ + uninstall-dist_installed_mainheaderDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/include/eina_accessor.h b/libraries/eina/src/include/eina_accessor.h new file mode 100644 index 0000000..cae7a5c --- /dev/null +++ b/libraries/eina/src/include/eina_accessor.h @@ -0,0 +1,340 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_ACCESSOR_H__ +#define EINA_ACCESSOR_H__ + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_magic.h" + +/** + * @page eina_accessor_example_01_page Eina_Accessor usage + * @dontinclude eina_accessor_01.c + * + * We start by including necessary headers, declaring variables and + * initializing eina: + * @skip #include + * @until eina_init + * + * Next we populate our array and list: + * @until } + * + * Now that we have two containers populated we can actually start the example + * and create an accessor: + * @until accessor_new + * + * Once having the accessor we can use it to access certain elements in the + * container: + * @until } + * @note Unlike iterators accessors allow us non-linear access, which allows us + * to print only the odd elements in the container. + * + * As with every other resource we allocate we need to free the accessor(and the + * array): + * @until array_free + * + * Now we create another accessor, this time for the list: + * @until accessor_new + * + * And now the interesting bit, we use the same code we used above to print + * parts of the array to print parts of the list: + * @until } + * + * And to free the list we use a gimmick, instead of freeing @a list, we ask the + * accessor for it's container and free that: + * @until list_free + * + * Finally we shut eina down and leave: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_accessor_01_c "eina_accessor_01.c" file. + */ + +/** + * @page eina_accessor_01_c Eina_Accessor usage example + * + * @include eina_accessor_01.c + * @example eina_accessor_01.c + */ + +/** + * @addtogroup Eina_Accessor_Group Accessor Functions + * + * @brief These functions manage accessor on containers. + * + * These functions allow to access elements of a container in a + * generic way, without knowing which container is used (a bit like + * iterators in the C++ STL). Accessors allows random access (that is, any + * element in the container). For sequential access, see + * @ref Eina_Iterator_Group. + * + * An accessor is created from container data types, so no creation + * function is available here. An accessor is deleted with + * eina_accessor_free(). To get the data of an element at a given + * position, use eina_accessor_data_get(). To call a function on + * chosen elements of a container, use eina_accessor_over(). + * + * See an example @ref eina_accessor_example_01_page "here". + */ + +/** + * @addtogroup Eina_Content_Access_Group Content Access + * + * @{ + */ + +/** + * @defgroup Eina_Accessor_Group Accessor Functions + * + * @{ + */ + +/** + * @typedef Eina_Accessor + * Abstract type for accessors. + */ +typedef struct _Eina_Accessor Eina_Accessor; + +/** + * @typedef Eina_Accessor_Get_At_Callback + * Type for a callback that returns the data of a container as the given index. + */ +typedef Eina_Bool (*Eina_Accessor_Get_At_Callback)(Eina_Accessor *it, + unsigned int idx, + void **data); + +/** + * @typedef Eina_Accessor_Get_Container_Callback + * Type for a callback that returns the container. + */ +typedef void *(*Eina_Accessor_Get_Container_Callback)(Eina_Accessor *it); + +/** + * @typedef Eina_Accessor_Free_Callback + * Type for a callback that frees the container. + */ +typedef void (*Eina_Accessor_Free_Callback)(Eina_Accessor *it); + +/** + * @typedef Eina_Accessor_Lock_Callback + * Type for a callback that lock the container. + */ +typedef Eina_Bool (*Eina_Accessor_Lock_Callback)(Eina_Accessor *it); + +/** + * @struct _Eina_Accessor + * Type to provide random access to data structures. + */ +struct _Eina_Accessor +{ +#define EINA_ACCESSOR_VERSION 1 + int version; /**< Version of the Accessor API. */ + + Eina_Accessor_Get_At_Callback get_at EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT; /**< Callback called when a data element is requested. */ + Eina_Accessor_Get_Container_Callback get_container EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is requested. */ + Eina_Accessor_Free_Callback free EINA_ARG_NONNULL(1); /**< Callback called when the container is freed. */ + + Eina_Accessor_Lock_Callback lock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is locked. */ + Eina_Accessor_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is unlocked. */ + +#define EINA_MAGIC_ACCESSOR 0x98761232 + EINA_MAGIC +}; + +/** + * @def FUNC_ACCESSOR_GET_AT(Function) + * Helper macro to cast @p Function to a Eina_Accessor_Get_At_Callback. + */ +#define FUNC_ACCESSOR_GET_AT(Function) ((Eina_Accessor_Get_At_Callback)Function) + +/** + * @def FUNC_ACCESSOR_GET_CONTAINER(Function) + * Helper macro to cast @p Function to a Eina_Accessor_Get_Container_Callback. + */ +#define FUNC_ACCESSOR_GET_CONTAINER(Function) ((Eina_Accessor_Get_Container_Callback)Function) + +/** + * @def FUNC_ACCESSOR_FREE(Function) + * Helper macro to cast @p Function to a Eina_Accessor_Free_Callback. + */ +#define FUNC_ACCESSOR_FREE(Function) ((Eina_Accessor_Free_Callback)Function) + +/** + * @def FUNC_ACCESSOR_LOCK(Function) + * Helper macro to cast @p Function to a Eina_Iterator_Lock_Callback. + */ +#define FUNC_ACCESSOR_LOCK(Function) ((Eina_Accessor_Lock_Callback)Function) + + +/** + * @brief Free an accessor. + * + * @param accessor The accessor to free. + * + * This function frees @p accessor if it is not @c NULL; + */ +EAPI void eina_accessor_free(Eina_Accessor *accessor) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve the data of an accessor at a given position. + * + * @param accessor The accessor. + * @param position The position of the element. + * @param data The pointer that stores the data to retrieve. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function retrieves the data of the element pointed by + * @p accessor at the porition @p position, and stores it in + * @p data. If @p accessor is @c NULL or if an error occurred, + * #EINA_FALSE is returned, otherwise EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_accessor_data_get(Eina_Accessor *accessor, + unsigned int position, + void **data) EINA_ARG_NONNULL(1); + +/** + * @brief Return the container of an accessor. + * + * @param accessor The accessor. + * @return The container which created the accessor. + * + * This function returns the container which created @p accessor. If + * @p accessor is @c NULL, this function returns @c NULL. + */ +EAPI void *eina_accessor_container_get(Eina_Accessor *accessor) EINA_ARG_NONNULL(1) EINA_PURE; + +/** + * @brief Iterate over the container and execute a callback on chosen elements. + * + * @param accessor The accessor. + * @param cb The callback called on the chosen elements. + * @param start The position of the first element. + * @param end The position of the last element. + * @param fdata The data passed to the callback. + * + * This function iterates over the elements pointed by @p accessor, + * starting from the element at position @p start and ending to the + * element at position @p end. For Each element, the callback + * @p cb is called with the data @p fdata. If @p accessor is @c NULL + * or if @p start is greter or equal than @p end, the function returns + * immediately. + */ +EAPI void eina_accessor_over(Eina_Accessor *accessor, + Eina_Each_Cb cb, + unsigned int start, + unsigned int end, + const void *fdata) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Lock the container of the accessor. + * + * @param accessor The accessor. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * If the container of the @p accessor permits it, it will be locked. When a + * container is locked calling eina_accessor_over() on it will return + * immediately. If @p accessor is @c NULL or if a problem occurred, #EINA_FALSE + * is returned, otherwise #EINA_TRUE is returned. If the container isn't + * lockable, it will return EINA_TRUE. + * + * @warning None of the existing eina data structures are lockable. + */ +EAPI Eina_Bool eina_accessor_lock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1); + +/** + * @brief Unlock the container of the accessor. + * + * @param accessor The accessor. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * If the container of the @p accessor permits it and was previously + * locked, it will be unlocked. If @p accessor is @c NULL or if a + * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE + * is returned. If the container is not lockable, it will return + * EINA_TRUE. + * + * @warning None of the existing eina data structures are lockable. + */ +EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1); + +/** + * @def EINA_ACCESSOR_FOREACH + * @brief Macro to iterate over all elements easily. + * + * @param accessor The accessor to use. + * @param counter A counter used by eina_accessor_data_get() when + * iterating over the container. + * @param data Where to store * data, must be a pointer support getting + * its address since * eina_accessor_data_get() requires a pointer to + * pointer! + * + * This macro allows a convenient way to loop over all elements in an + * accessor, very similar to EINA_LIST_FOREACH(). + * + * This macro can be used for freeing the data of a list, like in the + * following example. It has the same goal as the one documented in + * EINA_LIST_FOREACH(), but using accessors: + * + * @code + * Eina_List *list; + * Eina_Accessor *accessor; + * unsigned int i; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings + * + * accessor = eina_list_accessor_new(list); + * EINA_ACCESSOR_FOREACH(accessor, i, data) + * free(data); + * eina_accessor_free(accessor); + * eina_list_free(list); + * @endcode + * + * @note if the datatype provides both iterators and accessors prefer + * to use iterators to iterate over, as they're likely to be more + * optimized for such task. + * + * @note this example is not optimal algorithm to release a list since + * it will walk the list twice, but it serves as an example. For + * optimized version use EINA_LIST_FREE() + * + * @warning unless explicitly stated in functions returning accessors, + * do not modify the accessed object while you walk it, in this + * example using lists, do not remove list nodes or you might + * crash! This is not a limitiation of accessors themselves, + * rather in the accessors implementations to keep them as simple + * and fast as possible. + */ +#define EINA_ACCESSOR_FOREACH(accessor, counter, data) \ + for ((counter) = 0; \ + eina_accessor_data_get((accessor), (counter), (void **)(void *)&(data)); \ + (counter)++) + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_array.h b/libraries/eina/src/include/eina_array.h new file mode 100644 index 0000000..d33f5e9 --- /dev/null +++ b/libraries/eina/src/include/eina_array.h @@ -0,0 +1,449 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_ARRAY_H_ +#define EINA_ARRAY_H_ + +#include + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_error.h" +#include "eina_iterator.h" +#include "eina_accessor.h" +#include "eina_magic.h" + + +/** + * @page array_01_example_page Basic array usage + * @dontinclude eina_array_01.c + * + * For this example we add stdlib.h, stdio.h and string.h for some + * convenience functions. The first thing to do to be able to use an + * @ref Eina_Array is to include Eina.h: + * @skip #include + * @until Eina.h + * + * Here we have a callback that prints the element given to it: + * @until } + * + * Now we create our entry point and declare some variables, nothing especial: + * @until unsigned + * + * Before we can start using any array function we need to initialize eina: + * @until eina_init + * + * So now to actually creating our array. The only interesting thing here is the + * argument given to the eina_array_new() function, this argument sets how fast + * the array grows. + * @until array_new + * + * If you know before hand how big the array will need to be you should set the + * step to that. In our case we can set it to the number of string we have and + * since we didn't do that in the eina_array_new() we can do it now: + * @until array_step_set + * + * Now let us populate our array with some strings: + * @until push + * @note Notice we use strdup, so we will have to free that memory later on. + * + * Now lets check the size of the array: + * @until printf + * + * And now we call a function on every member of our array to print it: + * @until foreach + * + * One of the strenghts of @ref Eina_Array over @ref Eina_List is that it has + * very fast random access to elements, so this is very efficient: + * @until printf + * + * And now we free up the memory allocated with the strdup()s: + * @until free + * + * And the array memory itself: + * @until array_free + * + * And finally shutdown eina and exit: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_array_01_c "eina_array_01.c" file. + */ + +/** + * @page eina_array_01_c Basic array usage example + * + * @include eina_array_01.c + * @example eina_array_01.c + */ + +/** + * @page array_02_example_page Removing array elements + * @dontinclude eina_array_02.c + * + * Just the usual includes: + * @skip #include + * @until Eina.h + * + * This the callback we are going to use to decide which strings stay on the + * array and which will be removed, we use something simple, but this can be as + * complex as you like: + * @until } + * + * This is the same code we used before to populate the list with the slight + * difference of not using strdup: + * @until array_push + * + * So we have added all our elements to the array, but it turns out that is not + * the elements we wanted, so let's empty the array and add the correct strings: + * @until array_push + * + * It seems we made a little mistake in one of our strings so we need to replace + * it, here is how: + * @until data_set + * + * Now that there is a populated array we can remove elements from it easily: + * @until array_remove + * + * And check that the elements were actually removed: + * @until printf + * + * Since this time we didn't use strdup we don't need to free each string: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_array_02_c "eina_array_02.c" file. + */ + +/** + * @page eina_array_02_c Basic array usage example + * + * @include eina_array_02.c + * @example eina_array_02.c + */ + +/** + * @addtogroup Eina_Array_Group Array + * + * @brief These functions provide array management. + * + * The Array data type in Eina is designed to have very fast access to + * its data (compared to the Eina @ref Eina_List_Group). On the other hand, + * data can be added or removed only at the end of the array. To insert + * data at any place, the Eina @ref Eina_List_Group is the correct container + * to use. + * + * To use the array data type, eina_init() must be called before any + * other array functions. When no more eina array functions are used, + * eina_shutdown() must be called to free all the resources. + * + * An array must be created with eina_array_new(). It allocates all + * the necessary data for an array. When not needed anymore, an array + * is freed with eina_array_free(). This function does not free any + * allocated memory used to store the data of each element. For that, + * just iterate over the array to free them. A convenient way to do + * that is by using #EINA_ARRAY_ITER_NEXT. An example of code is given + * in the description of this macro. + * + * @warning Functions do not check if the used array is valid or not. It's up to + * the user to be sure of that. It is designed like that for performance + * reasons. + * + * The usual features of an array are classic ones: to append an + * element, use eina_array_push() and to remove the last element, use + * eina_array_pop(). To retrieve the element at a given position, use + * eina_array_data_get(). The number of elements can be retrieved with + * eina_array_count_get(). + * + * Eina_Array is different from a conventional C array in a number of ways, most + * importantly they grow and shrink dynamically, this means that if you add an + * element to a full array it grows and that when you remove an element from an + * array it @b may shrink. + * + * When the array needs to grow it allocates memory not just for the element + * currently being added since that would mean allocating memory(which is + * computationally expensive) often, instead it grows to be able to hold @p step + * more elements. Similarly if you remove elements in such a way that that the + * array is left holding its capacity - @p step elements it will shrink. + * + * The following image illustrates how an Eina_Array grows: + * + * @image html eina_array-growth.png + * @image latex eina_array-growth.eps width=\textwidth + * + * Eina_Array only stores pointers but it can store data of any type in the form + * of void pointers. + * + * See here some examples: + * @li @ref array_01_example_page + * @li @ref array_02_example_page + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Array_Group Array + * + * @{ + */ + +/** + * @typedef Eina_Array + * Type for a generic vector. + */ +typedef struct _Eina_Array Eina_Array; + +/** + * @typedef Eina_Array_Iterator + * Type for an iterator on arrays, used with #EINA_ARRAY_ITER_NEXT. + */ +typedef void **Eina_Array_Iterator; + +/** + * @struct _Eina_Array + * Type for an array of data. + */ +struct _Eina_Array +{ +#define EINA_ARRAY_VERSION 1 + int version; /**< Should match EINA_ARRAY_VERSION used when compiled your apps, provided for ABI compatibility */ + + void **data; /**< Pointer to a vector of pointer to payload */ + unsigned int total; /**< Total number of slots in the vector */ + unsigned int count; /**< Number of active slots in the vector */ + unsigned int step; /**< How much must we grow the vector when it is full */ + EINA_MAGIC +}; + + +/** + * @brief Create a new array. + * + * @param step The count of pointers to add when increasing the array size. + * @return @c NULL on failure, non @c NULL otherwise. + * + * This function creates a new array. When adding an element, the array + * allocates @p step elements. When that buffer is full, then adding + * another element will increase the buffer by @p step elements again. + * + * This function return a valid array on success, or @c NULL if memory + * allocation fails. In that case, the error is set to + * #EINA_ERROR_OUT_OF_MEMORY. + */ +EAPI Eina_Array *eina_array_new(unsigned int step) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Free an array. + * + * @param array The array to free. + * + * This function frees @p array. It calls first eina_array_flush() then + * free the memory of the pointer. It does not free the memory + * allocated for the elements of @p array. To free them, use + * #EINA_ARRAY_ITER_NEXT. For performance reasons, there is no check + * of @p array. + */ +EAPI void eina_array_free(Eina_Array *array) EINA_ARG_NONNULL(1); + +/** + * @brief Set the step of an array. + * + * @param array The array. + * @param sizeof_eina_array Should be the value returned by sizeof(Eina_Array). + * @param step The count of pointers to add when increasing the array size. + * + * This function sets the step of @p array to @p step. For performance + * reasons, there is no check of @p array. If it is @c NULL or + * invalid, the program may crash. + * + * @warning This function can @b only be called on uninitialized arrays. + */ +EAPI void eina_array_step_set(Eina_Array *array, + unsigned int sizeof_eina_array, + unsigned int step) EINA_ARG_NONNULL(1); +/** + * @brief Clean an array. + * + * @param array The array to clean. + * + * This function sets the count member of @p array to 0, however it doesn't free + * any space. This is particularly useful if you need to empty the array and + * add lots of elements quickly. For performance reasons, there is no check of + * @p array. If it is @c NULL or invalid, the program may crash. + */ +static inline void eina_array_clean(Eina_Array *array) EINA_ARG_NONNULL(1); + +/** + * @brief Flush an array. + * + * @param array The array to flush. + * + * This function sets the count and total members of @p array to 0, + * frees and set to NULL its data member. For performance reasons, + * there is no check of @p array. If it is @c NULL or invalid, the + * program may crash. + */ +EAPI void eina_array_flush(Eina_Array *array) EINA_ARG_NONNULL(1); + +/** + * @brief Rebuild an array by specifying the data to keep. + * + * @param array The array. + * @param keep The functions which selects the data to keep. + * @param gdata The data to pass to the function keep. + * @return #EINA_TRUE on success, #EINA_FALSE oterwise. + * + * This function rebuilds @p array be specifying the elements to keep with the + * function @p keep. No empty/invalid fields are left in the array. @p gdata is + * an additional data to pass to @p keep. For performance reasons, there is no + * check of @p array. If it is @c NULL or invalid, the program may crash. + * + * If it wasn't able to remove items due to an allocation failure, it will + * return #EINA_FALSE and the error is set to #EINA_ERROR_OUT_OF_MEMORY. + */ +EAPI Eina_Bool eina_array_remove(Eina_Array * array, + Eina_Bool (*keep)(void *data, void *gdata), + void *gdata) EINA_ARG_NONNULL(1, 2); +static inline Eina_Bool eina_array_push(Eina_Array *array, + const void *data) EINA_ARG_NONNULL(1, 2); +static inline void *eina_array_pop(Eina_Array *array) EINA_ARG_NONNULL(1); +static inline void *eina_array_data_get(const Eina_Array *array, + unsigned int idx) EINA_ARG_NONNULL(1); +/** + * @brief Set the data at a given position in an array. + * + * @param array The array. + * @param idx The potition of the data to set. + * @param data The data to set. + * + * This function sets the data at the position @p idx in @p + * array to @p data, this effectively replaces the previously held data, you + * must therefore get a pointer to it first if you need to free it. For + * performance reasons, there is no check of @p array or @p idx. If it is @c + * NULL or invalid, the program may crash. +*/ +static inline void eina_array_data_set(const Eina_Array *array, + unsigned int idx, + const void *data) EINA_ARG_NONNULL(1); +static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1); + +/** + * @brief Returned a new iterator associated to an array. + * + * @param array The array. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to + * @p array. If @p array is @c NULL or the count member of @p array is + * less or equal than 0, this function returns NULL. If the memory can + * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is + * set. Otherwise, a valid iterator is returned. + */ +EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returned a new accessor associated to an array. + * + * @param array The array. + * @return A new accessor. + * + * This function returns a newly allocated accessor associated to + * @p array. If @p array is @c NULL or the count member of @p array is + * less or equal than 0, this function returns NULL. If the memory can + * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is + * set. Otherwise, a valid accessor is returned. + */ +EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +/** + * @brief Provide a safe way to iterate over an array + * + * @param array The array to iterate over. + * @param cb The callback to call for each item. + * @param fdata The user data to pass to the callback. + * @return EINA_TRUE if it successfully iterate all items of the array. + * + * This function provide a safe way to iterate over an array. @p cb should + * return EINA_TRUE as long as you want the function to continue iterating, + * by returning EINA_FALSE it will stop and return EINA_FALSE as a result. + */ +static inline Eina_Bool eina_array_foreach(Eina_Array *array, + Eina_Each_Cb cb, + void *data); +/** + * @def EINA_ARRAY_ITER_NEXT + * @brief Macro to iterate over an array easily. + * + * @param array The array to iterate over. + * @param index The integer number that is increased while itareting. + * @param item The data + * @param iterator The iterator + * + * This macro allows the iteration over @p array in an easy way. It + * iterates from the first element to the last one. @p index is an + * integer that increases from 0 to the number of elements. @p item is + * the data of each element of @p array, so it is a pointer to a type + * chosen by the user. @p iterator is of type #Eina_Array_Iterator. + * + * This macro can be used for freeing the data of an array, like in + * the following example: + * + * @code + * Eina_Array *array; + * char *item; + * Eina_Array_Iterator iterator; + * unsigned int i; + * + * // array is already filled, + * // its elements are just duplicated strings, + * // EINA_ARRAY_ITER_NEXT will be used to free those strings + * + * EINA_ARRAY_ITER_NEXT(array, i, item, iterator) + * free(item); + * @endcode + */ +#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator) \ + for (index = 0, iterator = (array)->data; \ + (index < eina_array_count_get(array)) && ((item = *((iterator)++))); \ + ++(index)) + +#include "eina_inline_array.x" + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_benchmark.h b/libraries/eina/src/include/eina_benchmark.h new file mode 100644 index 0000000..721e1c0 --- /dev/null +++ b/libraries/eina/src/include/eina_benchmark.h @@ -0,0 +1,453 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_BENCHMARK_H_ +#define EINA_BENCHMARK_H_ + +#include "eina_array.h" + + + +/** + * @page tutorial_benchmark_page Benchmark Tutorial + * + * The Benchmark module allows you to write easily benchmarks + * framework in a project for timing critical part and detect slow + * parts of code. In addition it automatically creates data files of + * these benchmark, as well as a gnuplot file which can display the + * comparison curves of the benchmarks. + * + * @section tutorial_benchmark_basic_usage Basic Usage + * + * To create a basic benchmark, you have to follow these steps: + * + * @li Create a new bechmark + * @li Write the functions that wraps the the functions you want to + * bechmark. + * @li Register these wrappers functions. + * @li Run the benchmark. + * @li Free the memory. + * + * Here is a basic example of bechmark which creates two functions + * that will be run. These functions just print a message. + * + * @code + * #include + * #include + * + * #include + * + * static + * void work1(int request) + * { + * printf ("work1 in progress... Request: %d\n", request); + * } + * + * static + * void work2(int request) + * { + * printf ("work2 in progress... Request: %d\n", request); + * } + * + * int main() + * { + * Eina_Benchmark *test; + * Eina_Array *ea; + * + * if (!eina_init()) + * return EXIT_FAILURE; + * + * test = eina_benchmark_new("test", "run"); + * if (!test) + * goto shutdown_eina; + * + * eina_benchmark_register(test, "work-1", EINA_BENCHMARK(work1), 200, 300, 10); + * eina_benchmark_register(test, "work-2", EINA_BENCHMARK(work2), 100, 150, 5); + * + * ea = eina_benchmark_run(test); + * + * eina_benchmark_free(test); + * eina_shutdown(); + * + * return EXIT_SUCCESS; + * + * shutdown_eina: + * eina_shutdown(); + * + * return EXIT_FAILURE; + * } + * @endcode + * + * As "test", "run" are passed to eina_benchmark_new() and as the tests + * "work-1" and "work-2" are registered, the data files + * bench_test_run.work-1.data and bench_test_run.work-2.data will be + * created after the eina_benchmark_run() call. They contain four + * columns. The file bench_test_run.work-1.data contains for example: + * + * @code + * # specimen experiment time starting time ending time + * 200 23632 2852446 2876078 + * 210 6924 2883046 2889970 + * 220 6467 2895962 2902429 + * 230 6508 2908271 2914779 + * 240 6278 2920610 2926888 + * 250 6342 2932830 2939172 + * 260 6252 2944954 2951206 + * 270 6463 2956978 2963441 + * 280 6347 2969548 2975895 + * 290 6457 2981702 2988159 + * @endcode + * + * The first column (specimen) is the integer passed to the work1() + * function when the test is run. The second column (experiment time) + * is the time, in nanosecond, that work1() takes. The third and + * fourth columnd are self-explicit. + * + * You can see that the integer passed work1() starts from 200 and + * finishes at 290, with a step of 10. These values are computed withe + * last 3 values passed to eina_benchmark_register(). See the document + * of that function for the detailed behavior. + * + * The gnuplot file will be named bench_test_run.gnuplot. Just run: + * + * @code + * gnuplot bench_test_run.gnuplot + * @endcode + * + * to create the graphic of the comparison curves. The image file is + * named output_test_run.png. + * + * @section tutorial_benchmark_advanced_usage More Advanced Usage + * + * In this section, several test will be created and run. The idea is + * exactly the same than in the previous section, but with some basic + * automatic way to run all the benchmarks. The following code + * benchmarks some Eina converts functions, and some Eina containers + * types: + * + * @code + * #include + * #include + * #include + * + * #include + * + * static void bench_convert(Eina_Benchmark *bench); + * static void bench_container(Eina_Benchmark *bench); + * + * typedef struct _Benchmark_Case Benchmark_Case; + * + * struct _Benchmark_Case + * { + * const char *bench_case; + * void (*build)(Eina_Benchmark *bench); + * }; + * + * static const Benchmark_Case benchmarks[] = { + * { "Bench 1", bench_convert }, + * { "Bench 2", bench_container }, + * { NULL, NULL } + * }; + * + * static + * void convert1(int request) + * { + * char tmp[128]; + * int i; + * + * srand(time(NULL)); + * + * for (i = 0; i < request; ++i) + * eina_convert_itoa(rand(), tmp); + * } + * + * static + * void convert2(int request) + * { + * char tmp[128]; + * int i; + * + * srand(time(NULL)); + * + * for (i = 0; i < request; ++i) + * eina_convert_xtoa(rand(), tmp); + * } + * + * static void + * bench_convert(Eina_Benchmark *bench) + * { + * eina_benchmark_register(bench, "convert-1", EINA_BENCHMARK(convert1), 200, 400, 10); + * eina_benchmark_register(bench, "convert-2", EINA_BENCHMARK(convert2), 200, 400, 10); + * } + * + * static + * void array(int request) + * { + * Eina_Array *array; + * Eina_Array_Iterator it; + * int *data; + * int i; + * + * srand(time(NULL)); + * + * array = eina_array_new(64); + * + * for (i = 0; i < request; ++i) + * { + * data = (int *)malloc(sizeof(int)); + * if (!data) continue; + * *data = rand(); + * eina_array_push(array, data); + * } + * + * EINA_ARRAY_ITER_NEXT(array, i, data, it) + * free(data); + * + * eina_array_free(array); + * } + * + * static + * void list(int request) + * { + * Eina_List *l = NULL; + * int *data; + * int i; + * + * srand(time(NULL)); + * + * for (i = 0; i < request; ++i) + * { + * data = (int *)malloc(sizeof(int)); + * if (!data) continue; + * *data = rand(); + * l = eina_list_prepend(l, data); + * } + * + * while (l) + * { + * free(eina_list_data_get(l)); + * l = eina_list_remove_list(l, l); + * } + * } + * + * static void + * bench_container(Eina_Benchmark *bench) + * { + * eina_benchmark_register(bench, "array", EINA_BENCHMARK(array), 200, 300, 10); + * eina_benchmark_register(bench, "list", EINA_BENCHMARK(list), 200, 300, 10); + * } + * + * int main() + * { + * Eina_Benchmark *test; + * Eina_Array *ea; + * unsigned int i; + * + * if (!eina_init()) + * return EXIT_FAILURE; + * + * for (i = 0; benchmarks[i].bench_case != NULL; ++i) + * { + * test = eina_benchmark_new(benchmarks[i].bench_case, "Benchmark example"); + * if (!test) + * continue; + * + * benchmarks[i].build(test); + * + * ea = eina_benchmark_run(test); + * + * eina_benchmark_free(test); + * } + * + * eina_shutdown(); + * + * return EXIT_SUCCESS; + * } + * @endcode + * + * gnuplot can be used to see how are performed the convert functions + * together, as well as how are performed the containers. So it is now + * easy to see that the hexadecimal convert function is faster than + * the decimal one, and that arrays are faster than lists. + * + * You can improve all that by executing automatically gnuplot in your + * program, or integrate the Eina benchmark framework in an autotooled + * project. See that + * page + * for more informations. + * + */ + + +/** + * @addtogroup Eina_Benchmark_Group Benchmark + * + * These functions allow you to add benchmark framework in a project + * for timing critical part and detect slow parts of code. It is used + * in Eina to compare the time used by eina, glib, evas and ecore data + * types. + * + * To use the benchmark module, Eina must be initialized with + * eina_init() and later shut down with eina_shutdown(). A benchmark + * is created with eina_benchmark_new() and freed with + * eina_benchmark_free(). + * + * eina_benchmark_register() adds a test to a benchmark. That test can + * be run a certain amount of times. Adding more than one test to be + * executed allows the comparison between several parts of a program, + * or different implementations. + * + * eina_benchmark_run() runs all the tests registered with + * eina_benchmark_register(). The amount of time of each test is + * written in a gnuplot file. + * + * For more information, you can look at the @ref tutorial_benchmark_page. + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Benchmark_Group Benchmark + * + * @{ + */ + +/** + * @typedef Eina_Benchmark + * Type for a benchmark. + */ +typedef struct _Eina_Benchmark Eina_Benchmark; + +/** + * @typedef Eina_Benchmark_Specimens + * Type for a test function to be called when running a benchmark. + */ +typedef void (*Eina_Benchmark_Specimens)(int request); + +/** + * @def EINA_BENCHMARK + * @brief cast to an #Eina_Benchmark_Specimens. + * + * @param function The function to cast. + * + * This macro casts @p function to Eina_Benchmark_Specimens. + */ +#define EINA_BENCHMARK(function) ((Eina_Benchmark_Specimens)function) + + +/** + * @brief Create a new array. + * + * @param name The name of the benchmark. + * @param run The name of the run. + * @return @c NULL on failure, non @c NULL otherwise. + * + * This function creates a new benchmark. @p name and @p run are used + * to name the gnuplot file that eina_benchmark_run() will create. + * + * This function return a valid benchmark on success, or @c NULL if + * memory allocation fails. In that case, the error is set to + * #EINA_ERROR_OUT_OF_MEMORY. + * + * When the new module is not needed anymore, use + * eina_benchmark_free() to free the allocated memory. + */ +EAPI Eina_Benchmark *eina_benchmark_new(const char *name, + const char *run); + +/** + * @brief Free a benchmark object. + * + * @param bench The benchmark to free. + * + * This function removes all the benchmark tests that have been + * registered and frees @p bench. If @p bench is @c NULL, this + * function returns immediately. + */ +EAPI void eina_benchmark_free(Eina_Benchmark *bench); + +/** + * @brief Add a test to a benchmark. + * + * @param bench The benchmark. + * @param name The name of the test. + * @param bench_cb The test function to be called. + * @param count_start The start data to be passed to @p bench_cb. + * @param count_end The end data to be passed to @p bench_cb. + * @param count_step The step data to be passed to @p bench_cb. + * @return #EINA_FALSE on failure, #EINA_TRUE otherwise. + * + * This function adds the test named @p name to @p benchmark. @p + * bench_cb is the function called when the test is executed. That + * test can be executed a certain amount of time. @p start, @p end and + * @p step define a loop with a step increment. The integer that is + * increasing by @p step from @p start to @p end is passed to @p + * bench_cb when eina_benchmark_run() is called. + * + * If @p bench is @c NULL, this function returns imediatly. If the + * allocation of the memory of the test to add fails, the error is set + * to #EINA_ERROR_OUT_OF_MEMORY. This function returns #EINA_FALSE + * on failure, #EINA_TRUE otherwise. + */ +EAPI Eina_Bool eina_benchmark_register(Eina_Benchmark *bench, + const char *name, + Eina_Benchmark_Specimens bench_cb, + int count_start, + int count_end, + int count_set); + +/** + * @brief Run the benchmark tests that have been registered. + * + * @param bench The benchmark. + * @return The list of names of the test files. + * + * This function runs all the tests that as been registered with + * eina_benchmark_register() and save the result in a gnuplot + * file. The name of the file has the following format: + * + * @code + * bench_[name]_[run]%s.gnuplot + * @endcode + * + * where [name] and [run] are the values passed to + * eina_benchmark_new(). + * + * Each registered test is executed and timed. The time is written to + * the gnuplot file. The number of times each test is executed is + * controlled by the parameters passed to eina_benchmark_register(). + * + * If @p bench is @c NULL, this functions returns @c NULL + * immediately. Otherwise, it returns the list of the names of each + * test. + */ +EAPI Eina_Array *eina_benchmark_run(Eina_Benchmark *bench); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_BENCHMARK_H_ */ diff --git a/libraries/eina/src/include/eina_binbuf.h b/libraries/eina/src/include/eina_binbuf.h new file mode 100644 index 0000000..92f788e --- /dev/null +++ b/libraries/eina/src/include/eina_binbuf.h @@ -0,0 +1,217 @@ +#ifndef EINA_BINBUF_H +#define EINA_BINBUF_H + +#include +#include + +#include "eina_types.h" + +/** + * @addtogroup Eina_Binary_Buffer_Group Binary Buffer + * + * @brief These functions provide string buffers management. + * + * The Binary Buffer data type is designed to be a mutable string, + * allowing to append, prepend or insert a string to a buffer. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Binary_Buffer_Group Binary Buffer + * + * @{ + */ + +/** + * @typedef Eina_Binbuf + * Type for a string buffer. + */ +typedef struct _Eina_Strbuf Eina_Binbuf; + +/** + * @brief Create a new string buffer. + * + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_binbuf_free(). + * + * @see eina_binbuf_free() + * @see eina_binbuf_append() + * @see eina_binbuf_string_get() + */ +EAPI Eina_Binbuf *eina_binbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Free a string buffer. + * + * @param buf The string buffer to free. + * + * This function frees the memory of @p buf. @p buf must have been + * created by eina_binbuf_new(). + */ +EAPI void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Reset a string buffer. + * + * @param buf The string buffer to reset. + * + * This function reset @p buf: the buffer len is set to 0, and the + * string is set to '\\0'. No memory is free'd. + */ +EAPI void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Append a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_binbuf_append() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_binbuf_append() + * @see eina_binbuf_append_n() + */ +EAPI Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *str, size_t length) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to append to. + * @param c The char to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf. If it can not insert it, + * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_ARG_NONNULL(1); + +/** + * @brief Insert a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param length The exact length to use. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_binbuf_insert() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_binbuf_insert() + * @see eina_binbuf_insert_n() + */ +EAPI Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to insert to. + * @param c The char to insert. + * @param pos The position to insert the char. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf at position @p pos. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +EAPI Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t pos) EINA_ARG_NONNULL(1); + +/** + * @brief Remove a slice of the given string buffer. + * + * @param buf The string buffer to remove a slice. + * @param start The initial (inclusive) slice position to start + * removing, in bytes. + * @param end The final (non-inclusive) slice position to finish + * removing, in bytes. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function removes a slice of @p buf, starting at @p start + * (inclusive) and ending at @p end (non-inclusive). Both values are + * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. + */ + +EAPI Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve a pointer to the contents of a string buffer + * + * @param buf The string buffer. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. The returned + * value must not be modified and will no longer be valid if @p buf is + * modified. In other words, any eina_binbuf_append() or similar will + * make that pointer invalid. + * + * @see eina_binbuf_string_steal() + */ +EAPI const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Steal the contents of a string buffer. + * + * @param buf The string buffer to steal. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. @p buf is + * then initialized and does not own the returned string anymore. The + * caller must release the memory of the returned string by calling + * free(). + * + * @see eina_binbuf_string_get() + */ +EAPI unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Free the contents of a string buffer but not the buffer. + * + * @param buf The string buffer to free the string of. + * + * This function frees the string contained in @p buf without freeing + * @p buf. + */ +EAPI void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve the length of the string buffer content. + * + * @param buf The string buffer. + * @return The current length of the string, in bytes. + * + * This function returns the length of @p buf. + */ +EAPI size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRBUF_H */ diff --git a/libraries/eina/src/include/eina_binshare.h b/libraries/eina/src/include/eina_binshare.h new file mode 100644 index 0000000..55b17a6 --- /dev/null +++ b/libraries/eina/src/include/eina_binshare.h @@ -0,0 +1,193 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2008 Peter Wehrfritz + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef EINA_BINSHARE_H_ +#define EINA_BINSHARE_H_ + +#include "eina_types.h" + +/** + * @page tutorial_binshare_page Binary Share Tutorial + * + * Should call eina_binshare_init() before usage and eina_binshare_shutdown() after. + * to be written... + * + */ + +/** + * @addtogroup Eina_Binshare_Group Binary Share + * + * These functions allow you to store one copy of an object, and use it + * throughout your program. + * + * This is a method to reduce the number of duplicated objects kept in + * memory. + * + * For more information, you can look at the @ref tutorial_binshare_page. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Binshare_Group Binary Share + * + * @{ + */ + + +/** + * @brief Retrieve an instance of an object for use in a program. + * + * @param obj The binary object to retrieve an instance of. + * @param olen The byte size + * @return A pointer to an instance of the object on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p obj. If @p obj is + * @c NULL, then @c NULL is returned. If @p obj is already stored, it + * is just returned and its reference counter is increased. Otherwise + * it is added to the objects to be searched and a duplicated object + * of @p obj is returned. + * + * This function does not check object size, but uses the + * exact given size. This can be used to share part of a larger + * object or subobject. + * + * @see eina_binshare_add() + */ +EAPI const void *eina_binshare_add_length(const void *obj, + unsigned int olen) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * Increment references of the given shared object. + * + * @param obj The shared object. + * @return A pointer to an instance of the object on success. + * @c NULL on failure. + * + * This is similar to eina_share_common_add(), but it's faster since it will + * avoid lookups if possible, but on the down side it requires the parameter + * to be shared before, in other words, it must be the return of a previous + * eina_binshare_add(). + * + * There is no unref since this is the work of eina_binshare_del(). + */ +EAPI const void *eina_binshare_ref(const void *obj); + +/** + * @brief Note that the given object has lost an instance. + * + * @param obj object The given object. + * + * This function decreases the reference counter associated to @p obj + * if it exists. If that counter reaches 0, the memory associated to + * @p obj is freed. If @p obj is NULL, the function returns + * immediately. + * + * Note that if the given pointer is not shared or NULL, bad things + * will happen, likely a segmentation fault. + */ +EAPI void eina_binshare_del(const void *obj); + +/** + * @brief Note that the given object @b must be shared. + * + * @param obj the shared object to know the length. It is safe to + * give NULL, in that case -1 is returned. + * @return The length of the shared object. + * + * This function is a cheap way to known the length of a shared + * object. Note that if the given pointer is not shared, bad + * things will happen, likely a segmentation fault. If in doubt, try + * strlen(). + */ +EAPI int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Dump the contents of the share_common. + * + * This function dumps all objects in the share_common to stdout with a + * DDD: prefix per line and a memory usage summary. + */ +EAPI void eina_binshare_dump(void); + +/** + * @brief Retrieve an instance of a blob for use in a program. + * + * @param ptr The binary blob to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This macro retrieves an instance of @p obj. If @p obj is + * @c NULL, then @c NULL is returned. If @p obj is already stored, it + * is just returned and its reference counter is increased. Otherwise + * it is added to the blobs to be searched and a duplicated blob + * of @p obj is returned. + * + * This macro essentially calls eina_binshare_add_length with ptr and sizeof(*ptr) + * as the parameters. It's useful for pointers to structures. + * + * @see eina_stringshare_add_length() + */ +#define eina_binshare_add(ptr) eina_binshare_add_length(ptr, sizeof(*ptr)) + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRINGSHARE_H_ */ diff --git a/libraries/eina/src/include/eina_clist.h b/libraries/eina/src/include/eina_clist.h new file mode 100644 index 0000000..68f15df --- /dev/null +++ b/libraries/eina/src/include/eina_clist.h @@ -0,0 +1,456 @@ +/* + * Linked lists support + * + * Copyright (C) 2002 Alexandre Julliard + * Copyright (C) 2011 Mike McCormack (adapted for Eina) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __EINA_CLIST_H__ +#define __EINA_CLIST_H__ + +/** + * @addtogroup Eina_CList_Group Compact inline list + * @brief Eina_Clist is a compact (inline) list implementation + * + * Elements of this list are members of the structs stored in the list + * + * Advantages over @ref Eina_List and @ref Eina_Inlist: + * - uses less memory (two machine words per item) + * - allows removing items without knowing which list they're in using O(1) time + * - no need to keep updating the head pointer as the list is changed + * + * Disadvantages: + * - O(N) time to calculate list length + * - requires one list entry in a struct per list (i.e. it's an inlist) + * - requires a head/tail pointer + * - need to know the list head when moving to next or previous pointer + * + * @note There's no NULL at the end of the list, the last item points to the head. + * + * @note List heads must be initialized with EINA_CLIST_INIT or by calling eina_clist_element_init + */ + +/* Define a list like so: + * + * @code + * struct gadget + * { + * struct Eina_Clist entry; <-- doesn't have to be the first item in the struct + * int a, b; + * }; + * + * static Eina_Clist global_gadgets = EINA_CLIST_INIT( global_gadgets ); + * @endcode + * + * or + * + * @code + * struct some_global_thing + * { + * Eina_Clist gadgets; + * }; + * + * eina_clist_init( &some_global_thing->gadgets ); + * @endcode + * + * Manipulate it like this: + * + * @code + * eina_clist_add_head( &global_gadgets, &new_gadget->entry ); + * eina_clist_remove( &new_gadget->entry ); + * eina_clist_add_after( &some_random_gadget->entry, &new_gadget->entry ); + * @endcode + * + * And to iterate over it: + * + * @code + * struct gadget *gadget; + * EINA_CLIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry ) + * { + * ... + * } + * @endcode + * + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_CList_Group Compact list + * + * @{ + */ + +/** + * @typedef Eina_Clist + * This is the list head and the list entry. + * @since 1.1.0 + */ +typedef struct _Eina_Clist Eina_Clist; + +/** + * @struct _Eina_Clist + * Compact list type + * @note This structure is used as both the list head and the list entry. + * @since 1.1.0 + */ +struct _Eina_Clist +{ + Eina_Clist *next; + Eina_Clist *prev; +}; + +/** + * Add an element after the specified one. + * + * @param elem An element in the list + * @param to_add The element to add to the list + * @pre The list head must be initialized once before adding anything. + * @pre The element is not in any list. + * + * @note There's no need to initialize an element before adding it to the list. + * @since 1.1.0 + */ +static inline void eina_clist_add_after(Eina_Clist *elem, Eina_Clist *to_add) +{ + to_add->next = elem->next; + to_add->prev = elem; + elem->next->prev = to_add; + elem->next = to_add; +} + +/** + * Add an element before the specified one. + * + * @param elem An element in the list + * @param to_add The element to add to the list + * @pre The list head must be initialized once before adding anything. + * @pre The element is not in any list. + * + * @note There's no need to initialize an element before adding it to the list. + * @since 1.1.0 + */ +static inline void eina_clist_add_before(Eina_Clist *elem, Eina_Clist *to_add) +{ + to_add->next = elem; + to_add->prev = elem->prev; + elem->prev->next = to_add; + elem->prev = to_add; +} + +/** + * Add element at the head of the list. + * + * @param list The list + * @param elem An element + * @pre The list head must be initialized once before adding anything. + * @pre The element is not in any list. + * + * @note There's no need to initialize an element before adding it to the list. + * @since 1.1.0 + */ +static inline void eina_clist_add_head(Eina_Clist *list, Eina_Clist *elem) +{ + eina_clist_add_after(list, elem); +} + +/** + * Add element at the tail of the list. + * + * @param list The list + * @param elem An element + * @pre The list head must be initialized once before adding anything. + * @pre The element is not in any list. + * + * @note There's no need to initialize an element before adding it to the list. + * @since 1.1.0 + */ +static inline void eina_clist_add_tail(Eina_Clist *list, Eina_Clist *elem) +{ + eina_clist_add_before(list, elem); +} + +/** + * Init an (unlinked) element. + * + * Call this function on elements that have not been added to the list + * if you want eina_clist_element_init() to work correctly + * + * @param elem An element + * @pre The element is not in any list. + * @post The element is marked as not being in any list + * + * @note It is not necessary to call this before adding an element to this list. + * @since 1.1.0 + */ +static inline void eina_clist_element_init(Eina_Clist *elem) +{ + elem->next = NULL; + elem->prev = NULL; +} + +/** + * Check if an element is in a list or not. + * + * @param elem An element + * + * @pre Either eina_clist_element_init() has been called on @a elem, + * it has been added to a list or remove from a list. + * @since 1.1.0 + */ +static inline int eina_clist_element_is_linked(Eina_Clist *elem) +{ + return (elem->next != NULL && elem->prev != NULL); +} + +/** + * Remove an element from its list. + * + * @param elem An element + * @pre The element is in a list already + * @post The element is marked as not being in any list + * @since 1.1.0 + */ +static inline void eina_clist_remove(Eina_Clist *elem) +{ + elem->next->prev = elem->prev; + elem->prev->next = elem->next; + eina_clist_element_init(elem); +} + +/** + * Get the next element. + * + * @param list The list + * @param elem An element + * @pre @a elem is in @a list + * @return The element after @elem in @list or NULL if @a elem is last in @a list + * @since 1.1.0 + */ +static inline Eina_Clist *eina_clist_next(const Eina_Clist *list, const Eina_Clist *elem) +{ + Eina_Clist *ret = elem->next; + if (elem->next == list) ret = NULL; + return ret; +} + +/** + * Get the previous element. + * + * @param list The list + * @param elem An element + * + * @return The element before @a elem or NULL if @a elem is the first in the list + * @since 1.1.0 + */ +static inline Eina_Clist *eina_clist_prev(const Eina_Clist *list, const Eina_Clist *elem) +{ + Eina_Clist *ret = elem->prev; + if (elem->prev == list) ret = NULL; + return ret; +} + +/** + * Get the first element. + * + * @param list The list + * @returns The first element in @a list or NULL if @a list is empty + * @since 1.1.0 + */ +static inline Eina_Clist *eina_clist_head(const Eina_Clist *list) +{ + return eina_clist_next(list, list); +} + +/** + * Get the last element. + * + * @param list The list + * @returns The last element in @a list or NULL if @list is empty + * @since 1.1.0 + */ +static inline Eina_Clist *eina_clist_tail(const Eina_Clist *list) +{ + return eina_clist_prev(list, list); +} + +/** + * Check if a list is empty. + * + * @param list The list + * @returns non-zero if @a list is empty, zero if it is not + * @since 1.1.0 + */ +static inline int eina_clist_empty(const Eina_Clist *list) +{ + return list->next == list; +} + +/** + * Initialize a list + * + * @param list The list + * @pre The list is uninitialized + * @post The list contains no items + * + * @note Don't call this function on a list with items + * @note This function must be called. Don't try do + * initialize the list by zero'ing out the list head. + * @since 1.1.0 + */ +static inline void eina_clist_init(Eina_Clist *list) +{ + list->next = list->prev = list; +} + +/** + * Count the elements of a list + * + * @param list The list + * @returns The number of items in the list + * @since 1.1.0 + */ +static inline unsigned int eina_clist_count(const Eina_Clist *list) +{ + unsigned count = 0; + const Eina_Clist *ptr; + for (ptr = list->next; ptr != list; ptr = ptr->next) count++; + return count; +} + +/** + * Move all elements from src to the tail of dst + * + * @param dst List to be appended to + * @param src List to append + * + * @post @a src is initialized but empty after this operation + * @since 1.1.0 + */ +static inline void eina_clist_move_tail(Eina_Clist *dst, Eina_Clist *src) +{ + if (eina_clist_empty(src)) return; + + dst->prev->next = src->next; + src->next->prev = dst->prev; + dst->prev = src->prev; + src->prev->next = dst; + eina_clist_init(src); +} + +/** + * move all elements from src to the head of dst + * + * @param dst List to be prepended to + * @param src List to prepend + * + * @post @a src is initialized but empty after this operation + * @since 1.1.0 + */ +static inline void eina_clist_move_head(Eina_Clist *dst, Eina_Clist *src) +{ + if (eina_clist_empty(src)) return; + + dst->next->prev = src->prev; + src->prev->next = dst->next; + dst->next = src->next; + src->next->prev = dst; + eina_clist_init(src); +} + +/** + * iterate through the list + */ +#define EINA_CLIST_FOR_EACH(cursor,list) \ + for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next) + +/* iterate through the list, with safety against removal */ +#define EINA_CLIST_FOR_EACH_SAFE(cursor, cursor2, list) \ + for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \ + (cursor) != (list); \ + (cursor) = (cursor2), (cursor2) = (cursor)->next) + +/* iterate through the list using a list entry */ +#define EINA_CLIST_FOR_EACH_ENTRY(elem, list, type, field) \ + for ((elem) = EINA_CLIST_ENTRY((list)->next, type, field); \ + &(elem)->field != (list); \ + (elem) = EINA_CLIST_ENTRY((elem)->field.next, type, field)) + +/* iterate through the list using a list entry, with safety against removal */ +#define EINA_CLIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \ + for ((cursor) = EINA_CLIST_ENTRY((list)->next, type, field), \ + (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field); \ + &(cursor)->field != (list); \ + (cursor) = (cursor2), \ + (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field)) + +/* iterate through the list in reverse order */ +#define EINA_CLIST_FOR_EACH_REV(cursor,list) \ + for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev) + +/* iterate through the list in reverse order, with safety against removal */ +#define EINA_CLIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \ + for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \ + (cursor) != (list); \ + (cursor) = (cursor2), (cursor2) = (cursor)->prev) + +/* iterate through the list in reverse order using a list entry */ +#define EINA_CLIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \ + for ((elem) = EINA_CLIST_ENTRY((list)->prev, type, field); \ + &(elem)->field != (list); \ + (elem) = EINA_CLIST_ENTRY((elem)->field.prev, type, field)) + +/* iterate through the list in reverse order using a list entry, with safety against removal */ +#define EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \ + for ((cursor) = EINA_CLIST_ENTRY((list)->prev, type, field), \ + (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field); \ + &(cursor)->field != (list); \ + (cursor) = (cursor2), \ + (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field)) + +/* macros for statically initialized lists */ +#undef EINA_CLIST_INIT +#define EINA_CLIST_INIT(list) { &(list), &(list) } + +/* get pointer to object containing list element */ +#undef EINA_CLIST_ENTRY +#define EINA_CLIST_ENTRY(elem, type, field) \ + ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field))) + +/* + * @} + */ + +/* + * @} + */ + +/* + * @} + */ + +#endif /* __EINA_CLIST_H__ */ diff --git a/libraries/eina/src/include/eina_config.h b/libraries/eina/src/include/eina_config.h new file mode 100644 index 0000000..3341731 --- /dev/null +++ b/libraries/eina/src/include/eina_config.h @@ -0,0 +1,67 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_CONFIG_H_ +#define EINA_CONFIG_H_ + +#ifdef EINA_MAGIC_DEBUG +# undef EINA_MAGIC_DEBUG +#endif +#define EINA_MAGIC_DEBUG + +#ifdef EINA_DEFAULT_MEMPOOL +# undef EINA_DEFAULT_MEMPOOL +#endif + + +#ifdef EINA_SAFETY_CHECKS +# undef EINA_SAFETY_CHECKS +#endif +#define EINA_SAFETY_CHECKS + +#ifdef EINA_HAVE_INTTYPES_H +# undef EINA_HAVE_INTTYPES_H +#endif +#define EINA_HAVE_INTTYPES_H + +#ifdef EINA_HAVE_STDINT_H +# undef EINA_HAVE_STDINT_H +#endif +#define EINA_HAVE_STDINT_H + +#ifdef EINA_HAVE_THREADS +# undef EINA_HAVE_THREADS +#endif +#define EINA_HAVE_THREADS + +#ifdef EINA_HAVE_DEBUG_THREADS +# undef EINA_HAVE_DEBUG_THREADS +#endif + + +#ifdef EINA_SIZEOF_WCHAR_T +# undef EINA_SIZEOF_WCHAR_T +#endif +#define EINA_SIZEOF_WCHAR_T 4 + +#ifdef EINA_HAVE_ON_OFF_THREADS +# undef EINA_HAVE_ON_OFF_THREADS +#endif + + +#endif /* EINA_CONFIG_H_ */ diff --git a/libraries/eina/src/include/eina_config.h.in b/libraries/eina/src/include/eina_config.h.in new file mode 100644 index 0000000..be328cd --- /dev/null +++ b/libraries/eina/src/include/eina_config.h.in @@ -0,0 +1,67 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_CONFIG_H_ +#define EINA_CONFIG_H_ + +#ifdef EINA_MAGIC_DEBUG +# undef EINA_MAGIC_DEBUG +#endif +@EINA_CONFIGURE_MAGIC_DEBUG@ + +#ifdef EINA_DEFAULT_MEMPOOL +# undef EINA_DEFAULT_MEMPOOL +#endif +@EINA_CONFIGURE_DEFAULT_MEMPOOL@ + +#ifdef EINA_SAFETY_CHECKS +# undef EINA_SAFETY_CHECKS +#endif +@EINA_CONFIGURE_SAFETY_CHECKS@ + +#ifdef EINA_HAVE_INTTYPES_H +# undef EINA_HAVE_INTTYPES_H +#endif +@EINA_CONFIGURE_HAVE_INTTYPES_H@ + +#ifdef EINA_HAVE_STDINT_H +# undef EINA_HAVE_STDINT_H +#endif +@EINA_CONFIGURE_HAVE_STDINT_H@ + +#ifdef EINA_HAVE_THREADS +# undef EINA_HAVE_THREADS +#endif +@EINA_CONFIGURE_HAVE_THREADS@ + +#ifdef EINA_HAVE_DEBUG_THREADS +# undef EINA_HAVE_DEBUG_THREADS +#endif +@EINA_CONFIGURE_HAVE_DEBUG_THREADS@ + +#ifdef EINA_SIZEOF_WCHAR_T +# undef EINA_SIZEOF_WCHAR_T +#endif +#define EINA_SIZEOF_WCHAR_T @EINA_SIZEOF_WCHAR_T@ + +#ifdef EINA_HAVE_ON_OFF_THREADS +# undef EINA_HAVE_ON_OFF_THREADS +#endif +@EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ + +#endif /* EINA_CONFIG_H_ */ diff --git a/libraries/eina/src/include/eina_convert.h b/libraries/eina/src/include/eina_convert.h new file mode 100644 index 0000000..af839e2 --- /dev/null +++ b/libraries/eina/src/include/eina_convert.h @@ -0,0 +1,374 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_CONVERT_H_ +#define EINA_CONVERT_H_ + +#include "eina_types.h" +#include "eina_error.h" + +#include "eina_fp.h" + + +/** + * @addtogroup Eina_Convert_Group Convert + * + * These functions allow you to convert integer or real numbers to + * string or conversely. + * + * To use these functions, you have to call eina_init() + * first, and eina_shutdown() when eina is not used anymore. + * + * @section Eina_Convert_From_Integer_To_Sring Conversion from integer to string + * + * To convert an integer to a string in the decimal base, + * eina_convert_itoa() should be used. If the hexadecimal base is + * wanted, eina_convert_xtoa() should be used. They all need a bufffer + * sufficiently large to store all the cyphers. + * + * Here is an example of use: + * + * @code + * #include + * #include + * + * #include + * + * int main(void) + * { + * char tmp[128]; + * + * if (!eina_init()) + * { + * printf ("Error during the initialization of eina.\n"); + * return EXIT_FAILURE; + * } + * + * eina_convert_itoa(45, tmp); + * printf("value: %s\n", tmp); + * eina_convert_xtoa(0xA1, tmp); + * printf("value: %s\n", tmp); + * + * eina_shutdown(); + * + * return EXIT_SUCCESS; + * } + * @endcode + * + * Compile this code with the following command: + * + * @code + * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina` + * @endcode + * + * @note + * The alphabetical cyphers are in lower case. + * + * @section Eina_Convert_Double Conversion double / string + * + * To convert a double to a string, eina_convert_dtoa() should be + * used. Like with the integer functions, a buffer must be used. The + * resulting string ghas the following format (which is the result + * obtained with snprintf() and the @%a modifier): + * + * @code + * [-]0xh.hhhhhp[+-]e + * @endcode + * + * To convert a string to a double, eina_convert_atod() should be + * used. The format of the string must be as above. Then, the double + * has the following mantiss and exponent: + * + * @code + * mantiss : [-]hhhhhh + * exponent : 2^([+-]e - 4 * n) + * @endcode + * + * with n being number of cypers after the point in the string + * format. To obtain the double number from the mantiss and exponent, + * use ldexp(). + * + * Here is an example of use: + * + * @code + * #include + * #include + * #include + * + * #include + * + * int main(void) + * { + * char tmp[128]; + * long long int m = 0; + * long int e = 0; + * double r; + * + * if (!eina_init()) + * { + * printf ("Error during the initialization of eina.\n"); + * return EXIT_FAILURE; + * } + * + * printf("initial value : 40.56\n"); + * eina_convert_dtoa(40.56, tmp); + * printf("result dtoa : %s\n", tmp); + + * eina_convert_atod(tmp, 128, &m, &e); + * r = ldexp((double)m, e); + * printf("result atod : %f\n", r); + * + * eina_shutdown(); + * + * return EXIT_SUCCESS; + * } + * @endcode + * + * Compile this code with the following command: + * + * @code + * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina` -lm + * @endcode + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Convert_Group Convert + * + * @{ + */ + +/** + * @var EINA_ERROR_CONVERT_P_NOT_FOUND + * Error identifier corresponding to string not containing 'p'. + */ + +EAPI extern Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND; + +/** + * @var EINA_ERROR_CONVERT_0X_NOT_FOUND + * Error identifier corresponding to string not containing '0x'. + */ +EAPI extern Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND; + +/** + * @var EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH + * Error identifier corresponding to length of the string being too small. + */ +EAPI extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH; + +/** + * @brief Convert an integer number to a string in decimal base. + * + * @param n The integer to convert. + * @param s The buffer to store the converted integer. + * @return The length of the string, including the nul terminated + * character. + * + * This function converts @p n to a nul terminated string. The + * converted string is in decimal base. As no check is done, @p s must + * be a buffer that is sufficiently large to store the integer. + * + * The returned value is the length of the string, including the nul + * terminated character. + */ +EAPI int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2); + +/** + * @brief Convert an integer number to a string in hexadecimal base. + * + * @param n The integer to convert. + * @param s The buffer to store the converted integer. + * @return The length of the string, including the nul terminated + * character. + * + * This function converts @p n to a nul terminated string. The + * converted string is in hexadecimal base and the alphabetical + * cyphers are in lower case. As no check is done, @p s must be a + * buffer that is sufficiently large to store the integer. + * + * The returned value is the length of the string, including the nul + * terminated character. + */ +EAPI int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2); + + +/** + * @brief Convert a double to a string. + * + * @param d The double to convert. + * @param des The destination buffer to store the converted double. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function converts the double @p d to a string. The string is + * stored in the buffer pointed by @p des and must be sufficiently + * large to contain the converted double. The returned string is nul + * terminated and has the following format: + * + * @code + * [-]0xh.hhhhhp[+-]e + * @endcode + * + * where the h are the hexadecimal cyphers of the mantiss and e the + * exponent (a decimal number). + * + * The returned value is the length of the string, including the nul + * character. + */ +EAPI int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2); + +/** + * @brief Convert a string to a double. + * + * @param src The string to convert. + * @param length The length of the string. + * @param m The mantisse. + * @param e The exponent. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function converts the string @p s of length @p length that + * represent a double in hexadecimal base to a double. It is used to + * replace the use of snprintf() with the \%a modifier, which is + * missing on some platform (like Windows (tm) or OpenBSD). + * + * The string must have the following format: + * + * @code + * [-]0xh.hhhhhp[+-]e + * @endcode + * + * where the h are the hexadecimal cyphers of the mantiss and e the + * exponent (a decimal number). If n is the number of cypers after the + * point, the returned mantiss and exponents are: + * + * @code + * mantiss : [-]hhhhhh + * exponent : 2^([+-]e - 4 * n) + * @endcode + * + * The mantiss and exponent are stored in the buffers pointed + * respectively by @p m and @p e. + * + * If the string is invalid, the error is set to: + * + * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found, + * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found, + * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not + * correct. + * + * In those cases, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +EAPI Eina_Bool eina_convert_atod(const char *src, + int length, + long long *m, + long *e) EINA_ARG_NONNULL(1, 3, 4); + + +/** + * @brief Convert a 32.32 fixed point number to a string. + * + * @param fp The fixed point number to convert. + * @param des The destination buffer to store the converted fixed point number. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function converts the 32.32 fixed point number @p fp to a + * string. The string is stored in the buffer pointed by @p des and + * must be sufficiently large to contain the converted fixed point + * number. The returned string is terminated and has the following + * format: + * + * @code + * [-]0xh.hhhhhp[+-]e + * @endcode + * + * where the h are the hexadecimal cyphers of the mantiss and e the + * exponent (a decimal number). + * + * The returned value is the length of the string, including the nul + * character. + * + * @note The code is the same than eina_convert_dtoa() except that it + * implements the frexp() function for fixed point numbers and does + * some optimisations. + */ +EAPI int eina_convert_fptoa(Eina_F32p32 fp, + char *des) EINA_ARG_NONNULL(2); + +/** + * @brief Convert a string to a 32.32 fixed point number. + * + * @param src The string to convert. + * @param length The length of the string. + * @param fp The fixed point number. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function converts the string @p src of length @p length that + * represent a double in hexadecimal base to a 32.32 fixed point + * number stored in @p fp. The function always tries to convert the + * string with eina_convert_atod(). + * + * The string must have the following format: + * + * @code + * [-]0xh.hhhhhp[+-]e + * @endcode + * + * where the h are the hexadecimal cyphers of the mantiss and e the + * exponent (a decimal number). If n is the number of cypers after the + * point, the returned mantiss and exponents are: + * + * @code + * mantiss : [-]hhhhhh + * exponent : 2^([+-]e - 4 * n) + * @endcode + * + * The mantiss and exponent are stored in the buffers pointed + * respectively by @p m and @p e. + * + * If the string is invalid, the error is set to: + * + * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found, + * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found, + * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not + * correct. + * + * In those cases, or if @p fp is @c NULL, #EINA_FALSE is returned, + * otherwise @p fp is computed and #EINA_TRUE is returned. + * + * @note The code uses eina_convert_atod() and do the correct bit + * shift to compute the fixed point number. + */ +EAPI Eina_Bool eina_convert_atofp(const char *src, + int length, + Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_CONVERT_H_ */ diff --git a/libraries/eina/src/include/eina_counter.h b/libraries/eina/src/include/eina_counter.h new file mode 100644 index 0000000..26bee06 --- /dev/null +++ b/libraries/eina/src/include/eina_counter.h @@ -0,0 +1,213 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_COUNTER_H_ +#define EINA_COUNTER_H_ + +#include "eina_types.h" + +/** + * @addtogroup Eina_Counter_Group Counter + * + * @brief These functions allow you to get the time spent in a part of a code. + * + * Before using the counter system, Eina must be initialized with + * eina_init() and later shut down with eina_shutdown(). The create a + * counter, use eina_counter_new(). To free it, use + * eina_counter_free(). + * + * To time a part of a code, call eina_counter_start() just before it, + * and eina_counter_stop() just after it. Each time you start to time + * a code, a clock is added to a list. You can give a number of that + * clock with the second argument of eina_counter_stop(). To send all + * the registered clocks to a stream (like stdout, ofr a file), use + * eina_counter_dump(). + * + * Here is a straightforward example: + * + * @code + * #include + * #include + * + * #include + * + * void test_malloc(void) + * { + * int i; + * + * for (i = 0; i < 100000; ++i) + * { + * void *buf; + * + * buf = malloc(100); + * free(buf); + * } + * } + * + * int main(void) + * { + * Eina_Counter *counter; + * + * if (!eina_init()) + * { + * printf("Error during the initialization of eina\n"); + * return EXIT_FAILURE; + * } + * + * counter = eina_counter_new("malloc"); + * + * eina_counter_start(counter); + * test_malloc(); + * eina_counter_stop(counter, 1); + * + * char* result = eina_counter_dump(counter); + * printf("%s", result); + * free(result); + * + * eina_counter_free(counter); + * eina_shutdown(); + * + * return EXIT_SUCCESS; + * } + * @endcode + * + * Compile this code with the following commant: + * + * @verbatim + * gcc -Wall -o test_eina_counter test_eina.c `pkg-config --cflags --libs eina` + * @endverbatim + * + * The result should be something like that: + * + * @verbatim + * \# specimen experiment time starting time ending time + * 1 9794125 783816 10577941 + * @endverbatim + * + * Note that the displayed time is in nanosecond. + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Counter_Group Counter + * + * @{ + */ + +/** + * @typedef Eina_Counter + * Counter type. + */ +typedef struct _Eina_Counter Eina_Counter; + + +/** + * @brief Return a counter. + * + * @param name The name of the counter. + * @return A newly allocated counter. + * + * This function returns a new counter. It is characterized by @p + * name. If @p name is @c NULL, the function returns @c NULL + * immediately. If memory allocation fails, @c NULL is returned and the + * error is set to #EINA_ERROR_OUT_OF_MEMORY. + * + * Whe the new counter is not needed anymore, use eina_counter_free() to + * free the allocated memory. + */ +EAPI Eina_Counter *eina_counter_new(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Delete a counter. + * + * @param counter The counter to delete. + * + * This function remove the clock of @p counter from the used clocks + * (see eina_counter_start()) and frees the memory allocated for + * @p counter. If @p counter is @c NULL, the function returns + * immediately. + */ +EAPI void eina_counter_free(Eina_Counter *counter) EINA_ARG_NONNULL(1); + +/** + * @brief Start the time count. + * + * @param counter The counter. + * + * This function specifies that the part of the code beginning just + * after its call is being to be timed, using @p counter. If + * @p counter is @c NULL, this function returns immediately. + * + * This function adds the clock associated to @p counter in a list. If + * the memory needed by that clock can not be allocated, the function + * returns and the error is set to #EINA_ERROR_OUT_OF_MEMORY. + * + * To stop the timing, eina_counter_stop() must be called with the + * same counter. + */ +EAPI void eina_counter_start(Eina_Counter *counter) EINA_ARG_NONNULL(1); + +/** + * @brief Stop the time count. + * + * @param counter The counter. + * @param specimen The number of the test. + * + * This function stop the timing that has been started with + * eina_counter_start(). @p counter must be the same than the one used + * with eina_counter_start(). @p specimen is the number of the + * test. If @p counter or its associated clock are @c NULL, or if the + * time can't be retrieved the function exits. + */ +EAPI void eina_counter_stop(Eina_Counter *counter, + int specimen) EINA_ARG_NONNULL(1); + +/** + * @brief Dump the result of all clocks of a counter to a stream. + * + * @return A string with a summary of the test. + * @param counter The counter. + * + * This function returns an malloc'd string containing the dump of + * all the valid clocks of @p counter. + * If @p counter @c NULL, the functions exits + * immediately. Otherwise, the output is formattted like that: + * + * @verbatim + * \# specimen experiment time starting time ending time + * 1 208 120000 120208 + * @endverbatim + * + * The unit of time is the nanosecond. + */ +EAPI char *eina_counter_dump(Eina_Counter *counter) EINA_ARG_NONNULL(1); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_COUNTER_H_ */ diff --git a/libraries/eina/src/include/eina_cpu.h b/libraries/eina/src/include/eina_cpu.h new file mode 100644 index 0000000..ac32e1d --- /dev/null +++ b/libraries/eina/src/include/eina_cpu.h @@ -0,0 +1,39 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_CPU_H_ +#define EINA_CPU_H_ + +#include "eina_types.h" + +typedef enum _Eina_Cpu_Features +{ + EINA_CPU_MMX = 0x00000001, + EINA_CPU_SSE = 0x00000002, + EINA_CPU_SSE2 = 0x00000004, + EINA_CPU_SSE3 = 0x00000008, + /* TODO 3DNow! */ + EINA_CPU_ALTIVEC = 0x00000010, + EINA_CPU_VIS = 0x00000020, + EINA_CPU_NEON = 0x00000040, +} Eina_Cpu_Features; + +EAPI Eina_Cpu_Features eina_cpu_features_get(void); +EAPI int eina_cpu_count(void); + +#endif /* EINA_CPU_H_ */ diff --git a/libraries/eina/src/include/eina_error.h b/libraries/eina/src/include/eina_error.h new file mode 100644 index 0000000..2b0ae77 --- /dev/null +++ b/libraries/eina/src/include/eina_error.h @@ -0,0 +1,198 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_ERROR_H_ +#define EINA_ERROR_H_ + +#include + +#include "eina_types.h" + + +/** + * @page tutorial_error_page Error Tutorial + * + * @section tutorial_error_registering_msg Registering messages + * + * The error module can provide a system that mimics the errno system + * of the C standard library. It consists in 2 parts: + * + * @li a way of registering new messages with + * eina_error_msg_register() and eina_error_msg_get(), + * @li a way of setting / getting last error message with + * eina_error_set() / eina_error_get(). + * + * So one has to fisrt register all the error messages that a program + * or a lib should manage. Then, when an error can occur, use + * eina_error_set(), and when errors are managed, use + * eina_error_get(). If eina_error_set() is used to set an error, do + * not forget to call before eina_error_set(), to remove previous set + * errors. + * + * Here is an example of use: + * + * @include eina_error_01.c + * + * Of course, instead of printf(), eina_log_print() can be used to + * have beautiful error messages. + */ + +/** + * @addtogroup Eina_Error_Group Error + * + * @brief These functions provide error management for projects. + * + * The Eina error module provides a way to manage errors in a simple but + * powerful way in libraries and modules. It is also used in Eina itself. + * Similar to libC's @c errno and strerror() facilities, this is extensible and + * recommended for other libraries and applications. + * + * A simple example of how to use this can be seen @ref tutorial_error_page + * "here". + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Error_Group Error + * + * @{ + */ + +/** + * @typedef Eina_Error + * Error type. + */ +typedef int Eina_Error; + +/** + * @var EINA_ERROR_OUT_OF_MEMORY + * Error identifier corresponding to a lack of memory. + */ + +EAPI extern Eina_Error EINA_ERROR_OUT_OF_MEMORY; + +/** + * @brief Register a new error type. + * + * @param msg The description of the error. It will be duplicated using + * eina_stringshare_add(). + * @return The unique number identifier for this error. + * + * This function stores in a list the error message described by + * @p msg. The returned value is a unique identifier greater or equal + * than 1. The description can be retrieve later by passing to + * eina_error_msg_get() the returned value. + * + * @see eina_error_msg_static_register() + */ +EAPI Eina_Error eina_error_msg_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Register a new error type, statically allocated message. + * + * @param msg The description of the error. This string will not be + * duplicated and thus the given pointer should live during + * usage of eina_error. + * @return The unique number identifier for this error. + * + * This function stores in a list the error message described by + * @p msg. The returned value is a unique identifier greater or equal + * than 1. The description can be retrieve later by passing to + * eina_error_msg_get() the returned value. + * + * @see eina_error_msg_register() + */ +EAPI Eina_Error eina_error_msg_static_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Change the message of an already registered message + * + * @param error The Eina_Error to change the message of + * @param msg The description of the error. This string will be + * duplicated only if the error was registered with @ref eina_error_msg_register + * otherwise it must remain intact for the duration. + * @return EINA_TRUE if successful, EINA_FALSE on error + * + * This function modifies the message associated with @p error and changes + * it to @p msg. If the error was previously registered by @ref eina_error_msg_static_register + * then the string will not be duplicated, otherwise the previous message + * will be unrefed and @p msg copied. + * + * @see eina_error_msg_register() + */ +EAPI Eina_Bool eina_error_msg_modify(Eina_Error error, + const char *msg) EINA_ARG_NONNULL(2); + +/** + * @brief Return the last set error. + * + * @return The last error. + * + * This function returns the last error set by eina_error_set(). The + * description of the message is returned by eina_error_msg_get(). + */ +EAPI Eina_Error eina_error_get(void); + +/** + * @brief Set the last error. + * + * @param err The error identifier. + * + * This function sets the last error identifier. The last error can be + * retrieved with eina_error_get(). + * + * @note This is also used to clear previous errors, in that case @p err should + * be @c 0. + */ +EAPI void eina_error_set(Eina_Error err); + +/** + * @brief Return the description of the given an error number. + * + * @param error The error number. + * @return The description of the error. + * + * This function returns the description of an error that has been + * registered with eina_error_msg_register(). If an incorrect error is + * given, then @c NULL is returned. + */ +EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE; + +/** + * @brief Find the #Eina_Error corresponding to a message string + * @param msg The error message string to match (NOT #NULL) + * @return The #Eina_Error matching @p msg, or 0 on failure + * This function attempts to match @p msg with its corresponding #Eina_Error value. + * If no such value is found, 0 is returned. + */ +EAPI Eina_Error eina_error_find(const char *msg) EINA_ARG_NONNULL(1) EINA_PURE; + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_ERROR_H_ */ diff --git a/libraries/eina/src/include/eina_file.h b/libraries/eina/src/include/eina_file.h new file mode 100644 index 0000000..01ef8f5 --- /dev/null +++ b/libraries/eina/src/include/eina_file.h @@ -0,0 +1,392 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * 2011 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_FILE_H_ +#define EINA_FILE_H_ + +#include +#include + +#include "eina_types.h" +#include "eina_array.h" +#include "eina_iterator.h" + + +/** + * @page eina_file_example_01_page + * @dontinclude eina_file_01.c + * + * For brevity includes, variable declarations and initialization was omitted + * from this page, however the full source code can be seen @ref + * eina_file_example_01 "here". + * + * Here we have a simple callback to print the name of a file and the path that + * contains it: + * @skip static + * @until } + * + * We can use this callback in the following call: + * @skipline eina_file_dir_list + * + * The above was a way to print the files in a directory, but it is not the only + * one: + * @until iterator_free + * + * And now two ways to get more information than just file names: + * @until iterator_free + * @until iterator_free + * + * The above ways of getting files on a list may produce the same output, but + * they have an important difference, eina_file_direct_ls() will @b not call + * stat, this means that on some systems it might not have file type + * information. On the other hand it might be faster than eina_file_stat_ls(). + */ +/** + * @page eina_file_example_01 + * @include eina_file_01.c + * @example eina_file_01.c + */ +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ +/** + * @addtogroup Eina_File_Group File + * + * @brief Functions to handle files and directories. + * + * This functions make it easier to do a number o file and directory operations + * such as getting the list of files in a directory, spliting paths and finding + * out file size and type. + * + * @warning All functions in this group are @b blocking which means they make + * take a long time to return, use them carefully. + * + * See an example @ref eina_file_example_01_page "here". + * + * @{ + */ + +/** + * @typedef Eina_File_Direct_Info + * A typedef to #_Eina_File_Direct_Info. + */ +typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; + +/** + * @typedef Eina_File_Dir_List_Cb + * Type for a callback to be called when iterating over the files of a + * directory. + */ +typedef void (*Eina_File_Dir_List_Cb)(const char *name, const char *path, void *data); + +/** + * @typedef Eina_File_Type + * file type in Eina_File_Direct_Info. + */ +typedef enum { + EINA_FILE_UNKNOWN, /**< Unknown file type. */ + EINA_FILE_FIFO, /**< Named pipe (FIFO) type (unused on Windows). */ + EINA_FILE_CHR, /**< Character device type (unused on Windows). */ + EINA_FILE_DIR, /**< Directory type. */ + EINA_FILE_BLK, /**< Block device type (unused on Windows). */ + EINA_FILE_REG, /**< Regular file type. */ + EINA_FILE_LNK, /**< Symbolic link type. */ + EINA_FILE_SOCK, /**< UNIX domain socket type (unused on Windows). */ + EINA_FILE_WHT /**< Whiteout file type (unused on Windows). */ +} Eina_File_Type; + +typedef struct _Eina_File Eina_File; + +typedef enum { + EINA_FILE_RANDOM, /**< Advise random memory access to the mapped memory. */ + EINA_FILE_SEQUENTIAL, /**< Advise sequential memory access to the mapped memory. */ + EINA_FILE_WILLNEED, /**< Advise need for all the mapped memory. */ + EINA_FILE_POPULATE /**< Request all the mapped memory. */ +} Eina_File_Populate; + +/* Why do this? Well PATH_MAX may vary from when eina itself is compiled + * to when the app using eina is compiled. exposing the path buffer below + * can't safely and portably vary based on how/when you compile. it should + * always be the same for both eina inside AND for apps outside that use eina + * so define this to 8192 - most PATH_MAX values are like 4096 or 1024 (with + * windows i think being 260), so 8192 should cover almost all cases. there + * is a possibility that PATH_MAX could be more than 8192. if anyone spots + * a path_max that is bigger - let us know, but, for now we will assume + * it never happens */ +#define EINA_PATH_MAX 8192 +/** + * @struct _Eina_File_Direct_Info + * A structure to store informations of a path. + */ +struct _Eina_File_Direct_Info +{ + size_t path_length; /**< size of the whole path */ + size_t name_length; /**< size of the filename/basename component */ + size_t name_start; /**< where the filename/basename component starts */ + Eina_File_Type type; /**< file type */ + char path[EINA_PATH_MAX]; /**< the path */ +}; + +/** + * @def EINA_FILE_DIR_LIST_CB + * @brief cast to an #Eina_File_Dir_List_Cb. + * + * @param function The function to cast. + * + * This macro casts @p function to Eina_File_Dir_List_Cb. + */ +#define EINA_FILE_DIR_LIST_CB(function) ((Eina_File_Dir_List_Cb)function) + + +/** + * @brief List all files on the directory calling the function for every file found. + * + * @param dir The directory name. + * @param recursive Iterate recursively in the directory. + * @param cb The callback to be called. + * @param data The data to pass to the callback. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function calls @p cb for each file that is in @p dir. To have @p cb + * called on files that are in subdirectories of @p dir @p recursive should be + * EINA_TRUE. In other words if @p recursive is EINA_FALSE, only direct children + * of @p dir will be operated on, if @p recursive is EINA_TRUE the entire tree + * of files that is below @p dir will be operated on. + * + * If @p cb or @p dir are @c NULL, or if @p dir is a string of size 0, + * or if @p dir can not be opened, this function returns #EINA_FALSE + * immediately. otherwise, it returns #EINA_TRUE. + */ +EAPI Eina_Bool eina_file_dir_list(const char *dir, + Eina_Bool recursive, + Eina_File_Dir_List_Cb cb, + void *data) EINA_ARG_NONNULL(1, 3); + +/** + * @brief Split a path according to the delimiter of the filesystem. + * + * @param path The path to split. + * @return An array of the parts of the path to split. + * + * This function splits @p path according to the delimiter of the used + * filesystem. If @p path is @c NULL or if the array can not be + * created, @c NULL is returned, otherwise, an array with each part of @p path + * is returned. + */ +EAPI Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @brief Get an iterator to list the content of a directory. + * + * @param dir The name of the directory to list + * @return Return an Eina_Iterator that will walk over the files and directories + * in @p dir. On failure it will return NULL. + * + * Returns an iterator for shared strings, the name of each file in @p dir will + * only be fetched when advancing the iterator, which means there is very little + * cost associated with creating the list and stopping halfway through it. + * + * @warning The iterator will hand the user a stringshared value with the full + * path. The user must free the string using eina_stringshare_del() on it. + * + * @note The container for the iterator is of type DIR*. + * @note The iterator will walk over '.' and '..' without returning them. + * + * @see eina_file_direct_ls() + */ +EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @brief Get an iterator to list the content of a directory, with direct + * information. + * + * @param dir The name of the directory to list + * + * @return Return an Eina_Iterator that will walk over the files and + * directory in the pointed directory. On failure it will + * return NULL. + * + * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p + * dir will only be fetched when advancing the iterator, which means there is + * cost associated with creating the list and stopping halfway through it. + * + * @warning The Eina_File_Direct_Info returned by the iterator must not + * be modified in any way. + * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info + * returned is no longer valid. + * + * @note The container for the iterator is of type DIR*. + * @note The iterator will walk over '.' and '..' without returning them. + * @note The difference between this function ahd eina_file_direct_ls() is that + * it guarantees the file type information will be correct incurring a + * possible performance penalty. + * + * @see eina_file_direct_ls() + */ +EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @brief Get an iterator to list the content of a directory, with direct + * information. + * + * @param dir The name of the directory to list + * + * @return Return an Eina_Iterator that will walk over the files and + * directory in the pointed directory. On failure it will + * return NULL. + * + * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p + * dir will only be fetched when advancing the iterator, which means there is + * cost associated with creating the list and stopping halfway through it. + * + * @warning If readdir_r doesn't contain file type information file type will + * be DT_UNKNOW. + * @warning The Eina_File_Direct_Info returned by the iterator must not + * be modified in any way. + * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info + * returned is no longer valid. + * + * @note The container for the iterator is of type DIR*. + * @note The iterator will walk over '.' and '..' without returning them. + * @note The difference between this function ahd eina_file_stat_ls() is that + * it may not get the file type information however it is likely to be + * faster. + * + * @see eina_file_ls() + */ +EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @brief Sanitize file path. + * + * @param path The path to sanitize + * + * @return an allocated string with the sanitized path. + * + * This function take care of adding the current working directory if it's a + * relative path and also remove all '..' and '//' reference in the original + * path. + * + * @since 1.1 + */ +EAPI char *eina_file_path_sanitize(const char *path); + +/** + * @brief Get a read-only handler to a file. + * + * @param name Filename to open + * @param shared Requested a shm + * + * Opens a file in read-only mode. @p name should be an absolute path. An + * Eina_File handle can be shared among multiple instances if @p shared is + * EINA_TRUE. + * + * @since 1.1 + */ +EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @brief Unref file handler. + * + * @param file File handler to unref. + * + * Decremente file's refcount and if it reaches zero close it. + * + * @since 1.1 + */ +EAPI void eina_file_close(Eina_File *file); + +/** + * @brief Get file size at open time. + * + * @param file The file handler to request the size from. + * @return The length of the file. + * + * @since 1.1 + */ +EAPI size_t eina_file_size_get(Eina_File *file); + +/** + * @brief Get the last modification time of an open file. + * + * @param file The file handler to request the modification time from. + * @return The last modification time. + * + * @since 1.1 + */ +EAPI time_t eina_file_mtime_get(Eina_File *file); + +/** + * @brief Get the filename of an open file. + * + * @param file The file handler to request the name from. + * @return Stringshared filename of the file. + * + * @since 1.1 + */ +EAPI const char *eina_file_filename_get(Eina_File *file); + +/** + * @brief Map all the file to a buffer. + * + * @param file The file handler to map in memory + * @param rule The rule to apply to the mapped memory + * @return A pointer to a buffer that map all the file content. @c NULL if it fail. + * + * @since 1.1 + */ +EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule); + +/** + * @brief Map a part of the file. + * + * @param file The file handler to map in memory + * @param rule The rule to apply to the mapped memory + * @param offset The offset inside the file + * @param length The length of the memory to map + * @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. + * + * This does handle refcounting so it will share map that target the same memory area. + * + * @since 1.1 + */ +EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule, + unsigned long int offset, unsigned long int length); + +/** + * @brief Unref and unmap memory if possible. + * + * @param file The file handler to unmap memory from. + * @param map Memory map to unref and unmap. + * + * @since 1.1 + */ +EAPI void eina_file_map_free(Eina_File *file, void *map); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_FILE_H_ */ diff --git a/libraries/eina/src/include/eina_fp.h b/libraries/eina/src/include/eina_fp.h new file mode 100644 index 0000000..c73dc16 --- /dev/null +++ b/libraries/eina/src/include/eina_fp.h @@ -0,0 +1,111 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * Copyright (C) 2009 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_FP_H_ +# define EINA_FP_H_ + +#include "eina_types.h" + +#ifdef _MSC_VER +typedef unsigned __int64 uint64_t; +typedef signed __int64 int64_t; +typedef signed int int32_t; +#else +# include +#endif + +#define EINA_F32P32_PI 0x00000003243f6a89 + +typedef int64_t Eina_F32p32; +typedef int32_t Eina_F16p16; +typedef int32_t Eina_F8p24; + +static inline Eina_F32p32 eina_f32p32_int_from(int32_t v); +static inline int32_t eina_f32p32_int_to(Eina_F32p32 v); +static inline Eina_F32p32 eina_f32p32_double_from(double v); +static inline double eina_f32p32_double_to(Eina_F32p32 v); + +static inline Eina_F32p32 eina_f32p32_add(Eina_F32p32 a, + Eina_F32p32 b); +static inline Eina_F32p32 eina_f32p32_sub(Eina_F32p32 a, + Eina_F32p32 b); +static inline Eina_F32p32 eina_f32p32_mul(Eina_F32p32 a, + Eina_F32p32 b); +static inline Eina_F32p32 eina_f32p32_scale(Eina_F32p32 a, + int b); +static inline Eina_F32p32 eina_f32p32_div(Eina_F32p32 a, + Eina_F32p32 b); +static inline Eina_F32p32 eina_f32p32_sqrt(Eina_F32p32 a); +static inline unsigned int eina_f32p32_fracc_get(Eina_F32p32 v); + +// dont use llabs - issues if not on 64bit +#define eina_fp32p32_llabs(a) ((a < 0) ? -(a) : (a)) + +EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a); +EAPI Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a); + +static inline Eina_F16p16 eina_f16p16_int_from(int32_t v); +static inline int32_t eina_f16p16_int_to(Eina_F16p16 v); +static inline Eina_F16p16 eina_f16p16_float_from(float v); +static inline float eina_f16p16_float_to(Eina_F16p16 v); + +static inline Eina_F16p16 eina_f16p16_add(Eina_F16p16 a, + Eina_F16p16 b); +static inline Eina_F16p16 eina_f16p16_sub(Eina_F16p16 a, + Eina_F16p16 b); +static inline Eina_F16p16 eina_f16p16_mul(Eina_F16p16 a, + Eina_F16p16 b); +static inline Eina_F16p16 eina_f16p16_scale(Eina_F16p16 a, + int b); +static inline Eina_F16p16 eina_f16p16_div(Eina_F16p16 a, + Eina_F16p16 b); +static inline Eina_F16p16 eina_f16p16_sqrt(Eina_F16p16 a); +static inline unsigned int eina_f16p16_fracc_get(Eina_F16p16 v); + +static inline Eina_F8p24 eina_f8p24_int_from(int32_t v); +static inline int32_t eina_f8p24_int_to(Eina_F8p24 v); +static inline Eina_F8p24 eina_f8p24_float_from(float v); +static inline float eina_f8p24_float_to(Eina_F8p24 v); + +static inline Eina_F8p24 eina_f8p24_add(Eina_F8p24 a, + Eina_F8p24 b); +static inline Eina_F8p24 eina_f8p24_sub(Eina_F8p24 a, + Eina_F8p24 b); +static inline Eina_F8p24 eina_f8p24_mul(Eina_F8p24 a, + Eina_F8p24 b); +static inline Eina_F8p24 eina_f8p24_scale(Eina_F8p24 a, + int b); +static inline Eina_F8p24 eina_f8p24_div(Eina_F8p24 a, + Eina_F8p24 b); +static inline Eina_F8p24 eina_f8p24_sqrt(Eina_F8p24 a); +static inline unsigned int eina_f8p24_fracc_get(Eina_F8p24 v); + +static inline Eina_F32p32 eina_f16p16_to_f32p32(Eina_F16p16 a); +static inline Eina_F32p32 eina_f8p24_to_f32p32(Eina_F8p24 a); +static inline Eina_F16p16 eina_f32p32_to_f16p16(Eina_F32p32 a); +static inline Eina_F16p16 eina_f8p24_to_f16p16(Eina_F8p24 a); +static inline Eina_F8p24 eina_f32p32_to_f8p24(Eina_F32p32 a); +static inline Eina_F8p24 eina_f16p16_to_f8p24(Eina_F16p16 a); + +#include "eina_inline_f32p32.x" +#include "eina_inline_f16p16.x" +#include "eina_inline_f8p24.x" +#include "eina_inline_fp.x" + +#endif diff --git a/libraries/eina/src/include/eina_hamster.h b/libraries/eina/src/include/eina_hamster.h new file mode 100644 index 0000000..bea759d --- /dev/null +++ b/libraries/eina/src/include/eina_hamster.h @@ -0,0 +1,58 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_HAMSTER_H_ +#define EINA_HAMSTER_H_ + +/** + * @addtogroup Eina_Hamster_Group Hamster + * + * @brief These functions provide hamster calls. + * + * @{ + */ + +/** + * @addtogroup Eina_Core_Group Core + * + * @{ + */ + +/** + * @defgroup Eina_Hamster_Group Hamster + */ + + +/** + * @brief Get the hamster count. + * + * @return The number of available hamsters. + * + * This function returns how many hamsters you have. + */ +EAPI int eina_hamster_count(void); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_HAMSTER_H_ */ diff --git a/libraries/eina/src/include/eina_hash.h b/libraries/eina/src/include/eina_hash.h new file mode 100644 index 0000000..c8eb048 --- /dev/null +++ b/libraries/eina/src/include/eina_hash.h @@ -0,0 +1,1040 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, + * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_HASH_H_ +#define EINA_HASH_H_ + +#include "eina_types.h" +#include "eina_iterator.h" + +/** + * @page hash_01_example_page Eina_Hash in action + * @dontinclude eina_hash_01.c + * + * We are going to store some tuples into our table, that will map each @a name + * to a @a number. The cost to access a given number from the name should be + * very small, even with many entries in our table. This is the initial data: + * @skip _Phone_Entry + * @until // _start_entries + * + * Before starting to play with the hash, let's write a callback that will be + * used to free the elements from it. Since we are just storing strduped + * strings, we just need to free them: + * + * @skip static + * @until } + * + * We also need a callback to iterate over the elements of the list later, so + * we are defining it now: + * + * @skip Eina_Bool + * @until } + * + * Now let's create our @ref Eina_Hash using @ref + * eina_hash_string_superfast_new : + * + * @skip eina_init + * @until phone_book + * + * Now we add the keys and data to the hash using @ref eina_hash_add . This + * means that the key is copied inside the table, together with the pointer to + * the data (phone numbers). + * + * @skip for + * @until } + * + * Some basic manipulations with the hash, like finding a value given a key, + * deleting an entry, modifying an entry are exemplified in the following lines. + * Notice that the @ref eina_hash_modify function returns the old value stored + * in that entry, and it needs to be freed, while the @ref eina_hash_del + * function already calls our free callback: + * + * @skip Look for + * @until free( + * + * The @ref eina_hash_set function can be used to set a key-value entry to the + * table if it doesn't exist, or to modify an existent entry. It returns the old + * entry if it was already set, and NULL otherwise. But since it will + * return NULL on error too, we need to check if an error has occurred: + * + * @skip Modify + * @until printf("\n"); + * + * There are different ways of iterate over the entries of a hash. Here we show + * two of them: using @ref eina_hash_foreach and @ref Eina_Iterator . + * + * @skip List of phones + * @until eina_iterator_free(it); + * + * It's also possible to change the key for a specific entry, without having to + * remove the entry from the table and adding it again: + * + * @skipline eina_hash_move + * + * We can remove all the elements from the table without free the table itself: + * + * @skip Empty the phone book + * @until eina_hash_population + * + * Or free the the entire table with its content: + * + * @skipline eina_hash_free + * + * + * The full code for this example can be seen here: @ref eina_hash_01_c + */ + +/** + * @page eina_hash_01_c Hash table in action + * + * @include eina_hash_01.c + * @example eina_hash_01.c + */ + +/** + * @page hash_02_example_page Different types of tables + * + * This example shows two more types of hash tables that can be created using + * @ref Eina_Hash . For more types, consult the reference documentation of @ref + * eina_hash_new. + * @include eina_hash_02.c + * @example eina_hash_02.c + */ + +/** + * @example eina_hash_03.c + * Same example as @ref hash_01_example_page but using a "string small" hash + * table instead of "string superfast". + */ + +/** + * @example eina_hash_04.c + * Same example as @ref hash_01_example_page but using a "string djb2" hash + * table instead of "string superfast". + */ + +/** + * @example eina_hash_05.c + * Same example as @ref hash_01_example_page but using a "int32" hash + * table instead of "string superfast". + */ + +/** + * @example eina_hash_06.c + * Same example as @ref hash_01_example_page but using a "int64" hash + * table instead of "string superfast". + */ + +/** + * @example eina_hash_07.c + * Same example as @ref hash_01_example_page but using a "pointer" hash + * table instead of "string superfast". + */ + +/** + * @example eina_hash_08.c + * This example shows the the usage of eina_hash_add(), eina_hash_add_by_hash(), + * eina_hash_direct_add_by_hash(), eina_hash_del(), eina_hash_del_by_key_hash(), + * eina_hash_del_by_key(), eina_hash_del_by_data(), eina_hash_find_by_hash() and + * eina_hash_modify_by_hash(). + */ + +/** + * @addtogroup Eina_Hash_Group Hash Table + * + * @brief Hash table management. Useful for mapping keys to values. + * + * The hash table is useful for when one wants to implement a table that maps + * keys (usually strings) to data, and have relatively fast access time. The + * performance is proportional to the load factor of the table (number of + * elements / number of buckets). See @ref hashtable_algo for implementation + * details. + * + * Different implementations exists depending on what kind of key will be used + * to access the data: strings, integers, pointers, stringshared or your own. + * + * Eina hash tables can copy the keys when using eina_hash_add() or not when + * using eina_hash_direct_add(). + * + * @section hashtable_algo Algorithm + * + * The Eina_Hash is implemented using an array of N "buckets", where each + * bucket is a pointer to a structure that is the head of a red-black tree. The + * array can then be indexed by the [hash_of_element mod N]. The + * hash_of_element is calculated using the hashing function, passed as + * parameter to the @ref eina_hash_new function. N is the number of buckets + * (array positions), and is calculated based on the buckets_power_size + * (argument of @ref eina_hash_new too). The following picture ilustrates the + * basic idea: + * + * @htmlonly + * + * @endhtmlonly + * @image latex 01_hash-table.eps + * + * Adding an element to the hash table is made of: + * @li calculating the hash for that key (using the specified hash function); + * @li calculate the array position [hash mod N]; + * @li add the element to the rbtree on that position. + * + * The two first steps have constant time, proportional to the hash function + * being used. Adding the key to the rbtree will be proportional on the number + * of keys on that bucket. + * + * The average cost of lookup depends on the number of keys per + * bucket (load factor) of the table, if the distribution of keys is + * sufficiently uniform. + * + * @section hashtable_perf Performance + * + * As said before, the performance depends on the load factor. So trying to keep + * the load factor as small as possible will improve the hash table performance. But + * increasing the buckets_power_size will also increase the memory consumption. + * The default hash table creation functions already have a good number of + * buckets, enough for most cases. Particularly for strings, if just a few keys + * (less than 30) will be added to the hash table, @ref + * eina_hash_string_small_new should be used, since it will reduce the memory + * consumption for the buckets, and you still won't have many collisions. + * However, @ref eina_hash_string_small_new still uses the same hash calculation + * function that @ref eina_hash_string_superfast_new, which is more complex than + * @ref eina_hash_string_djb2_new. The latter has a faster hash computation + * function, but that will imply on a not so good distribution. But if just a + * few keys are being added, this is not a problem, it will still have not many + * collisions and be faster to calculate the hash than in a hash created with + * @ref eina_hash_string_small_new and @ref eina_hash_string_superfast_new. + * + * A simple comparison between them would be: + * + * @li @c djb2 - faster hash function - 256 buckets (higher memory consumption) + * @li @c string_small - slower hash function but less collisions - 32 buckets + * (lower memory consumption) + * @li @c string_superfast - slower hash function but less collisions - 256 buckets + * (higher memory consumption) + * + * Basically for a very small number of keys (10 or less), @c djb2 should be + * used, or @c string_small if you have a restriction on memory usage. And for a + * higher number of keys, @c string_superfast should be always preferred. + * + * If just stringshared keys are being added, use @ref + * eina_hash_stringshared_new. If a lot of keys will be added to the hash table + * (e.g. more than 1000), then it's better to increase the buckets_power_size. + * See @ref eina_hash_new for more details. + * + * When adding a new key to a hash table, use @ref eina_hash_add or @ref + * eina_hash_direct_add (the latter if this key is already stored elsewhere). If + * the key may be already inside the hash table, instead of checking with + * @ref eina_hash_find and then doing @ref eina_hash_add, one can use just @ref + * eina_hash_set (this will change the data pointed by this key if it was + * already present in the table). + * + * @section hashtable_tutorial Tutorial + * + * These examples show many Eina_Hash functions in action: + *
    + *
  • @ref hash_01_example_page + *
  • @ref hash_02_example_page + *
  • Different types of hash in use: + *
      + *
    • @ref eina_hash_03.c "string small" + *
    • @ref eina_hash_04.c "string djb2" + *
    • @ref eina_hash_05.c "int32" + *
    • @ref eina_hash_06.c "int64" + *
    • @ref eina_hash_07.c "pointer" + *
    + *
  • @ref eina_hash_08.c "Different add and delete functions" + *
+ */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Hash_Group Hash Table + * + * @{ + */ + +/** + * @typedef Eina_Hash + * Type for a generic hash table. + */ +typedef struct _Eina_Hash Eina_Hash; + +typedef struct _Eina_Hash_Tuple Eina_Hash_Tuple; + +struct _Eina_Hash_Tuple +{ + const void *key; /**< The key */ + void *data; /**< The data associated to the key */ + unsigned int key_length; /**< The length of the key */ +}; + +typedef unsigned int (*Eina_Key_Length)(const void *key); +#define EINA_KEY_LENGTH(Function) ((Eina_Key_Length)Function) +typedef int (*Eina_Key_Cmp)(const void *key1, int key1_length, const void *key2, int key2_length); +#define EINA_KEY_CMP(Function) ((Eina_Key_Cmp)Function) +typedef int (*Eina_Key_Hash)(const void *key, int key_length); +#define EINA_KEY_HASH(Function) ((Eina_Key_Hash)Function) +typedef Eina_Bool (*Eina_Hash_Foreach)(const Eina_Hash *hash, const void *key, void *data, void *fdata); + + +/** + * @brief Create a new hash table. + * + * @param key_length_cb The function called when getting the size of the key. + * @param key_cmp_cb The function called when comparing the keys. + * @param key_hash_cb The function called when getting the values. + * @param data_free_cb The function called on each value when the hash table is + * freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @param buckets_power_size The size of the buckets. + * @return The new hash table. + * + * This function creates a new hash table using user-defined callbacks + * to manage the hash table. On failure, @c NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. If @p key_cmp_cb or @p key_hash_cb + * are @c NULL, @c NULL is returned. If @p buckets_power_size is + * smaller or equal than 2, or if it is greater or equal than 17, + * @c NULL is returned. + * + * The number of buckets created will be 2 ^ @p buckets_power_size. This means + * that if @p buckets_power_size is 5, there will be created 32 buckets. for a + * @p buckets_power_size of 8, there will be 256 buckets. + * + * Pre-defined functions are available to create a hash table. See + * eina_hash_string_djb2_new(), eina_hash_string_superfast_new(), + * eina_hash_string_small_new(), eina_hash_int32_new(), + * eina_hash_int64_new(), eina_hash_pointer_new() and + * eina_hash_stringshared_new(). + */ +EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb, + Eina_Key_Cmp key_cmp_cb, + Eina_Key_Hash key_hash_cb, + Eina_Free_Cb data_free_cb, + int buckets_power_size) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2, 3); + +/** + * @brief Redefine the callback that clean the data of a hash + * + * @param hash The given hash table + * @param data_free_cb The function called on each value when the hash + * table is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @since 1.1 + * See @ref eina_hash_new. + */ +EAPI void eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA_ARG_NONNULL(1); + +/** + * @brief Create a new hash table using the djb2 algorithm. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table using the djb2 algorithm for + * table management and strcmp() to compare the keys. Values can then + * be looked up with pointers other than the original key pointer that + * was used to add values. On failure, this function returns @c NULL. + */ +EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table for use with strings. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table using the superfast algorithm + * for table management and strcmp() to compare the keys. Values can + * then be looked up with pointers other than the original key pointer + * that was used to add values. On failure, this function returns + * @c NULL. + */ +EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table for use with strings with small bucket size. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table using the superfast algorithm + * for table management and strcmp() to compare the keys, but with a + * smaller bucket size (compared to eina_hash_string_superfast_new()) + * which will minimize the memory used by the returned hash + * table. Values can then be looked up with pointers other than the + * original key pointer that was used to add values. On failure, this + * function returns @c NULL. + */ +EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table for use with 32bit integers. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table where keys are 32bit integers. + * When adding or looking up in the hash table, pointers to 32bit integers + * must be passed. They can be addresses on the stack if you let the + * eina_hash copy the key. Values can then + * be looked up with pointers other than the original key pointer that was + * used to add values. This method is not suitable to match string keys as + * it would only match the first character. + * On failure, this function returns @c NULL. + */ +EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table for use with 64bit integers. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table where keys are 64bit integers. + * When adding or looking up in the hash table, pointers to 64bit integers + * must be passed. They can be addresses on the stack. Values can then + * be looked up with pointers other than the original key pointer that was + * used to add values. This method is not suitable to match string keys as + * it would only match the first character. + * On failure, this function returns @c NULL. + */ +EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table for use with pointers. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table using the int64/int32 algorithm for + * table management and dereferenced pointers to compare the + * keys. Values can then be looked up with pointers other than the + * original key pointer that was used to add values. This method may + * appear to be able to match string keys, actually it only matches + * the first character. On failure, this function returns @c NULL. + */ +EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Create a new hash table optimized for stringshared values. + * + * @param data_free_cb The function called on each value when the hash table + * is freed, or when an item is deleted from it. @c NULL can be passed as + * callback. + * @return The new hash table. + * + * This function creates a new hash table optimized for stringshared + * values. Values CAN NOT be looked up with pointers not + * equal to the original key pointer that was used to add a value. On failure, + * this function returns @c NULL. + * + * Excerpt of code that will NOT work with this type of hash: + * + * @code + * extern Eina_Hash *hash; + * extern const char *value; + * const char *a = eina_stringshare_add("key"); + * + * eina_hash_add(hash, a, value); + * eina_hash_find(hash, "key") + * @endcode + */ +EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb); + +/** + * @brief Add an entry to the given hash table. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key A unique key. Cannot be @c NULL. + * @param data Data to associate with the string given by @p key. Cannot be @c + * NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function adds @p key to @p hash. @p key is + * expected to be unique within the hash table. Key uniqueness varies + * depending on the type of @p hash: a stringshared @ref Eina_Hash + * need to have unique pointers (which implies unique strings). + * All other string hash types require the strings + * themselves to be unique. Pointer, int32 and int64 hashes need to have these + * values as unique. Failure to use sufficient uniqueness will + * result in unexpected results when inserting data pointers accessed + * with eina_hash_find(), and removed with eina_hash_del(). Key + * strings are case sensitive. If an error occurs, eina_error_get() + * should be used to determine if an allocation error occurred during + * this function. This function returns #EINA_FALSE if an error + * occurred, #EINA_TRUE otherwise. + */ +EAPI Eina_Bool eina_hash_add(Eina_Hash *hash, + const void *key, + const void *data) EINA_ARG_NONNULL(1, 2, 3); + +/** + * @brief Add an entry to the given hash table without duplicating the string + * key. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key A unique key. Cannot be @c NULL. + * @param data Data to associate with the string given by @p key. Cannot be @c + * NULL + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function adds @p key to @p hash. @p key is + * expected to be unique within the hash table. Key uniqueness varies + * depending on the type of @p hash: a stringshared @ref Eina_Hash + * need have unique pointers (which implies unique strings). + * All other string hash types require the strings + * themselves to be unique. Pointer, int32 and int64 hashes need to have these + * values as unique. Failure to use sufficient uniqueness will + * result in unexpected results when inserting data pointers accessed + * with eina_hash_find(), and removed with eina_hash_del(). This + * function does not make a copy of @p key, so it must be a string + * constant or stored elsewhere ( in the object being added). Key + * strings are case sensitive. If an error occurs, eina_error_get() + * should be used to determine if an allocation error occurred during + * this function. This function returns #EINA_FALSE if an error + * occurred, #EINA_TRUE otherwise. + */ +EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash, + const void *key, + const void *data) EINA_ARG_NONNULL(1, 2, 3); + +/** + * @brief Remove the entry identified by a key or a data from the given + * hash table. + * + * @param hash The given hash table. + * @param key The key. + * @param data The data pointer to remove if the key is @c NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function removes the entry identified by @p key or @p data + * from @p hash. If a free function was given to the + * callback on creation, it will be called for the data being + * deleted. If @p hash is @c NULL, the functions returns immediately + * #EINA_FALSE. If @p key is @c NULL, then @p data is used to find the a + * match to remove, otherwise @p key is used and @p data is not + * required and can be @c NULL. This function returns #EINA_FALSE if + * an error occurred, #EINA_TRUE otherwise. + * + * @note if you know you already have the key, use + * eina_hash_del_by_key() or eina_hash_del_by_key_hash(). If you + * know you don't have the key, use eina_hash_del_by_data() + * directly. + */ +EAPI Eina_Bool eina_hash_del(Eina_Hash *hash, + const void *key, + const void *data) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve a specific entry in the given hash table. + * + * @param hash The given hash table. + * @param key The key of the entry to find. + * @return The data pointer for the stored entry on success, @c NULL + * otherwise. + * + * This function retrieves the entry associated to @p key in + * @p hash. If @p hash is @c NULL, this function returns immediately + * @c NULL. This function returns the data pointer on success, @c NULL + * otherwise. + */ +EAPI void *eina_hash_find(const Eina_Hash *hash, + const void *key) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Modify the entry pointer at the specified key and return the old + * entry. + * @param hash The given hash table. + * @param key The key of the entry to modify. + * @param data The data to replace the old entry. + * @return The data pointer for the old stored entry on success, or + * @c NULL otherwise. + * + * This function modifies the data of @p key with @p data in @p + * hash. If no entry is found, nothing is added to @p hash. On success + * this function returns the old entry, otherwise it returns @c NULL. + */ +EAPI void *eina_hash_modify(Eina_Hash *hash, + const void *key, + const void *data) EINA_ARG_NONNULL(1, 2, 3); + +/** + * @brief Modify the entry pointer at the specified key and return the + * old entry or add the entry if not found. + * + * @param hash The given hash table. + * @param key The key of the entry to modify. + * @param data The data to replace the old entry + * @return The data pointer for the old stored entry, or @c NULL + * otherwise. + * + * This function modifies the data of @p key with @p data in @p + * hash. If no entry is found, @p data is added to @p hash with the + * key @p key. On success this function returns the old entry, + * otherwise it returns @c NULL. To check for errors, use + * eina_error_get(). + */ +EAPI void *eina_hash_set(Eina_Hash *hash, + const void *key, + const void *data) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Change the key associated with a data without triggering the + * free callback. + * + * @param hash The given hash table. + * @param old_key The current key associated with the data + * @param new_key The new key to associate data with + * @return EINA_FALSE in any case but success, EINA_TRUE on success. + * + * This function allows for the move of data from one key to another, + * but does not call the Eina_Free_Cb associated with the hash table + * when destroying the old key. + */ +EAPI Eina_Bool eina_hash_move(Eina_Hash *hash, + const void *old_key, + const void *new_key) EINA_ARG_NONNULL(1, 2, 3); + +/** + * Free the given hash table resources. + * + * @param hash The hash table to be freed. + * + * This function frees up all the memory allocated to storing @p hash, + * and call the free callback if it has been passed to the hash table + * at creation time. If no free callback has been passed, any entries + * in the table that the program has no more pointers for elsewhere + * may now be lost, so this should only be called if the program has + * already freed any allocated data in the hash table or has the + * pointers for data in the table stored elsewhere as well. If @p hash + * is @c NULL, the function returns immediately. + * + * Example: + * @code + * extern Eina_Hash *hash; + * + * eina_hash_free(hash); + * hash = NULL; + * @endcode + */ +EAPI void eina_hash_free(Eina_Hash *hash) EINA_ARG_NONNULL(1); + +/** + * Free the given hash table buckets resources. + * + * @param hash The hash table whose buckets have to be freed. + * + * This function frees up all the memory allocated to storing the + * buckets of @p hash, and calls the free callback on all hash table + * buckets if it has been passed to the hash table at creation time, + * then frees the buckets. If no free callback has been passed, no + * buckets value will be freed. If @p hash is @c NULL, the function + * returns immediately. + */ +EAPI void eina_hash_free_buckets(Eina_Hash *hash) EINA_ARG_NONNULL(1); + +/** + * @brief Returns the number of entries in the given hash table. + * + * @param hash The given hash table. + * @return The number of entries in the hash table. + * + * This function returns the number of entries in @p hash, or 0 on + * error. If @p hash is @c NULL, 0 is returned. + */ +EAPI int eina_hash_population(const Eina_Hash *hash) EINA_ARG_NONNULL(1); + +/** + * @brief Add an entry to the given hash table. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key A unique key. Cannot be @c NULL. + * @param key_length The length of the key. + * @param key_hash The hash that will always match key. + * @param data The data to associate with the string given by the key. Cannot be + * @c NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function adds @p key to @p hash. @p hash, @p key and @p data + * cannot be @c NULL, in that case #EINA_FALSE is returned. @p key is + * expected to be a unique within the hash table. Otherwise, + * one cannot be sure which inserted data pointer will be accessed + * with @ref eina_hash_find, and removed with @ref eina_hash_del. Do + * not forget to count '\\0' for string when setting the value of + * @p key_length. @p key_hash is expected to always match + * @p key. Otherwise, one cannot be sure to find it again with @ref + * eina_hash_find_by_hash. Key strings are case sensitive. If an error + * occurs, eina_error_get() should be used to determine if an + * allocation error occurred during this function. This function + * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * @see eina_hash_add() + */ +EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) EINA_ARG_NONNULL(1, 2, 5); + +/** + * @brief Add an entry to the given hash table and do not duplicate the string + * key. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key A unique key. Cannot be @c NULL. + * @param key_length Should be the length of @p key (don't forget to count + * '\\0' for string). + * @param key_hash The hash that will always match key. + * @param data Data to associate with the string given by @p key. Cannot be @c + * NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function adds @p key to @p hash. @p hash, @p key and @p data + * can be @c NULL, in that case #EINA_FALSE is returned. @p key is + * expected to be unique within the hash table. Otherwise, + * one cannot be sure which inserted data pointer will be accessed + * with @ref eina_hash_find, and removed with @ref eina_hash_del. This + * function does not make a copy of @p key so it must be a string + * constant or stored elsewhere (in the object being added). Do + * not forget to count '\\0' for string when setting the value of + * @p key_length. @p key_hash is expected to always match + * @p key. Otherwise, one cannot be sure to find it again with @ref + * eina_hash_find_by_hash. Key strings are case sensitive. If an error + * occurs, eina_error_get() should be used to determine if an + * allocation error occurred during this function. This function + * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * @see eina_hash_direct_add() + */ +EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) EINA_ARG_NONNULL(1, 2, 5); + +/** + * @brief Remove the entry identified by a key and a key hash from the given + * hash table. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key The key. Cannot be @c NULL. + * @param key_length The length of the key. + * @param key_hash The hash that always match the key. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function removes the entry identified by @p key and + * @p key_hash from @p hash. If a free function was given to the + * callback on creation, it will be called for the data being + * deleted. Do not forget to count '\\0' for string when setting the + * value of @p key_length. If @p hash or @p key are @c NULL, the + * functions returns immediately #EINA_FALSE. This function returns + * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * @note if you don't have the key_hash, use eina_hash_del_by_key() instead. + * @note if you don't have the key, use eina_hash_del_by_data() instead. + */ +EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Remove the entry identified by a key from the given hash table. + * + * This version will calculate key length and hash by using functions + * provided to hash creation function. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key The key. Cannot be @c NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function removes the entry identified by @p key from @p + * hash. The key length and hash will be calculated automatically by + * using functiond provided to has creation function. If a free + * function was given to the callback on creation, it will be called + * for the data being deleted. If @p hash or @p key are @c NULL, the + * functions returns immediately #EINA_FALSE. This function returns + * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * @note if you already have the key_hash, use eina_hash_del_by_key_hash() + * instead. + * @note if you don't have the key, use eina_hash_del_by_data() instead. + */ +EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash *hash, + const void *key) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Remove the entry identified by a data from the given hash table. + * + * This version is slow since there is no quick access to nodes based on data. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param data The data value to search and remove. Cannot be @c NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * thing goes fine. + * + * This function removes the entry identified by @p data from @p + * hash. If a free function was given to the callback on creation, it + * will be called for the data being deleted. If @p hash or @p data + * are @c NULL, the functions returns immediately #EINA_FALSE. This + * function returns #EINA_FALSE if an error occurred, #EINA_TRUE + * otherwise. + * + * @note if you already have the key, use eina_hash_del_by_key() or + * eina_hash_del_by_key_hash() instead. + */ +EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash *hash, + const void *data) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Remove the entry identified by a key and a key hash or a + * data from the given hash table. + * + * If @p key is @c NULL, then @p data is used to find a match to + * remove. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key The key. + * @param key_length The length of the key. + * @param key_hash The hash that always match the key. + * @param data The data pointer to remove if the key is @c NULL. + * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * This function removes the entry identified by @p key and + * @p key_hash, or @p data, from @p hash. If a free function was given to + * the callback on creation, it will be called for the data being + * deleted. If @p hash is @c NULL, the functions returns immediately + * #EINA_FALSE. If @p key is @c NULL, then @p key_length and @p key_hash + * are ignored and @p data is used to find a match to remove, + * otherwise @p key and @p key_hash are used and @p data is not + * required and can be @c NULL. Do not forget to count '\\0' for + * string when setting the value of @p key_length. This function + * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. + * + * @note if you know you already have the key, use eina_hash_del_by_key_hash(), + * if you know you don't have the key, use eina_hash_del_by_data() + * directly. + */ +EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve a specific entry in the given hash table. + * + * @param hash The given hash table. Cannot be @c NULL. + * @param key The key of the entry to find. + * @param key_length The length of the key. + * @param key_hash The hash that always match the key + * @return The data pointer for the stored entry on success, @c NULL + * otherwise. + * + * This function retrieves the entry associated to @p key of length + * @p key_length in @p hash. @p key_hash is the hash that always match + * @p key. It is ignored if @p key is @c NULL. Do not forget to count + * '\\0' for string when setting the value of @p key_length. If + * @p hash is @c NULL, this function returns immediately @c NULL. This + * function returns the data pointer on success, @c NULL otherwise. + */ +EAPI void *eina_hash_find_by_hash(const Eina_Hash *hash, + const void *key, + int key_length, + int key_hash) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Modify the entry pointer at the specified key and returns + * the old entry. + * + * @param hash The given hash table. + * @param key The key of the entry to modify. + * @param key_length Should be the length of @p key (don't forget to count + * '\\0' for string). + * @param key_hash The hash that always match the key. Ignored if @p key is + * @c NULL. + * @param data The data to replace the old entry, if it exists. + * @return The data pointer for the old stored entry, or @c NULL if not + * found. If an existing entry is not found, nothing is added to the + * hash. + */ +EAPI void *eina_hash_modify_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) EINA_ARG_NONNULL(1, 2, 5); + +/** + * @brief Returned a new iterator associated to hash keys. + * + * @param hash The hash. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * hash. If @p hash is not populated, this function still returns a + * valid iterator that will always return false on + * eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the hash structure changes then the iterator becomes + * invalid! That is, if you add or remove items this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returned a new iterator associated to hash data. + * + * @param hash The hash. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to + * @p hash. If @p hash is not populated, this function still returns a + * valid iterator that will always return false on + * eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, @c NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the hash structure changes then the iterator becomes + * invalid. That is, if you add or remove items this iterator behavior + * is undefined and your program may crash. + */ +EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returned a new iterator associated to hash keys and data. + * + * @param hash The hash. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * hash. If @p hash is not populated, this function still returns a + * valid iterator that will always return false on + * eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @note iterator data will provide values as Eina_Hash_Tuple that should not + * be modified! + * + * @warning if the hash structure changes then the iterator becomes + * invalid! That is, if you add or remove items this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Call a function on every member stored in the hash table + * + * @param hash The hash table whose members will be walked + * @param func The function to call on each parameter + * @param fdata The data pointer to pass to the function being called + * + * This function goes through every entry in the hash table @p hash and calls + * the function @p func on each member. The function should @b not modify the + * hash table contents if it returns 1. @b If the hash table contents are + * modified by this function or the function wishes to stop processing it must + * return 0, otherwise return 1 to keep processing. + * + * Example: + * @code + * extern Eina_Hash *hash; + * + * Eina_Bool hash_fn(const Eina_Hash *hash, const void *key, + * void *data, void *fdata) + * { + * printf("Func data: %s, Hash entry: %s / %p\n", + * fdata, (const char *)key, data); + * return 1; + * } + * + * int main(int argc, char **argv) + * { + * char *hash_fn_data; + * + * hash_fn_data = strdup("Hello World"); + * eina_hash_foreach(hash, hash_fn, hash_fn_data); + * free(hash_fn_data); + * } + * @endcode + */ +EAPI void eina_hash_foreach(const Eina_Hash *hash, + Eina_Hash_Foreach cb, + const void *fdata) EINA_ARG_NONNULL(1, 2); +/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) hash function used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */ +EAPI int eina_hash_superfast(const char *key, + int len) EINA_ARG_NONNULL(1); +/* Hash function first reported by dan bernstein many years ago in comp.lang.c */ +static inline int eina_hash_djb2(const char *key, + int len) EINA_ARG_NONNULL(1); +static inline int eina_hash_djb2_len(const char *key, + int *plen) EINA_ARG_NONNULL(1, 2); +/* Hash function from http://www.concentric.net/~Ttwang/tech/inthash.htm */ +static inline int eina_hash_int32(const unsigned int *pkey, + int len) EINA_ARG_NONNULL(1); +static inline int eina_hash_int64(const unsigned long int *pkey, + int len) EINA_ARG_NONNULL(1); +/* http://sites.google.com/site/murmurhash/ */ +static inline int eina_hash_murmur3(const char *key, + int len) EINA_ARG_NONNULL(1); +#include "eina_inline_hash.x" + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /*EINA_HASH_H_*/ diff --git a/libraries/eina/src/include/eina_inline_array.x b/libraries/eina/src/include/eina_inline_array.x new file mode 100644 index 0000000..f9f6026 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_array.x @@ -0,0 +1,164 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_ARRAY_X_ +#define EINA_INLINE_ARRAY_X_ + +#include + +/** + * @cond LOCAL + */ + +EAPI Eina_Bool eina_array_grow(Eina_Array *array); + +/** + * @endcond + */ + +/** + * @addtogroup Eina_Array_Group Array + * + * @brief These functions provide array management. + * + * @{ + */ + +/** + * @brief Append a data to an array. + * + * @param array The array. + * @param data The data to add. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function appends @p data to @p array. For performance + * reasons, there is no check of @p array. If it is @c NULL or + * invalid, the program may crash. If @p data is @c NULL, or if an + * allocation is necessary and fails, #EINA_FALSE is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, #EINA_TRUE is + * returned. + */ + +static inline Eina_Bool +eina_array_push(Eina_Array *array, const void *data) +{ + if (!data) return EINA_FALSE; + + if (EINA_UNLIKELY((array->count + 1) > array->total)) + if (!eina_array_grow(array)) + return EINA_FALSE; + + array->data[array->count++] = (void*) data; + + return EINA_TRUE; +} + +/** + * @brief Remove the last data of an array. + * + * @param array The array. + * @return The retrieved data. + * + * This function removes the last data of @p array, decreases the count + * of @p array and returns the data. For performance reasons, there + * is no check of @p array. If it is @c NULL or invalid, the program + * may crash. If the count member is less or equal than 0, @c NULL is + * returned. + */ +static inline void * +eina_array_pop(Eina_Array *array) +{ + void *ret = NULL; + + if (array->count <= 0) + goto on_empty; + + ret = array->data[--array->count]; + + on_empty: + return ret; +} + +/** + * @brief Return the data at a given position in an array. + * + * @param array The array. + * @param idx The potition of the data to retrieve. + * @return The retrieved data. + * + * This function returns the data at the position @p idx in @p + * array. For performance reasons, there is no check of @p array or @p + * idx. If it is @c NULL or invalid, the program may crash. + */ +static inline void * +eina_array_data_get(const Eina_Array *array, unsigned int idx) +{ + return array->data[idx]; +} + +static inline void +eina_array_data_set(const Eina_Array *array, unsigned int idx, const void *data) +{ + array->data[idx] = (void*) data; +} + +/** + * @brief Return the number of elements in an array. + * + * @param array The array. + * @return The number of elements. + * + * This function returns the number of elements in @p array. For + * performance reasons, there is no check of @p array. If it is + * @c NULL or invalid, the program may crash. + */ +static inline unsigned int +eina_array_count_get(const Eina_Array *array) +{ + return array->count; +} + +static inline Eina_Bool +eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata) +{ + void *data; + Eina_Array_Iterator iterator; + unsigned int i; + Eina_Bool ret = EINA_TRUE; + + EINA_ARRAY_ITER_NEXT(array, i, data, iterator) + if (cb(array, data, fdata) != EINA_TRUE) + { + ret = EINA_FALSE; + break; + } + + return ret; +} + +static inline void +eina_array_clean(Eina_Array *array) +{ + array->count = 0; +} + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_inline_f16p16.x b/libraries/eina/src/include/eina_inline_f16p16.x new file mode 100644 index 0000000..e16d188 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_f16p16.x @@ -0,0 +1,83 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * Copyright (C) 2009 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_F16P16_X_ +#define EINA_INLINE_F16P16_X_ + +static inline Eina_F16p16 +eina_f16p16_add(Eina_F16p16 a, Eina_F16p16 b) +{ + return a + b; +} + +static inline Eina_F16p16 +eina_f16p16_sub(Eina_F16p16 a, Eina_F16p16 b) +{ + return a - b; +} + +static inline Eina_F16p16 +eina_f16p16_mul(Eina_F16p16 a, Eina_F16p16 b) +{ + return (Eina_F16p16)(((int64_t)a * (int64_t)b) >> 16); +} + +static inline Eina_F16p16 +eina_f16p16_scale(Eina_F16p16 a, int b) +{ + return a * b; +} + +static inline Eina_F16p16 +eina_f16p16_div(Eina_F16p16 a, Eina_F16p16 b) +{ + return (Eina_F16p16) ((((int64_t) a) << 16) / (int64_t) b); +} + +static inline Eina_F16p16 +eina_f16p16_sqrt(Eina_F16p16 a) +{ + unsigned int root, remHi, remLo, testDiv, count; + + root = 0; /* Clear root */ + remHi = 0; /* Clear high part of partial remainder */ + remLo = a; /* Get argument into low part of partial remainder */ + count = (15 + (16 >> 1)); /* Load loop counter */ + do { + remHi = (remHi << 2) | (remLo >> 30); + remLo <<= 2; /* get 2 bits of arg */ + root <<= 1; /* Get ready for the next bit in the root */ + testDiv = (root << 1) + 1; /* Test radical */ + if (remHi >= testDiv) + { + remHi -= testDiv; + root++; + } + } while (count-- != 0); + + return root; +} + +static inline unsigned int +eina_f16p16_fracc_get(Eina_F16p16 v) +{ + return (v & 0xffff); +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_f32p32.x b/libraries/eina/src/include/eina_inline_f32p32.x new file mode 100644 index 0000000..73480de --- /dev/null +++ b/libraries/eina/src/include/eina_inline_f32p32.x @@ -0,0 +1,110 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_F32P32_X_ +# define EINA_INLINE_F32P32_X_ + +#include + +static inline Eina_F32p32 +eina_f32p32_add(Eina_F32p32 a, Eina_F32p32 b) +{ + return a + b; +} + +static inline Eina_F32p32 +eina_f32p32_sub(Eina_F32p32 a, Eina_F32p32 b) +{ + return a - b; +} + +static inline Eina_F32p32 +eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b) +{ + /* Prevent overflow and do '(a * b) >> 32' */ + /* Basically do: Eina_F16p16 * Eina_F16p16 = Eina_F32p32 */ + Eina_F32p32 up; + Eina_F32p32 down; + Eina_F32p32 result; + uint64_t as, bs; + Eina_F32p32 sign; + + sign = a ^ b; + as = eina_fp32p32_llabs(a); + bs = eina_fp32p32_llabs(b); + + up = (as >> 16) * (bs >> 16); + down = (as & 0xFFFF) * (bs & 0xFFFF); + + result = up + (down >> 32); + + return sign < 0 ? - result : result; +} + +static inline Eina_F32p32 +eina_f32p32_scale(Eina_F32p32 a, int b) +{ + return a * b; +} + +static inline Eina_F32p32 +eina_f32p32_div(Eina_F32p32 a, Eina_F32p32 b) +{ + Eina_F32p32 sign; + Eina_F32p32 result; + + sign = a ^ b; + + if (b == 0) + return sign < 0 ? (Eina_F32p32) 0x8000000000000000ull : (Eina_F32p32) 0x7FFFFFFFFFFFFFFFull; + + result = (eina_f32p32_mul(eina_fp32p32_llabs(a), (((uint64_t) 1 << 62) / ((uint64_t)(eina_fp32p32_llabs(b)) >> 2)))); + + return sign < 0 ? - result : result; +} + +static inline Eina_F32p32 +eina_f32p32_sqrt(Eina_F32p32 a) +{ + uint64_t root, remHi, remLo, testDiv, count; + + root = 0; /* Clear root */ + remHi = 0; /* Clear high part of partial remainder */ + remLo = a; /* Get argument into low part of partial remainder */ + count = (31 + (32 >> 1)); /* Load loop counter */ + do { + remHi = (remHi << 2) | (remLo >> 30); + remLo <<= 2; /* get 2 bits of arg */ + root <<= 1; /* Get ready for the next bit in the root */ + testDiv = (root << 1) + 1; /* Test radical */ + if (remHi >= testDiv) { + remHi -= testDiv; + root++; + } + } while (count-- != 0); + + return root; +} + +static inline unsigned int +eina_f32p32_fracc_get(Eina_F32p32 v) +{ + return (unsigned int)v; +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_f8p24.x b/libraries/eina/src/include/eina_inline_f8p24.x new file mode 100644 index 0000000..f80bf61 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_f8p24.x @@ -0,0 +1,82 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * Copyright (C) 2009 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_F8P24_X_ +#define EINA_INLINE_F8P24_X_ + +static inline Eina_F8p24 +eina_f8p24_add(Eina_F8p24 a, Eina_F8p24 b) +{ + return a + b; +} + +static inline Eina_F8p24 +eina_f8p24_sub(Eina_F8p24 a, Eina_F8p24 b) +{ + return a - b; +} + +static inline Eina_F8p24 +eina_f8p24_mul(Eina_F8p24 a, Eina_F8p24 b) +{ + return (Eina_F8p24)(((int64_t) a * (int64_t) b) >> 24); +} + +static inline Eina_F8p24 +eina_f8p24_scale(Eina_F8p24 a, int b) +{ + return a * b; +} + +static inline Eina_F8p24 +eina_f8p24_div(Eina_F8p24 a, Eina_F8p24 b) +{ + return (Eina_F8p24) ((((int64_t) a) << 24) / (int64_t) b); +} + +static inline Eina_F8p24 +eina_f8p24_sqrt(Eina_F8p24 a) +{ + unsigned int root, remHi, remLo, testDiv, count; + + root = 0; /* Clear root */ + remHi = 0; /* Clear high part of partial remainder */ + remLo = a; /* Get argument into low part of partial remainder */ + count = (23 + (24 >> 1)); /* Load loop counter */ + do { + remHi = (remHi << 2) | (remLo >> 30); + remLo <<= 2; /* get 2 bits of arg */ + root <<= 1; /* Get ready for the next bit in the root */ + testDiv = (root << 1) + 1; /* Test radical */ + if (remHi >= testDiv) + { + remHi -= testDiv; + root++; + } + } while (count-- != 0); + return (root); +} + +static inline unsigned int +eina_f8p24_fracc_get(Eina_F8p24 v) +{ + return (v & 0xffffff); +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_fp.x b/libraries/eina/src/include/eina_inline_fp.x new file mode 100644 index 0000000..de44123 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_fp.x @@ -0,0 +1,153 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * Copyright (C) 2009 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_FP_X_ +# define EINA_INLINE_FP_X_ + +static inline Eina_F32p32 +eina_f32p32_int_from(int32_t v) +{ + return (Eina_F32p32)(v) << 32; +} + +static inline int32_t +eina_f32p32_int_to(Eina_F32p32 v) +{ + return (int32_t)(v >> 32); +} + +static inline Eina_F32p32 +eina_f32p32_double_from(double v) +{ + Eina_F32p32 r; + r = (Eina_F32p32)(v * 4294967296.0 + (v < 0 ? -0.5 : 0.5)); + return r; +} + +static inline double +eina_f32p32_double_to(Eina_F32p32 v) +{ + double r; + r = v / 4294967296.0; + return r; +} + + + +static inline Eina_F16p16 +eina_f16p16_int_from(int32_t v) +{ + return v << 16; +} + +static inline int32_t +eina_f16p16_int_to(Eina_F16p16 v) +{ + return v >> 16; +} + +static inline Eina_F16p16 +eina_f16p16_float_from(float v) +{ + Eina_F16p16 r; + + r = (Eina_F16p16)(v * 65536.0f + (v < 0 ? -0.5f : 0.5f)); + return r; +} + +static inline float +eina_f16p16_float_to(Eina_F16p16 v) +{ + float r; + + r = v / 65536.0f; + return r; +} + + + +static inline Eina_F8p24 +eina_f8p24_int_from(int32_t v) +{ + return v << 24; +} + +static inline int32_t +eina_f8p24_int_to(Eina_F8p24 v) +{ + return v >> 24; +} + +static inline Eina_F8p24 +eina_f8p24_float_from(float v) +{ + Eina_F8p24 r; + + r = (Eina_F8p24)(v * 16777216.0f + (v < 0 ? -0.5f : 0.5f)); + return r; +} + +static inline float +eina_f8p24_float_to(Eina_F8p24 v) +{ + float r; + + r = v / 16777216.0f; + return r; +} + + + +static inline Eina_F32p32 +eina_f16p16_to_f32p32(Eina_F16p16 a) +{ + return ((Eina_F32p32) a) << 16; +} + +static inline Eina_F32p32 +eina_f8p24_to_f32p32(Eina_F8p24 a) +{ + return ((Eina_F32p32) a) << 8; +} + +static inline Eina_F16p16 +eina_f32p32_to_f16p16(Eina_F32p32 a) +{ + return (Eina_F16p16) (a >> 16); +} + +static inline Eina_F16p16 +eina_f8p24_to_f16p16(Eina_F8p24 a) +{ + return (Eina_F16p16) (a >> 8); +} + +static inline Eina_F8p24 +eina_f32p32_to_f8p24(Eina_F32p32 a) +{ + return (Eina_F8p24) (a >> 8); +} + +static inline Eina_F8p24 +eina_f16p16_to_f8p24(Eina_F16p16 a) +{ + return (Eina_F8p24) (a << 8); +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_hash.x b/libraries/eina/src/include/eina_inline_hash.x new file mode 100644 index 0000000..f27060f --- /dev/null +++ b/libraries/eina/src/include/eina_inline_hash.x @@ -0,0 +1,151 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_HASH_X_ +#define EINA_INLINE_HASH_X_ + +/* + djb2 hash algorithm was first reported by dan bernstein, and was the old + default hash function for evas. + */ +static inline int +eina_hash_djb2(const char *key, int len) +{ + unsigned int hash_num = 5381; + const unsigned char *ptr; + + if (!key) return 0; + for (ptr = (unsigned char *)key; len; ptr++, len--) + hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */ + + return (int)hash_num; +} + +static inline int +eina_hash_djb2_len(const char *key, int *plen) +{ + unsigned int hash_num = 5381; + int len = 0; + const unsigned char *ptr; + + if (!key) return 0; + + for (ptr = (unsigned char *)key; *ptr; ptr++, len++) + hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */ + + *plen = len + 1; + + return (int)hash_num; +} + +static inline int +eina_hash_int32(const unsigned int *pkey, int len) +{ + unsigned int key = *pkey; + + (void) len; + + key = ~key + (key << 15); + key ^= key >> 12; + key += key << 2; + key ^= key >> 4; + key *= 2057; + key ^= key >> 16; + return key; +} + +static inline int +eina_hash_int64(const unsigned long int *pkey, int len) +{ + unsigned long int key = *pkey; + + (void) len; + + key = ~key + (key << 18); + key ^= key >> 31; + key *= 21; + key ^= key >> 11; + key += key << 6; + key ^= key >> 22; + return (int) key; +} + +static inline unsigned int _rotl32(unsigned int x, char r) +{ + return (x << r) | (x >> (32 - r)); +} + +static inline unsigned int _fmix32(unsigned int h) +{ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} + +int +eina_hash_murmur3(const char *key, int len) +{ + const unsigned char * data = (const unsigned char*)key; + const int nblocks = len / 4; + unsigned int h1 = 0, k1; + unsigned int c1 = 0xcc9e2d51; + unsigned int c2 = 0x1b873593; + const unsigned int * blocks = (const unsigned int *)(data + nblocks*4); + int i; + const unsigned char *tail; + + for(i = -nblocks; i; i++) + { + k1 = blocks[i]; + + k1 *= c1; + k1 = _rotl32(k1, 15); + k1 *= c2; + + h1 ^= k1; + h1 = _rotl32(h1, 13); + h1 = h1*5+0xe6546b64; + } + + tail = (const unsigned char*)(data + nblocks*4); + + k1 = 0; + + switch(len & 3) + { + case 3: + k1 ^= tail[2] << 16; + case 2: + k1 ^= tail[1] << 8; + case 1: + k1 ^= tail[0]; + k1 *= c1; + k1 = _rotl32(k1, 16); + k1 *= c2; + h1 ^= k1; + } + + h1 ^= len; + + return _fmix32(h1); +} +#endif diff --git a/libraries/eina/src/include/eina_inline_list.x b/libraries/eina/src/include/eina_inline_list.x new file mode 100644 index 0000000..3397a1b --- /dev/null +++ b/libraries/eina/src/include/eina_inline_list.x @@ -0,0 +1,67 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LIST_INLINE_H_ +#define EINA_LIST_INLINE_H_ + +static inline Eina_List * +eina_list_last(const Eina_List *list) +{ + if (!list) return NULL; + return list->accounting->last; +} + +static inline Eina_List * +eina_list_next(const Eina_List *list) +{ + if (!list) return NULL; + return list->next; +} + +static inline Eina_List * +eina_list_prev(const Eina_List *list) +{ + if (!list) return NULL; + return list->prev; +} + +static inline void * +eina_list_data_get(const Eina_List *list) +{ + if (!list) return NULL; + return list->data; +} + +static inline void * +eina_list_data_set(Eina_List *list, const void *data) +{ + void *tmp; + if (!list) return NULL; + tmp = list->data; + list->data = (void*) data; + return tmp; +} + +static inline unsigned int +eina_list_count(const Eina_List *list) +{ + if (!list) return 0; + return list->accounting->count; +} + +#endif /* EINA_LIST_INLINE_H_ */ diff --git a/libraries/eina/src/include/eina_inline_lock_posix.x b/libraries/eina/src/include/eina_inline_lock_posix.x new file mode 100644 index 0000000..77f5b8b --- /dev/null +++ b/libraries/eina/src/include/eina_inline_lock_posix.x @@ -0,0 +1,509 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_LOCK_POSIX_X_ +#define EINA_INLINE_LOCK_POSIX_X_ + +#include +#ifndef __USE_UNIX98 +# define __USE_UNIX98 +# include +# undef __USE_UNIX98 +#else +# include +#endif + +#include + +#ifdef EINA_HAVE_DEBUG_THREADS +#include +#include +#include +#include +#define EINA_LOCK_DEBUG_BT_NUM 64 +typedef void (*Eina_Lock_Bt_Func) (); + +#include "eina_inlist.h" +#endif + +typedef struct _Eina_Lock Eina_Lock; +typedef struct _Eina_RWLock Eina_RWLock; +typedef struct _Eina_Condition Eina_Condition; +typedef pthread_key_t Eina_TLS; + +struct _Eina_Lock +{ +#ifdef EINA_HAVE_DEBUG_THREADS + EINA_INLIST; +#endif + pthread_mutex_t mutex; +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_t lock_thread_id; + Eina_Lock_Bt_Func lock_bt[EINA_LOCK_DEBUG_BT_NUM]; + int lock_bt_num; + Eina_Bool locked : 1; +#endif +}; + +struct _Eina_Condition +{ + Eina_Lock *lock; + pthread_cond_t condition; +}; + +struct _Eina_RWLock +{ + pthread_rwlock_t mutex; +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_t lock_thread_wid; +#endif +}; + +EAPI extern Eina_Bool _eina_threads_activated; + +#ifdef EINA_HAVE_DEBUG_THREADS +# include + +EAPI extern int _eina_threads_debug; +EAPI extern pthread_t _eina_main_loop; +EAPI extern pthread_mutex_t _eina_tracking_lock; +EAPI extern Eina_Inlist *_eina_tracking; +#endif + +static inline void +eina_lock_debug(const Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + printf("lock %p, locked: %i, by %i\n", + mutex, (int)mutex->locked, (int)mutex->lock_thread_id); + backtrace_symbols_fd((void **)mutex->lock_bt, mutex->lock_bt_num, 1); +#else + (void) mutex; +#endif +} + +static inline Eina_Bool +eina_lock_new(Eina_Lock *mutex) +{ + pthread_mutexattr_t attr; + +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + if (pthread_mutexattr_init(&attr) != 0) + return EINA_FALSE; + /* NOTE: PTHREAD_MUTEX_RECURSIVE is not allowed at all, you will break on/off + feature for sure with that change. */ +#ifdef EINA_HAVE_DEBUG_THREADS + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0) + return EINA_FALSE; + memset(mutex, 0, sizeof(Eina_Lock)); +#endif + if (pthread_mutex_init(&(mutex->mutex), &attr) != 0) + return EINA_FALSE; + + pthread_mutexattr_destroy(&attr); + + return EINA_TRUE; +} + +static inline void +eina_lock_free(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + pthread_mutex_destroy(&(mutex->mutex)); +#ifdef EINA_HAVE_DEBUG_THREADS + memset(mutex, 0, sizeof(Eina_Lock)); +#endif +} + +static inline Eina_Lock_Result +eina_lock_take(Eina_Lock *mutex) +{ + Eina_Lock_Result ret = EINA_LOCK_FAIL; + int ok; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + +#ifdef EINA_HAVE_DEBUG_THREADS + if (_eina_threads_debug) + { + struct timeval t0, t1; + int dt; + + gettimeofday(&t0, NULL); + ok = pthread_mutex_lock(&(mutex->mutex)); + gettimeofday(&t1, NULL); + + dt = (t1.tv_sec - t0.tv_sec) * 1000000; + if (t1.tv_usec > t0.tv_usec) + dt += (t1.tv_usec - t0.tv_usec); + else + dt -= t0.tv_usec - t1.tv_usec; + dt /= 1000; + + if (dt > _eina_threads_debug) abort(); + } + else + { +#endif + ok = pthread_mutex_lock(&(mutex->mutex)); +#ifdef EINA_HAVE_DEBUG_THREADS + } +#endif + + if (ok == 0) ret = EINA_LOCK_SUCCEED; + else if (ok == EDEADLK) + { + printf("ERROR ERROR: DEADLOCK on lock %p\n", mutex); + eina_lock_debug(mutex); + ret = EINA_LOCK_DEADLOCK; // magic +#ifdef EINA_HAVE_DEBUG_THREADS + if (_eina_threads_debug) abort(); +#endif + } + +#ifdef EINA_HAVE_DEBUG_THREADS + mutex->locked = 1; + mutex->lock_thread_id = pthread_self(); + mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); + + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_append(_eina_tracking, + EINA_INLIST_GET(mutex)); + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + return ret; +} + +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex) +{ + Eina_Lock_Result ret = EINA_LOCK_FAIL; + int ok; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + ok = pthread_mutex_trylock(&(mutex->mutex)); + if (ok == 0) ret = EINA_LOCK_SUCCEED; + else if (ok == EDEADLK) + { + printf("ERROR ERROR: DEADLOCK on trylock %p\n", mutex); + ret = EINA_LOCK_DEADLOCK; // magic + } +#ifdef EINA_HAVE_DEBUG_THREADS + if (ret == EINA_LOCK_SUCCEED) + { + mutex->locked = 1; + mutex->lock_thread_id = pthread_self(); + mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM); + + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_append(_eina_tracking, + EINA_INLIST_GET(mutex)); + pthread_mutex_unlock(&_eina_tracking_lock); + } +#endif + return ret; +} + +static inline Eina_Lock_Result +eina_lock_release(Eina_Lock *mutex) +{ + Eina_Lock_Result ret; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_remove(_eina_tracking, + EINA_INLIST_GET(mutex)); + pthread_mutex_unlock(&_eina_tracking_lock); + + mutex->locked = 0; + mutex->lock_thread_id = 0; + memset(mutex->lock_bt, 0, EINA_LOCK_DEBUG_BT_NUM * sizeof(Eina_Lock_Bt_Func)); + mutex->lock_bt_num = 0; +#endif + ret = (pthread_mutex_unlock(&(mutex->mutex)) == 0) ? + EINA_LOCK_SUCCEED : EINA_LOCK_FAIL; + return ret; +} + +static inline Eina_Bool +eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + assert(mutex != NULL); + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); + memset(cond, 0, sizeof (Eina_Condition)); +#endif + + cond->lock = mutex; + if (pthread_cond_init(&cond->condition, NULL) != 0) + { +#ifdef EINA_HAVE_DEBUG_THREADS + if (errno == EBUSY) + printf("eina_condition_new on already initialized Eina_Condition\n"); +#endif + return EINA_FALSE; + } + + return EINA_TRUE; +} + +static inline void +eina_condition_free(Eina_Condition *cond) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + pthread_cond_destroy(&(cond->condition)); +#ifdef EINA_HAVE_DEBUG_THREADS + memset(cond, 0, sizeof (Eina_Condition)); +#endif +} + +static inline Eina_Bool +eina_condition_wait(Eina_Condition *cond) +{ + Eina_Bool r; + +#ifdef EINA_HAVE_DEBUG_THREADS + assert(_eina_threads_activated); + assert(cond->lock != NULL); + + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_remove(_eina_tracking, + EINA_INLIST_GET(cond->lock)); + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + r = pthread_cond_wait(&(cond->condition), + &(cond->lock->mutex)) == 0 ? EINA_TRUE : EINA_FALSE; + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_append(_eina_tracking, + EINA_INLIST_GET(cond->lock)); + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + return r; +} + +static inline Eina_Bool +eina_condition_timedwait(Eina_Condition *cond, double t) +{ + struct timespec tv; + Eina_Bool r; + +#ifdef EINA_HAVE_DEBUG_THREADS + assert(_eina_threads_activated); + assert(cond->lock != NULL); + + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_remove(_eina_tracking, + EINA_INLIST_GET(cond->lock)); + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + tv.tv_sec = t; + tv.tv_nsec = (t - (double) tv.tv_sec) * 1000000000; + + r = pthread_cond_timedwait(&(cond->condition), + &(cond->lock->mutex), + &tv) == 0 ? + EINA_TRUE : EINA_FALSE; + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_lock(&_eina_tracking_lock); + _eina_tracking = eina_inlist_append(_eina_tracking, + EINA_INLIST_GET(cond->lock)); + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + return r; +} + +static inline Eina_Bool +eina_condition_broadcast(Eina_Condition *cond) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + assert(cond->lock != NULL); +#endif + + return pthread_cond_broadcast(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_signal(Eina_Condition *cond) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + assert(cond->lock != NULL); +#endif + + return pthread_cond_signal(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE; +} + +static inline Eina_Bool +eina_rwlock_new(Eina_RWLock *mutex) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + if (pthread_rwlock_init(&(mutex->mutex), NULL) != 0) + return EINA_FALSE; + return EINA_TRUE; +} + +static inline void +eina_rwlock_free(Eina_RWLock *mutex) +{ +#ifdef EINA_HAVE_DEBUG_THREADS + if (!_eina_threads_activated) + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + pthread_rwlock_destroy(&(mutex->mutex)); +} + +static inline Eina_Lock_Result +eina_rwlock_take_read(Eina_RWLock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + + if (pthread_rwlock_rdlock(&(mutex->mutex)) != 0) + return EINA_LOCK_FAIL; + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_rwlock_take_write(Eina_RWLock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + + if (pthread_rwlock_wrlock(&(mutex->mutex)) != 0) + return EINA_LOCK_FAIL; + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_rwlock_release(Eina_RWLock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) + { +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + return EINA_LOCK_SUCCEED; + } +#endif + + if (pthread_rwlock_unlock(&(mutex->mutex)) != 0) + return EINA_LOCK_FAIL; + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Bool +eina_tls_new(Eina_TLS *key) +{ + if (pthread_key_create(key, NULL) != 0) + return EINA_FALSE; + return EINA_TRUE; +} + +static inline void +eina_tls_free(Eina_TLS key) +{ + pthread_key_delete(key); +} + +static inline void * +eina_tls_get(Eina_TLS key) +{ + return pthread_getspecific(key); +} + +static inline Eina_Bool +eina_tls_set(Eina_TLS key, const void *data) +{ + if (pthread_setspecific(key, data) != 0) + return EINA_FALSE; + return EINA_TRUE; +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_lock_void.x b/libraries/eina/src/include/eina_inline_lock_void.x new file mode 100644 index 0000000..8cb9a49 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_lock_void.x @@ -0,0 +1,247 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_LOCK_VOID_X_ +#define EINA_INLINE_LOCK_VOID_X_ + +#ifdef EINA_UNUSED +# undef EINA_UNUSED +#endif +#ifdef __GNUC__ +# define EINA_UNUSED __attribute__((unused)) +#else +# define EINA_UNUSED +#endif + +/** + * @addtogroup Eina_Lock_Group Lock + * + * @brief These functions provide Mutual Exclusion objects management. + * + * @note On Windows XP, critical sections are used, while on Windows + * CE, standard Mutex objects are used. + * + * @{ + */ + +/** + * @typedef Eina_Lock + * Abtract type for a mutual exclusive object. + */ +typedef void *Eina_Lock; +typedef void *Eina_RWLock; +typedef void *Eina_Condition; +typedef void *Eina_TLS; + +/** + * @brief Create a new #Eina_Lock. + * + * @param mutex A pointer to the lock object. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function creates a new #Eina_Lock object and stores it in the + * @p mutex buffer. On success, this function returns #EINA_TRUE and + * #EINA_FALSE otherwise. To free the resources allocated by this + * function, use eina_lock_free(). For performance reasons, no check + * is done on @p mutex. + */ +static inline Eina_Bool +eina_lock_new(Eina_Lock *mutex EINA_UNUSED) +{ + return EINA_FALSE; +} + +/** + * @brief Free the ressources of the given lock object. + * + * @param mutex The lock object to free. + * + * This function frees the resources of @p mutex allocated by + * eina_lock_new(). For performance reasons, no check is done on + * @p mutex. + */ +static inline void +eina_lock_free(Eina_Lock *mutex EINA_UNUSED) +{ +} + +/** + * @brief Lock the given mutual exclusion object. + * + * @param mutex The lock object to lock. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function locks @p mutex. @p mutex must have been created by + * eina_lock_new(). On success, this function returns #EINA_TRUE and + * #EINA_FALSE otherwise. For performance reasons, no check is done on + * @p mutex. + */ +static inline Eina_Lock_Result +eina_lock_take(Eina_Lock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +/** + * @brief Try to lock the given mutual exclusion object. + * + * @param mutex The lock object to try to lock. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function tries to lock @p mutex. @p mutex must have been created by + * eina_lock_new(). If @p mutex can be locked, this function returns + * #EINA_TRUE; if @p mutex can not be locked, or is already locked, it + * returns #EINA_FALSE. This function does not block and returns + * immediately. For performance reasons, no check is done on + * @p mutex. + * + * @note On Windows CE, this function is actually eina_lock_take(). + */ +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +/** + * @brief Unlock the given mutual exclusion object. + * + * @param mutex The lock object to unlock. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function unlocks @p mutex. @p mutex must have been created by + * eina_lock_new(). On success, this function returns #EINA_TRUE and + * #EINA_FALSE otherwise. For performance reasons, no check is done on + * @p mutex. + */ +static inline Eina_Lock_Result +eina_lock_release(Eina_Lock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline void +eina_lock_debug(const Eina_Lock *mutex EINA_UNUSED) +{ +} + +static inline Eina_Bool +eina_condition_new(Eina_Condition *cond EINA_UNUSED, Eina_Lock *mutex EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline void +eina_condition_free(Eina_Condition *cond EINA_UNUSED) +{ +} + +static inline Eina_Bool +eina_condition_wait(Eina_Condition *cond EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_timedwait(Eina_Condition *cond EINA_UNUSED, double val EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_broadcast(Eina_Condition *cond EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_signal(Eina_Condition *cond EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_rwlock_new(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline void + eina_rwlock_free(Eina_RWLock *mutex EINA_UNUSED) +{ +} + +static inline Eina_Lock_Result +eina_rwlock_read_take(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline Eina_Lock_Result +eina_rwlock_write_take(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline Eina_Lock_Result +eina_rwlock_release(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline Eina_Lock_Result +eina_rwlock_take_read(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline Eina_Lock_Result +eina_rwlock_take_write(Eina_RWLock *mutex EINA_UNUSED) +{ + return EINA_LOCK_FAIL; +} + +static inline Eina_Bool +eina_tls_new(Eina_TLS *key EINA_UNUSED) +{ + return EINA_FALSE; +} + +static inline void +eina_tls_free(Eina_TLS key EINA_UNUSED) +{ +} + +static inline void * +eina_tls_get(Eina_TLS key EINA_UNUSED) +{ + return NULL; +} + +static inline Eina_Bool +eina_tls_set(Eina_TLS key EINA_UNUSED, const void *data EINA_UNUSED) +{ + return EINA_FALSE; +} + + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_inline_lock_win32.x b/libraries/eina/src/include/eina_inline_lock_win32.x new file mode 100644 index 0000000..072095c --- /dev/null +++ b/libraries/eina/src/include/eina_inline_lock_win32.x @@ -0,0 +1,466 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_LOCK_WIN32_X_ +#define EINA_INLINE_LOCK_WIN32_X_ + +#include + +typedef CRITICAL_SECTION Eina_Lock; +typedef struct _Eina_Condition Eina_Condition; + +#if _WIN32_WINNT >= 0x0600 +struct _Eina_Condition +{ + CRITICAL_SECTION *mutex; + CONDITION_VARIABLE condition; +}; +#else +struct _Eina_Condition +{ + int waiters_count; + CRITICAL_SECTION waiters_count_lock; + CRITICAL_SECTION *mutex; + HANDLE semaphore; + HANDLE waiters_done; + Eina_Bool was_broadcast; +}; +#endif + +typedef struct _Eina_Win32_RWLock Eina_RWLock; + +struct _Eina_Win32_RWLock +{ + LONG readers_count; + LONG writers_count; + int readers; + int writers; + + Eina_Lock mutex; + Eina_Condition cond_read; + Eina_Condition cond_write; +}; + +typedef DWORD Eina_TLS; + +EAPI extern Eina_Bool _eina_threads_activated; + +static inline Eina_Bool +eina_lock_new(Eina_Lock *mutex) +{ + InitializeCriticalSection(mutex); + + return EINA_TRUE; +} + +static inline void +eina_lock_free(Eina_Lock *mutex) +{ + DeleteCriticalSection(mutex); +} + +static inline Eina_Lock_Result +eina_lock_take(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return EINA_LOCK_SUCCEED; +#endif + + EnterCriticalSection(mutex); + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return EINA_LOCK_SUCCEED; +#endif + + return TryEnterCriticalSection(mutex) == 0 ? EINA_LOCK_FAIL : EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_lock_release(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return EINA_LOCK_SUCCEED; +#endif + + LeaveCriticalSection(mutex); + + return EINA_LOCK_SUCCEED; +} + +static inline void +eina_lock_debug(const Eina_Lock *mutex) +{ + (void)mutex; +} + +static inline Eina_Bool +eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex) +{ + cond->mutex = mutex; +#if _WIN32_WINNT >= 0x0600 + InitializeConditionVariable(&cond->condition); +#else + cond->waiters_count = 0; + cond->was_broadcast = EINA_FALSE; + cond->semaphore = CreateSemaphore(NULL, // no security + 0, // initially 0 + 0x7fffffff, // max count + NULL); // unnamed + if (!cond->semaphore) + return EINA_FALSE; + + InitializeCriticalSection(&cond->waiters_count_lock); + + cond->waiters_done = CreateEvent(NULL, // no security + FALSE, // auto-reset + FALSE, // non-signaled initially + NULL); // unnamed + if (!cond->waiters_done) + { + CloseHandle(cond->semaphore); + return EINA_FALSE; + } + + return EINA_TRUE; +#endif +} + +static inline void +eina_condition_free(Eina_Condition *cond) +{ +#if _WIN32_WINNT >= 0x0600 + /* Nothing to do */ +#else + CloseHandle(cond->waiters_done); + DeleteCriticalSection(&cond->waiters_count_lock); + CloseHandle(cond->semaphore); +#endif +} + +static inline Eina_Bool +_eina_condition_internal_timedwait(Eina_Condition *cond, DWORD t) +{ +#if _WIN32_WINNT >= 0x0600 + SleepConditionVariableCS(&cond->condition, cond->mutex, t); +#else + DWORD ret; + Eina_Bool last_waiter; + + /* Avoid race conditions. */ + EnterCriticalSection(&cond->waiters_count_lock); + cond->waiters_count++; + LeaveCriticalSection(&cond->waiters_count_lock); + + /* + * This call atomically releases the mutex and waits on the + * semaphore until or + * are called by another thread. + */ + ret = SignalObjectAndWait(cond->mutex, cond->semaphore, t, FALSE); + if (ret == WAIT_FAILED) + return EINA_FALSE; + + /* Reacquire lock to avoid race conditions. */ + EnterCriticalSection(&cond->waiters_count_lock); + + /* We're no longer waiting... */ + cond->waiters_count--; + + /* Check to see if we're the last waiter after . */ + last_waiter = (cond->was_broadcast) && (cond->waiters_count == 0); + + LeaveCriticalSection(&cond->waiters_count_lock); + + /* + * If we're the last waiter thread during this particular broadcast + * then let all the other threads proceed. + */ + if (last_waiter) + { + /* + * This call atomically signals the event and waits until + * it can acquire the . This is required to ensure fairness. + */ + ret = SignalObjectAndWait(cond->waiters_done, cond->mutex, t, FALSE); + if (ret == WAIT_FAILED) + return EINA_FALSE; + } + else + { + /* + * Always regain the external mutex since that's the guarantee we + * give to our callers. + */ + ret = WaitForSingleObject(cond->mutex, t); + if (ret == WAIT_FAILED) + return EINA_FALSE; + } +#endif + + return EINA_TRUE; +} + +static inline Eina_Bool +eina_condition_timedwait(Eina_Condition *cond, double val) +{ + return _eina_condition_internal_timedwait(cond, (DWORD)(val * 1000)); +} + +static inline Eina_Bool +eina_condition_wait(Eina_Condition *cond) +{ + return _eina_condition_internal_timedwait(cond, INFINITE); +} + +static inline Eina_Bool +eina_condition_broadcast(Eina_Condition *cond) +{ +#if _WIN32_WINNT >= 0x0600 + WakeAllConditionVariable(&cond->condition); + return EINA_TRUE; +#else + Eina_Bool have_waiters; + + /* + * This is needed to ensure that and are + * consistent relative to each other. + */ + EnterCriticalSection(&cond->waiters_count_lock); + have_waiters = EINA_FALSE; + + if (cond->waiters_count > 0) + { + /* + * We are broadcasting, even if there is just one waiter... + * Record that we are broadcasting, which helps optimize + * for the non-broadcast case. + */ + cond->was_broadcast = EINA_TRUE; + have_waiters = EINA_TRUE; + } + + if (have_waiters) + { + DWORD ret; + + /* Wake up all the waiters atomically. */ + ret = ReleaseSemaphore(cond->semaphore, cond->waiters_count, 0); + LeaveCriticalSection(&cond->waiters_count_lock); + if (!ret) return EINA_FALSE; + + /* + * Wait for all the awakened threads to acquire the counting + * semaphore. + */ + ret = WaitForSingleObject(cond->waiters_done, INFINITE); + if (ret == WAIT_FAILED) + return EINA_FALSE; + /* + * This assignment is okay, even without the held + * because no other waiter threads can wake up to access it. + */ + cond->was_broadcast = EINA_FALSE; + } + else + LeaveCriticalSection(&cond->waiters_count_lock); + + return EINA_TRUE; +#endif +} + +static inline Eina_Bool +eina_condition_signal(Eina_Condition *cond) +{ +#if _WIN32_WINNT >= 0x0600 + WakeConditionVariable(&cond->condition); +#else + Eina_Bool have_waiters; + + EnterCriticalSection(&cond->waiters_count_lock); + have_waiters = (cond->waiters_count > 0); + LeaveCriticalSection(&cond->waiters_count_lock); + + /* If there aren't any waiters, then this is a no-op. */ + if (have_waiters) + { + if (!ReleaseSemaphore(cond->semaphore, 1, 0)) + return EINA_FALSE; + } + + return EINA_TRUE; +#endif +} + +static inline Eina_Bool +eina_rwlock_new(Eina_RWLock *mutex) +{ + if (!eina_lock_new(&(mutex->mutex))) return EINA_FALSE; + if (!eina_condition_new(&(mutex->cond_read), &(mutex->mutex))) + goto on_error1; + if (!eina_condition_new(&(mutex->cond_write), &(mutex->mutex))) + goto on_error2; + + return EINA_TRUE; + + on_error2: + eina_condition_free(&(mutex->cond_read)); + on_error1: + eina_lock_free(&(mutex->mutex)); + return EINA_FALSE; +} + +static inline void +eina_rwlock_free(Eina_RWLock *mutex) +{ + eina_condition_free(&(mutex->cond_read)); + eina_condition_free(&(mutex->cond_write)); + eina_lock_free(&(mutex->mutex)); +} + +static inline Eina_Lock_Result +eina_rwlock_take_read(Eina_RWLock *mutex) +{ + DWORD res; + + if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) + return EINA_LOCK_FAIL; + + if (mutex->writers) + { + mutex->readers_count++; + while (mutex->writers) + { + EnterCriticalSection(&mutex->cond_write.waiters_count_lock); + mutex->cond_read.waiters_count++; + LeaveCriticalSection(&mutex->cond_write.waiters_count_lock); + res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE); + if (res != WAIT_OBJECT_0) break; + } + mutex->readers_count--; + } + if (res == 0) + mutex->readers++; + eina_lock_release(&(mutex->mutex)); + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_rwlock_take_write(Eina_RWLock *mutex) +{ + DWORD res; + + if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) + return EINA_LOCK_FAIL; + + if (mutex->writers || mutex->readers > 0) + { + mutex->writers_count++; + while (mutex->writers || mutex->readers > 0) + { + EnterCriticalSection(&mutex->cond_write.waiters_count_lock); + mutex->cond_read.waiters_count++; + LeaveCriticalSection(&mutex->cond_write.waiters_count_lock); + res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE); + if (res != WAIT_OBJECT_0) break; + } + mutex->writers_count--; + } + if (res == 0) mutex->writers_count = 1; + eina_lock_release(&(mutex->mutex)); + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_rwlock_release(Eina_RWLock *mutex) +{ + if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL) + return EINA_LOCK_FAIL; + + if (mutex->writers) + { + mutex->writers = 0; + if (mutex->readers_count == 1) + { + EnterCriticalSection(&mutex->cond_read.waiters_count_lock); + if (mutex->cond_read.waiters_count > 0) + ReleaseSemaphore(mutex->cond_read.semaphore, 1, 0); + LeaveCriticalSection(&mutex->cond_read.waiters_count_lock); + } + else if (mutex->readers_count > 0) + eina_condition_broadcast(&(mutex->cond_read)); + else if (mutex->writers_count > 0) + { + EnterCriticalSection (&mutex->cond_write.waiters_count_lock); + if (mutex->cond_write.waiters_count > 0) + ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0); + LeaveCriticalSection (&mutex->cond_write.waiters_count_lock); + } + } + else if (mutex->readers > 0) + { + mutex->readers--; + if (mutex->readers == 0 && mutex->writers_count > 0) + { + EnterCriticalSection (&mutex->cond_write.waiters_count_lock); + if (mutex->cond_write.waiters_count > 0) + ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0); + LeaveCriticalSection (&mutex->cond_write.waiters_count_lock); + } + } + eina_lock_release(&(mutex->mutex)); + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Bool +eina_tls_new(Eina_TLS *key) +{ + if ((*key = TlsAlloc()) == TLS_OUT_OF_INDEXES) + return EINA_FALSE; + return EINA_TRUE; +} + +static inline void +eina_tls_free(Eina_TLS key) +{ + TlsFree(key); +} + +static inline void * +eina_tls_get(Eina_TLS key) +{ + return (void*)TlsGetValue(key); +} + +static inline Eina_Bool +eina_tls_set(Eina_TLS key, const void *data) +{ + if (TlsSetValue(key, (LPVOID)data) == 0) + return EINA_FALSE; + return EINA_TRUE; +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_lock_wince.x b/libraries/eina/src/include/eina_inline_lock_wince.x new file mode 100644 index 0000000..965d475 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_lock_wince.x @@ -0,0 +1,178 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_LOCK_WIN32_X_ +#define EINA_INLINE_LOCK_WIN32_X_ + +#include + +EAPI extern Eina_Bool _threads_activated; + +typedef HANDLE Eina_Lock; +typedef Eina_Lock Eina_RWLock; +typedef DWORD Eina_TLS; + +static inline Eina_Bool +eina_lock_new(Eina_Lock *mutex) +{ + Eina_Lock m; + + m = CreateMutex(NULL, FALSE, NULL); + if (m) *mutex = m; + return (m != NULL); +} + +static inline void +eina_lock_free(Eina_Lock *mutex) +{ + CloseHandle(*mutex); +} + +static inline Eina_Lock_Result +eina_lock_take(Eina_Lock *mutex) +{ + DWORD res; + +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return EINA_LOCK_FAIL; +#endif + + res = WaitForSingleObject(*mutex, INFINITE); + if ((res == WAIT_ABANDONED) || (res == WAIT_FAILED)) + return EINA_LOCK_FAIL; + + return EINA_LOCK_SUCCEED; +} + +static inline Eina_Lock_Result +eina_lock_take_try(Eina_Lock *mutex) +{ + return eina_lock_take(*mutex); +} + +static inline Eina_Lock_Result +eina_lock_release(Eina_Lock *mutex) +{ +#ifdef EINA_HAVE_ON_OFF_THREADS + if (!_eina_threads_activated) return ; +#endif + + return ReleaseMutex(*mutex) ? EINA_LOCK_SUCCEED : EINA_LOCK_FAIL; +} + +static inline void +eina_lock_debug(const Eina_Lock *mutex) +{ +} + +static inline Eina_Bool +eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex) +{ + return EINA_FALSE; +} + +static inline void +eina_condition_free(Eina_Condition *cond) +{ +} + +static inline Eina_Bool +eina_condition_wait(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_timedwait(Eina_Condition *cond, double t) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_broadcast(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_condition_signal(Eina_Condition *cond) +{ + return EINA_FALSE; +} + +static inline Eina_Bool +eina_rwlock_new(Eina_RWLock *mutex) +{ + return eina_lock_new(mutex); +} + +static inline void +eina_rwlock_free(Eina_RWLock *mutex) +{ + return eina_lock_free(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_take_read(Eina_RWLock *mutex) +{ + return eina_lock_take(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_take_write(Eina_RWLock *mutex) +{ + return eina_lock_take(mutex); +} + +static inline Eina_Lock_Result +eina_rwlock_release(Eina_RWLock *mutex) +{ + return eina_lock_release(mutex); +} + +static inline Eina_Bool +eina_tls_new(Eina_TLS *key) +{ + if (TlsAlloc() == TLS_OUT_OF_INDEXES) + return EINA_FALSE; + return EINA_TRUE; +} + +static inline void +eina_tls_free(Eina_TLS key) +{ + TlsFree(key); +} + +static inline void * +eina_tls_get(Eina_TLS key) +{ + return (void*)TlsGetValue(key); +} + +static inline Eina_Bool +eina_tls_set(Eina_TLS key, const void *data) +{ + if (TlsSetValue(key, (LPVOID)data) == 0) + return EINA_FALSE; + return EINA_TRUE; +} + + + +#endif diff --git a/libraries/eina/src/include/eina_inline_log.x b/libraries/eina/src/include/eina_inline_log.x new file mode 100644 index 0000000..4cdd7d8 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_log.x @@ -0,0 +1,197 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LOG_INLINE_H_ +#define EINA_LOG_INLINE_H_ + +/** + * @addtogroup Eina_Log_Group Log + * + * @{ + */ + +/** + * Checks whenever the given level should be printed out. + * + * This is useful to enable certain blocks of code just when given + * level is to be used. + * + * @code + * #include + * + * void my_func(void *data) + * { + * if (eina_log_level_check(EINA_LOG_LEVEL_WARN)) + * expensive_debugging_code(data); + * + * my_func_code(data); + * } + * @endcode + * + * @return #EINA_TRUE if level is equal or smaller than the current global + * logging level. + */ +static inline Eina_Bool +eina_log_level_check(int level) +{ + return eina_log_level_get() <= level; +} + +/** + * Checks whenever the given level should be printed out. + * + * This is useful to enable certain blocks of code just when given + * level is to be used. + * + * @code + * #include + * + * extern int _my_log_dom; + * + * void my_func(void *data) + * { + * if (eina_log_domain_level_check(_my_log_dom, EINA_LOG_LEVEL_WARN)) + * expensive_debugging_code(data); + * + * my_func_code(data); + * } + * @endcode + * + * @return #EINA_TRUE if level is equal or smaller than the current + * domain logging level. + */ +static inline Eina_Bool +eina_log_domain_level_check(int domain, int level) +{ + int dom_level = eina_log_domain_registered_level_get(domain); + if (EINA_UNLIKELY(dom_level == EINA_LOG_LEVEL_UNKNOWN)) + return EINA_FALSE; + return dom_level <= level; +} + +/** + * Function to format the level as a 3 character (+1 null byte) string. + * + * This function converts the given level to a known string name (CRI, + * ERR, WRN, INF or DBG) or a zero-padded 3-character string. In any + * case the last byte will contain a trailing null byte. + * + * If extreme level values are used (greater than 999 and smaller than + * -99), then the value will just consider the less significant + * part. This is so uncommon that users should handle this in their + * code. + * + * @param level what level value to use. + * @param name where to write the actual value. + * + * @return pointer to @p name. + */ +static inline const char * +eina_log_level_name_get(int level, char name[4]) +{ +#define BCPY(A, B, C) \ + do { name[0] = A; name[1] = B; name[2] = C; } while (0) + + if (EINA_UNLIKELY(level < 0)) + { + name[0] = '-'; + name[1] = '0' + (-level / 10) % 10; + name[2] = '0' + (-level % 10); + } + else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) + { + name[0] = '0' + (level / 100) % 10; + name[1] = '0' + (level / 10) % 10; + name[2] = '0' + level % 10; + } + else if (level == 0) + BCPY('C', 'R', 'I'); + else if (level == 1) + BCPY('E', 'R', 'R'); + else if (level == 2) + BCPY('W', 'R', 'N'); + else if (level == 3) + BCPY('I', 'N', 'F'); + else if (level == 4) + BCPY('D', 'B', 'G'); + else + BCPY('?', '?', '?'); + + name[3] = '\0'; + + return name; +} + +/** + * Function to get recommended color value for level. + * + * This function will not check if colors are enabled or not before + * returning the level color. If you desire such check, use + * eina_log_level_color_if_enabled_get(). + * + * @param level what level value to use. + * + * @return pointer to null byte terminated ANSI color string to be + * used in virtual terminals supporting VT100 color codes. + * + * @see eina_log_level_color_if_enabled_get() + */ +static inline const char * +eina_log_level_color_get(int level) +{ + if (level <= 0) + return EINA_COLOR_LIGHTRED; + else if (level == 1) + return EINA_COLOR_RED; + else if (level == 2) + return EINA_COLOR_YELLOW; + else if (level == 3) + return EINA_COLOR_GREEN; + else if (level == 4) + return EINA_COLOR_LIGHTBLUE; + else + return EINA_COLOR_BLUE; +} + +/** + * Function to get recommended color value for level, if colors are + * enabled. + * + * This function will check if colors are enabled or not before + * returning the level color. If colors are disabled, then empty + * string is returned. + * + * @param level what level value to use. + * + * @return pointer to null byte terminated ANSI color string to be + * used in virtual terminals supporting VT100 color codes. If + * colors are disabled, the empty string is returned. + */ +static inline const char * +eina_log_level_color_if_enabled_get(int level) +{ + if (eina_log_color_disable_get()) + return ""; + return eina_log_level_color_get(level); +} + +/** + * @} + */ + +#endif /* EINA_LOG_INLINE_H_ */ diff --git a/libraries/eina/src/include/eina_inline_mempool.x b/libraries/eina/src/include/eina_inline_mempool.x new file mode 100644 index 0000000..a67ec3d --- /dev/null +++ b/libraries/eina/src/include/eina_inline_mempool.x @@ -0,0 +1,127 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_MEMPOOL_X_ +#define EINA_INLINE_MEMPOOL_X_ + +/** + * @addtogroup Eina_Memory_Pool_Group Memory Pool + * + * @{ + */ + +/* Memory Pool */ +typedef struct _Eina_Mempool_Backend_ABI1 Eina_Mempool_Backend_ABI1; +typedef struct _Eina_Mempool_Backend_ABI2 Eina_Mempool_Backend_ABI2; + +struct _Eina_Mempool_Backend +{ + const char *name; + void *(*init)(const char *context, const char *options, va_list args); + void (*free)(void *data, void *element); + void *(*alloc)(void *data, unsigned int size); + void *(*realloc)(void *data, void *element, unsigned int size); + void (*garbage_collect)(void *data); + void (*statistics)(void *data); + void (*shutdown)(void *data); + void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data); +}; + +struct _Eina_Mempool_Backend_ABI1 +{ + const char *name; + void *(*init)(const char *context, const char *options, va_list args); + void (*free)(void *data, void *element); + void *(*alloc)(void *data, unsigned int size); + void *(*realloc)(void *data, void *element, unsigned int size); + void (*garbage_collect)(void *data); + void (*statistics)(void *data); + void (*shutdown)(void *data); +}; + +struct _Eina_Mempool_Backend_ABI2 +{ + void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data); +}; + +struct _Eina_Mempool +{ + Eina_Mempool_Backend_ABI1 backend; + void *backend_data; + Eina_Mempool_Backend_ABI2 *backend2; +}; + +/** + * @brief Re-allocate a amount memory by the given mempool. + * + * @param mp The mempool. + * @param element The element to re-allocate. + * @param size The size in bytes to re-allocate. + * @return The newly re-allocated data. + * + * This function re-allocates @p element with @p size bytes, using the + * mempool @p mp and returns the allocated data. If not used anymore, + * the data must be freed with eina_mempool_free(). No check is done + * on @p mp, so it must be a valid mempool. + */ +static inline void * +eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size) +{ + return mp->backend.realloc(mp->backend_data, element, size); +} + +/** + * @brief Allocate a amount memory by the given mempool. + * + * @param mp The mempool. + * @param size The size in bytes to allocate. + * @return The newly allocated data. + * + * This function allocates @p size bytes, using the mempool @p mp and + * returns the allocated data. If not used anymore, the data must be + * freed with eina_mempool_free(). No check is done on @p mp, so it + * must be a valid mempool. + */ +static inline void * +eina_mempool_malloc(Eina_Mempool *mp, unsigned int size) +{ + return mp->backend.alloc(mp->backend_data, size); +} + +/** + * @brief Free the allocated ressources by the given mempool. + * + * @param mp The mempool. + * @param element The data to free. + * + * This function frees @p element allocated by @p mp. @p element must + * have been obtained by eina_mempool_malloc() or + * eina_mempool_realloc(). No check is done on @p mp, so it must be a + * valid mempool. + */ +static inline void +eina_mempool_free(Eina_Mempool *mp, void *element) +{ + mp->backend.free(mp->backend_data, element); +} + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_inline_rbtree.x b/libraries/eina/src/include/eina_inline_rbtree.x new file mode 100644 index 0000000..954774b --- /dev/null +++ b/libraries/eina/src/include/eina_inline_rbtree.x @@ -0,0 +1,50 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_RBTREE_INLINE_H_ +#define EINA_RBTREE_INLINE_H_ + +/** + * @addtogroup Eina_Rbtree_Group Red-Black tree + * + * @brief These functions provide Red-Black trees management. + * + * @{ + */ + +static 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) +{ + int result; + + while (root) + { + result = cmp(root, key, length, (void*) data); + if (result == 0) return (Eina_Rbtree*) root; + + root = root->son[result < 0 ? 0 : 1]; + } + + return NULL; +} + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_inline_rectangle.x b/libraries/eina/src/include/eina_inline_rectangle.x new file mode 100644 index 0000000..29ad24b --- /dev/null +++ b/libraries/eina/src/include/eina_inline_rectangle.x @@ -0,0 +1,254 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_RECTANGLE_H__ +#define EINA_INLINE_RECTANGLE_H__ + +/** + * @addtogroup Eina_Rectangle_Group Rectangle + * + * @brief These functions provide rectangle management. + * + * @{ + */ + +/** + * @brief Check if the given spans intersect. + * + * @param c1 The column of the first span. + * @param l1 The length of the first span. + * @param c2 The column of the second span. + * @param l2 The length of the second span. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if the given spans intersect, + * #EINA_FALSE otherwise. + */ +static inline int +eina_spans_intersect(int c1, int l1, int c2, int l2) +{ + return (!(((c2 + l2) <= c1) || (c2 >= (c1 + l1)))); +} + +/** + * @brief Check if the given rectangle is empty. + * + * @param r The rectangle to check. + * @return #EINA_TRUE if the rectangle is empty, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p r is empty, #EINA_FALSE + * otherwise. No check is done on @p r, so it must be a valid + * rectangle. + */ +static inline Eina_Bool +eina_rectangle_is_empty(const Eina_Rectangle *r) +{ + return ((r->w < 1) || (r->h < 1)) ? EINA_TRUE : EINA_FALSE; +} + +/** + * @brief Set the coordinates and size of the given rectangle. + * + * @param r The rectangle. + * @param x The top-left x coordinate of the rectangle. + * @param y The top-left y coordinate of the rectangle. + * @param w The width of the rectangle. + * @param h The height of the rectangle. + * + * This function sets its top-left x coordinate to @p x, its top-left + * y coordinate to @p y, its width to @p w and its height to @p h. No + * check is done on @p r, so it must be a valid rectangle. + */ +static inline void +eina_rectangle_coords_from(Eina_Rectangle *r, int x, int y, int w, int h) +{ + r->x = x; + r->y = y; + r->w = w; + r->h = h; +} + +/** + * @brief Check if the given rectangles intersect. + * + * @param r1 The first rectangle. + * @param r2 The second rectangle. + * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p r1 and @p r2 intersect, + * #EINA_FALSE otherwise. No check is done on @p r1 and @p r2, so they + * must be valid rectangles. + */ +static inline Eina_Bool +eina_rectangles_intersect(const Eina_Rectangle *r1, const Eina_Rectangle *r2) +{ + 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; +} + +/** + * @brief Check if the given x-coordinate is in the rectangle . + * + * @param r The rectangle. + * @param x The x coordinate. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p x is in @p r with respect to + * the horizontal direction, #EINA_FALSE otherwise. No check is done + * on @p r, so it must be a valid rectangle. + */ +static inline Eina_Bool +eina_rectangle_xcoord_inside(const Eina_Rectangle *r, int x) +{ + return ((x >= r->x) && (x < (r->x + r->w))) ? EINA_TRUE : EINA_FALSE; +} + +/** + * @brief Check if the given y-coordinate is in the rectangle . + * + * @param r The rectangle. + * @param y The y coordinate. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p y is in @p r with respect to + * the vertical direction, #EINA_FALSE otherwise. No check is done + * on @p r, so it must be a valid rectangle. + */ +static inline Eina_Bool +eina_rectangle_ycoord_inside(const Eina_Rectangle *r, int y) +{ + return ((y >= r->y) && (y < (r->y + r->h))) ? EINA_TRUE : EINA_FALSE; +} + +/** + * @brief Check if the given point is in the rectangle . + * + * @param r The rectangle. + * @param x The x coordinate of the point. + * @param y The y coordinate of the point. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if the point of coordinate (@p x, + * @p y) is in @p r, #EINA_FALSE otherwise. No check is done on @p r, + * so it must be a valid rectangle. + */ +static inline Eina_Bool +eina_rectangle_coords_inside(const Eina_Rectangle *r, int x, int y) +{ + return (eina_rectangle_xcoord_inside(r, x) && eina_rectangle_ycoord_inside(r, y)) ? EINA_TRUE : EINA_FALSE; +} + +/** + * @brief Get the union of two rectangles. + * + * @param dst The first rectangle. + * @param src The second rectangle. + * + * This function get the union of the rectangles @p dst and @p src. The + * result is stored in @p dst. No check is done on @p dst or @p src, + * so they must be valid rectangles. + */ +static inline void +eina_rectangle_union(Eina_Rectangle *dst, const Eina_Rectangle *src) +{ + /* left */ + if (dst->x > src->x) + { + dst->w += dst->x - src->x; + dst->x = src->x; + } + /* right */ + if ((dst->x + dst->w) < (src->x + src->w)) + dst->w = src->x + src->w; + /* top */ + if (dst->y > src->y) + { + dst->h += dst->y - src->y; + dst->y = src->y; + } + /* bottom */ + if ((dst->y + dst->h) < (src->y + src->h)) + dst->h = src->y + src->h; +} + +/** + * @brief Get the intersection of two rectangles. + * + * @param dst The first rectangle. + * @param src The second rectangle. + * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE + * otherwise. + * + * This function get the intersection of the rectangles @p dst and + * @p src. The result is stored in @p dst. No check is done on @p dst + * or @p src, so they must be valid rectangles. + */ +static inline Eina_Bool +eina_rectangle_intersection(Eina_Rectangle *dst, const Eina_Rectangle *src) +{ + if (!(eina_rectangles_intersect(dst, src))) + return EINA_FALSE; + + /* left */ + if (dst->x < src->x) + { + dst->w += dst->x - src->x; + dst->x = src->x; + if (dst->w < 0) + dst->w = 0; + } + /* right */ + if ((dst->x + dst->w) > (src->x + src->w)) + dst->w = src->x + src->w - dst->x; + /* top */ + if (dst->y < src->y) + { + dst->h += dst->y - src->y; + dst->y = src->y; + if (dst->h < 0) + dst->h = 0; + } + /* bottom */ + if ((dst->y + dst->h) > (src->y + src->h)) + dst->h = src->y + src->h - dst->y; + + return EINA_TRUE; +} + +static inline void +eina_rectangle_rescale_in(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) +{ + res->x = in->x - out->x; + res->y = in->y - out->y; + res->w = in->w; + res->h = in->h; +} + +static inline void +eina_rectangle_rescale_out(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) +{ + res->x = out->x + in->x; + res->y = out->y + in->y; + res->w = out->w; + res->h = out->h; +} + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_inline_str.x b/libraries/eina/src/include/eina_inline_str.x new file mode 100644 index 0000000..2daeb85 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_str.x @@ -0,0 +1,76 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_STR_INLINE_H_ +#define EINA_STR_INLINE_H_ + +/** + * @addtogroup Eina_String_Group String + * + * @{ + */ + +/** + * @brief Count up to a given amount of bytes of the given string. + * + * @param str The string pointer. + * @param maxlen The maximum length to allow. + * @return the string size or (size_t)-1 if greater than @a maxlen. + * + * This function returns the size of @p str, up to @p maxlen + * characters. It avoid needless iterations after that size. @p str + * must be a valid pointer and MUST not be @c NULL, otherwise this + * function will crash. This function returns the string size, or + * (size_t)-1 if the size is greater than @a maxlen. + */ +static inline size_t +eina_strlen_bounded(const char *str, size_t maxlen) +{ + const char *itr, *str_maxend = str + maxlen; + for (itr = str; *itr != '\0'; itr++) + if (itr == str_maxend) return (size_t)-1; + return itr - str; +} + +/** + * @brief Join two strings of known length. + * + * @param dst The buffer to store the result. + * @param size Size (in byte) of the buffer. + * @param sep The separator character to use. + * @param a First string to use, before @p sep. + * @param b Second string to use, after @p sep. + * @return The number of characters printed. + * + * This function is similar to eina_str_join_len(), but will compute + * the length of @p a and @p b using strlen(). + * + * @see eina_str_join_len() + * @see eina_str_join_static() + */ +static inline size_t +eina_str_join(char *dst, size_t size, char sep, const char *a, const char *b) +{ + return eina_str_join_len(dst, size, sep, a, strlen(a), b, strlen(b)); +} + +/** + * @} + */ + +#endif /* EINA_STR_INLINE_H_ */ diff --git a/libraries/eina/src/include/eina_inline_stringshare.x b/libraries/eina/src/include/eina_inline_stringshare.x new file mode 100644 index 0000000..bfd7677 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_stringshare.x @@ -0,0 +1,91 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_STRINGSHARE_INLINE_H_ +#define EINA_STRINGSHARE_INLINE_H_ + +#include +#include "eina_stringshare.h" +/** + * @addtogroup Eina_Stringshare_Group Stringshare + * + * @{ + */ + +/** + * Replace the previously stringshared pointer with new content. + * + * The string pointed by @a p_str should be previously stringshared or + * @c NULL and it will be eina_stringshare_del(). The new string will + * be passed to eina_stringshare_add() and then assigned to @c *p_str. + * + * @param p_str pointer to the stringhare to be replaced. Must not be + * @c NULL, but @c *p_str may be @c NULL as it is a valid + * stringshare handle. + * @param news new string to be stringshared, may be @c NULL. + * + * @return #EINA_TRUE if the strings were different and thus replaced, + * #EINA_FALSE if the strings were the same after shared. + */ +static inline Eina_Bool +eina_stringshare_replace(const char **p_str, const char *news) +{ + if (*p_str == news) return EINA_FALSE; + + news = eina_stringshare_add(news); + eina_stringshare_del(*p_str); + if (*p_str == news) + return EINA_FALSE; + *p_str = news; + return EINA_TRUE; +} + +/** + * Replace the previously stringshared pointer with a new content. + * + * The string pointed by @a p_str should be previously stringshared or + * @c NULL and it will be eina_stringshare_del(). The new string will + * be passed to eina_stringshare_add_length() and then assigned to @c *p_str. + * + * @param p_str pointer to the stringhare to be replaced. Must not be + * @c NULL, but @c *p_str may be @c NULL as it is a valid + * stringshare handle. + * @param news new string to be stringshared, may be @c NULL. + * @param slen The string size (<= strlen(str)). + * + * @return #EINA_TRUE if the strings were different and thus replaced, + * #EINA_FALSE if the strings were the same after shared. + */ +static inline Eina_Bool +eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) +{ + if (*p_str == news) return EINA_FALSE; + + news = eina_stringshare_add_length(news, slen); + eina_stringshare_del(*p_str); + if (*p_str == news) + return EINA_FALSE; + *p_str = news; + return EINA_TRUE; +} + +/** + * @} + */ + +#endif /* EINA_STRINGSHARE_INLINE_H_ */ diff --git a/libraries/eina/src/include/eina_inline_tiler.x b/libraries/eina/src/include/eina_inline_tiler.x new file mode 100644 index 0000000..2a8b205 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_tiler.x @@ -0,0 +1,151 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2009 Rafael Antognolli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_TILER_INLINE_H_ +#define EINA_TILER_INLINE_H_ + +#include "eina_safety_checks.h" + +/** + * @cond LOCAL + * This struct should not be accessed directly, it is used by + * eina_tile_grid_slicer functions to maintain context and fill "info" + * member with correct values for given iteration. + */ +struct _Eina_Tile_Grid_Slicer +{ + unsigned long col1, col2, row1, row2; // initial and final col,row + int tile_w, tile_h; // tile width, height + int x_rel, y_rel; // starting x,y coordinates of the first col,row + int w1_rel, h1_rel; // width,height of the first col,row + int w2_rel, h2_rel; // width,height of the last col,row + struct Eina_Tile_Grid_Info info; // info about the current tile + Eina_Bool first; +}; + +/** + * @endcond + */ + +static inline Eina_Bool +eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0); + + if (slc->first) + { + slc->first = 0; + *rect = &slc->info; + return EINA_TRUE; + } + + slc->info.col++; + + if (slc->info.col > slc->col2) + { + slc->info.row++; + if (slc->info.row > slc->row2) + return EINA_FALSE; + else if (slc->info.row < slc->row2) + slc->info.rect.h = slc->tile_h; + else + slc->info.rect.h = slc->h2_rel; + slc->info.rect.y = 0; + slc->info.col = slc->col1; + slc->info.rect.x = slc->x_rel; + slc->info.rect.w = slc->w1_rel; + } + else + { + slc->info.rect.x = 0; + if (slc->info.col < slc->col2) + slc->info.rect.w = slc->tile_w; + else + slc->info.rect.w = slc->w2_rel; + } + + if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h) + slc->info.full = EINA_TRUE; + else + slc->info.full = EINA_FALSE; + + *rect = &slc->info; + + return EINA_TRUE; +} + +static 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) +{ + int tx1, tx2, ty1, ty2; + + EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0); + + tx1 = x; + ty1 = y; + tx2 = x + w - 1; + ty2 = y + h - 1; + + if (x < 0 || y < 0 || w <= 0 || h <= 0 || tile_w <= 0 || tile_h <= 0) + { + slc->first = 0; + slc->col1 = slc->row1 = 0; + slc->col2 = slc->row2 = 0; + slc->info.col = slc->col1; + slc->info.row = slc->row1; + return EINA_TRUE; + } + + slc->col1 = tx1 / tile_w; + slc->row1 = ty1 / tile_h; + slc->col2 = (tx2 - 0) / tile_w; + slc->row2 = (ty2 - 0) / tile_h; + slc->x_rel = tx1 % tile_w; + slc->y_rel = ty1 % tile_h; + slc->w1_rel = tile_w - slc->x_rel; + slc->h1_rel = tile_h - slc->y_rel; + slc->w2_rel = tx2 % tile_w + 1; + slc->h2_rel = ty2 % tile_h + 1; + + slc->tile_w = tile_w; + slc->tile_h = tile_h; + + slc->first = 1; + slc->info.col = slc->col1; + slc->info.row = slc->row1; + slc->info.rect.x = slc->x_rel; + slc->info.rect.y = slc->y_rel; + + if (slc->info.col == slc->col2) + slc->w1_rel = slc->w2_rel - slc->x_rel; + + if (slc->info.row == slc->row2) + slc->h1_rel = slc->h2_rel - slc->y_rel; + + slc->info.rect.w = slc->w1_rel; + slc->info.rect.h = slc->h1_rel; + + if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h) + slc->info.full = EINA_TRUE; + else + slc->info.full = EINA_FALSE; + + return EINA_TRUE; +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_trash.x b/libraries/eina/src/include/eina_inline_trash.x new file mode 100644 index 0000000..4a50611 --- /dev/null +++ b/libraries/eina/src/include/eina_inline_trash.x @@ -0,0 +1,90 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLINE_TRASH_X__ +#define EINA_INLINE_TRASH_X__ + +/** + * @brief Initialize a trash before using it. + * + * @param trash The trash. + * + * This function just set to zero the trash to correctly + * initialize it. + * + * @note You can just set *trash to NULL and you will have + * the same result. + */ +static inline void +eina_trash_init(Eina_Trash **trash) +{ + *trash = NULL; +} + +/** + * @brief Push an unused pointer in the trash instead of freeing it. + * + * @param trash A pointer to an Eina_Trash. + * @param data An unused pointer big enougth to put a (void*). + * + * Instead of freeing a pointer and put pressure on malloc/free + * you can push it in a trash for a later use. This function just + * provide a fast way to push a now unused pointer into a trash. + * + * @note Do never use the pointer after insertion or bad things will + * happens. + * + * @note This trash will not resize, nor do anything with the size of + * the region pointed by @p data, so it's your duty to manage the size. + */ +static inline void +eina_trash_push(Eina_Trash **trash, void *data) +{ + Eina_Trash *tmp; + + tmp = (Eina_Trash *)data; + tmp->next = *trash; + *trash = tmp; +} + +/** + * @brief Pop an available pointer from the trash if possible. + * + * @param trash A pointer to an Eina_Trash. + * + * Instead of calling malloc, and putting pressure on malloc/free + * you can recycle the content of the trash, if it's not empty. + * + * @note This trash will not resize, nor do anything with the size of + * the region pointed by pointer inside the trash, so it's your duty + * to manage the size of the returned pointer. + */ +static inline void* +eina_trash_pop(Eina_Trash **trash) +{ + void *tmp; + + tmp = *trash; + + if (*trash) + *trash = (*trash)->next; + + return tmp; +} + +#endif diff --git a/libraries/eina/src/include/eina_inline_ustringshare.x b/libraries/eina/src/include/eina_inline_ustringshare.x new file mode 100644 index 0000000..ace6fdc --- /dev/null +++ b/libraries/eina/src/include/eina_inline_ustringshare.x @@ -0,0 +1,93 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri + Tom Hacohen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_USTRINGSHARE_INLINE_H_ +#define EINA_USTRINGSHARE_INLINE_H_ + +#include "eina_unicode.h" +#include "eina_ustringshare.h" + +/** + * @addtogroup Eina_UStringshare_Group Unicode Stringshare + * + * @{ + */ + +/** + * Replace the previously stringshared pointer with new content. + * + * The string pointed by @a p_str should be previously stringshared or + * @c NULL and it will be eina_ustringshare_del(). The new string will + * be passed to eina_ustringshare_add() and then assigned to @c *p_str. + * + * @param p_str pointer to the stringhare to be replaced. Must not be + * @c NULL, but @c *p_str may be @c NULL as it is a valid + * stringshare handle. + * @param news new string to be stringshared, may be @c NULL. + * + * @return #EINA_TRUE if the strings were different and thus replaced, + * #EINA_FALSE if the strings were the same after shared. + */ +static inline Eina_Bool +eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news) +{ + if (*p_str == news) return EINA_FALSE; + + news = eina_ustringshare_add(news); + eina_ustringshare_del(*p_str); + if (*p_str == news) + return EINA_FALSE; + *p_str = news; + return EINA_TRUE; +} + +/** + * Replace the previously stringshared pointer with a new content. + * + * The string pointed by @a p_str should be previously stringshared or + * @c NULL and it will be eina_ustringshare_del(). The new string will + * be passed to eina_ustringshare_add_length() and then assigned to @c *p_str. + * + * @param p_str pointer to the stringhare to be replaced. Must not be + * @c NULL, but @c *p_str may be @c NULL as it is a valid + * stringshare handle. + * @param news new string to be stringshared, may be @c NULL. + * @param slen The string size (<= strlen(str)). + * + * @return #EINA_TRUE if the strings were different and thus replaced, + * #EINA_FALSE if the strings were the same after shared. + */ +static inline Eina_Bool +eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen) +{ + if (*p_str == news) return EINA_FALSE; + + news = eina_ustringshare_add_length(news, slen); + eina_ustringshare_del(*p_str); + if (*p_str == news) + return EINA_FALSE; + *p_str = news; + return EINA_TRUE; +} + +/** + * @} + */ + +#endif /* EINA_USTRINGSHARE_INLINE_H_ */ diff --git a/libraries/eina/src/include/eina_inlist.h b/libraries/eina/src/include/eina_inlist.h new file mode 100644 index 0000000..1b3ab27 --- /dev/null +++ b/libraries/eina/src/include/eina_inlist.h @@ -0,0 +1,813 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_INLIST_H_ +#define EINA_INLIST_H_ + +#include "eina_types.h" +#include "eina_iterator.h" +#include "eina_accessor.h" +#include + +/** + * @page inlist_01_example_page Eina_Inlist basic usage + * @dontinclude eina_inlist_01.c + * + * To see the full source for this example, click here: @ref + * eina_inlist_01_c + * + * As explained before, inline lists mean its nodes pointers are part of same + * memory block/blob. This is done by using the macro @ref EINA_INLIST inside the + * data structure that will be used: + * + * @skip struct + * @until }; + * + * The resulting node representing this struct can be exemplified by the + * following picture: + * + * @image html eina_inlist-node_eg1-my-struct.png + * @image rtf eina_inlist-node_eg1-my-struct.png + * @image latex eina_inlist-node_eg1-my-struct.eps + * + * Let's define a comparison function that will be used later during the + * sorting of the list: + * + * @skip int + * @until } + * + * The @ref Eina_Inlist can be used exactly the same way as @ref Eina_List when + * appending, prepending and removing items. But since we already have the node + * pointers inside the structure, they need to be retrieved with the macro @ref + * EINA_INLIST_GET : + * + * @skip malloc + * @until append + * + * Notice that @ref eina_inlist_append always receives the head of the list as + * first argument, and its return value should be used as the list pointer + * (head): + * + * @skip malloc + * @until append + * + * After appending 3 items, the list now should look similar to this: + * + * @image html eina_inlist-node_eg1-inlist.png + * @image rtf eina_inlist-node_eg1-inlist.png + * @image latex eina_inlist-node_eg1-inlist.eps width=\textwidth + * + * The macro @ref EINA_INLIST_FOREACH can be used to iterate over the list: + * + * @skip printf + * @until cur->a + * + * @ref eina_inlist_promote(), @ref eina_inlist_demote(), @ref + * eina_inlist_append_relative() and similar functions all work in the same way + * as the @ref Eina_List : + * + * @skip eina_inlist_promote + * @until eina_inlist_demote + * + * Now let's use the @c sort_cb function declared above to sort our list: + * + * @skipline eina_inlist_sort + * + * Removing an element from the inlist is also similar to @ref Eina_List : + * + * @skip inlist_remove + * @until free + * + * Another way of walking through the inlist. + * + * @skip for + * @until } + * + * Notice that in the previous piece of code, since we only have the pointers to + * the inlist nodes, we have to use the @ref EINA_INLIST_CONTAINER_GET macro + * that will return the pointer to the entire structure. Of course, in this case + * it is the same as the list pointer, since the @ref EINA_INLIST macro was used + * in the beginning of the structure. + * + * Now to finish this example, lets delete this list: + * + * @skip while + * @until } + */ + +/** + * @page inlist_02_example_page Eina_Inlist advanced usage - lists and inlists + * @dontinclude eina_inlist_02.c + * + * This example describes the usage of @ref Eina_Inlist mixed with @ref + * Eina_List . We create and add elements to an inlist, and the even members + * are also added to a normal list. Later we remove the elements divisible by 3 + * from this normal list. + * + * The struct that is going to be used is the same used in @ref + * inlist_01_example_page , since we still need the @ref EINA_INLIST macro to + * declare the inlist node info: + * + * @skip struct + * @until }; + * + * The resulting node representing this struct can be exemplified by the + * following picture: + * + * @image html eina_inlist-node_eg2-my-struct.png + * @image rtf eina_inlist-node_eg2-my-struct.png + * @image latex eina_inlist-node_eg2-my-struct.eps + * + * Now we need some pointers and auxiliar variables that will help us iterate on + * the lists: + * + * @skip struct + * @until l_next; + * + * Allocating 100 elements and putting them into an inlist, and the even + * elements also go to the normal list: + * + * @skip for + * @until } + * + * After this point, what we have are two distinct lists that share some + * elements. The first list (inlist) is defined by the pointers inside the + * elements data structure, while the second list (normal list) has its own node + * data structure that is kept outside of the elements. + * + * The two lists, sharing some elements, can be represented by the following + * picture: + * + * @htmlonly + * + * @endhtmlonly + * @image rtf eina_inlist-node_eg2-list-inlist.png + * @image latex eina_inlist-node_eg2-list-inlist.eps width=\textwidth + * + * Accessing both lists is done normally, as if they didn't have any elements in + * common: + * + * @skip printf + * @until eina_list_count + * + * We can remove elements from the normal list, but we just don't free them + * because they are still stored in the inlist: + * + * @skip EINA_LIST_FOREACH_SAFE + * @until eina_list_count + * + * To finish this example, we want to free both lists, we can't just free all + * elements on the second list (normal list) because they are still being used + * in the inlist. So we first discard the normal list without freeing its + * elements, then we free all elements in the inlist (that contains all elements + * allocated until now): + * + * @skip eina_list_free + * @until } + * + * Here is the full source code for this example: @ref eina_inlist_02_c + */ + +/** + * @page inlist_03_example_page Eina_Inlist advanced usage - multi-inlists + * @dontinclude eina_inlist_03.c + * + * This example describes the usage of multiple inlists storing the same data. + * It means that some data may appear in more than one inlist at the same time. + * We will demonstrate this by creating an inlist with 100 numbers, and adding + * the odd numbers to the second inlist, then remove the numbers divisible by 3 + * from the second list. + * + * To accomplish this, it is necessary to have two inlist pointers in the struct + * that is going to be stored. We are using the default inlist member @ref + * EINA_INLIST, and adding another member @c even that is of type @ref + * Eina_Inlist too: + * + * @skip struct + * @until }; + * + * The representation for this struct is: + * + * @image html eina_inlist-node_eg3-my-struct.png + * @image rtf eina_inlist-node_eg3-my-struct.png + * @image latex eina_inlist-node_eg3-my-struct.eps + * + * And we will define some convenience macros that are equivalent to @ref + * EINA_INLIST_GET and @ref EINA_INLIST_CONTAINER_GET : + * + * @skip define + * @until offsetof + * + * We need two pointers, one for each list, and a pointer that will be used as + * an iterator: + * + * @skipline Eina_Inlist + * + * Now we allocate and add to the first list every number from 0 to 99. These + * nodes data also have the @ref Eina_Inlist node info for the second list (@c + * even). We will use them to add just the even numbers to the second list, the + * @c list_even. Also notice that we are using our macro @c EVEN_INLIST_GET to + * get the pointer to the even list node info: + * + * @skip for + * @until } + * + * And the resulting lists will be as follow: + * + * @htmlonly + * + * @endhtmlonly + * @image rtf eina_inlist-node_eg3-two-inlists.png + * @image latex eina_inlist-node_eg3-two-inlists.eps width=\textwidth + * + * For the first list, we can use the macro @ref EINA_INLIST_FOREACH to iterate + * over its elements: + * + * @skip FOREACH + * @until printf + * + * But for the second list, we have to do it manually. Of course we could create + * a similar macro to @ref EINA_INLIST_FOREACH, but since this macro is more + * complex than the other two and we are using it only once, it's better to just + * do it manually: + * + * @skip for + * @until } + * + * Let's just check that the two lists have the expected number of elements: + * + * @skip list count + * @until list_even count + * + * And removing the numbers divisible by 3 only from the second list: + * + * @skip itr + * @until list_even count + * + * Now that we don't need the two lists anymore, we can just free all the items. + * Since all of the allocated data was put into the first list, and both lists + * are made of pointers to inside the data structures, we can free only the + * first list (that contains all the elements) and the second list will be gone + * with it: + * + * @skip while + * @until free + * + * To see the full source code for this example, click here: @ref + * eina_inlist_03_c + * + */ + +/** + * @page eina_inlist_01_c eina_inlist_01.c Eina_Inlist basic usage source + * @include eina_inlist_01.c + */ + +/** + * @page eina_inlist_02_c eina_inlist_02.c Eina_Inlist advanced usage - lists and inlists source + * @include eina_inlist_02.c + */ + +/** + * @page eina_inlist_03_c eina_inlist_03.c Eina_Inlist advanced usage - multi-inlists source + * @include eina_inlist_03.c + */ + +/** + * @addtogroup Eina_Inline_List_Group Inline List + * + * @brief These functions provide inline list management. + * + * Inline lists mean its nodes pointers are part of same memory as + * data. This has the benefit of fragmenting memory less and avoiding + * @c node->data indirection, but has the drawback of higher cost for some + * common operations like count and sort. + * + * It is possible to have inlist nodes to be part of regular lists, created with + * @ref eina_list_append() or @ref eina_list_prepend(). It's also possible to + * have a structure with two inlist pointers, thus be part of two different + * inlists at the same time, but the current convenience macros provided won't + * work for both of them. Consult @ref inlist_advanced for more info. + * + * Inline lists have their purposes, but if you don't know what those purposes are, go with + * regular lists instead. + * + * Tip: When using inlists in more than one place (that is, passing them around + * functions or keeping a pointer to them in a structure) it's more correct + * to keep a pointer to the first container, and not a pointer to the first + * inlist item (mostly they are the same, but that's not always correct). + * This lets the compiler to do type checking and let the programmer know + * exactly what type this list is. + * + * A simple example demonstrating the basic usage of an inlist can be found + * here: @ref inlist_01_example_page + * + * @section inlist_algo Algorithm + * + * The basic structure can be represented by the following picture: + * + * @image html eina_inlist-node.png + * @image rtf eina_inlist-node.png + * @image latex eina_inlist-node.eps + * + * One data structure will also have the node information, with three pointers: + * @a prev, @a next and @a last. The @a last pointer is just valid for the first + * element (the list head), otherwise each insertion in the list would have to + * be done updating every node with the correct pointer. This means that it's + * always very important to keep a pointer to the first element of the list, + * since it is the only one that has the correct information to allow a proper + * O(1) append to the list. + * + * @section inlist_perf Performance + * + * Due to the nature of the inlist, there's no accounting information, and no + * easy access to the last element from each list node. This means that @ref + * eina_inlist_count() is order-N, while @ref eina_list_count() is order-1 (constant + * time). + * + * For the same reasons, @ref eina_inlist_sort() is slower than @ref + * eina_list_sort() . If the list is intended to have faster access, be + * sorted/merged frequently, or needs to have other complex operations, consider + * using @ref Eina_List instead. + * + * @section inlist_advanced Advanced Usage + * + * The basic usage considers a struct that will have the user data, and also + * have an inlist node information (prev, next and last pointers) created with + * @ref EINA_INLIST during the struct declaration. This allows one to use the + * convenience macros @ref EINA_INLIST_GET(), @ref EINA_INLIST_CONTAINER_GET(), + * @ref EINA_INLIST_FOREACH() and so. This happens because the @ref EINA_INLIST + * macro declares a struct member with the name @a __inlist, and all the other + * macros assume that this struct member has this name. + * + * It may be the case that someone needs to have some inlist nodes added to a + * @ref Eina_List too. If this happens, the inlist nodes can be added to the + * @ref Eina_List without any problems. This example demonstrates this case: + * @ref inlist_02_example_page + * + * It's also possible to have some data that is part of two different inlists. + * If this is the case, then it won't be possible to use the convenience macros + * to both of the lists. It will be necessary to create a new set of macros that + * will allow access to the second list node info. An example for this usage can + * be found here: + * @ref inlist_03_example_page + * + * List of examples: + * @li @ref inlist_01_example_page + * @li @ref inlist_02_example_page + * @li @ref inlist_03_example_page + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Inline_List_Group Inline List + * + * @{ + */ + +/** + * @typedef Eina_Inlist + * Inlined list type. + */ +typedef struct _Eina_Inlist Eina_Inlist; + +/** + * @typedef Eina_Inlist_Sorted_State + * @since 1.1.0 + * State of sorted Eina_Inlist + */ +typedef struct _Eina_Inlist_Sorted_State Eina_Inlist_Sorted_State; + +/** + * @struct _Eina_Inlist + * Inlined list type. + */ +struct _Eina_Inlist +{ + Eina_Inlist *next; /**< next node */ + Eina_Inlist *prev; /**< previous node */ + Eina_Inlist *last; /**< last node */ +}; +/** Used for declaring an inlist member in a struct */ +#define EINA_INLIST Eina_Inlist __in_list +/** Utility macro to get the inlist object of a struct */ +#define EINA_INLIST_GET(Inlist) (& ((Inlist)->__in_list)) +/** Utility macro to get the container object of an inlist */ +#define EINA_INLIST_CONTAINER_GET(ptr, \ + type) ((type *)((char *)ptr - \ + offsetof(type, __in_list))) + + +/** + * Add a new node to end of a list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a new_l is considered to be in no list. If it was in another + * list before, eina_inlist_remove() it before adding. No + * check of @a new_l prev and next pointers is done, so it's safe + * to have them uninitialized. + * + * @param list existing list head or NULL to create a new list. + * @param new_l new list node, must not be NULL. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist *in_list, + Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * Add a new node to beginning of list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a new_l is considered to be in no list. If it was in another + * list before, eina_inlist_remove() it before adding. No + * check of @a new_l prev and next pointers is done, so it's safe + * to have them uninitialized. + * + * @param list existing list head or NULL to create a new list. + * @param new_l new list node, must not be NULL. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist *in_list, + Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * Add a new node after the given relative item in list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a new_l is considered to be in no list. If it was in another + * list before, eina_inlist_remove() it before adding. No + * check of @a new_l prev and next pointers is done, so it's safe + * to have them uninitialized. + * + * @note @a relative is considered to be inside @a list, no checks are + * done to confirm that and giving nodes from different lists + * will lead to problems. Giving NULL @a relative is the same as + * eina_list_append(). + * + * @param list existing list head or NULL to create a new list. + * @param new_l new list node, must not be NULL. + * @param relative reference node, @a new_l will be added after it. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist *in_list, + Eina_Inlist *in_item, + Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * Add a new node before the given relative item in list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a new_l is considered to be in no list. If it was in another + * list before, eina_inlist_remove() it before adding. No + * check of @a new_l prev and next pointers is done, so it's safe + * to have them uninitialized. + * + * @note @a relative is considered to be inside @a list, no checks are + * done to confirm that and giving nodes from different lists + * will lead to problems. Giving NULL @a relative is the same as + * eina_list_prepend(). + * + * @param list existing list head or NULL to create a new list. + * @param new_l new list node, must not be NULL. + * @param relative reference node, @a new_l will be added before it. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist *in_list, + Eina_Inlist *in_item, + Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * Remove node from list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a item is considered to be inside @a list, no checks are + * done to confirm that and giving nodes from different lists + * will lead to problems, especially if @a item is the head since + * it will be different from @a list and the wrong new head will + * be returned. + * + * @param list existing list head, must not be NULL. + * @param item existing list node, must not be NULL. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist *in_list, + Eina_Inlist *in_item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * Find given node in list, returns itself if found, NULL if not. + * + * @warning this is an expensive call and has O(n) cost, possibly + * walking the whole list. + * + * @param list existing list to search @a item in, must not be NULL. + * @param item what to search for, must not be NULL. + * + * @return @a item if found, NULL if not. + */ +EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist *in_list, + Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * Move existing node to beginning of list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a item is considered to be inside @a list. No checks are + * done to confirm this, and giving nodes from different lists + * will lead to problems. + * + * @param list existing list head or NULL to create a new list. + * @param item list node to move to beginning (head), must not be NULL. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist *list, + Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * Move existing node to end of list. + * + * @note this code is meant to be fast: appends are O(1) and do not + * walk @a list. + * + * @note @a item is considered to be inside @a list. No checks are + * done to confirm this, and giving nodes from different lists + * will lead to problems. + * + * @param list existing list head or NULL to create a new list. + * @param item list node to move to end (tail), must not be NULL. + * + * @return the new list head. Use it and not @a list anymore. + */ +EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist *list, + Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Get the count of the number of items in a list. + * + * @param list The list whose count to return. + * @return The number of members in the list. + * + * This function returns how many members @p list contains. If the + * list is @c NULL, 0 is returned. + * + * @warning This is an order-N operation and so the time will depend + * on the number of elements on the list, so, it might become + * slow for big lists! + */ +EAPI unsigned int eina_inlist_count(const Eina_Inlist *list) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Returns a new iterator associated to @a list. + * + * @param list The list. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * list. If @p list is @c NULL or the count member of @p list is less + * or equal than 0, this function still returns a valid iterator that + * will always return false on eina_iterator_next(), thus keeping API + * sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the list structure changes then the iterator becomes + * invalid, and if you add or remove nodes iterator + * behavior is undefined, and your program may crash! + */ +EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returns a new accessor associated to a list. + * + * @param list The list. + * @return A new accessor. + * + * This function returns a newly allocated accessor associated to + * @p list. If @p list is @c NULL or the count member of @p list is + * less or equal than 0, this function returns NULL. If the memory can + * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is + * set. Otherwise, a valid accessor is returned. + */ +EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Insert a new node into a sorted list. + * + * @param list The given linked list, @b must be sorted. + * @param item list node to insert, must not be NULL. + * @param func The function called for the sort. + * @return A list pointer. + * @since 1.1.0 + * + * This function inserts item into a linked list assuming it was + * sorted and the result will be sorted. If @p list is @c NULLL, item + * is returned. On success, a new list pointer that should be + * used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. See eina_error_get(). + * + * @note O(log2(n)) comparisons (calls to @p func) average/worst case + * performance. As said in eina_list_search_sorted_near_list(), + * lists do not have O(1) access time, so walking to the correct node + * can be costly, consider worst case to be almost O(n) pointer + * dereference (list walk). + */ +EAPI 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; + +/** + * @brief Create state with valid data in it. + * + * @return A valid Eina_Inlist_Sorted_State. + * @since 1.1.0 + * + * See eina_inlist_sorted_state_insert() for more information. + */ +EAPI Eina_Inlist_Sorted_State *eina_inlist_sorted_state_new(void); + +/** + * @brief Force an Eina_Inlist_Sorted_State to match the content of a list. + * + * @param state The state to update + * @param list The list to match + * @return The number of item in the actually in the list + * @since 1.1.0 + * + * See eina_inlist_sorted_state_insert() for more information. This function is + * usefull if you didn't use eina_inlist_sorted_state_insert() at some point, but + * still think you have a sorted list. It will only correctly work on a sorted list. + */ +EAPI int eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list); + +/** + * @brief Free an Eina_Inlist_Sorted_State. + * + * @param state The state to destroy + * @since 1.1.0 + * + * See eina_inlist_sorted_state_insert() for more information. + */ +EAPI void eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state); + +/** + * @brief Insert a new node into a sorted list. + * + * @param list The given linked list, @b must be sorted. + * @param item list node to insert, must not be NULL. + * @param func The function called for the sort. + * @param state The current array for initial dichotomic search + * @return A list pointer. + * @since 1.1.0 + * + * This function inserts item into a linked list assuming @p state match + * the exact content order of the list. It use @p state to do a fast + * first step dichotomic search before starting to walk the inlist itself. + * This make this code much faster than eina_inlist_sorted_insert() as it + * doesn't need to walk the list at all. The result is of course a sorted + * list with an updated state.. If @p list is @c NULLL, item + * is returned. On success, a new list pointer that should be + * used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. See eina_error_get(). + * + * @note O(log2(n)) comparisons (calls to @p func) average/worst case + * performance. As said in eina_list_search_sorted_near_list(), + * lists do not have O(1) access time, so walking to the correct node + * can be costly, but this version try to minimize that by making it a + * O(log2(n)) for number small number. After n == 256, it start to add a + * linear cost again. Consider worst case to be almost O(n) pointer + * dereference (list walk). + */ +EAPI Eina_Inlist *eina_inlist_sorted_state_insert(Eina_Inlist *list, + Eina_Inlist *item, + Eina_Compare_Cb func, + Eina_Inlist_Sorted_State *state); +/** + * @brief Sort a list according to the ordering func will return. + * + * @param list The list handle to sort. + * @param func A function pointer that can handle comparing the list data + * nodes. + * @return the new head of list. + * + * This function sorts all the elements of @p list. @p func is used to + * compare two elements of @p list. If @p list or @p func are @c NULL, + * this function returns @c NULL. + * + * @note @b in-place: this will change the given list, so you should + * now point to the new list head that is returned by this function. + * + * @note worst case is O(n * log2(n)) comparisons (calls to func()), + * O(n) comparisons average case. That means that for 1,000,000 list + * elements, sort will usually do 1,000,000 comparisons, but may do up + * to 20,000,000. + * + * Example: + * @code + * typedef struct _Sort_Ex Sort_Ex; + * struct _Sort_Ex + * { + * INLIST; + * const char *text; + * }; + * + * int + * sort_cb(const Inlist *l1, const Inlist *l2) + * { + * const Sort_Ex *x1; + * const Sort_Ex *x2; + * + * x1 = EINA_INLIST_CONTAINER_GET(l1, Sort_Ex); + * x2 = EINA_INLIST_CONTAINER_GET(l2, Sort_Ex); + * + * return(strcmp(x1->text, x2->text)); + * } + * extern Eina_Inlist *list; + * + * list = eina_inlist_sort(list, sort_cb); + * @endcode + */ +EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func); + +/* This two macros are helpers for the _FOREACH ones, don't use them */ +#define _EINA_INLIST_OFFSET(ref) ((char *)&(ref)->__in_list - (char *)(ref)) + +#if !defined(__cplusplus) +#define _EINA_INLIST_CONTAINER(ref, ptr) (void *)((char *)(ptr) - \ + _EINA_INLIST_OFFSET(ref)) +#else +/* + * In C++ we can't assign a "type*" pointer to void* so we rely on GCC's typeof + * operator. + */ +#define _EINA_INLIST_CONTAINER(ref, ptr) (typeof(ref))((char *)(ptr) - \ + _EINA_INLIST_OFFSET(ref)) +#endif + +#define EINA_INLIST_FOREACH(list, l) \ + for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL); l; \ + l = (EINA_INLIST_GET(l)->next ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL)) +#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \ + for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \ + l; \ + l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL) +#define EINA_INLIST_REVERSE_FOREACH(list, l) \ + for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list->last) : NULL); \ + l; l = (EINA_INLIST_GET(l)->prev ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL)) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /*EINA_INLIST_H_*/ diff --git a/libraries/eina/src/include/eina_iterator.h b/libraries/eina/src/include/eina_iterator.h new file mode 100644 index 0000000..1c8e6ce --- /dev/null +++ b/libraries/eina/src/include/eina_iterator.h @@ -0,0 +1,337 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_ITERATOR_H__ +#define EINA_ITERATOR_H__ + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_magic.h" + +/** + * @page eina_iterator_example Eina_Iterator usage + * @dontinclude eina_iterator_01.c + * + * As always when using eina we need to include it: + * @skip #include + * @until Eina.h + * + * Here we a declare an unimpressive @ref Eina_Each_Cb "function" that prints + * some data: + * @until } + * @note Returning EINA_TRUE is important so we don't stop iterating over the + * container. + * + * And here a more interesting function, it uses an iterator to print the + * contents of a container. What's interesting about it is that it doesn't care + * the type of container, it works for anything that can provide an iterator: + * @until } + * + * And on to our main function were we declare some variables and initialize + * eina, nothing too special: + * @until eina_init + * + * Next we populate both an array and a list with our strings, for more details + * see @ref eina_list_01_example and @ref eina_array_01_example: + * @until } + * + * And now we create an array and because the first element of the container + * doesn't interest us we skip it: + * @until iterator_next + * + * Having our iterator now pointing to interesting data we go ahead and print: + * @until print_eina_container + * + * As always once data with a structure we free it, but just because we can we + * do it by asking the iterator for it's container, and then of course free the + * iterator itself: + * @until eina_iterator_free + * + * But so far you're not impressed in @ref eina_array_01_example an array is + * also printed, so now we go to the cool stuff and use an iterator to do same + * stuff to a list: + * @until eina_iterator_free + * @note The only significant diference to the block above is in the + * function used to create the iterator. + * + * And now we free the list and shut eina down: + * @until } + */ + +/** + * @page eina_iterator_01_c Eina_Iterator usage + * @page eina_iterator_01_c Eina_Iterator usage + * + * @include eina_iterator_01.c + * @example eina_iterator_01.c + */ + +/** + * @addtogroup Eina_Iterator_Group Iterator Functions + * + * @brief These functions manage iterators on containers. + * + * These functions allow to access elements of a container in a + * generic way, without knowing which container is used (a bit like + * iterators in the C++ STL). Iterators only allows sequential access + * (that is, from an element to the next one). For random access, see + * @ref Eina_Accessor_Group. + * + * An iterator is created from container data types, so no creation + * function is available here. An iterator is deleted with + * eina_iterator_free(). To get the data and iterate, use + * eina_iterator_next(). To call a function on all the elements of a + * container, use eina_iterator_foreach(). + * + * Here an @ref eina_iterator_example "example" + */ + +/** + * @addtogroup Eina_Content_Access_Group Content Access + * + * @{ + */ + +/** + * @defgroup Eina_Iterator_Group Iterator Functions + * + * @{ + */ + +/** + * @typedef Eina_Iterator + * Abstract type for iterators. + */ +typedef struct _Eina_Iterator Eina_Iterator; + +/** + * @typedef Eina_Iterator_Next_Callback + * Type for a callback that returns the next element in a container. + */ +typedef Eina_Bool (*Eina_Iterator_Next_Callback)(Eina_Iterator *it, void **data); + +/** + * @typedef Eina_Iterator_Get_Container_Callback + * Type for a callback that returns the container. + */ +typedef void *(*Eina_Iterator_Get_Container_Callback)(Eina_Iterator *it); + +/** + * @typedef Eina_Iterator_Free_Callback + * Type for a callback that frees the container. + */ +typedef void (*Eina_Iterator_Free_Callback)(Eina_Iterator *it); + +/** + * @typedef Eina_Iterator_Lock_Callback + * Type for a callback that lock the container. + */ +typedef Eina_Bool (*Eina_Iterator_Lock_Callback)(Eina_Iterator *it); + +/** + * @struct _Eina_Iterator + * structure of an iterator + */ +struct _Eina_Iterator +{ +#define EINA_ITERATOR_VERSION 1 + int version; /**< Version of the Iterator API. */ + + Eina_Iterator_Next_Callback next EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; /**< Callback called when a next element is requested. */ + Eina_Iterator_Get_Container_Callback get_container EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is requested. */ + Eina_Iterator_Free_Callback free EINA_ARG_NONNULL(1); /**< Callback called when the container is freed. */ + + Eina_Iterator_Lock_Callback lock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is locked. */ + Eina_Iterator_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is unlocked. */ + +#define EINA_MAGIC_ITERATOR 0x98761233 + EINA_MAGIC +}; + +/** + * @def FUNC_ITERATOR_NEXT(Function) + * Helper macro to cast @p Function to a Eina_Iterator_Next_Callback. + */ +#define FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function) + +/** + * @def FUNC_ITERATOR_GET_CONTAINER(Function) + * Helper macro to cast @p Function to a Eina_Iterator_Get_Container_Callback. + */ +#define FUNC_ITERATOR_GET_CONTAINER(Function) ((Eina_Iterator_Get_Container_Callback)Function) + +/** + * @def FUNC_ITERATOR_FREE(Function) + * Helper macro to cast @p Function to a Eina_Iterator_Free_Callback. + */ +#define FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function) + +/** + * @def FUNC_ITERATOR_LOCK(Function) + * Helper macro to cast @p Function to a Eina_Iterator_Lock_Callback. + */ +#define FUNC_ITERATOR_LOCK(Function) ((Eina_Iterator_Lock_Callback)Function) + + +/** + * @brief Free an iterator. + * + * @param iterator The iterator to free. + * + * This function frees @p iterator if it is not @c NULL; + */ +EAPI void eina_iterator_free(Eina_Iterator *iterator) EINA_ARG_NONNULL(1); + + +/** + * @brief Return the container of an iterator. + * + * @param iterator The iterator. + * @return The container which created the iterator. + * + * This function returns the container which created @p iterator. If + * @p iterator is @c NULL, this function returns @c NULL. + */ +EAPI void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NONNULL(1) EINA_PURE; + +/** + * @brief Return the value of the current element and go to the next one. + * + * @param iterator The iterator. + * @param data The data of the element. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns the value of the current element pointed by + * @p iterator in @p data, then goes to the next element. If @p + * iterator is @c NULL or if a problem occurred, #EINA_FALSE is + * returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator, + void **data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Iterate over the container and execute a callback on each element. + * + * @param iterator The iterator. + * @param callback The callback called on each iteration. + * @param fdata The data passed to the callback. + * + * This function iterates over the elements pointed by @p iterator, + * beginning from the current element. For Each element, the callback + * @p cb is called with the data @p fdata. If @p iterator is @c NULL, + * the function returns immediately. Also, if @p cb returns @c + * EINA_FALSE, the iteration stops at that point, if @p cb returns @c EINA_TRUE + * the iteration continues. + */ +EAPI void eina_iterator_foreach(Eina_Iterator *iterator, + Eina_Each_Cb callback, + const void *fdata) EINA_ARG_NONNULL(1, 2); + + +/** + * @brief Lock the container of the iterator. + * + * @param iterator The iterator. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * If the container of the @p iterator permits it, it will be locked. When a + * container is locked calling eina_iterator_foreach() on it will return + * immediately. If @p iterator is @c NULL or if a problem occurred, #EINA_FALSE + * is returned, otherwise #EINA_TRUE is returned. If the container isn't + * lockable, it will return EINA_TRUE. + * + * @warning None of the existing eina data structures are lockable. + */ +EAPI Eina_Bool eina_iterator_lock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1); + +/** + * @brief Unlock the container of the iterator. + * + * @param iterator The iterator. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * If the container of the @p iterator permits it and was previously + * locked, it will be unlocked. If @p iterator is @c NULL or if a + * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE + * is returned. If the container is not lockable, it will return + * EINA_TRUE. + * + * @warning None of the existing eina data structures are lockable. + */ +EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1); + +/** + * @def EINA_ITERATOR_FOREACH + * @brief Macro to iterate over all elements easily. + * + * @param itr The iterator to use. + * @param data Where to store * data, must be a pointer support getting + * its address since * eina_iterator_next() requires a pointer + * to pointer! + * + * This macro is a convenient way to use iterators, very similar to + * EINA_LIST_FOREACH(). + * + * This macro can be used for freeing the data of a list, like in the + * following example. It has the same goal as the one documented in + * EINA_LIST_FOREACH(), but using iterators: + * + * @code + * Eina_List *list; + * Eina_Iterator *itr; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings + * + * itr = eina_list_iterator_new(list); + * EINA_ITERATOR_FOREACH(itr, data) + * free(data); + * eina_iterator_free(itr); + * eina_list_free(list); + * @endcode + * + * @note this example is not optimal algorithm to release a list since + * it will walk the list twice, but it serves as an example. For + * optimized version use EINA_LIST_FREE() + * + * @warning The order in which the elements will be traversed depends on the + * underlying container and @b shouldn't be relied upon. + * + * @warning unless explicitly stated in functions returning iterators, + * do not modify the iterated object while you walk it, in this + * example using lists, do not remove list nodes or you might + * crash! This is not a limitiation of iterators themselves, + * rather in the iterators implementations to keep them as simple + * and fast as possible. + */ +#define EINA_ITERATOR_FOREACH(itr, \ + data) while (eina_iterator_next((itr), \ + (void **)(void *)&(data))) + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_lalloc.h b/libraries/eina/src/include/eina_lalloc.h new file mode 100644 index 0000000..dcb8773 --- /dev/null +++ b/libraries/eina/src/include/eina_lalloc.h @@ -0,0 +1,60 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LALLOC_H_ +#define EINA_LALLOC_H_ + +#include "eina_types.h" + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Lalloc_Group Lazy allocator + * + * @{ + */ + +typedef Eina_Bool (*Eina_Lalloc_Alloc)(void *user_data, int num); +#define EINA_LALLOC_ALLOC(function) ((Eina_Lalloc_Alloc)function) +typedef void (*Eina_Lalloc_Free)(void *user_data); +#define EINA_LALLOC_FREE(function) ((Eina_Lalloc_Free)function) + +typedef struct _Eina_Lalloc Eina_Lalloc; + +EAPI Eina_Lalloc *eina_lalloc_new(void *data, + Eina_Lalloc_Alloc alloc_cb, + Eina_Lalloc_Free free_cb, + int num_init) EINA_ARG_NONNULL(2, 3); +EAPI void eina_lalloc_free(Eina_Lalloc *a) EINA_ARG_NONNULL(1); +EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a, + int num) EINA_ARG_NONNULL(1); +EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a) EINA_ARG_NONNULL(1); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_LALLOC_H_ */ diff --git a/libraries/eina/src/include/eina_list.h b/libraries/eina/src/include/eina_list.h new file mode 100644 index 0000000..8a8f25e --- /dev/null +++ b/libraries/eina/src/include/eina_list.h @@ -0,0 +1,1631 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LIST_H_ +#define EINA_LIST_H_ + +#include + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_iterator.h" +#include "eina_accessor.h" +#include "eina_magic.h" + +/** + * @page list_01_example_page Adding elements to Eina_List + * @dontinclude eina_list_01.c + * + * Creating an @ref Eina_List and adding elements to it is very easy and can be + * understood from an example: + * First thing is always to include Eina.h, for this example we also + * include stdio.h so we can use printf. + * @skip #include + * @until Eina.h + * + * Just some boilerplate code, declaring some variable and initializing eina. + * @until eina_init + * Here we add a sequence of elements to our list. By using append we add + * elements to the end of the list, so the list will look like this:@n + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image rtf eina_list_example_01_a.png + * @image latex eina_list_example_01_a.eps width=\textwidth + * @until roslin + * There are a couple of interesting things happening here, first is that we are + * passing a NULL pointer to the first @ref eina_list_append() call, when this + * is done a list is created. The other @b very important detail to notice is + * that the return value is attributed to the @a list variable, this needs to + * be done every time we use a a function that alters the contents of the list. + * + * Now that we have a list we some elements in it we can look at it's contents. + * @until printf + * + * There are many ways of accessing elements in the list, including by it's + * index: + * @until nth + * @note It should be noted that the index starts at 0. + * + * @ref eina_list_append() is not the only way to add elements to a a list. A + * common requirement is to add an element in a specific position this can be + * accomplished using @ref eina_list_append_relative() and + * @ref eina_list_append_relative_list(): + * @until zarek + * First @a "cain" is added after the second element(remember that indexes are + * 0 based) and then we add @a "zarek" after @a "cain". + * + * @ref Eina_List also has prepend analogs to append functions we have used so + * far: + * @until lampkin + * With this additions our list now looks like this:@n + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image rtf eina_list_example_01_b.png + * @image latex eina_list_example_01_b.eps width=\textwidth + * + * Once done using the list it needs to be freed, and since we are done with + * eina that also need to be shutdown: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_list_01_c "eina_list_01.c" file. + */ + +/** + * @page eina_list_01_c Adding elements to Eina_List example + * + * @include eina_list_01.c + * @example eina_list_01.c + */ + +/** + * @page list_02_example_page Sorting Eina_List elements + * @dontinclude eina_list_02.c + * + * If you don't know how to create lists see + * @ref list_01_example_page. + * + * @skip #include + * @until boomer + * This is the code we have already seen to create a list. Now if we need to + * search the list we can do it like this: + * @until return + * + * However if searching the list multiple times it probably is better to sort + * the list since the sorted_search functions are much faster: + * @until return + * + * Once the list is sorted it's not a good idea to use append/prepend functions + * since that would add the element in the wrong place, instead elements should + * be added with @ref eina_list_sorted_insert(): + * @until sorted_insert + * + * A noteworthy use case is adding an element to a list only if it doesn't exist + * already, this can accomplished by searching for the element that is closest + * to what is being added, and if that doesn't match add: + * @until append + * @note @ref eina_list_search_sorted_near_list() will tell you not only the + * nearest node to what was searched for but how it compares to your term, this + * way it is easy to know if you have to add before or after that node. + * + * It is sometimes useful to get a portion of the list as another list, here we + * take every element that comes after "boomer" and split it into "other_list": + * @until split_list + * + * It is also possible to add entire lists of elements using + * @ref eina_list_sorted_merge(): + * @until sorted_merge + * + * And as always release memory and shutdown eina before ending: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_list_02_c "eina_list_02.c" file. + */ + +/** + * @page eina_list_02_c Sorting Eina_List elements example + * + * @include eina_list_02.c + * @example eina_list_02.c + */ + +/** + * @page list_03_example_page Reordering Eina_List elments + * @dontinclude eina_list_03.c + * + * If you don't know how to create lists see + * @ref list_01_example_page. + * + * We start out with code that should be familiar by now: + * @skip #include + * @until gemenon + * + * You can move elements around in a list using @ref eina_list_move() or using + * @ref eina_list_promote_list() and @ref eina_list_demote_list() which move a + * list node to the head and end of the list respectevely: + * @until demote + * + * Removing elements from a list can be done with ease: + * @until sagitarius + * + * To replace an element in the list it is not necessary to remove it and then + * add with the new value, it is possible to just change the value of a node: + * @until aquarius + * + * We will now take a peek to see if the list still has the right number of + * elements: + * @until printf + * + * Now that the list is in alphabetical order let's create a copy of it in + * reverse order and print every element to see if worked as expected: + * @until iterator_free + * @note Always remember to free your iterators when done using them. + * + * And as always release memory and shutdown eina before ending: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_list_03_c "eina_list_03.c" file. + */ + +/** + * @page eina_list_03_c Reordering Eina_List elments example + * + * @include eina_list_03.c + * @example eina_list_03.c + */ + +/** + * @page list_04_example_page Eina_List and memory allocation + * @dontinclude eina_list_04.c + * + * If you don't know how to create lists see + * @ref list_01_example_page. In this example we also use + * @ref eina_stringshare, however it should be possible to understand the code + * regardless of previous knowledge about it. + * + * Here we have the usual list creation code with a twist, now we are using as + * data for the list memory that has to be freed later on. + * @skip #include + * @until Sharon + * + * This time we are going to iterate over our list in a different way: + * @until printf + * + * And now we are going to iterate over the list backwards: + * @until printf + * + * And now we need to free up the memory allocated during creation of the list: + * @until stringshare_del + * @note We don't need to use eina_list_free() since @ref EINA_LIST_FREE takes + * care of that. + * + * And shut everything down: + * @until } + * + * The full source code can be found on the examples folder + * on the @ref eina_list_04_c "eina_list_04.c" file. + */ + +/** + * @page eina_list_04_c Eina_List and memory allocation example + * + * @include eina_list_04.c + * @example eina_list_04.c + */ + +/** + * @addtogroup Eina_List_Group List + * + * @brief These functions provide double linked list management. + * + * Eina_List is a doubly linked list. It can store data of any type in the + * form of void pointers. It has convenience functions to do all the common + * operations which means it should rarely if ever be necessary to directly + * access the struct's fields. Nevertheless it can be useful to understand the + * inner workings of the data structure being used. + * + * @ref Eina_List nodes keep references to the previous node, the next node, its + * data and to an accounting structure. + * + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image rtf eina_list.png + * @image latex eina_list.eps width=5cm + * + * @ref Eina_List_Accounting is used to improve the performance of some + * functions. It is private and should not be modified. It contains a + * reference to the end of the list and the number of elements in the list. + * + * @note Every function that modifies the contents of the list returns a pointer + * to the head of the list and it is essential that this be pointer be used in + * any future references to the list. + * + * Most functions have two versions that have the same effect but operate on + * different arguments, the @a plain functions operate over data(eg.: + * @ref eina_list_append_relative, @ref eina_list_remove, + * @ref eina_list_data_find), the @a list versions of these functions operate + * on @ref Eina_List nodes. + * + * @warning You must @b always use the pointer to the first element of the list + * as the list! + * @warning You must @b never use a pointer to an element in the middle of the + * list as the list! + * + * Here are some examples of @ref Eina_List usage: + * @li @ref list_01_example_page + * @li @ref list_02_example_page + * @li @ref list_03_example_page + * @li @ref list_04_example_page + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_List_Group List + * + * @{ + */ + +/** + * @typedef Eina_List + * Type for a generic double linked list. + */ +typedef struct _Eina_List Eina_List; + +/** + * @typedef Eina_List_Accounting + * Cache used to store the last element of a list and the number of + * elements, for fast access. + */ +typedef struct _Eina_List_Accounting Eina_List_Accounting; + +/** + * @struct _Eina_List + * Type for a generic double linked list. + */ +struct _Eina_List +{ + void *data; /**< Pointer to list element payload */ + Eina_List *next; /**< Next member in the list */ + Eina_List *prev; /**< Previous member in the list */ + Eina_List_Accounting *accounting; /**< Private list accounting info - don't touch */ + + EINA_MAGIC +}; + +/** + * @struct _Eina_List_Accounting + * Cache used to store the last element of a list and the number of + * elements, for fast access. It is for private used and must not be + * touched. + */ +struct _Eina_List_Accounting +{ + Eina_List *last; /**< Pointer to the last element of the list - don't touch */ + unsigned int count; /**< Number of elements of the list - don't touch */ + EINA_MAGIC +}; + + +/** + * @brief Append the given data to the given linked list. + * + * @param list The given list. + * @param data The data to append. + * @return A list pointer. + * + * This function appends @p data to @p list. If @p list is @c NULL, a + * new list is returned. On success, a new list pointer that should be + * used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully appended. + * + * @code + * Eina_List *list = NULL; + * extern void *my_data; + * + * list = eina_list_append(list, my_data); + * if (eina_error_get()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list(or NULL). + */ +EAPI Eina_List *eina_list_append(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Prepends the given data to the given linked list. + * + * @param list The given list. + * @param data The data to prepend. + * @return A list pointer. + * + * This function prepends @p data to @p list. If @p list is @c NULL, a + * new list is returned. On success, a new list pointer that should be + * used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully prepended. + * + * Example: + * @code + * Eina_List *list = NULL; + * extern void *my_data; + * + * list = eina_list_prepend(list, my_data); + * if (eina_error_get()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_prepend(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Insert the given data into the given linked list after the specified data. + * + * @param list The given linked list. + * @param data The data to insert. + * @param relative The data to insert after. + * @return A list pointer. + * + * This function inserts @p data to @p list after @p relative. If + * @p relative is not in the list, @p data is appended to the end of + * the list. If @p list is @c NULL, a new list is returned. If there + * are multiple instances of @p relative in the list, @p data is + * inserted after the first instance.On success, a new list pointer + * that should be used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully inserted. + * + * @code + * Eina_List *list = NULL; + * extern void *my_data; + * extern void *relative_member; + * + * list = eina_list_append(list, relative_member); + * if (eina_error_get()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * list = eina_list_append_relative(list, my_data, relative_member); + * if (eina_error_get()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_append_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Append a list node to a linked list after the specified member + * + * @param list The given linked list. + * @param data The data to insert. + * @param relative The list node to insert after. + * @return A list pointer. + * + * This function inserts @p data to @p list after the list node + * @p relative. If @p list or @p relative are @c NULL, @p data is just + * appended to @p list using eina_list_append(). If @p list is + * @c NULL, a new list is returned. If there are multiple instances + * of @p relative in the list, @p data is inserted after the first + * instance. On success, a new list pointer that should be used in + * place of the one given to this function is returned. Otherwise, the + * old pointer is returned. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_append_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Prepend a data pointer to a linked list before the specified member + * + * @param list The given linked list. + * @param data The data to insert. + * @param relative The data to insert before. + * @return A list pointer. + * + * This function inserts @p data to @p list before @p relative. If + * @p relative is not in the list, @p data is prepended to the list + * with eina_list_prepend(). If @p list is @c NULL, a new list is + * returned. If there are multiple instances of @p relative in the + * list, @p data is inserted before the first instance. On success, a + * new list pointer that should be used in place of the one given to + * this function is returned. Otherwise, the old pointer is returned. + * + * The following code example demonstrates how to ensure that the + * given data has been successfully inserted. + * + * @code + * Eina_List *list = NULL; + * extern void *my_data; + * extern void *relative_member; + * + * list = eina_list_append(list, relative_member); + * if (eina_error_get_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * list = eina_list_prepend_relative(list, my_data, relative_member); + * if (eina_error_get()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Prepend a list node to a linked list before the specified member + * + * @param list The given linked list. + * @param data The data to insert. + * @param relative The list node to insert before. + * @return A list pointer. + * + * This function inserts @p data to @p list before the list node + * @p relative. If @p list or @p relative are @c NULL, @p data is just + * prepended to @p list using eina_list_prepend(). If @p list is + * @c NULL, a new list is returned. If there are multiple instances + * of @p relative in the list, @p data is inserted before the first + * instance. On success, a new list pointer that should be used in + * place of the one given to this function is returned. Otherwise, the + * old pointer is returned. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_prepend_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Insert a new node into a sorted list. + * + * @param list The given linked list, @b must be sorted. + * @param func The function called for the sort. + * @param data The data to insert sorted. + * @return A list pointer. + * + * This function inserts values into a linked list assuming it was + * sorted and the result will be sorted. If @p list is @c NULLL, a new + * list is returned. On success, a new list pointer that should be + * used in place of the one given to this function is + * returned. Otherwise, the old pointer is returned. See eina_error_get(). + * + * @note O(log2(n)) comparisons (calls to @p func) average/worst case + * performance as it uses eina_list_search_sorted_near_list() and thus + * is bounded to that. As said in eina_list_search_sorted_near_list(), + * lists do not have O(1) access time, so walking to the correct node + * can be costly, consider worst case to be almost O(n) pointer + * dereference (list walk). + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI 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; + + +/** + * @brief Remove the first instance of the specified data from the given list. + * + * @param list The given list. + * @param data The specified data. + * @return A list pointer. + * + * This function removes the first instance of @p data from + * @p list. If the specified data is not in the given list (tihis + * include the case where @p data is @c NULL), nothing is done. If + * @p list is @c NULL, @c NULL is returned, otherwise a new list + * pointer that should be used in place of the one passed to this + * function. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_remove(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Remove the specified data. + * + * @param list The given linked list. + * @param remove_list The list node which is to be removed. + * @return A list pointer. + * + * This function removes the list node @p remove_list from @p list and + * frees the list node structure @p remove_list. If @p list is + * @c NULL, this function returns @c NULL. If @p remove_list is + * @c NULL, it returns @p list, otherwise, a new list pointer that + * should be used in place of the one passed to this function. + * + * The following code gives an example (notice we use EINA_LIST_FOREACH + * instead of EINA_LIST_FOREACH_SAFE because we stop the loop after + * removing the current node). + * + * @code + * extern Eina_List *list; + * Eina_List *l; + * extern void *my_data; + * void *data + * + * EINA_LIST_FOREACH(list, l, data) + * { + * if (data == my_data) + * { + * list = eina_list_remove_list(list, l); + * break; + * } + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_remove_list(Eina_List *list, Eina_List *remove_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Move the specified data to the head of the list. + * + * @param list The list handle to move the data. + * @param move_list The list node to move. + * @return A new list handle to replace the old one + * + * This function move @p move_list to the front of @p list. If list is + * @c NULL, @c NULL is returned. If @p move_list is @c NULL, + * @p list is returned. Otherwise, a new list pointer that should be + * used in place of the one passed to this function. + * + * Example: + * @code + * extern Eina_List *list; + * Eina_List *l; + * extern void *my_data; + * void *data; + * + * EINA_LIST_FOREACH(list, l, data) + * { + * if (data == my_data) + * { + * list = eina_list_promote_list(list, l); + * break; + * } + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_promote_list(Eina_List *list, Eina_List *move_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Move the specified data to the tail of the list. + * + * @param list The list handle to move the data. + * @param move_list The list node to move. + * @return A new list handle to replace the old one + * + * This function move @p move_list to the back of @p list. If list is + * @c NULL, @c NULL is returned. If @p move_list is @c NULL, + * @p list is returned. Otherwise, a new list pointer that should be + * used in place of the one passed to this function. + * + * Example: + * @code + * extern Eina_List *list; + * Eina_List *l; + * extern void *my_data; + * void *data; + * + * EINA_LIST_FOREACH(list, l, data) + * { + * if (data == my_data) + * { + * list = eina_list_demote_list(list, l); + * break; + * } + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_demote_list(Eina_List *list, Eina_List *move_list); + + +/** + * @brief Find a member of a list and return the member. + * + * @param list The list to search for a data. + * @param data The data pointer to find in the list. + * @return The found member data pointer if found, @c NULL otherwise. + * + * This function searches in @p list from beginning to end for the + * first member whose data pointer is @p data. If it is found, @p data + * will be returned, otherwise NULL will be returned. + * + * Example: + * @code + * extern Eina_List *list; + * extern void *my_data; + * + * if (eina_list_data_find(list, my_data) == my_data) + * { + * printf("Found member %p\n", my_data); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI void *eina_list_data_find(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Find a member of a list and return the list node containing that member. + * + * @param list The list to search for data. + * @param data The data pointer to find in the list. + * @return The found members list node on success, @c NULL otherwise. + * + * This function searches in @p list from beginning to end for the + * first member whose data pointer is @p data. If it is found, the + * list node containing the specified member is returned, otherwise + * @c NULL is returned. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_data_find_list(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Move a data pointer from one list to another + * + * @param to The list to move the data to + * @param from The list to move from + * @param data The data to move + * @return #EINA_TRUE on success, else #EINA_FALSE + * + * This function is a shortcut for doing the following: + * to = eina_list_append(to, data); + * from = eina_list_remove(from, data); + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_Bool eina_list_move(Eina_List **to, Eina_List **from, void *data); + +/** + * @brief Move a list node from one list to another + * + * @param to The list to move the data to + * @param from The list to move from + * @param data The list node containing the data to move + * @return #EINA_TRUE on success, else #EINA_FALSE + * + * This function is a shortcut for doing the following: + * to = eina_list_append(to, data->data); + * from = eina_list_remove_list(from, data); + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_Bool eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data); + + +/** + * @brief Free an entire list and all the nodes, ignoring the data contained. + + * @param list The list to free + * @return A NULL pointer + * + * This function frees all the nodes of @p list. It does not free the + * data of the nodes. To free them, use #EINA_LIST_FREE. + */ +EAPI Eina_List *eina_list_free(Eina_List *list); + + +/** + * @brief Get the nth member's data pointer in a list. + * + * @param list The list to get the specified member number from. + * @param n The number of the element (0 being the first). + * @return The data pointer stored in the specified element. + * + * This function returns the data pointer of element number @p n, in + * the @p list. The first element in the array is element number 0. If + * the element number @p n does not exist, @c NULL is + * returned. Otherwise, the data of the found element is returned. + * + * @note Worst case is O(n). + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI void *eina_list_nth(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Get the nth member's list node in a list. + * + * @param list The list to get the specfied member number from. + * @param n The number of the element (0 being the first). + * @return The list node stored in the numbered element. + * + * This function returns the list node of element number @p n, in + * @p list. The first element in the array is element number 0. If the + * element number @p n does not exist or @p list is @c NULL or @p n is + * greater than the count of elements in @p list minus 1, @c NULL is + * returned. Otherwise the list node stored in the numbered element is + * returned. + * + * @note Worst case is O(n). + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_nth_list(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Reverse all the elements in the list. + * + * @param list The list to reverse. + * @return The list head after it has been reversed. + * + * This function reverses the order of all elements in @p list, so the + * last member is now first, and so on. If @p list is @c NULL, this + * functon returns @c NULL. + * + * @note @b in-place: this will change the given list, so you should + * now point to the new list head that is returned by this function. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_reverse_clone() + * @see eina_list_iterator_reversed_new() + */ +EAPI Eina_List *eina_list_reverse(Eina_List *list) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Clone (copy) all the elements in the list in reverse order. + * + * @param list The list to reverse. + * @return The new list that has been reversed. + * + * This function reverses the order of all elements in @p list, so the + * last member is now first, and so on. If @p list is @c NULL, this + * functon returns @c NULL. This returns a copy of the given list. + * + * @note @b copy: this will copy the list and you should then + * eina_list_free() when it is not required anymore. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_reverse() + * @see eina_list_clone() + */ +EAPI Eina_List *eina_list_reverse_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Clone (copy) all the elements in the list in exactly same order. + * + * @param list The list to clone. + * @return The new list that has been cloned. + * + * This function clone in order of all elements in @p list. If @p list + * is @c NULL, this functon returns @c NULL. This returns a copy of + * the given list. + * + * @note @b copy: this will copy the list and you should then + * eina_list_free() when it is not required anymore. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_reverse_clone() + */ +EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Sort a list according to the ordering func will return. + * + * @param list The list handle to sort. + * @param size The length of the list to sort. + * @param func A function pointer that can handle comparing the list data + * nodes. + * @return the new head of list. + * + * This function sorts @p list. @p size if the number of the first + * element to sort. If @p size is 0 or greater than the number of + * elements in @p list, all the elements are sorted. @p func is used to + * compare two elements of @p list. If @p list or @p func are @c NULL, + * this function returns @c NULL. + * + * @note @b in-place: this will change the given list, so you should + * now point to the new list head that is returned by this function. + * + * @note worst case is O(n * log2(n)) comparisons (calls to func()), + * O(n) comparisons average case. That means that for 1,000,000 list + * elements, sort will usually do 1,000,000 comparisons, but may do up + * to 20,000,000. + * + * Example: + * @code + * int + * sort_cb(const void *d1, const void *d2) + * { + * const char *txt = d1; + * const char *txt2 = d2; + * + * if(!txt) return(1); + * if(!txt2) return(-1); + * + * return(strcmp(txt, txt2)); + * } + * extern Eina_List *list; + * + * list = eina_list_sort(list, eina_list_count(list), sort_cb); + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Merge two list. + * + * @param left Head list to merge. + * @param right Tail list to merge. + * @return A new merged list. + * + * This function puts right at the end of left and return the head. + * + * Both left and right does not exist anymore after the merge. + * + * @note merge cost is O(n), being @b n the size of the smallest + * list. This is due the need to fix accounting of that segment, + * making count and last access O(1). + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_merge(Eina_List *left, Eina_List *right) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Merge two sorted list according to the ordering func will return. + * + * @param left First list to merge. + * @param right Second list to merge. + * @param func A function pointer that can handle comparing the list data + * nodes. + * @return A new sorted list. + * + * This function compares the head of @p left and @p right, and choose the + * smallest one to be head of the returned list. It will continue this process + * for all entry of both list. + * + * Both left and right does not exist anymore after the merge. + * If @p func is NULL, it will return NULL. + * + * Example: + * @code + * int + * sort_cb(void *d1, void *d2) + * { + * const char *txt = NULL; + * const char *txt2 = NULL; + * + * if(!d1) return(1); + * if(!d2) return(-1); + * + * return(strcmp((const char*)d1, (const char*)d2)); + * } + * extern Eina_List *sorted1; + * extern Eina_List *sorted2; + * + * list = eina_list_sorted_merge(sorted1, sorted2, sort_cb); + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Split a list into 2 lists. + * + * @param list List to split. + * @param relative The list will be split after @p relative. + * @param right The head of the new right list. + * @return The new left list + * + * This function splits @p list into two lists ( left and right ) after the node @p relative. @p Relative + * will become the last node of the left list. If @p list or @p right are NULL list is returns. + * If @p relative is NULL right is set to @p list and NULL is returns. + * If @p relative is the last node of @p list list is returns and @p right is set to NULL. + * + * list does not exist anymore after the split. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_List *eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Returns node nearest to data is in the sorted list. + * + * @param list The list to search for data, @b must be sorted. + * @param func A function pointer that can handle comparing the list data nodes. + * @param data reference value to search. + * @param result_cmp if provided returns the result of + * func(node->data, data) node being the last (returned) node. If node + * was found (exact match), then it is 0. If returned node is smaller + * than requested data, it is less than 0 and if it's bigger it's + * greater than 0. It is the last value returned by func(). + * @return the nearest node, NULL if not found. + * + * This function searches for a node containing @p data as it's data in @p list, + * if such a node exists it will be returned and @p result_cmp will be @p 0. If + * the data of no node in @p list is equal to @p data, the node with the nearest + * value to that will be returned and @p result_cmp will be the return value of + * @p func with @p data and the returned node's data as arguments. + * + * This function is useful for inserting an element in the list only in case it + * isn't already present in the list, the naive way of doing this would be: + * @code + * void *ptr = eina_list_data_find(list, "my data"); + * if (!ptr) + * eina_list_sorted_insert(list, "my data"); + * @endcode + * + * However this has the downside of walking through the list twice, once to + * check if the data is already present and another to insert the element in the + * corret position. This can be done more eficiently: + * @code + * int cmp_result; + * l = eina_list_search_sorted_near_list(list, cmp_func, "my data", + * &cmp_result); + * if (cmp_result > 0) + * list = eina_list_prepend_relative_list(list, "my data", l); + * else if (cmp_result < 0) + * list = eina_list_append_relative_list(list, "my data", l); + * @endcode + * + * If @a cmp_result is 0 the element is already in the list and we need not + * insert it, if @a cmp_result is greater than zero @a "my @a data" needs to + * come after @a l(the nearest node present), if less than zero before. + * + * @note O(log2(n)) average/worst case performance, for 1,000,000 + * elements it will do a maximum of 20 comparisons. This is much + * faster than the 1,000,000 comparisons made naively walking the list + * from head to tail, so depending on the number of searches and + * insertions, it may be worth to eina_list_sort() the list and do the + * searches later. As lists do not have O(1) access time, walking to + * the correct node can be costly, consider worst case to be almost + * O(n) pointer dereference (list walk). + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_search_sorted_list() + * @see eina_list_sort() + * @see eina_list_sorted_merge() + */ +EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp); + + +/** + * @brief Returns node if data is in the sorted list. + * + * @param list The list to search for data, @b must be sorted. + * @param func A function pointer that can handle comparing the list data nodes. + * @param data reference value to search. + * @return the node if func(node->data, data) == 0, NULL if not found. + * + * This can be used to check if some value is inside the list and get + * the container node in this case. It should be used when list is + * known to be sorted as it will do binary search for results. + * + * Example: imagine user gives a string, you check if it's in the list + * before duplicating its contents. + * + * @note O(log2(n)) average/worst case performance, for 1,000,000 + * elements it will do a maximum of 20 comparisons. This is much + * faster than the 1,000,000 comparisons made by + * eina_list_search_unsorted_list(), so depending on the number of + * searches and insertions, it may be worth to eina_list_sort() the + * list and do the searches later. As said in + * eina_list_search_sorted_near_list(), lists do not have O(1) access + * time, so walking to the correct node can be costly, consider worst + * case to be almost O(n) pointer dereference (list walk). + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_search_sorted() + * @see eina_list_sort() + * @see eina_list_sorted_merge() + * @see eina_list_search_unsorted_list() + * @see eina_list_search_sorted_near_list() + */ +EAPI Eina_List *eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data); + + +/** + * @brief Returns node data if it is in the sorted list. + * + * @param list The list to search for data, @b must be sorted. + * @param func A function pointer that can handle comparing the list data nodes. + * @param data reference value to search. + * @return the node value (@c node->data) if func(node->data, data) == 0, + * NULL if not found. + * + * This can be used to check if some value is inside the list and get + * the existing instance in this case. It should be used when list is + * known to be sorted as it will do binary search for results. + * + * Example: imagine user gives a string, you check if it's in the list + * before duplicating its contents. + * + * @note O(log2(n)) average/worst case performance, for 1,000,000 + * elements it will do a maximum of 20 comparisons. This is much + * faster than the 1,000,000 comparisons made by + * eina_list_search_unsorted(), so depending on the number of + * searches and insertions, it may be worth to eina_list_sort() the + * list and do the searches later. As said in + * eina_list_search_sorted_near_list(), lists do not have O(1) access + * time, so walking to the correct node can be costly, consider worst + * case to be almost O(n) pointer dereference (list walk). + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_search_sorted_list() + * @see eina_list_sort() + * @see eina_list_sorted_merge() + * @see eina_list_search_unsorted_list() + */ +EAPI void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data); + + +/** + * @brief Returns node if data is in the unsorted list. + * + * @param list The list to search for data, may be unsorted. + * @param func A function pointer that can handle comparing the list data nodes. + * @param data reference value to search. + * @return the node if func(node->data, data) == 0, NULL if not found. + * + * This can be used to check if some value is inside the list and get + * the container node in this case. + * + * Example: imagine user gives a string, you check if it's in the list + * before duplicating its contents. + * + * @note this is expensive and may walk the whole list, it's order-N, + * that is for 1,000,000 elements list it may walk and compare + * 1,000,000 nodes. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_search_sorted_list() + * @see eina_list_search_unsorted() + */ +EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data); + + +/** + * @brief Returns node data if it is in the unsorted list. + * + * @param list The list to search for data, may be unsorted. + * @param func A function pointer that can handle comparing the list data nodes. + * @param data reference value to search. + * @return the node value (@c node->data) if func(node->data, data) == 0, + * NULL if not found. + * + * This can be used to check if some value is inside the list and get + * the existing instance in this case. + * + * Example: imagine user gives a string, you check if it's in the list + * before duplicating its contents. + * + * @note this is expensive and may walk the whole list, it's order-N, + * that is for 1,000,000 elements list it may walk and compare + * 1,000,000 nodes. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_search_sorted() + * @see eina_list_search_unsorted_list() + */ +EAPI void *eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data); + +/** + * @brief Get the last list node in the list. + * + * @param list The list to get the last list node from. + * @return The last list node in the list. + * + * This function returns the last list node in the list @p list. If + * @p list is @c NULL or empty, @c NULL is returned. + * + * This is a order-1 operation (it takes the same short time + * regardless of the length of the list). + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline Eina_List *eina_list_last(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Get the next list node after the specified list node. + * + * @param list The list node to get the next list node from + * @return The next list node on success, @c NULL otherwise. + * + * This function returns the next list node after the current one in + * @p list. It is equivalent to list->next. If @p list is @c NULL or + * if no next list node exists, it returns @c NULL. + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline Eina_List *eina_list_next(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Get the previous list node before the specified list node. + * + * @param list The list node to get the previous list node from. + * @return The previous list node o success, @c NULL otherwise. + * if no previous list node exists + * + * This function returns the previous list node before the current one + * in @p list. It is equivalent to list->prev. If @p list is @c NULL or + * if no previous list node exists, it returns @c NULL. + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline Eina_List *eina_list_prev(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Get the list node data member. + * + * @param list The list node to get the data member of. + * @return The data member from the list node. + * + * This function returns the data member of the specified list node @p + * list. It is equivalent to list->data. If @p list is @c NULL, this + * function returns @c NULL. + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline void *eina_list_data_get(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Set the list node data member. + * + * @param list The list node to get the data member of. + * @param data The data member to the list node. + * @return The previous data value. + * + * This function set the data member @p data of the specified list node + * @p list. It returns the previous data of the node. If @p list is + * @c NULL, this function returns @c NULL. + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline void *eina_list_data_set(Eina_List *list, const void *data); + +/** + * @brief Get the count of the number of items in a list. + * + * @param list The list whose count to return. + * @return The number of members in the list. + * + * This function returns how many members @p list contains. If the + * list is @c NULL, 0 is returned. + * + * NB: This is an order-1 operation and takes the same time regardless + * of the length of the list. + * + * @warning @p list must be a pointer to the first element of the list. + */ +static inline unsigned int eina_list_count(const Eina_List *list) EINA_PURE; + + +/** + * @brief Returned a new iterator associated to a list. + * + * @param list The list. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * list. If @p list is @c NULL or the count member of @p list is less + * or equal than 0, this function still returns a valid iterator that + * will always return false on eina_iterator_next(), thus keeping API + * sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @warning if the list structure changes then the iterator becomes + * invalid! That is, if you add or remove nodes this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Returned a new reversed iterator associated to a list. + * + * @param list The list. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * list. If @p list is @c NULL or the count member of @p list is less + * or equal than 0, this function still returns a valid iterator that + * will always return false on eina_iterator_next(), thus keeping API + * sane. + * + * Unlike eina_list_iterator_new(), this will walk the list backwards. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning @p list must be a pointer to the first element of the list. + * + * @warning if the list structure changes then the iterator becomes + * invalid! That is, if you add or remove nodes this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Returned a new accessor associated to a list. + * + * @param list The list. + * @return A new accessor. + * + * This function returns a newly allocated accessor associated to + * @p list. If @p list is @c NULL or the count member of @p list is + * less or equal than 0, this function returns NULL. If the memory can + * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is + * set. Otherwise, a valid accessor is returned. + * + * @warning @p list must be a pointer to the first element of the list. + */ +EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @def EINA_LIST_FOREACH + * @brief Macro to iterate over a list. + * + * @param list The list to iterate over. + * @param l A list that is used as an iterator and points to the current node. + * @param data Current item's data. + * + * This macro iterates over @p list from the first element to + * the last. @p data is the data related to the current element. + * @p l is an #Eina_List used as the list iterator. + * + * The following diagram ilustrates this macro iterating over a list of four + * elements("one", "two", "three" and "four"): + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image latex eina-list-foreach.eps width=\textwidth + * + * It can be used to free list data, as in the following example: + * + * @code + * Eina_List *list; + * Eina_List *l; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings, + * // EINA_LIST_FOREACH will be used to free those strings + * + * EINA_LIST_FOREACH(list, l, data) + * free(data); + * eina_list_free(list); + * @endcode + * + * @note This is not the optimal way to release memory allocated to + * a list, since it iterates over the list twice. + * For an optimized algorithm, use EINA_LIST_FREE(). + * + * @warning @p list must be a pointer to the first element of the list. + * + * @warning Be careful when deleting list nodes. + * If you remove the current node and continue iterating, + * the code will fail because the macro will not be able + * to get the next node. Notice that it's OK to remove any + * node if you stop the loop after that. + * For destructive operations such as this, consider + * using EINA_LIST_FOREACH_SAFE(). + */ +#define EINA_LIST_FOREACH(list, l, data) \ + for (l = list, \ + data = eina_list_data_get(l); \ + l; \ + l = eina_list_next(l), \ + data = eina_list_data_get(l)) + +/** + * @def EINA_LIST_REVERSE_FOREACH + * @brief Macro to iterate over a list in the reverse order. + * + * @param list The list to iterate over. + * @param l A list that is used as an iterator and points to the current node. + * @param data Current item's data. + * + * This macro works like EINA_LIST_FOREACH, but iterates from the + * last element of a list to the first. + * @p data is the data related to the current element, while @p l + * is an #Eina_List that is used as the list iterator. + * + * The following diagram ilustrates this macro iterating over a list of four + * elements("one", "two", "three" and "four"): + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image latex eina-list-reverse-foreach.eps width=\textwidth + * + * It can be used to free list data, as in the following example: + * + * @code + * Eina_List *list; + * Eina_List *l; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings, + * // EINA_LIST_REVERSE_FOREACH will be used to free those strings + * + * EINA_LIST_REVERSE_FOREACH(list, l, data) + * free(data); + * eina_list_free(list); + * @endcode + * + * @note This is not the optimal way to release memory allocated to + * a list, since it iterates over the list twice. + * For an optimized algorithm, use EINA_LIST_FREE(). + * + * @warning @p list must be a pointer to the first element of the list. + * + * @warning Be careful when deleting list nodes. + * If you remove the current node and continue iterating, + * the code will fail because the macro will not be able + * to get the next node. Notice that it's OK to remove any + * node if you stop the loop after that. + * For destructive operations such as this, consider + * using EINA_LIST_REVERSE_FOREACH_SAFE(). + */ +#define EINA_LIST_REVERSE_FOREACH(list, l, data) \ + for (l = eina_list_last(list), \ + data = eina_list_data_get(l); \ + l; \ + l = eina_list_prev(l), \ + data = eina_list_data_get(l)) + +/** + * @def EINA_LIST_FOREACH_SAFE + * @brief Macro to iterate over a list with support for node deletion. + * + * @param list The list to iterate over. + * @param l A list that is used as an iterator and points to the current node. + * @param l_next A list that is used as an iterator and points to the next node. + * @param data Current item's data. + * + * This macro iterates over @p list from the first element to + * the last. @p data is the data related to the current element. + * @p l is an #Eina_List used as the list iterator. + * + * Since this macro stores a pointer to the next list node in @p l_next, + * deleting the current node and continuing looping is safe. + * + * The following diagram ilustrates this macro iterating over a list of four + * elements("one", "two", "three" and "four"): + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image latex eina-list-foreach-safe.eps width=\textwidth + * + * This macro can be used to free list nodes, as in the following example: + * + * @code + * Eina_List *list; + * Eina_List *l; + * Eina_List *l_next; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings, + * // EINA_LIST_FOREACH_SAFE will be used to free elements that match "key". + * + * EINA_LIST_FOREACH_SAFE(list, l, l_next, data) + * if (strcmp(data, "key") == 0) { + * free(data); + * list = eina_list_remove_list(list, l); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) \ + for (l = list, \ + l_next = eina_list_next(l), \ + data = eina_list_data_get(l); \ + l; \ + l = l_next, \ + l_next = eina_list_next(l), \ + data = eina_list_data_get(l)) + +/** + * @def EINA_LIST_REVERSE_FOREACH_SAFE + * @brief Macro to iterate over a list in the reverse order with support + * for deletion. + * + * @param list The list to iterate over. + * @param l A list that is used as an iterator and points to the current node. + * @param l_prev A list that is used as an iterator and points to the previous node. + * @param data Current item's data. + * + * This macro works like EINA_LIST_FOREACH_SAFE, but iterates from the + * last element of a list to the first. + * @p data is the data related to the current element, while @p l + * is an #Eina_List that is used as the list iterator. + * + * Since this macro stores a pointer to the previous list node in @p l_prev, + * deleting the current node and continuing looping is safe. + * + * The following diagram ilustrates this macro iterating over a list of four + * elements("one", "two", "three" and "four"): + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image latex eina-list-reverse-foreach-safe.eps width=\textwidth + * + * This macro can be used to free list nodes, as in the following example: + * + * @code + * Eina_List *list; + * Eina_List *l; + * Eina_List *l_prev; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings, + * // EINA_LIST_REVERSE_FOREACH_SAFE will be used to free elements that match "key". + * + * EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) + * if (strcmp(data, "key") == 0) { + * free(data); + * list = eina_list_remove_list(list, l); + * } + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + */ +#define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) \ + for (l = eina_list_last(list), \ + l_prev = eina_list_prev(l), \ + data = eina_list_data_get(l); \ + l; \ + l = l_prev, \ + l_prev = eina_list_prev(l), \ + data = eina_list_data_get(l)) + +/** + * @def EINA_LIST_FREE + * @brief Macro to remove each list node while having access to each node's data. + * + * @param list The list that will be cleared. + * @param data Current node's data. + * + * This macro will call #eina_list_remove_list for each list node, and store + * the data contained in the current node in @p data. + * + * The following diagram ilustrates this macro iterating over a list of four + * elements("one", "two", "three" and "four"): + * @htmlonly + * + * Full-size + * @endhtmlonly + * @image latex eina-list-free.eps width=\textwidth + * + * If you do not need to release node data, it is easier to call #eina_list_free(). + * + * @code + * Eina_List *list; + * char *data; + * + * // list is already filled, + * // its elements are just duplicated strings, + * + * EINA_LIST_FREE(list, data) + * free(data); + * @endcode + * + * @warning @p list must be a pointer to the first element of the list. + * + * @see eina_list_free() + */ +#define EINA_LIST_FREE(list, data) \ + for (data = eina_list_data_get(list); \ + list; \ + list = eina_list_remove_list(list, list), \ + data = eina_list_data_get(list)) + +#include "eina_inline_list.x" + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_LIST_H_ */ diff --git a/libraries/eina/src/include/eina_lock.h b/libraries/eina/src/include/eina_lock.h new file mode 100644 index 0000000..7c26dc0 --- /dev/null +++ b/libraries/eina/src/include/eina_lock.h @@ -0,0 +1,125 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LOCK_H_ +#define EINA_LOCK_H_ + +#include "eina_config.h" +#include "eina_types.h" +#include "eina_error.h" + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Lock_Group Lock + * + * @{ + */ + +typedef enum +{ + EINA_LOCK_FAIL = EINA_FALSE, + EINA_LOCK_SUCCEED = EINA_TRUE, + EINA_LOCK_DEADLOCK +} Eina_Lock_Result; + +#ifdef EINA_HAVE_THREADS +# ifdef _WIN32_WCE +# include "eina_inline_lock_wince.x" +# elif defined(_WIN32) +# include "eina_inline_lock_win32.x" +# else +# include "eina_inline_lock_posix.x" +# endif +#else +# include "eina_inline_lock_void.x" +#endif + +EAPI extern Eina_Error EINA_ERROR_NOT_MAIN_LOOP; + +static inline Eina_Bool eina_lock_new(Eina_Lock *mutex); +static inline void eina_lock_free(Eina_Lock *mutex); +static inline Eina_Lock_Result eina_lock_take(Eina_Lock *mutex); +static inline Eina_Lock_Result eina_lock_take_try(Eina_Lock *mutex); +static inline Eina_Lock_Result eina_lock_release(Eina_Lock *mutex); +static inline void eina_lock_debug(const Eina_Lock *mutex); + +static inline Eina_Bool eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex); +static inline void eina_condition_free(Eina_Condition *cond); +static inline Eina_Bool eina_condition_wait(Eina_Condition *cond); +static inline Eina_Bool eina_condition_timedwait(Eina_Condition *cond, double t); +static inline Eina_Bool eina_condition_broadcast(Eina_Condition *cond); +static inline Eina_Bool eina_condition_signal(Eina_Condition *cond); + +static inline Eina_Bool eina_rwlock_new(Eina_RWLock *mutex); +static inline void eina_rwlock_free(Eina_RWLock *mutex); +static inline Eina_Lock_Result eina_rwlock_take_read(Eina_RWLock *mutex); +static inline Eina_Lock_Result eina_rwlock_take_write(Eina_RWLock *mutex); +static inline Eina_Lock_Result eina_rwlock_release(Eina_RWLock *mutex); + +static inline Eina_Bool eina_tls_new(Eina_TLS *key); +static inline void eina_tls_free(Eina_TLS key); +static inline void *eina_tls_get(Eina_TLS key); +static inline Eina_Bool eina_tls_set(Eina_TLS key, const void *data); + + +#ifdef EINA_HAVE_DEBUG_THREADS +# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \ + do { \ + if (EINA_UNLIKELY(!eina_main_loop_is())) \ + { \ + eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \ + EINA_LOG_ERR("You are calling %s from outside" \ + "of the main loop threads in %s at line %i", \ + __FUNCTION__, \ + __FILE__, \ + __LINE__); \ + return val; \ + } \ + } while (0) +# define EINA_MAIN_LOOP_CHECK_RETURN \ + do { \ + if (EINA_UNLIKELY(!eina_main_loop_is())) \ + { \ + eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \ + EINA_LOG_ERR("You are calling %s from outside" \ + "of the main loop threads in %s at line %i", \ + __FUNCTION__, \ + __FILE__, \ + __LINE__); \ + return ; \ + } \ + } while (0) +#else +# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) +# define EINA_MAIN_LOOP_CHECK_RETURN +#endif + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_log.h b/libraries/eina/src/include/eina_log.h new file mode 100644 index 0000000..5cd7c59 --- /dev/null +++ b/libraries/eina/src/include/eina_log.h @@ -0,0 +1,888 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_LOG_H_ +#define EINA_LOG_H_ + +#include +#include + +#include "eina_types.h" + +#define EINA_COLOR_LIGHTRED "\033[31;1m" +#define EINA_COLOR_RED "\033[31m" +#define EINA_COLOR_LIGHTBLUE "\033[34;1m" +#define EINA_COLOR_BLUE "\033[34m" +#define EINA_COLOR_GREEN "\033[32;1m" +#define EINA_COLOR_YELLOW "\033[33;1m" +#define EINA_COLOR_ORANGE "\033[0;33m" +#define EINA_COLOR_WHITE "\033[37;1m" +#define EINA_COLOR_LIGHTCYAN "\033[36;1m" +#define EINA_COLOR_CYAN "\033[36m" +#define EINA_COLOR_RESET "\033[0m" +#define EINA_COLOR_HIGH "\033[1m" + + +/** + * @page tutorial_log_page Log Tutorial + * + * @section tutorial_log_introduction Introduction + * + * The Eina Log module provides logging facilities for libraries and + * applications. It provides colored logging, basic logging levels (error, + * warning, debug, info, critical) and loggers - called logging domains - + * which will be covered on next sections. + * + * @section tutorial_log_basic_usage Basic Usage + * + * Log messages can be displayed using the following macros: + * + * @li EINA_LOG_ERR(), + * @li EINA_LOG_INFO(), + * @li EINA_LOG_WARN(), + * @li EINA_LOG_DBG(). + * + * Here is an example: + * + * @include eina_log_02.c + * + * If you compiled Eina without debug mode, execution will yield only one log + * message, which is "argument is negative". + * + * Here we introduce the concept of logging domains (or loggers), which might + * already be familiar to readers. It is basically a way to separate a set of + * log messages into a context (e.g. a module) and provide a way of controlling + * this set as a whole. + * + * For example, suppose you have 3 different modules on your application and you + * want to get logging only from one of them (e.g. create some sort of filter). + * For achieving that, all you need to do is create a logging domain for each + * module so that all logging inside a module can be considered as a whole. + * + * Logging domains are specified by a name, color applied to the name and the + * level. The first two (name and color) are set through code, that is, inside + * your application/module/library. + * + * The level is used for controlling which messages should appear. It + * specifies the lowest level that should be displayed (e.g. a message + * with level 11 being logged on a domain with level set to 10 would be + * displayed, while a message with level 9 wouldn't). + * + * The domain level is set during runtime (in contrast with the name and + * color) through the environment variable EINA_LOG_LEVELS. This variable + * expects a list in the form domain_name1:level1,domain_name2:level2,... . For + * example: + * + * @verbatim EINA_LOG_LEVELS=mymodule1:5,mymodule2:2,mymodule3:0 ./myapp@endverbatim + * + * This line would set mymodule1 level to 5, mymodule2 level to 2 and mymodule3 + * level to 0. + * + * There's also a global logger to which EINA_LOG_(ERR, DBG, INFO, CRIT, WARN) + * macros do log on. It is a logger that is created internally by Eina Log with + * an empty name and can be used for general logging (where logging domains do + * not apply). + * + * Since this global logger doesn't have a name, you can't set its level through + * EINA_LOG_LEVELS variable. Here we introduce a second environment variable + * that is a bit more special: EINA_LOG_LEVEL. + * + * This variable specifies the level of the global logging domain and the level + * of domains that haven't been set through EINA_LOG_LEVELS. Here's an example: + * + * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS=module1:10,module3:2 ./myapp@endverbatim + * + * Supposing you have modules named "module1", "module2" and "module3", this + * line would result in module1 with level 10, module2 with level 3 and module3 + * with level 2. Note that module2's level wasn't specified, so it's level is + * set to the global level. This way we can easily apply filters to multiple + * domains with only one parameter (EINA_LOG_LEVEL=num). + * + * The global level (EINA_LOG_LEVEL) can also be set through code, using + * eina_log_level_set() function. + * + * While developing your libraries or applications, you may notice that + * EINA_LOG_DOM_(ERR, DBG, INFO, CRIT, WARN) macros also print out + * messages from eina itself. Here we introduce another environment variable + * that is a bit more special: EINA_LOG_LEVELS_GLOB. + * + * This variable allows you to disable the logging of any/all code in eina itself. + * This is useful when developing your libraries or applications so that you can + * see your own domain's messages easier without having to sift through a lot of + * internal eina debug messages. Here's an example: + * + * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS_GLOB=eina_*:0 ./myapp@endverbatim + * + * This will disable eina_log output from all internal eina code thus allowing + * you to see your own domain messages easier. + * + * @section tutorial_log_advanced_display Advanced usage of print callbacks + * + * The log module allows the user to change the way + * eina_log_print() displays the messages. It suffices to pass to + * eina_log_print_cb_set() the function used to display the + * message. That function must be of type #Eina_Log_Print_Cb. As a + * custom data can be passed to that callback, powerful display + * messages can be displayed. + * + * It is suggested to not use __FILE__, __FUNCTION__ or __LINE__ when + * writing that callback, but when defining macros (like + * EINA_LOG_ERR() and other macros). + * + * Here is an example of custom callback, whose behavior can be + * changed at runtime: + * + * @include eina_log_03.c + * @example eina_log_02.c + * @example eina_log_03.c + */ + +/** + * @addtogroup Eina_Log_Group Log + * + * @brief Full-featured logging system. + * + * Eina provides eina_log_print(), a standard function to manage all + * logging messages. This function may be called directly or using the + * helper macros such as EINA_LOG_DBG(), EINA_LOG_ERR() or those that + * take a specific domain as argument EINA_LOG_DOM_DBG(), + * EINA_LOG_DOM_ERR(). Internally, eina_log_print() will call the + * function defined with eina_log_print_cb_set(), that defaults to + * eina_log_print_cb_stderr(), but may be changed to do whatever you + * need, such as networking or syslog logging. + * + * The logging system is thread safe once initialized with + * eina_log_threads_enable(). The thread that calls this function + * first is considered "main thread" and other threads will have their + * thread id (pthread_self()) printed in the log message so it is easy + * to detect from where it is coming. + * + * Log domains is the Eina way to differentiate messages. There might + * be different domains to represent different modules, different + * feature-set, different categories and so on. Filtering can be + * applied to domain names by means of @c EINA_LOG_LEVELS environment + * variable or eina_log_domain_level_set(). + * + * The different logging levels serve to customize the amount of + * debugging one want to take and may be used to automatically call + * abort() once some given level message is printed. This is + * controlled by environment variable @c EINA_LOG_ABORT and the level + * to be considered critical with @c EINA_LOG_ABORT_LEVEL. These can + * be changed with eina_log_abort_on_critical_set() and + * eina_log_abort_on_critical_level_set(). + * + * The default maximum level to print is defined by environment + * variable @c EINA_LOG_LEVEL, but may be set per-domain with @c + * EINA_LOG_LEVELS. It will default to #EINA_LOG_ERR. This can be + * changed with eina_log_level_set(). + * + * To use the log system Eina must be initialized with eina_init() and + * later shut down with eina_shutdown(). Here is a straightforward + * example: + * + * @include eina_log_01.c + * + * Compile this code with the following command: + * + * @verbatim gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`@endverbatim + * + * Now execute the program with: + * + * @verbatim EINA_LOG_LEVEL=2 ./eina_log_01@endverbatim + * + * You should see a message displayed in the terminal. + * + * For more information, you can look at the @ref tutorial_log_page. + * + * @example eina_log_01.c + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Log_Group Log + * + * @{ + */ + +/** + * EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be + * used, it is always registered and available everywhere. + */ +EAPI extern int EINA_LOG_DOMAIN_GLOBAL; + +#ifndef EINA_LOG_DOMAIN_DEFAULT + +/** + * @def EINA_LOG_DOMAIN_DEFAULT + * This macro defines the domain to use with the macros EINA_LOG_DOM_DBG(), + * EINA_LOG_DOM_INFO(), EINA_LOG_DOM_WARN(), EINA_LOG_DOM_ERR() and + * EINA_LOG_DOM_CRIT(). + * + * If not defined prior to the inclusion of this header, then it + * defaults to #EINA_LOG_DOMAIN_GLOBAL. + * + * @note One may like to redefine this in its code to avoid typing too + * much. In this case the recommended way is: + * + * @code + * #include + * #undef EINA_LOG_DOMAIN_DEFAULT + * #define EINA_LOG_DOMAIN_DEFAULT _log_dom + * static int _log_dom = -1; + * + * int main(void) + * { + * eina_init(); + * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); + * EINA_LOG_ERR("using my own domain"); + * return 0; + * } + * @endcode + * + * @warning If one defines the domain prior to inclusion of this + * header, the defined log domain symbol must be defined + * prior as well, otherwise the inlined functions defined by + * Eina will fail to find the symbol, causing build failure. + * + * @code + * #define EINA_LOG_DOMAIN_DEFAULT _log_dom + * static int _log_dom = -1; // must come before inclusion of Eina.h! + * #include + * + * int main(void) + * { + * eina_init(); + * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); + * EINA_LOG_ERR("using my own domain"); + * return 0; + * } + * @endcode + * + */ +# define EINA_LOG_DOMAIN_DEFAULT EINA_LOG_DOMAIN_GLOBAL + +#endif /* EINA_LOG_DOMAIN_DEFAULT */ + +/** + * @def EINA_LOG(DOM, LEVEL, fmt, ...) + * Logs a message on the specified domain, level and format. + * + * @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger + * than this value will be ignored regardless of current domain + * level, the eina_log_print() is not even called! Most + * compilers will just detect the two integers make the branch + * impossible and remove the branch and function call all + * together. Take this as optimization tip and possible remove + * debug messages from binaries to be deployed, saving on hot + * paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public + * header files. + */ +#ifdef EINA_LOG_LEVEL_MAXIMUM +#define EINA_LOG(DOM, LEVEL, fmt, ...) \ + do { \ + if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) { \ + eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \ + fmt, ## __VA_ARGS__); } \ + } while (0) +#else +#define EINA_LOG(DOM, LEVEL, fmt, ...) \ + eina_log_print(DOM, \ + LEVEL, \ + __FILE__, \ + __FUNCTION__, \ + __LINE__, \ + fmt, \ + ## __VA_ARGS__) +#endif + +/** + * @def EINA_LOG_DOM_CRIT(DOM, fmt, ...) + * Logs a message with level CRITICAL on the specified domain and format. + */ +#define EINA_LOG_DOM_CRIT(DOM, fmt, ...) \ + EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_DOM_ERR(DOM, fmt, ...) + * Logs a message with level ERROR on the specified domain and format. + */ +#define EINA_LOG_DOM_ERR(DOM, fmt, ...) \ + EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_DOM_INFO(DOM, fmt, ...) + * Logs a message with level INFO on the specified domain and format. + */ +#define EINA_LOG_DOM_INFO(DOM, fmt, ...) \ + EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_DOM_DBG(DOM, fmt, ...) + * Logs a message with level DEBUG on the specified domain and format. + */ +#define EINA_LOG_DOM_DBG(DOM, fmt, ...) \ + EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_DOM_WARN(DOM, fmt, ...) + * Logs a message with level WARN on the specified domain and format. + */ +#define EINA_LOG_DOM_WARN(DOM, fmt, ...) \ + EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_CRIT(fmt, ...) + * Logs a message with level CRITICAL on the default domain with the specified + * format. + */ +#define EINA_LOG_CRIT(fmt, ...) \ + EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, \ + EINA_LOG_LEVEL_CRITICAL, \ + fmt, \ + ## __VA_ARGS__) + +/** + * @def EINA_LOG_ERR(fmt, ...) + * Logs a message with level ERROR on the default domain with the specified + * format. + */ +#define EINA_LOG_ERR(fmt, ...) \ + EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_INFO(fmt, ...) + * Logs a message with level INFO on the default domain with the specified + * format. + */ +#define EINA_LOG_INFO(fmt, ...) \ + EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_WARN(fmt, ...) + * Logs a message with level WARN on the default domain with the specified + * format. + */ +#define EINA_LOG_WARN(fmt, ...) \ + EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) + +/** + * @def EINA_LOG_DBG(fmt, ...) + * Logs a message with level DEBUG on the default domain with the specified + * format. + */ +#define EINA_LOG_DBG(fmt, ...) \ + EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) + +/** + * @typedef Eina_Log_Domain + * The domain used for logging. + */ +typedef struct _Eina_Log_Domain Eina_Log_Domain; + +/** + * @struct _Eina_Log_Domain + * The domain used for logging. + */ +struct _Eina_Log_Domain +{ + int level; /**< Max level to log */ + const char *domain_str; /**< Formatted string with color to print */ + const char *name; /**< Domain name */ + size_t namelen; /**< strlen(name) */ + + /* Private */ + Eina_Bool deleted : 1; /**< Flags deletion of domain, a free slot */ +}; + +/** + * Enable logging module to handle threads. + * + * There is no disable option on purpose, if it is enabled, there is + * no way back until you call the last eina_shutdown(). + * + * There is no function to retrieve if threads are enabled as one is + * not supposed to know this from outside. + * + * After this call is executed at least once, if Eina was compiled + * with threads support then logging will lock around debug messages + * and threads that are not the main thread will have its identifier + * printed. + * + * The main thread is considered the thread where the first + * eina_init() was called. + */ +EAPI void eina_log_threads_enable(void); + +/** + * @enum _Eina_Log_Level + * List of available logging levels. + */ +typedef enum _Eina_Log_Level +{ + EINA_LOG_LEVEL_CRITICAL, /**< Critical log level */ + EINA_LOG_LEVEL_ERR, /**< Error log level */ + EINA_LOG_LEVEL_WARN, /**< Warning log level */ + EINA_LOG_LEVEL_INFO, /**< Information log level */ + EINA_LOG_LEVEL_DBG, /**< Debug log level */ + EINA_LOG_LEVELS, /**< Count of default log levels */ + EINA_LOG_LEVEL_UNKNOWN = (-2147483647 - 1) /**< Unknown level */ +} Eina_Log_Level; + +/** + * @typedef Eina_Log_Print_Cb + * Type for print callbacks. + */ +typedef void (*Eina_Log_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); + +/* + * Customization + */ + +/** + * Sets logging method to use. + * + * @param cb The callback to call when printing a log. + * @param data The data to pass to the callback. + * + * By default, eina_log_print_cb_stderr() is used. + * + * @note MT: safe to call from any thread. + * + * @note MT: given function @a cb will be called protected by mutex. + * This means you're safe from other calls but you should never + * call eina_log_print(), directly or indirectly. + */ +EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1); + + +/** + * @brief Set the default log level. + * + * @param level The log level. + * + * This function sets the log level @p level. It is used in + * eina_log_print(). + * + * @note this is initially set to envvar EINA_LOG_LEVEL by eina_init(). + * + * @see eina_log_level_get() + */ +EAPI void eina_log_level_set(int level); + +/** + * @brief Get the default log level. + * + * @return the log level that limits eina_log_print(). + * + * @see eina_log_level_set() + */ +EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT; + +static inline Eina_Bool eina_log_level_check(int level); + +/** + * Checks if current thread is the main thread. + * + * @return #EINA_TRUE if threads were enabled and the current thread + * is the one that called eina_log_threads_init(). If there is + * no thread support (compiled with --disable-pthreads) or + * they were not enabled, then #EINA_TRUE is also + * returned. The only case where #EINA_FALSE is returned is + * when threads were successfully enabled but the current + * thread is not the main (one that called + * eina_log_threads_init()). + */ +EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Set if color logging should be disabled. + * + * @param disabled if #EINA_TRUE, color logging should be disabled. + * + * @note this is initially set to envvar EINA_LOG_COLOR_DISABLE by eina_init(). + * + * @see eina_log_color_disable_get() + */ +EAPI void eina_log_color_disable_set(Eina_Bool disabled); + +/** + * @brief Get if color logging should be disabled. + * + * @return if #EINA_TRUE, color logging should be disabled. + * + * @see eina_log_color_disable_set() + */ +EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Set if originating file name logging should be disabled. + * + * @param disabled if #EINA_TRUE, file name logging should be disabled. + * + * @note this is initially set to envvar EINA_LOG_FILE_DISABLE by eina_init(). + * + * @see eina_log_file_disable_get() + */ +EAPI void eina_log_file_disable_set(Eina_Bool disabled); + +/** + * @brief Get if originating file name logging should be disabled. + * + * @return if #EINA_TRUE, file name logging should be disabled. + * + * @see eina_log_file_disable_set() + */ +EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Set if originating function name logging should be disabled. + * + * @param disabled if #EINA_TRUE, function name logging should be disabled. + * + * @note this is initially set to envvar EINA_LOG_FUNCTION_DISABLE by + * eina_init(). + * + * @see eina_log_function_disable_get() + */ +EAPI void eina_log_function_disable_set(Eina_Bool disabled); + +/** + * @brief Get if originating function name logging should be disabled. + * + * @return if #EINA_TRUE, function name logging should be disabled. + * + * @see eina_log_function_disable_set() + */ +EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Set if critical messages should abort the program. + * + * @param abort_on_critical if #EINA_TRUE, messages with level equal + * or smaller than eina_log_abort_on_critical_level_get() will + * abort the program. + * + * @note this is initially set to envvar EINA_LOG_ABORT by + * eina_init(). + * + * @see eina_log_abort_on_critical_get() + * @see eina_log_abort_on_critical_level_set() + */ +EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical); + +/** + * @brief Get if critical messages should abort the program. + * + * @return if #EINA_TRUE, any messages with level equal or smaller + * than eina_log_abort_on_critical_level_get() will abort the + * program. + * + * @see eina_log_abort_on_critical_set() + * @see eina_log_abort_on_critical_level_set() + */ +EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Set level that triggers abort if abort-on-critical is set. + * + * @param critical_level levels equal or smaller than the given value + * will trigger program abortion if + * eina_log_abort_on_critical_get() returns #EINA_TRUE. + * + * @note this is initially set to envvar EINA_LOG_ABORT_LEVEL by + * eina_init(). + * + * @see eina_log_abort_on_critical_level_get() + * @see eina_log_abort_on_critical_get() + */ +EAPI void eina_log_abort_on_critical_level_set(int critical_level); + +/** + * @brief Get level that triggers abort if abort-on-critical is set. + * + * @return critical level equal or smaller than value will trigger + * program abortion if eina_log_abort_on_critical_get() returns + * #EINA_TRUE. + * + * @see eina_log_abort_on_critical_level_set() + * @see eina_log_abort_on_critical_get() + */ +EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT; + + +/** + * Set the domain level given its name. + * + * This call has the same effect as setting + * EINA_LOG_LEVELS=<@p domain_name>:<@p level> + * + * @param domain_name domain name to change the level. It may be of a + * still not registered domain. If the domain is not registered + * yet, it will be saved as a pending set and applied upon + * registration. + * @param level level to use to limit eina_log_print() for given domain. + */ +EAPI void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1); + +/** + * Get the domain level given its name. + * + * @param domain_name domain name to retrieve the level. It may be of + * a still not registered domain. If the domain is not + * registered yet, but there is a pending value, either from + * eina_log_domain_level_set(),EINA_LOG_LEVELS environment + * variable or from EINA_LOG_LEVELS_GLOB, these are + * returned. If nothing else was found, then the global/default + * level (eina_log_level_get()) is returned. + * + * @return level to use to limit eina_log_print() for given + * domain. On error (@p domain_name == NULL), + * EINA_LOG_LEVEL_UNKNOWN is returned. + * + * @see eina_log_domain_level_set() + * @see eina_log_domain_registered_level_get() + */ +EAPI int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * Get the domain level given its identifier. + * + * @param domain identifier, so it must be previously registered with + * eina_log_domain_register(). It's a much faster version of + * eina_log_domain_level_get(), but relies on domain being + * present. + * + * @return level to use to limit eina_log_print() for given domain. On + * error EINA_LOG_LEVEL_UNKNOWN is returned. + */ +EAPI int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT; + +static inline Eina_Bool eina_log_domain_level_check(int domain, int level); + +/* + * Logging domains + */ + +/** + * @param name Domain name + * @param color Color of the domain name + * + * @return Domain index that will be used as the DOMAIN parameter on log + * macros. A negative return value means an log occurred. + * + * @note MT: safe to call from any thread. + */ +EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1); + +/** + * Forget about a logging domain registered by eina_log_domain_register() + * + * @param domain domain identifier as reported by eina_log_domain_register(), + * must be >= 0. + * + * @note MT: safe to call from any thread. + */ +EAPI void eina_log_domain_unregister(int domain); + +/* + * Logging functions. + */ + +/** + * Print out log message using given domain and level. + * + * @note Usually you'll not use this function directly but the helper + * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and + * so on. See eina_log.h + * + * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if + * you registered none. It is recommended that modules and + * applications have their own logging domain. + * @param level message level, those with level greater than user + * specified value (eina_log_level_set() or environment + * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. + * @param file filename that originated the call, must @b not be @c NULL. + * @param fnc function that originated the call, must @b not be @c NULL. + * @param line originating line in @a file. + * @param fmt printf-like format to use. Should not provide trailing + * '\n' as it is automatically included. + * + * @note MT: this function may be called from different threads if + * eina_log_threads_enable() was called before. + */ +EAPI void eina_log_print(int domain, + Eina_Log_Level level, + const char *file, + const char *function, + int line, + const char *fmt, + ...) EINA_ARG_NONNULL(3, 4, 6) EINA_PRINTF(6, 7) EINA_NOINSTRUMENT; + +/** + * Print out log message using given domain and level. + * + * @note Usually you'll not use this function directly but the helper + * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and + * so on. See eina_log.h + * + * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if + * you registered none. It is recommended that modules and + * applications have their own logging domain. + * @param level message level, those with level greater than user + * specified value (eina_log_level_set() or environment + * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. + * @param file filename that originated the call, must @b not be @c NULL. + * @param fnc function that originated the call, must @b not be @c NULL. + * @param line originating line in @a file. + * @param fmt printf-like format to use. Should not provide trailing + * '\n' as it is automatically included. + * @param args the arguments needed by the format. + * + * @note MT: this function may be called from different threads if + * eina_log_threads_enable() was called before. + * + * @see eina_log_print() + */ +EAPI void eina_log_vprint(int domain, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + va_list args) EINA_ARG_NONNULL(3, 4, 6) EINA_NOINSTRUMENT; + +/* + * Logging methods (change how logging is done). + */ + +/** + * Alternative logging method, this will output to standard output stream. + * + * @param d The domain. + * @param level The level. + * @param file The file which is logged. + * @param fnc The function which is logged. + * @param line The line which is logged. + * @param fmt The ouptut format to use. + * @param data Not used. + * @param args The arguments needed by the format. + * + * This method will colorize output based on domain provided color and + * message logging level. To disable color, set environment variable + * EINA_LOG_COLOR_DISABLE=1. Similarly, to disable file and line + * information, set EINA_LOG_FILE_DISABLE=1 or + * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is + * not acceptable to have both EINA_LOG_FILE_DISABLE and + * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just + * EINA_LOG_FUNCTION_DISABLE will be considered and file information + * will be printed anyways. + * + * @note MT: if threads are enabled, this function is called within locks. + * @note MT: Threads different from main thread will have thread id + * appended to domain name. + */ +EAPI void eina_log_print_cb_stdout(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); + +/** + * Default logging method, this will output to standard error stream. + * + * This method will colorize output based on domain provided color and + * message logging level. + * + * To disable color, set environment variable + * EINA_LOG_COLOR_DISABLE=1. To enable color, even if directing to a + * file or when using a non-supported color terminal, use + * EINA_LOG_COLOR_DISABLE=0. If EINA_LOG_COLOR_DISABLE is unset (or + * -1), then Eina will disable color if terminal ($TERM) is + * unsupported or if redirecting to a file. + + . Similarly, to disable file and line + * information, set EINA_LOG_FILE_DISABLE=1 or + * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is + * not acceptable to have both EINA_LOG_FILE_DISABLE and + * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just + * EINA_LOG_FUNCTION_DISABLE will be considered and file information + * will be printed anyways. + * + * @note MT: if threads are enabled, this function is called within locks. + * @note MT: Threads different from main thread will have thread id + * appended to domain name. + */ +EAPI void eina_log_print_cb_stderr(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); + +/** + * Alternative logging method, this will output to given file stream. + * + * @param d The domain. + * @param level Not used. + * @param file The file which is logged. + * @param fnc The function which is logged. + * @param line The line which is logged. + * @param fmt The ouptut format to use. + * @param data The file which will store the output (as a FILE *). + * @param args The arguments needed by the format. + * + * This method will never output color. + * + * @note MT: if threads are enabled, this function is called within locks. + * @note MT: Threads different from main thread will have thread id + * appended to domain name. + */ +EAPI void eina_log_print_cb_file(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); + +#include "eina_inline_log.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_LOG_H_ */ diff --git a/libraries/eina/src/include/eina_magic.h b/libraries/eina/src/include/eina_magic.h new file mode 100644 index 0000000..44cd4e9 --- /dev/null +++ b/libraries/eina/src/include/eina_magic.h @@ -0,0 +1,322 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_MAGIC_H_ +#define EINA_MAGIC_H_ + +#include "eina_config.h" +#include "eina_types.h" + +/** + * @page eina_magic_example_01_page + * @dontinclude eina_magic_01.c + * + * Whenever using Eina we must include it: + * @skipline #include + * + * For this example we are going to define two classes, person and pilot, and + * since every pilot is a person we use inheritance. To be type safe we are + * going to add EINA_MAGIC to our classes: + * @until struct _pilot pilot + * @note The values of BASETYPE_MAGIC and SUBTYPE_MAGIC have no meaning, the + * only important thing about them is that they be unique. + * + * Here we have a function to create a perso given a name, nothing too fancy: + * @until } + * + * And now the counterpart, a function the free a person. + * @until { + * Before we start releasing resources we check that the pointer we were given + * actually points to a person, and if not we will print an error message and + * quit: + * @until } + * @note EINA_MAGIC_FAIL is a macro that make's it easy to print an appropriate + * (and consistent) error message. + * Now knowing that ptr is indeed of type person we prooced to set EINA_MAGIC to + * EINA_MAGIC_NONE and free alocated memory: + * @until } + * @note Setting EINA_MAGIC to EINA_MAGIC_NONE is important to prevent the + * struct from being used after freed. + * + * Now we have our function to create a pilot, this one is a little more complex + * because we need to set EINA_MAGIC for the pilot and pilot->base, this is very + * important so that checking the EINA_MAGIC of (person*)my_pilot will work: + * @until } + * + * The function to free a pilot is not too different from the one that frees a + * person: + * @until } + * @until } + * + * We also create functions to print a person or a pilot that check the type of + * the pointers they receive: + * @until } + * @until } + * + * And on to our main function where we declare some variables and initialize + * Eina: + * @until eina_init + * + * For Eina to be able to provide more informative error messages we are going + * to give names to our EINA_MAGIC types: + * @until string_set + * + * Since our types won't live longer than the scope of the current function we + * can set the name without eina making a copy of the string: + * @until static_set + * + * Now we create a person, a pilot and print both as persons: + * @until person * + * + * Now we try to print both as pilots, which will obvisouly not work since base + * is not a pilot: + * @until pilot(sub + * + * That's all folks: + * @until } + * + * See full source @ref eina_magic_example_01_c "here". + */ +/** + * @page eina_magic_example_01_c Eina_Magic + * @include eina_magic_01.c + * @example eina_magic_01.c + */ +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ +/** + * @defgroup Eina_Magic_Group Magic + * + * @brief Eina_Magic provides run-time type-checking. + * + * C is a weak statically typed language, in other words, it will just check for + * types during compile time and any cast will make the compiler believe the + * type is correct. + * + * In real world code we often need to deal with casts, either explicit or + * implicit by means of @c void*. We also need to resort to casts when doing + * inheritance in C. + * + * Eina_Magic give us a way to do casts and still be certain of the type we are + * opearting on. + * + * @note It should be noted that it is considered good practice to @b disable + * Eina_Magic for production code. The reasoning is that any Eina_Magic errors + * should have been caught during testing and therefore there is no reason to + * incur the performance downside of Eina_Magic. + * + * An @ref eina_magic_example_01_page "example" should elucidate matters. + * + * @{ + */ + +/** + * An abstract type for a magic number. + */ +typedef unsigned int Eina_Magic; + +/** + * @brief Return the string associated to the given magic identifier. + * + * @param magic The magic identifier. + * @return The string associated to the identifier. + * + * This function returns the string associated to @p magic. Even if none are + * found this function still returns non @c NULL, in this case an identifier + * such as "(none)", "(undefined)" or "(unknown)". + * + * The following identifiers may be returned whenever magic is + * invalid, with their meanings: + * + * - (none): no magic was registered exists at all. + * - (undefined): magic was registered and found, but no string associated. + * - (unknown): magic was not found in the registry. + * + * @warning The returned value must not be freed. + */ +EAPI const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT; +/** + * @brief Set the string associated to the given magic identifier. + * + * @param magic The magic identifier. + * @param magic_name The string associated to the identifier, must not + * be @c NULL. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets the string @p magic_name to @p magic. It is not + * checked if number or string are already set, in which case you will end with + * duplicates. Internally, eina will make a copy of @p magic_name. + * + * @see eina_magic_string_static_set() + */ +EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic, + const char *magic_name) EINA_ARG_NONNULL(2); + +/** + * @brief Set the string associated to the given magic identifier. + * + * @param magic The magic identifier. + * @param magic_name The string associated to the identifier, must not be + * @c NULL. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets the string @p magic_name to @p magic. It is not checked if + * number or string are already set, in which case you might end with + * duplicates. Eina will @b not make a copy of @p magic_name, this means that + * @p magic_name has to be a valid pointer for as long as @p magic is used. + * + * @see eina_magic_string_set() + */ +EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic, + const char *magic_name) EINA_ARG_NONNULL(2); + +/** + * @def EINA_MAGIC_NONE + * Random value for specifying that a structure using the magic + * feature has already been freed. It is used by eina_magic_fail(). + * + * If the magic feature of Eina is disabled, #EINA_MAGIC_NONE is just + * @c 0. + */ +#define EINA_MAGIC_NONE 0x1234fedc + +#ifdef EINA_MAGIC_DEBUG + +/** + * @def EINA_MAGIC + * Declaration of a variable of type #Eina_Magic. To put in a structure + * when one wants to use the magic feature of Eina with the functions + * of that structure, like that: + * + * @code + * struct Foo + * { + * int i; + * + * EINA_MAGIC + * }; + * @endcode + * + * If the magic feature of Eina is disabled, #EINA_MAGIC does nothing. + */ +#define EINA_MAGIC Eina_Magic __magic; + +/** + * @def EINA_MAGIC_SET(d, m) + * Set the magic number of @p d to @p m. @p d must be a valid pointer + * to a structure holding an Eina magic number declaration. Use + * #EINA_MAGIC to add such declaration. + * + * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just + * the value @c 0. + */ +#define EINA_MAGIC_SET(d, m) (d)->__magic = (m) + +/** + * @def EINA_MAGIC_CHECK(d, m) + * Test if @p d is @c NULL or not, and if not @c NULL, if + * @p d->__eina_magic is equal to @p m. @p d must be a structure that + * holds an Eina magic number declaration. Use #EINA_MAGIC to add such + * declaration. + * + * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just + * the value @c 1. + */ +#define EINA_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m))) + +/** + * @def EINA_MAGIC_FAIL(d, m) + * Call eina_magic_fail() with the parameters @p d, @p d->__magic, @p + * m, __FILE__, __FUNCTION__ and __LINE__. @p d must be a structure that + * holds an Eina magic number declaration. Use #EINA_MAGIC to add such + * declaration. + * + * If the magic feature of Eina is disabled, #EINA_MAGIC_FAIL does + * nothing. + */ +#define EINA_MAGIC_FAIL(d, m) \ + eina_magic_fail((void *)(d), \ + (d) ? (d)->__magic : 0, \ + (m), \ + __FILE__, \ + __FUNCTION__, \ + __LINE__); + +/** + * @brief Display a message or abort if a magic check failed. + * + * @param d The checked data pointer. + * @param m The magic identifer to check. + * @param req_m The requested magic identifier to check. + * @param file The file in which the magic check failed. + * @param fnc The function in which the magic check failed. + * @param line The line at which the magic check failed. + * + * @warning You should @b strongly consider using @ref EINA_MAGIC_FAIL(d, m) + * instead. + * + * This function displays an error message if a magic check has + * failed, using the following logic in the following order: + * @li If @p d is @c NULL, a message warns about a @c NULL pointer. + * @li Otherwise, if @p m is equal to #EINA_MAGIC_NONE, a message + * warns about a handle that was already freed. + * @li Otherwise, if @p m is equal to @p req_m, a message warns about + * a handle that is of wrong type. + * @li Otherwise, a message warns you about ab-using that function... + * + * If the environment variable EINA_LOG_ABORT is set, abort() is + * called and the program stops. It is useful for debugging programs + * with gdb. + */ +EAPI void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m, + const char *file, const char *fnc, + int line) EINA_ARG_NONNULL(4, 5); + +#else + +/** + * @cond LOCAL + */ + +#define EINA_MAGIC +#define EINA_MAGIC_SET(d, m) ((void)0) +#define EINA_MAGIC_CHECK(d, m) (1) +#define EINA_MAGIC_FAIL(d, m) ((void)0) + +#define eina_magic_fail(d, m, req_m, file, fnx, line) ((void)0) + +/** + * @endcond + */ + +#endif + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_MAGIC_H_ */ diff --git a/libraries/eina/src/include/eina_main.h b/libraries/eina/src/include/eina_main.h new file mode 100644 index 0000000..fa34d59 --- /dev/null +++ b/libraries/eina/src/include/eina_main.h @@ -0,0 +1,162 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_MAIN_H_ +#define EINA_MAIN_H_ + +#include "eina_types.h" + +/** + * @addtogroup Eina_Main_Group Main + * + * @brief These functions provide general initialisation and shut down + * functions. + */ + +/** + * @addtogroup Eina_Core_Group Core + * + * @{ + */ + +/** + * @defgroup Eina_Main_Group Main + * + * @{ + */ + +/** + * @def EINA_VERSION_MAJOR + * @brief Major version of Eina + */ +#define EINA_VERSION_MAJOR 1 + +/** + * @def EINA_VERSION_MINOR + * @brief Minor version of Eina + */ +#define EINA_VERSION_MINOR 0 + +/** + * @typedef Eina_Version + * The version of Eina. + */ +typedef struct _Eina_Version +{ + int major; /**< Major component of the version */ + int minor; /**< Minor component of the version */ + int micro; /**< Micro component of the version */ + int revision; /**< Revision component of the version */ +} Eina_Version; + +EAPI extern Eina_Version *eina_version; + +/** + * @brief Initialize the Eina library. + * + * @return 1 or greater on success, 0 on error. + * + * This function sets up all the eina modules. It returns 0 on + * failure (that is, when one of the module fails to initialize), + * otherwise it returns the number of times it has already been + * called. + * + * When Eina is not used anymore, call eina_shutdown() to shut down + * the Eina library. + */ +EAPI int eina_init(void); + +/** + * @brief Shut down the Eina library. + * + * @return 0 when all the modules is completely shut down, 1 or + * greater otherwise. + * + * This function shuts down the Eina library. It returns 0 when it has + * been called the same number of times than eina_init(). In that case + * it shut down all the Eina modules. + * + * Once this function succeeds (that is, @c 0 is returned), you must + * not call any of the Eina function anymore. You must call + * eina_init() again to use the Eina functions again. + */ +EAPI int eina_shutdown(void); + +/** + * @brief Initialize the mutexes of the Eina library. + * + * @return 1 or greater on success, 0 on error. + * + * This function sets up all the mutexes in all eina modules. It returns 0 on + * failure (that is, when one of the module fails to initialize), + * otherwise it returns the number of times it has already been + * called. + * + * When the mutexes are not used anymore, call eina_threads_shutdown() to shut down + * the mutexes. + * + * This function should never be called outside of the main loop. + */ +EAPI int eina_threads_init(void); + +/** + * @brief Shut down mutexes in the Eina library. + * + * @return 0 when all mutexes are completely shut down, 1 or + * greater otherwise. + * + * This function shuts down the mutexes in the Eina library. It returns 0 when it has + * been called the same number of times than eina_threads_init(). In that case + * it shut down all the mutexes. + * + * Once this function succeeds (that is, @c 0 is returned), you must + * not call any of the Eina function in a thread anymore. You must call + * eina_threads_init() again to use the Eina functions in a thread again. + * + * This function should never be called outside of the main loop. + */ +EAPI int eina_threads_shutdown(void); + +/** + * @brief Check if you are calling this function from the same thread Eina was initialized or not + * @since 1.1.0 + * + * Most EFL function are not thread safe and all the call need to happen in + * the main loop. With this call you could know if you can call an EFL + * function or not. + */ +EAPI Eina_Bool eina_main_loop_is(void); + +/** + * @brief You should never use that function excpet if you really really know what your are doing. + * @since 1.1.0 + * + * If you are reading this documentation, that certainly means you don't know what is the purpose of + * this call and you should just not use it. + */ +EAPI void eina_main_loop_define(void); + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_MAIN_H_ */ diff --git a/libraries/eina/src/include/eina_matrixsparse.h b/libraries/eina/src/include/eina_matrixsparse.h new file mode 100644 index 0000000..97d1ca5 --- /dev/null +++ b/libraries/eina/src/include/eina_matrixsparse.h @@ -0,0 +1,399 @@ +/* EINA - EFL data type library + * Copyright (C) 2009 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_MATRIXSPARSE_H_ +#define EINA_MATRIXSPARSE_H_ + +#include + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_iterator.h" +#include "eina_accessor.h" + +/** + * @addtogroup Eina_Matrixsparse_Group Sparse Matrix + * + * @brief These functions provide matrix sparse management. + * + * For more information, you can look at the @ref tutorial_matrixsparse_page. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Matrixsparse_Group Sparse Matrix + * + * @{ + */ + +/** + * @typedef Eina_Matrixsparse + * Type for a generic sparse matrix. + */ +typedef struct _Eina_Matrixsparse Eina_Matrixsparse; + +/** + * @typedef Eina_Matrixsparse_Row + * Type for a generic sparse matrix row, opaque for users. + */ +typedef struct _Eina_Matrixsparse_Row Eina_Matrixsparse_Row; + +/** + * @typedef Eina_Matrixsparse_Cell + * Type for a generic sparse matrix cell, opaque for users. + */ +typedef struct _Eina_Matrixsparse_Cell Eina_Matrixsparse_Cell; + +/* constructors and destructors */ + +/** + * @brief Create a new Sparse Matrix. + * + * @param rows number of rows in matrix. Operations with rows greater than this + * value will fail. + * @param cols number of columns in matrix. Operations with columns greater + * than this value will fail. + * @param free_func used to delete cell data contents, used by + * eina_matrixsparse_free(), eina_matrixsparse_size_set(), + * eina_matrixsparse_row_idx_clear(), + * eina_matrixsparse_column_idx_clear(), + * eina_matrixsparse_cell_idx_clear() and possible others. + * @param user_data given to @a free_func as first parameter. + * + * @return newly allocated matrix or NULL if allocation failed and eina_error + * is set. + */ +EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows, + unsigned long cols, + void (*free_func)(void *user_data, + void *cell_data), + const void *user_data); + +/** + * @brief Free resources allocated to Sparse Matrix. + * + * @param m The Sparse Matrix instance to free, must @b not be @c NULL. + */ +EAPI void eina_matrixsparse_free(Eina_Matrixsparse *m); + +/* size manipulation */ + +/** + * @brief Get the current size of Sparse Matrix. + * + * The given parameters are guaranteed to be set if they're not NULL, + * even if this function fails (ie: @a m is not a valid matrix instance). + * + * @param m the sparse matrix to operate on. + * @param rows returns the number of rows, may be NULL. If @a m is invalid, + * returned value is zero, otherwise it's a positive integer. + * @param cols returns the number of columns, may be NULL. If @a m is + * invalid, returned value is zero, otherwise it's a positive integer. + */ +EAPI void eina_matrixsparse_size_get(const Eina_Matrixsparse *m, + unsigned long *rows, + unsigned long *cols); + +/** + * @brief Resize the Sparse Matrix. + * + * This will resize the sparse matrix, possibly freeing cells on rows + * and columns that will cease to exist. + * + * @param m the sparse matrix to operate on. + * @param rows the new number of rows, must be greater than zero. + * @param cols the new number of columns, must be greater than zero. + * @return 1 on success, 0 on failure. + * + * @warning cells, rows or columns are not reference counted and thus + * after this call any reference might be invalid if instance were + * freed. + */ +EAPI Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse *m, + unsigned long rows, + unsigned long cols); + +/* data getting */ + +/** + * Get the cell reference inside Sparse Matrix. + * + * @param m the sparse matrix to operate on. + * @param row the new number of row to clear. + * @param col the new number of column to clear. + * @param cell pointer to return cell reference, if any exists. + * + * @return 1 on success, 0 on failure. It is considered success if did not + * exist but index is inside matrix size, in this case @c *cell == NULL + * + * @see eina_matrixsparse_cell_data_get() + * @see eina_matrixsparse_data_idx_get() + */ +EAPI Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col, Eina_Matrixsparse_Cell **cell); + +/** + * Get data associated with given cell reference. + * + * @param cell given cell reference, must @b not be @c NULL. + * + * @return data associated with given cell. + * + * @see eina_matrixsparse_cell_idx_get() + * @see eina_matrixsparse_data_idx_get() + */ +EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell); + +/** + * Get data associated with given cell given its indexes. + * + * @param m the sparse matrix to operate on. + * @param row the new number of row to clear. + * @param col the new number of column to clear. + * + * @return data associated with given cell or NULL if nothing is associated. + * + * @see eina_matrixsparse_cell_idx_get() + * @see eina_matrixsparse_cell_data_get() + */ +EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col); + +/** + * Get position (indexes) of the given cell. + * + * @param cell the cell reference, must @b not be @c NULL. + * @param row where to store cell row number, may be @c NULL. + * @param col where to store cell column number, may be @c NULL. + * + * @return 1 on success, 0 otherwise (@c cell is @c NULL). + */ +EAPI Eina_Bool eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell, unsigned long *row, unsigned long *col); + +/* data setting */ + +/** + * Change cell reference value without freeing the possibly existing old value. + * + * @param cell the cell reference, must @b not be @c NULL. + * @param data new data to set. + * @param p_old returns the old value intact (not freed). + * + * @return 1 on success, 0 otherwise (@a cell is @c NULL). + * + * @see eina_matrixsparse_cell_data_set() + * @see eina_matrixsparse_data_idx_replace() + */ +EAPI Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell, const void *data, void **p_old); + +/** + * Change cell value freeing the possibly existing old value. + * + * In contrast to eina_matrixsparse_cell_data_replace(), this function will + * call @c free_func() on existing value. + * + * @param cell the cell reference, must @b not be @c NULL. + * @param data new data to set. + * + * @return 1 on success, 0 otherwise (@a cell is @c NULL). + * + * @see eina_matrixsparse_cell_data_replace() + * @see eina_matrixsparse_data_idx_set() + */ +EAPI Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data); + +/** + * Change cell value without freeing the possibly existing old value, using + * indexes. + * + * @param m the sparse matrix, must @b not be @c NULL. + * @param row the row number to set the value. + * @param col the column number to set the value. + * @param data new data to set. + * @param p_old returns the old value intact (not freed). + * + * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid). + * + * @see eina_matrixsparse_cell_data_replace() + * @see eina_matrixsparse_data_idx_set() + */ +EAPI Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data, void **p_old); + +/** + * Change cell value freeing the possibly existing old value, using + * indexes. + * + * In contrast to eina_matrixsparse_data_idx_replace(), this function will + * call @c free_func() on existing value. + * + * @param m the sparse matrix, must @b not be @c NULL. + * @param row the row number to set the value. + * @param col the column number to set the value. + * @param data new data to set. + * + * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid). + * + * @see eina_matrixsparse_cell_data_replace() + */ +EAPI Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data); + +/* data deleting */ + +/** + * Clear (erase all cells) of row given its index. + * + * Existing cells will be cleared with @c free_func() given to + * eina_matrixsparse_new(). + * + * @param m the sparse matrix to operate on. + * @param row the new number of row to clear. + * + * @return 1 on success, 0 on failure. It is considered success if row + * had no cells filled. Failure is asking for clear row outside + * matrix size. + * + * @warning cells, rows or columns are not reference counted and thus + * after this call any reference might be invalid if instance were + * freed. + */ +EAPI Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row); + +/** + * Clear (erase all cells) of column given its index. + * + * Existing cells will be cleared with @c free_func() given to + * eina_matrixsparse_new(). + * + * @param m the sparse matrix to operate on. + * @param col the new number of column to clear. + * + * @return 1 on success, 0 on failure. It is considered success if column + * had no cells filled. Failure is asking for clear column outside + * matrix size. + * + * @warning cells, rows or columns are not reference counted and thus + * after this call any reference might be invalid if instance were + * freed. + */ +EAPI Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col); + +/** + * Clear (erase) cell given its indexes. + * + * Existing cell will be cleared with @c free_func() given to + * eina_matrixsparse_new(). + * + * @param m the sparse matrix to operate on. + * @param row the new number of row to clear. + * @param col the new number of column to clear. + * + * @return 1 on success, 0 on failure. It is considered success if did not + * exist but index is inside matrix size. + * + * @warning cells, rows or columns are not reference counted and thus + * after this call any reference might be invalid if instance were + * freed. Note that this call might delete container column and + * row if this cell was the last remainder. + */ +EAPI Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, unsigned long row, unsigned long col); + +/** + * Clear (erase) cell given its reference. + * + * @param cell the cell reference, must @b not be @c NULL. + * + * @return 1 on success, 0 on failure. + * + * @warning cells, rows or columns are not reference counted and thus + * after this call any reference might be invalid if instance were + * freed. Note that this call might delete container column and + * row if this cell was the last remainder. + */ +EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell); + +/* iterators */ + +/** + * Creates a new iterator over existing matrix cells. + * + * This is a cheap walk, it will just report existing cells and holes + * in the sparse matrix will be ignored. That means the reported + * indexes will not be sequential. + * + * The iterator data will be the cell reference, one may query current + * position with eina_matrixsparse_cell_position_get() and cell value + * with eina_matrixsparse_cell_data_get(). + * + * @param m The Sparse Matrix reference, must @b not be @c NULL. + * @return A new iterator. + * + * @warning if the matrix structure changes then the iterator becomes + * invalid! That is, if you add or remove cells this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m); + +/** + * Creates a new iterator over all matrix cells. + * + * Unlike eina_matrixsparse_iterator_new() this one will report all + * matrix cells, even those that are still empty (holes). These will + * be reported as dummy cells that contains no data. + * + * Be aware that iterating a big matrix (1000x1000) will call your + * function that number of times (1000000 times in that case) even if + * your matrix have no elements at all! + * + * The iterator data will be the cell reference, one may query current + * position with eina_matrixsparse_cell_position_get() and cell value + * with eina_matrixsparse_cell_data_get(). If cell is empty then the + * reference will be a dummy/placeholder, thus setting value with + * eina_matrixsparse_cell_data_set() will leave pointer unreferenced. + * + * @param m The Sparse Matrix reference, must @b not be @c NULL. + * @return A new iterator. + * + * @warning if the matrix structure changes then the iterator becomes + * invalid! That is, if you add or remove cells this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_MATRIXSPARSE_H_ */ diff --git a/libraries/eina/src/include/eina_mempool.h b/libraries/eina/src/include/eina_mempool.h new file mode 100644 index 0000000..796bc9e --- /dev/null +++ b/libraries/eina/src/include/eina_mempool.h @@ -0,0 +1,123 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_MEMPOOL_H_ +#define EINA_MEMPOOL_H_ + +#include "eina_types.h" +#include "eina_error.h" +#include "eina_module.h" + + +/** + * @addtogroup Eina_Memory_Pool_Group Memory Pool + * + * @brief These functions provide memory pool management. + * + * Several mempool are available: + * + * @li @c buddy: It uses the + * "buddy + * allocator" algorithm but the Eina implementation differs in the + * sense that the chunk information is not stored on the chunk itself, + * but on another memory area. This is useful for cases where the + * memory to manage might be slower to access, or limited (like video + * memory). + * @li @c chained_pool: It is the default one. It allocates a big + * chunk of memory with malloc() and split the result in chunks of the + * requested size that are pushed inside a stack. When requested, it + * takes this pointer from the stack to give them to whoever wants + * them. + * @li @c ememoa_fixed and @c ememoa_unknown: experimental allocators + * which could be useful when a fixed amount of memory is needed. + * @li @c fixed_bitmap: It allocates with malloc) 32* the requested + * size and push the pool pointer in an rbtree. To find empty space in + * a pool, it will just search for the first bit set in an int (32 + * bits). Then, when a pointer is freed, it will do a search inside + * the rbtree. + * @li @c pass_through: it just call malloc() and free(). It may be + * faster on some computers than using our own allocators (like having + * a huge L2 cache, over 4MB). + * @li @c one_big: It call just one time malloc for the requested number + * of items. Useful when you know in advance how many object of some + * type will live during the life of the mempool. + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Memory_Pool_Group Memory Pool + * + * @{ + */ + +/** + * @typedef Eina_Mempool + * Mempool type. + */ +typedef struct _Eina_Mempool Eina_Mempool; + +/** + * @typedef Eina_Mempool_Backend + * Mempool backend type. + */ +typedef struct _Eina_Mempool_Backend Eina_Mempool_Backend; + + +/** + * @typedef Eina_Mempool_Repack_Cb + * Type for a callback who need to unreference an old object from a mempool + * and reference the new one instead. Memcpy is taken care by the mempool. + */ +typedef void (*Eina_Mempool_Repack_Cb)(void *dst, void *src, void *data); + +EAPI extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE; + +EAPI Eina_Mempool *eina_mempool_add(const char *module, const char *context, const char *options, ...) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); +EAPI void eina_mempool_del(Eina_Mempool *mp) EINA_ARG_NONNULL(1); + +static inline void *eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline void *eina_mempool_malloc(Eina_Mempool *mp, unsigned int size) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline void eina_mempool_free(Eina_Mempool *mp, void *element) EINA_ARG_NONNULL(1); + +EAPI void eina_mempool_repack(Eina_Mempool *mp, + Eina_Mempool_Repack_Cb cb, + void *data) EINA_ARG_NONNULL(1, 2); +EAPI void eina_mempool_gc(Eina_Mempool *mp) EINA_ARG_NONNULL(1); +EAPI void eina_mempool_statistics(Eina_Mempool *mp) EINA_ARG_NONNULL(1); + +EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1); +EAPI void eina_mempool_unregister(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1); + +EAPI unsigned int eina_mempool_alignof(unsigned int size); + +#include "eina_inline_mempool.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_MEMPOOL_H_ */ diff --git a/libraries/eina/src/include/eina_mmap.h b/libraries/eina/src/include/eina_mmap.h new file mode 100644 index 0000000..d7e3819 --- /dev/null +++ b/libraries/eina/src/include/eina_mmap.h @@ -0,0 +1,59 @@ +#ifndef EINA_MMAP_H_ +#define EINA_MMAP_H_ + +/** + * @addtogroup Eina_Mmap_Group Mmap Group + * + * @brief These functions provide helpers for safe mmap handling + * + * @{ + * + * @since 1.1.0 + */ + +/** + * @brief Enable or disable safe mmaped IO handling + * + * @param enabled The enabled state (to enable, pass EINA_TRUE) + * + * This enables (if possible on your platform) a signal handler for + * SIGBUS, that replaces the "bad page" with a pzge of 0's (from /dev/zero) + * if a SIGBUS occurs. This allows for safe mmap() of files that may truncate + * or from files on devices with IO errors. Normally these cases will result + * in a SIGBUS being delivered (and termination of yyour process), but + * when "mmap safety" is enabled, this will not occur. Instead a page of + * bytes of the value 0 will replace the "bad page", allowing the process + * to continue and allow its own parsing error detection to safely abort + * the operation without the process falling apart. + * + * If you disable mmap safety, the SIGBUS handler will be restored to its + * default handler. Note that eina_file_map_all() and eina_file_map_new() + * will automatically enable mmap safety as they provide an mmaped file IO + * layer, and rely on mmap to not fail for any part of the file. + * + * If you set up your own SIGBUS handler, then this will effectively disable + * the safe mmap handling and make you liable to crashes on IO to or from + * such "damaged files" that would take down your process. + * + * @since 1.1.0 + */ +EAPI Eina_Bool +eina_mmap_safety_enabled_set(Eina_Bool enabled); + +/** + * @brief Get the enabled state of mmap safety. + * + * @return The safety state (EINA_TRUE if enabled) + * + * This returns the mmap safety state set by eina_mmap_safety_enabled_set(). + * See eina_mmap_safety_enabled_set() for more information. + * + * @since 1.1.0 + */ +EAPI Eina_Bool +eina_mmap_safety_enabled_get(void); + +/** + * @} + */ +#endif diff --git a/libraries/eina/src/include/eina_module.h b/libraries/eina/src/include/eina_module.h new file mode 100644 index 0000000..58e38f9 --- /dev/null +++ b/libraries/eina/src/include/eina_module.h @@ -0,0 +1,343 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_MODULE_H_ +#define EINA_MODULE_H_ + +#include "eina_types.h" +#include "eina_array.h" +#include "eina_error.h" + +/** + * @addtogroup Eina_Module_Group Module + * + * @brief These functions provide module management. + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Module_Group Module + * + * Eina module provides some helpers over POSIX dlopen(). It is not + * meant to replace, abstract or make a "portable" version of the + * POSIX, but enhance its usage by defining some good practices. + * + * Modules are created with eina_module_new() and later loaded with + * eina_module_load(). Loads are reference counted and there must be + * the same number of eina_module_unload() in order to have it to call + * dlclose(). This makes simple to have different users for the same + * module. + * + * The loaded shared objects may have two visible functions that will + * be called and might provide initialization and shutdown + * proceedures. The symbols are @c __eina_module_init and + * @c __eina_module_shutdown and will be defined by the macros + * EINA_MODULE_INIT() and EINA_MODULE_SHUTDOWN(). + * + * There are some helpers to automatically create modules based on + * directory listing. See eina_module_arch_list_get(), + * eina_module_list_get() and eina_module_find(). + * + * @{ + */ + +/** + * @typedef Eina_Module + * Dynamic module loader handle. + */ +typedef struct _Eina_Module Eina_Module; + +typedef Eina_Bool (*Eina_Module_Cb)(Eina_Module *m, void *data); + +/** + * @typedef Eina_Module_Init + * If a function with such signature is exported by module as + * __eina_module_init, it will be called on the first load after + * dlopen() and if #EINA_FALSE is returned, load will fail, #EINA_TRUE + * means the module was successfully initialized. + * @see Eina_Module_Shutdown + */ +typedef Eina_Bool (*Eina_Module_Init)(void); + +/** + * @typedef Eina_Module_Shutdown + * If a function with such signature is exported by module as + * __eina_module_shutdown, it will be called before calling dlclose() + * @see Eina_Module_Init + */ +typedef void (*Eina_Module_Shutdown)(void); + +/** + * @def EINA_MODULE_INIT + * declares the given function as the module initializer (__eina_module_init). + * It must be of signature #Eina_Module_Init + */ +#define EINA_MODULE_INIT(f) EAPI Eina_Module_Init __eina_module_init = &f + +/** + * @def EINA_MODULE_SHUTDOWN + * declares the given function as the module shutdownializer + * (__eina_module_shutdown). It must be of signature + * #Eina_Module_Shutdown + */ +#define EINA_MODULE_SHUTDOWN(f) EAPI Eina_Module_Shutdown __eina_module_shutdown = &f + +/** + * @var EINA_ERROR_WRONG_MODULE + * Error identifier corresponding to a wrong module. + */ +extern EAPI Eina_Error EINA_ERROR_WRONG_MODULE; + +/** + * @var EINA_ERROR_MODULE_INIT_FAILED + * Error identifier corresponding to a failure during the initialisation of a module. + */ +extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED; + +/** + * @brief Return a new module. + * + * @param file The name of the file module to load. + * + * This function returns a new module. If @p file is @c NULL, the + * function returns @c NULL, otherwise, it allocates an Eina_Module, + * stores a duplicate string of @p file, sets its reference to @c 0 + * and its handle to @c NULL. + * + * When the new module is not needed anymore, use eina_module_free() + * to free the allocated memory. + * + * @see eina_module_load + */ +EAPI Eina_Module * + eina_module_new(const char *file) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Delete a module. + * + * @param m The module to delete. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * This function calls eina_module_unload() if @p m has been previously + * loaded and frees the allocated memory. On success this function + * returns EINA_TRUE and EINA_FALSE otherwise. If @p m is @c NULL, the + * function returns immediately. + */ +EAPI Eina_Bool + eina_module_free(Eina_Module *m) EINA_ARG_NONNULL(1); + +/** + * @brief Load a module. + * + * @param m The module to load. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * This function load the shared file object passed in + * eina_module_new(). If it is a internal Eina module (like the + * mempools), it also initialize it. It the shared file object can not + * be loaded, the error #EINA_ERROR_WRONG_MODULE is set and + * #EINA_FALSE is returned. If it is a internal Eina module and the + * module can not be initialized, the error + * #EINA_ERROR_MODULE_INIT_FAILED is set and #EINA_FALSE is + * returned. If the module has already been loaded, it's refeence + * counter is increased by one and #EINA_TRUE is returned. If @p m is + * @c NULL, the function returns immediately #EINA_FALSE. + * + * When the symbols of the shared file objetcts are not needed + * anymore, call eina_module_unload() to unload the module. + */ +EAPI Eina_Bool + eina_module_load(Eina_Module *module) EINA_ARG_NONNULL(1); + +/** + * @brief Unload a module. + * + * @param m The module to load. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * This function unload the module @p m that has been previously + * loaded by eina_module_load(). If the reference counter of @p m is + * strictly greater than @c 1, #EINA_FALSE is returned. Otherwise, the + * shared object file is closed and if it is a internal Eina module, it + * is shutted down just before. In that case, #EINA_TRUE is + * returned. In all case, the reference counter is decreased. If @p m + * is @c NULL, the function returns immediately #EINA_FALSE. + */ +EAPI Eina_Bool + eina_module_unload(Eina_Module *m) EINA_ARG_NONNULL(1); + +/** + * @brief Retrive the data associated to a symbol. + * + * @param m The module. + * @param symbol The symbol. + * @return The data associated to the symbol, or @c NULL on failure. + * + * This function returns the data associated to @p symbol of @p m. @p + * m must have been loaded before with eina_module_load(). If @p m + * is @c NULL, or if it has not been correctly loaded before, the + * function returns immediately @c NULL. + */ +EAPI void * + eina_module_symbol_get(const Eina_Module *module, const char *symbol) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Return the file name associated to the module. + * + * @param m The module. + * @return The file name. + * + * This function returns the file name passed in eina_module_new(). If + * @p m is @c NULL, the function returns immediately @c NULL. The + * returned value must no be freed. + */ +EAPI const char * + eina_module_file_get(const Eina_Module *m) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + + +/** + * @brief Return the path built from the location of a library and a + * given sub directory. + * + * @param symbol The symbol to search for. + * @param sub_dir The subdirectory to append. + * @return The built path on success, @c NULL otherwise. + * + * This function returns the path built by concatenating the path of + * the library containing the symbol @p symbol and @p sub_dir. @p sub_dir + * can be @c NULL. The returned path must be freed when not used + * anymore. If the symbol is not found, or dl_addr() is not supported, + * or allocation fails, this function returns @c NULL. + */ +EAPI char * + eina_module_symbol_path_get(const void *symbol, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2); + +/** + * @brief Return the path built from the value of an environment varialbe and a + * given sub directory. + * + * @param env The environment variable to expand. + * @param sub_dir The subdirectory to append. + * @return The built path on success, @c NULL otherwise. + * + * This function returns the path built by concatenating the value of + * the environment variable named @p env and @p sub_dir. @p sub_dir + * can be @c NULL. The returned path must be freed when not used + * anymore. If the symbol is not found, or @p env does not exist, or + * allocation fails, this function returns @c NULL. + */ +EAPI char * + eina_module_environment_path_get(const char *env, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2); + + +/** + * @brief Get an array of modules found on the directory path matching an arch type. + * + * @param array The array that stores the list of the modules. + * @param path The directory's path to search for modules. + * @param arch The architecture string. + * + * This function adds to @p array the module names found in @p path + * which match the cpu architecture @p arch. If @p path or @p arch is + * @c NULL, the function returns immediately @p array. @p array can be + * @c NULL. In that case, it is created with 4 elements. + */ +EAPI Eina_Array * + eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch); + +/** + * @brief Get a list of modules found on the directory path. + * + * @param array The array that stores the list of the modules. + * @param path The directory's path to search for modules. + * @param recursive Iterate recursively on the path. + * @param cb Callback function to call on each module. + * @param data Data passed to the callback function. + * + * This function adds to @p array the list of modules found in + * @p path. If @p recursive is #EINA_TRUE, then recursive search is + * done. The callback @p cb is called on each module found, and @p data + * is passed to @p cb. If @p path is @c NULL, the function returns + * immediately @p array. If the returned value of @p cb is 0, the + * module will not be added to the list, otherwise it will be added. + * @p array can be @c NULL. In that case, it is created with 4 + * elements. @p cb can be @c NULL. + */ +EAPI Eina_Array * + 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; + +/** + * @brief Load every module on the list of modules. + * + * @param array The array of modules to load. + * + * This function calls eina_module_load() on each element found in + * @p array. If @p array is @c NULL, this function does nothing. + */ +EAPI void + eina_module_list_load(Eina_Array *list) EINA_ARG_NONNULL(1); + +/** + * @brief Unload every module on the list of modules. + * + * @param array The array of modules to unload. + * + * This function calls eina_module_unload() on each element found in + * @p array. If @p array is @c NULL, this function does nothing. + */ +EAPI void + eina_module_list_unload(Eina_Array *list) EINA_ARG_NONNULL(1); + +/** + * @p Free every module on the list of modules. + * + * @param array The array of modules to free. + * + * This function calls eina_module_free() on each element found in + * @p array. If @p array is @c NULL, this function does nothing. + */ +EAPI void + eina_module_list_free(Eina_Array *list) EINA_ARG_NONNULL(1); + +/** + * @brief Find an module in array. + * + * @param array The array to find the module. + * @param module The name of module to be searched. + * + * This function finds an @p module in @p array. + * If the element is found the function returns the module, else + * @c NULL is returned. + */ +EAPI Eina_Module * + eina_module_find(const Eina_Array *array, const char *module) EINA_ARG_NONNULL(1, 2); + +/** + * @} + */ + +/** + * @} + */ + +#endif /*EINA_MODULE_H_*/ diff --git a/libraries/eina/src/include/eina_prefix.h b/libraries/eina/src/include/eina_prefix.h new file mode 100644 index 0000000..b59080b --- /dev/null +++ b/libraries/eina/src/include/eina_prefix.h @@ -0,0 +1,228 @@ +#ifndef EINA_PREFIX_H_ +#define EINA_PREFIX_H_ + +/** + * @addtogroup Eina_Prefix_Group Prefix Group + * + * @brief These functions provide the ability to determine the runtime + * location of a software package + * + * @{ + * + * @since 1.1.0 + */ + +/** + * @typedef Eina_Prefix + * This is a prefix object that is returned by eina_prefix_new() when trying + * to determine the runtime location of the software in question so other + * data files such as images, sound files, other executable utilities, + * libraries, modules and locale files can be found. + * + * @since 1.1.0 + */ +typedef struct _Eina_Prefix Eina_Prefix; + +/** + * @brief Create a new prefix handle given some input information + * + * @param argv0 If this is an executable this is argv[0] of the binary, or NULL if it is used from a shared library + * @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 + * @param envprefix This is the prefix to any environment variables that may override prefix detection and give the exact location of the software + * @param sharedir This is the directory inside the standard share or data dir where the software will store data files + * @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 + * @param pkg_bin This is the compile-time binary install dir + * @param pkg_lib This is the compile-time library install dir + * @param pkg_data This is the compile-time share/data install dir + * @param pkg_locale This is the compile-time locale install dir + * @return The prefix handle, or NULL on failure + * + * Applications and libraries are most often not just single executables nor + * single shared library binares, but also come with extra modules they + * have to load, extra binary utilities they need to run, or have data files + * they need to load. A very primitve application ASSUMES a fixed install + * location at compile-time, but this disallows the ability to re-locate + * the application (or library) somewhere else after compilation (if you run + * out of space on a given disk, partition etc. for example), or necessitate + * the need for having to maintain environment variables for every piece of + * software to let it know its location, or have to use large sets of + * symlinks pointing from the compiled location to the new one. + * + * Being re-locatable at runtime allows much easier distribution and + * installation into places like the users own home directory, instead of + * on a system partition, if the developer wishes for easier distribution + * of pre-compiled binaries. + * + * The prefix system is designed to locate where the given software is + * installed (under a common prefix) at runtime and then report specific + * locations of this prefix and common directories inside this prefix like + * the binary, library, data and locale directories. + * + * To do this some information needs to be provided to eina_prefix_new(). If + * you have developed a binary executable, then provide argv[0] as the @p argv0 + * argument. This plus the PATH environment variable help the prefix system + * to determine its location. Call eina_prefix_new() early on before you + * change working directory or anything about argv[0] so it gets accurate + * information. It will use the first argument, being the executable itself, + * to look in absolute directories, relative paths and PATH to see if it + * finds the right executable to determine just where the actual binary is + * installed and being run from. If you develop a share library, just pass + * NULL as argv0 + * + * It would prefer to use the @p symbol function to determine location as + * that function will be unique inside the application and try and trace + * back which file this function comes from (be it a binary or shared library) + * as this avoids more expensive searches via @p argv0. It will use this + * symbol if given in preference to argv0. + * + * The @p envprefix parameter, provides a string prefix to prepend before + * environment variables to allow a fallback to specific environment variables + * to locate the software. For example if "MYAPP" is provided a the prefix, + * then it uses "MYAPP_PREFIX" as a master environment variable to specify + * the exact install prefix for the software, or more specific environment + * variables like "MYAPP_BIN_DIR", "MYAPP_LIB_DIR", "MYAPP_DATA_DIR" and + * "MYAPP_LOCALE_DIR" which can be set by the user or scripts before + * launching. If not provided (NULL) environment variables will not be + * used to override compiled-in defaults or auto detections. + * + * The @p sharedir string provides a subdirectory inside the system shared + * data dir for data files. For example, if the system dir is + * /usr/local/share then this dir name is appended, creating + * /usr/local/share/appname if this dir was the "appname" string. It is + * expected the application or library installs data files in this directory. + * + * The @p magicsharefile is a filename or path of something inside the share + * or data dir to be used to test that the prefix detection worked. For + * example, your app will install a wallpaper image as + * /usr/local/share/appname/images/wallpaper.jpg and so to check that this + * worked, provide "images/wallpaper.jpg" as the @p magicsharefile string + * so detection can know if it worked or not. + * + * The @p pkg_bin, @p pkg_lib, @p pkg_data and @p pkg_locale are compile-time + * strings (the kind standard autoconf/automake define) to be passed in + * so there can be a fallback to compiled-in defaults as well as use them + * to determine actual names of directories like libdirs maybe changing to + * be lib32 or lib64 instead of lib etc. + * + * Compile the following defining at compile time your prefixes like (example): + * + * gcc appname.c -o appname \ + * -DPACKAGE_BIN_DIR=/usr/local/bin \ + * -DPACKAGE_LIB_DIR=/usr/local/lib \ + * -DPACKAGE_DATA_DIR=/usr/local/share/appname \ + * -DLOCALE_DIR=/usr/local/share/locale + * + * (of course add appropriate compile flags to linking etc. etc. and note that + * locale dir is optional. if you don't need it provide data dir as the + * locale dir. also note that the magicsharefile is optional for testing and + * ensuring that the prefix check is correct. this file must be installed + * in the application data dir (eg /usr/local/share/appname) and be referred + * to using a unix-style relative path from that dir, eg directory/filename.png) + * + * @code + * static Eina_Prefix *pfx = NULL; + * + * int main(argc, char **argv) + * { + * pfx = eina_prefix_new(argv[0], main, "APPNAME", "appname", NULL, + * PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, + * PACKAGE_DATA_DIR, LOCALE_DIR); + * if (!pfx) printf("ERROR: Critical error in finding prefix\n"); + * printf("install prefix is: %s\n", eina_prefix_get(pfx)); + * printf("binaries are in: %s\n", eina_prefix_bin_get(pfx)); + * printf("libraries are in: %s\n", eina_prefix_lib_get(pfx)); + * printf("data files are in: %s\n", eina_prefix_data_get(pfx)); + * eina_prefix_free(pfx); + * } + * @endcode + * + * @since 1.1.0 + */ +EAPI Eina_Prefix * +eina_prefix_new(const char *argv0, void *symbol, const char *envprefix, + const char *sharedir, const char *magicsharefile, + const char *pkg_bin, const char *pkg_lib, + const char *pkg_data, const char *pkg_locale); + +/** + * @brief Free the prefix object and all its contents + * + * @param pfx The prefix object + * + * Free the prefix object and all its allocated content. It will be invalid + * to access the object after being freed. + * + * @since 1.1.0 + */ +EAPI void +eina_prefix_free(Eina_Prefix *pfx); + +/** + * @brief Get the prefix base directory + * + * @param pfx The prefix object + * + * This returns the base prefix (eg "/usr/local", "/usr", "/opt/appname" or + * "/home/user/myapps/appname" etc.) that the software resides in at runtime. + * + * @since 1.1.0 + */ +EAPI const char * +eina_prefix_get(Eina_Prefix *pfx); + +/** + * @brief Get the binary installation directory + * + * @param pfx The prefix object + * + * This returns the location of installed binaries (eg "/usr/local/bin", + * "/usr/bin", "/opt/appname/bin", "/home/user/myapps/appname/bin" etc.). + * + * @since 1.1.0 + */ +EAPI const char * +eina_prefix_bin_get(Eina_Prefix *pfx); + +/** + * @brief Get the library installation directory + * + * @param pfx The prefix object + * + * This returns the location of installed binaries (eg "/usr/local/lib", + * "/usr/lib32", "/opt/appname/lib64", "/home/user/myapps/appname/lib" etc.). + * + * @since 1.1.0 + */ +EAPI const char * +eina_prefix_lib_get(Eina_Prefix *pfx); + +/** + * @brief Get the data installation directory + * + * @param pfx The prefix object + * + * This returns the location of installed binaries (eg "/usr/local/share/appname", + * "/usr/share/appname", "/opt/appname/share/appname", "/home/user/myapps/appname/share/appname" etc.). + * + * @since 1.1.0 + */ +EAPI const char * +eina_prefix_data_get(Eina_Prefix *pfx); + +/** + * @brief Get the locale installation directory + * + * @param pfx The prefix object + * + * This returns the location of installed binaries (eg "/usr/local/share/locale", + * "/usr/share/locale", "/opt/appname/share/locale", "/home/user/myapps/appname/share/locale" etc.). + * + * @since 1.1.0 + */ +EAPI const char * +eina_prefix_locale_get(Eina_Prefix *pfx); + +/** + * @} + */ +#endif diff --git a/libraries/eina/src/include/eina_quadtree.h b/libraries/eina/src/include/eina_quadtree.h new file mode 100644 index 0000000..2638d8b --- /dev/null +++ b/libraries/eina/src/include/eina_quadtree.h @@ -0,0 +1,53 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_QUADTREE_H_ +#define EINA_QUADTREE_H_ + +#include "eina_config.h" + +#include "eina_inlist.h" + +typedef struct _Eina_QuadTree Eina_QuadTree; +typedef struct _Eina_QuadTree_Item Eina_QuadTree_Item; + +typedef enum { + EINA_QUAD_LEFT, + EINA_QUAD_RIGHT, + EINA_QUAD_BOTH +} Eina_Quad_Direction; + +typedef Eina_Quad_Direction (*Eina_Quad_Callback)(const void *object, size_t middle); + +EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal); +EAPI void eina_quadtree_free(Eina_QuadTree *q); +EAPI void eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h); + +EAPI void eina_quadtree_cycle(Eina_QuadTree *q); +EAPI void eina_quadtree_increase(Eina_QuadTree_Item *object); + +EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object); +EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object); +EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item *object); +EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item *object); +EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object); + +EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h); +EAPI void *eina_quadtree_object(Eina_Inlist *list); + +#endif diff --git a/libraries/eina/src/include/eina_rbtree.h b/libraries/eina/src/include/eina_rbtree.h new file mode 100644 index 0000000..8e5b730 --- /dev/null +++ b/libraries/eina/src/include/eina_rbtree.h @@ -0,0 +1,271 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_RBTREE_H__ +#define EINA_RBTREE_H__ + +#include + +#include "eina_types.h" +#include "eina_error.h" +#include "eina_iterator.h" + +/** + * @addtogroup Eina_Rbtree_Group Red-Black tree + * + * @brief These functions provide Red-Black trees management. + * + * For a brief description look at http://en.wikipedia.org/wiki/Red-black_tree . + * This code is largely inspired from a tutorial written by Julienne Walker at : + * http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx . The + * main difference is that this set of function never allocate any data, making + * them particularly useful for memory management. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Rbtree_Group Red-Black tree + * + * @{ + */ + +/** + * @typedef Eina_Rbtree_Color + * node color. + */ +typedef enum { + EINA_RBTREE_RED, + EINA_RBTREE_BLACK +} Eina_Rbtree_Color; + +/** + * @typedef Eina_Rbtree_Direction + * walk direction. + */ +typedef enum { + EINA_RBTREE_LEFT = 0, + EINA_RBTREE_RIGHT = 1 +} Eina_Rbtree_Direction; + +/** + * @typedef Eina_Rbtree + * Type for a Red-Black tree node. It should be inlined into user's type. + */ +typedef struct _Eina_Rbtree Eina_Rbtree; +struct _Eina_Rbtree +{ + Eina_Rbtree *son[2]; + + Eina_Rbtree_Color color : 1; +}; + +/** + * @def EINA_RBTREE + * recommended way to declare the inlined Eina_Rbtree in your type. + * + * @code + * struct my_type { + * EINA_RBTREE; + * int my_value; + * char *my_name; + * }; + * @endcode + * + * @see EINA_RBTREE_GET() + */ +#define EINA_RBTREE Eina_Rbtree __rbtree + +/** + * @def EINA_RBTREE_GET + * access the inlined node if it was created with #EINA_RBTREE. + */ +#define EINA_RBTREE_GET(Rbtree) (&((Rbtree)->__rbtree)) + +/** + * @def EINA_RBTREE_CONTAINER_GET + * find back the container of an red black tree. + */ +#define EINA_RBTREE_CONTAINER_GET(Ptr, Type) ((Type *)((char *)Ptr - offsetof(Type, __rbtree))) + +/** + * @typedef Eina_Rbtree_Cmp_Node_Cb + * Function used compare two nodes and see which direction to navigate. + */ +typedef Eina_Rbtree_Direction (*Eina_Rbtree_Cmp_Node_Cb)(const Eina_Rbtree *left, const Eina_Rbtree *right, void *data); + +/** + * @def EINA_RBTREE_CMP_NODE_CB + * Cast using #Eina_Rbtree_Cmp_Node_Cb + */ +#define EINA_RBTREE_CMP_NODE_CB(Function) ((Eina_Rbtree_Cmp_Node_Cb)Function) + +/** + * @typedef Eina_Rbtree_Cmp_Key_Cb + * Function used compare node with a given key of specified length. + */ +typedef int (*Eina_Rbtree_Cmp_Key_Cb)(const Eina_Rbtree *node, const void *key, int length, void *data); +/** + * @def EINA_RBTREE_CMP_KEY_CB + * Cast using #Eina_Rbtree_Cmp_Key_Cb + */ +#define EINA_RBTREE_CMP_KEY_CB(Function) ((Eina_Rbtree_Cmp_Key_Cb)Function) + +/** + * @typedef Eina_Rbtree_Free_Cb + * Function used free a node. + */ +typedef void (*Eina_Rbtree_Free_Cb)(Eina_Rbtree *node, void *data); +/** + * @def EINA_RBTREE_FREE_CB + * Cast using #Eina_Rbtree_Free_Cb + */ +#define EINA_RBTREE_FREE_CB(Function) ((Eina_Rbtree_Free_Cb)Function) + + +/** + * @brief Insert a new node inside an existing red black tree. + * + * @param root The root of an exisiting valid red black tree. + * @param node The new node to insert. + * @param cmp The callback that is able to compare two nodes. + * @param data Private data to help the compare function. + * @return The new root of the red black tree. + * + * This function insert a new node in a valid red black tree. NULL is + * an empty valid red black tree. The resulting new tree is a valid red + * black tree. This function doesn't allocate any data. + */ +EAPI 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; + +/** + * @brief Remove a node from an existing red black tree. + * + * @param root The root of a valid red black tree. + * @param node The node to remove from the tree. + * @param cmp The callback that is able to compare two nodes. + * @param data Private data to help the compare function. + * @return The new root of the red black tree. + * + * This function remove a new node in a valid red black tree that should + * contain the node that you are removing. This function will return NULL + * when the red black tree got empty. This function doesn't free any data. + */ +EAPI 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; + +/** + * @brief Delete all nodes from a valid red black tree. + * + * @param root The root of a valid red black tree. + * @param func The callback that will free each node. + * @param data Private data to help the compare function. + * + */ +EAPI void eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data) EINA_ARG_NONNULL(2); + +static 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; + + +/** + * @brief Returned a new prefix iterator associated to a rbtree. + * + * @param root The root of rbtree. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * root. It will iterate the tree using prefix walk. If @p root is @c + * NULL, this function still returns a valid iterator that will always + * return false on eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the rbtree structure changes then the iterator becomes + * invalid! That is, if you add or remove nodes this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returned a new prefix iterator associated to a rbtree. + * + * @param root The root of rbtree. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * root. It will iterate the tree using infix walk. If @p root is @c + * NULL, this function still returns a valid iterator that will always + * return false on eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the rbtree structure changes then the iterator becomes + * invalid! That is, if you add or remove nodes this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Returned a new prefix iterator associated to a rbtree. + * + * @param root The root of rbtree. + * @return A new iterator. + * + * This function returns a newly allocated iterator associated to @p + * root. It will iterate the tree using postfix walk. If @p root is @c + * NULL, this function still returns a valid iterator that will always + * return false on eina_iterator_next(), thus keeping API sane. + * + * If the memory can not be allocated, NULL is returned and + * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is + * returned. + * + * @warning if the rbtree structure changes then the iterator becomes + * invalid! That is, if you add or remove nodes this iterator + * behavior is undefined and your program may crash! + */ +EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +#include "eina_inline_rbtree.x" + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_rectangle.h b/libraries/eina/src/include/eina_rectangle.h new file mode 100644 index 0000000..57e562c --- /dev/null +++ b/libraries/eina/src/include/eina_rectangle.h @@ -0,0 +1,239 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_RECTANGLE_H_ +#define EINA_RECTANGLE_H_ + +#include "eina_types.h" + +/** + * @addtogroup Eina_Rectangle_Group Rectangle + * + * @brief These functions provide rectangle management. + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Rectangle_Group Rectangle + * + * @{ + */ + +/** + * @typedef Eina_Rectangle + * Simple rectangle structure. + */ +typedef struct _Eina_Rectangle +{ + int x; /**< top-left x co-ordinate of rectangle */ + int y; /**< top-left y co-ordinate of rectangle */ + int w; /**< width of rectangle */ + int h; /**< height of rectangle */ +} Eina_Rectangle; + +/** + * @typedef Eina_Rectangle_Pool + * Type for an opaque pool of rectangle. + */ +typedef struct _Eina_Rectangle_Pool Eina_Rectangle_Pool; + +static inline int eina_spans_intersect(int c1, int l1, int c2, int l2) EINA_WARN_UNUSED_RESULT; +static inline Eina_Bool eina_rectangle_is_empty(const Eina_Rectangle *r) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline void eina_rectangle_coords_from(Eina_Rectangle *r, int x, int y, int w, int h) EINA_ARG_NONNULL(1); +static inline Eina_Bool eina_rectangles_intersect(const Eina_Rectangle *r1, const Eina_Rectangle *r2) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; +static inline Eina_Bool eina_rectangle_xcoord_inside(const Eina_Rectangle *r, int x) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline Eina_Bool eina_rectangle_ycoord_inside(const Eina_Rectangle *r, int y) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline Eina_Bool eina_rectangle_coords_inside(const Eina_Rectangle *r, int x, int y) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; +static inline void eina_rectangle_union(Eina_Rectangle *dst, const Eina_Rectangle *src) EINA_ARG_NONNULL(1, 2); +static inline Eina_Bool eina_rectangle_intersection(Eina_Rectangle *dst, const Eina_Rectangle *src) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; +static inline void eina_rectangle_rescale_in(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) EINA_ARG_NONNULL(1, 2, 3); +static inline void eina_rectangle_rescale_out(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) EINA_ARG_NONNULL(1, 2, 3); + + +/** + * @brief Add a rectangle in a new pool. + * + * @param w The width of the rectangle. + * @param h The height of the rectangle. + * @return A newly allocated pool on success, @c NULL otherwise. + * + * This function adds the rectangle of size (@p width, @p height) to a + * new pool. If the pool can not be created, @c NULL is + * returned. Otherwise the newly allocated pool is returned. + */ +EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Return the pool of the given rectangle. + * + * @param rect The rectangle. + * @return The pool of the given rectangle. + * + * This function returns the pool in which @p rect is. If @p rect is + * @c NULL, @c NULL is returned. + */ +EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle *rect) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Return the width and height of the given pool. + * + * @param pool The pool. + * @param w The returned width. + * @param h The returned height. + * @return #EINA_TRUE on success, #EINA_FALSE otherwise. + * + * This function returns the width and height of @p pool and store + * them in respectively @p w and @p h if they are not @c NULL. If + * @p pool is @c NULL, #EINA_FALSE is returned. Otherwise #EINA_TRUE is + * returned. + */ +EAPI 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; + +/** + * @brief Get the data from the given pool. + * + * @param pool The pool. + * @return The returned data. + * + * This function gets the data from @p pool set by + * eina_rectangle_pool_data_set(). If @p pool is @c NULL, this + * function returns @c NULL. + */ +EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Set the data to the given pool. + * + * @param pool The pool. + * @param data The data to set. + * + * This function sets @p data to @p pool. If @p pool is @c NULL, this + * function does nothing. + */ +EAPI void eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data) EINA_ARG_NONNULL(1); + +/** + * @brief Free the given pool. + * + * @param pool The pool to free. + * + * This function frees the allocated data of @p pool. If @p pool is + * @c NULL, ths function returned immediately. + */ +EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1); + +/** + * @brief Return the number of rectangles in the given pool. + * + * @param pool The pool. + * @return The number of rectangles in the pool. + * + * This function returns the number of rectangles in @p pool. + */ +EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Request a rectangle of given size in the given pool. + * + * @param pool The pool. + * @param w The width of the rectangle to request. + * @param h The height of the rectangle to request. + * @return The requested rectangle on success, @c NULL otherwise. + * + * This function retrieve from @p pool the rectangle of width @p w and + * height @p h. If @p pool is @c NULL, or @p w or @p h are non-positive, + * the function returns @c NULL. If @p w or @p h are greater than the + * pool size, the function returns @c NULL. On success, the function + * returns the rectangle which matches the size (@p w, @p h). + * Otherwise it returns @c NULL. + */ +EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Remove the given rectangle from the pool. + * + * @param rect The rectangle to remove from the pool. + * + * This function removes @p rect from the pool. If @p rect is + * @c NULL, the function returns immediately. Otherwise it remoes @p + * rect from the pool. + */ +EAPI void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA_ARG_NONNULL(1); + +/** + * @def EINA_RECTANGLE_SET + * @brief Macro to set the values of a #Eina_Rectangle. + * + * @param Rectangle The rectangle to set the values. + * @param X The X coordinate of the top left corner of the rectangle. + * @param Y The Y coordinate of the top left corner of the rectangle. + * @param W The width of the rectangle. + * @param H The height of the rectangle. + * + * This macro set the values of @p Rectangle. (@p X, @p Y) is the + * coordinates of the top left corner of @p Rectangle, @p W is its + * width and @p H is its height. + */ +#define EINA_RECTANGLE_SET(Rectangle, X, Y, W, H) \ + (Rectangle)->x = X; \ + (Rectangle)->y = Y; \ + (Rectangle)->w = W; \ + (Rectangle)->h = H; + + +/** + * @brief Create a new rectangle. + * + * @param x The X coordinate of the top left corner of the rectangle. + * @param y The Y coordinate of the top left corner of the rectangle. + * @param w The width of the rectangle. + * @param h The height of the rectangle. + * @return The new rectangle on success, @ NULL otherwise. + * + * This function creates a rectangle which top left corner has the + * coordinates (@p x, @p y), with height @p w and height @p h and adds + * it to the rectangles pool. No check is done on @p w and @p h. This + * function returns a new rectangle on success, @c NULL otherwhise. + */ +EAPI Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Free the given rectangle. + * + * @param rect The rectangle to free. + * + * This function removes @p rect from the rectangles pool. + */ +EAPI void eina_rectangle_free(Eina_Rectangle *rect) EINA_ARG_NONNULL(1); + +#include "eina_inline_rectangle.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /*_EINA_RECTANGLE_H_*/ diff --git a/libraries/eina/src/include/eina_refcount.h b/libraries/eina/src/include/eina_refcount.h new file mode 100644 index 0000000..6650b01 --- /dev/null +++ b/libraries/eina/src/include/eina_refcount.h @@ -0,0 +1,76 @@ +/* EINA - EFL data type library + * Copyright (C) 20011 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_REFCOUNT_H_ +#define EINA_REFCOUNT_H_ + +/** + * @addtogroup Eina_Refcount References counting + * + * @brief Small macro that simplify references counting. + * + * References counting is not a difficult task, but you must + * handle it correctly every where, and that the issue. This + * set of macro do provide helper that will force to use the + * correct code in most case and reduce the bug likeliness. + * Of course this without affecting speed ! + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Refcount References counting + * + * @{ + */ + +/** + * @typedef Eina_Refcount + * Inlined references counting type. + */ +typedef int Eina_Refcount; + +/** Used for declaring a reference counting member in a struct */ +#define EINA_REFCOUNT Eina_Refcount __refcount + +/** Used just after allocating a object */ +#define EINA_REFCOUNT_INIT(Variable) (Variable)->__refcount = 1 + +/** Used when using referring to an object one more time */ +#define EINA_REFCOUNT_REF(Variable) (Variable)->__refcount++ + +/** Used when removing a reference to an object. The code just after will automatically be called when necessary */ +#define EINA_REFCOUNT_UNREF(Variable) \ + if (--((Variable)->__refcount) == 0) + +/** Get refcounting value */ +#define EINA_REFCOUNT_GET(Variable) (Variable)->__refcount + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_REFCOUNT_H_ */ diff --git a/libraries/eina/src/include/eina_safety_checks.h b/libraries/eina/src/include/eina_safety_checks.h new file mode 100644 index 0000000..4751e5f --- /dev/null +++ b/libraries/eina/src/include/eina_safety_checks.h @@ -0,0 +1,254 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_SAFETY_CHECKS_H_ +#define EINA_SAFETY_CHECKS_H_ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Safety_Checks_Group Safety Checks + * + * @warning @c eina_safety_checks.h should only be included by source + * files, after all other includes and before the source file + * specific includes. By source file specific includes we + * mean those that define the functions that are being + * checked. The reason for such complexity is the trick to + * avoid compiler optimizations. If compilers are told that + * some given function will never receive @c NULL + * (EINA_ARG_NONNULL(), then compiler will emit a warning if + * it detects so (good!) but will remove any checks for that + * condition as it believes it will never happen, removing + * all safety checks! By including @c eina_safety_checks.h it + * will redefine EINA_ARG_NONNULL() to void and compiler + * warning will not be emitted, but checks will be there. The + * files already processed with the old macro + * EINA_ARG_NONNULL() will still work and emit the warnings. + * + * + * @code + * + * // all these files will emit warning from EINA_ARG_NONNULL() + * #include // third party headers + * #include + * #include // eina own header + * + * #include + * // all these files below will NOT emit warning from EINA_ARG_NONNULL(), + * // but this is required to have the functions defined there to be checked + * // for NULL pointers + * #include "my_functions1.h" + * #include "my_functions2.h" + * + * @endcode + */ + +/** + * @addtogroup Eina_Safety_Checks_Group Safety Checks + * + * Safety checks are a set of macros to check for parameters or values + * that should never happen, it is similar in concept to assert(), but + * will log and return instead of abort() your program. + * + * Since these cases should never happen, one may wantto keep safety + * checks enabled during tests but disable then during deploy, not + * doing any checks at all. This is a common requirement for embedded + * systems. Whenever to check or not should be set during compile time + * by using @c --disable-safety-checks or @c --enable-safety-checks + * options to @c configure script. + * + * Whenever these macros capture an error, EINA_LOG_ERR() will be + * called and @c eina_error set to @c EINA_ERROR_SAFETY_FAILED and can + * be checked with eina_error_get() after call. + * + * @see EINA_SAFETY_ON_NULL_RETURN(), EINA_SAFETY_ON_NULL_RETURN_VAL() + * and other macros. + * + * @{ + */ + +#include "eina_config.h" +#include "eina_error.h" + +/** + * @var EINA_ERROR_SAFETY_FAILED + * Error identifier corresponding to safety check failure. + */ +EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED; + +#ifdef EINA_SAFETY_CHECKS + +#include "eina_log.h" + +#define EINA_SAFETY_ON_NULL_RETURN(exp) \ + do \ + { \ + if (EINA_UNLIKELY((exp) == NULL)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ + return; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \ + do \ + { \ + if (EINA_UNLIKELY((exp) == NULL)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ + return (val); \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \ + do \ + { \ + if (EINA_UNLIKELY((exp) == NULL)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ + goto label; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_TRUE_RETURN(exp) \ + do \ + { \ + if (EINA_UNLIKELY(exp)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ + return; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \ + do \ + { \ + if (EINA_UNLIKELY(exp)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ + return val; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \ + do \ + { \ + if (EINA_UNLIKELY(exp)) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ + goto label; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_FALSE_RETURN(exp) \ + do \ + { \ + if (EINA_UNLIKELY(!(exp))) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ + return; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \ + do \ + { \ + if (EINA_UNLIKELY(!(exp))) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ + return val; \ + } \ + } \ + while (0) + +#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \ + do \ + { \ + if (EINA_UNLIKELY(!(exp))) \ + { \ + eina_error_set(EINA_ERROR_SAFETY_FAILED); \ + EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ + goto label; \ + } \ + } \ + while (0) + +#ifdef EINA_ARG_NONNULL +/* make EINA_ARG_NONNULL void so GCC does not optimize safety checks */ +#undef EINA_ARG_NONNULL +#define EINA_ARG_NONNULL(idx, ...) +#endif + +#else /* no safety checks */ + +#define EINA_SAFETY_ON_NULL_RETURN(exp) \ + do { (void)(!(exp)); } while (0) + +#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \ + do { if (0 && !(exp)) { (void)val; } } while (0) + +#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \ + do { if (0 && (exp) == NULL) { goto label; } } while (0) + +#define EINA_SAFETY_ON_TRUE_RETURN(exp) \ + do { (void)(exp); } while (0) + +#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \ + do { if (0 && (exp)) { (void)val; } } while (0) + +#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \ + do { if (0 && (exp)) { goto label; } } while (0) + +#define EINA_SAFETY_ON_FALSE_RETURN(exp) \ + do { (void)(!(exp)); } while (0) + +#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \ + do { if (0 && !(exp)) { (void)val; } } while (0) + +#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \ + do { if (0 && !(exp)) { goto label; } } while (0) + +#endif /* safety checks macros */ +#endif /* EINA_SAFETY_CHECKS_H_ */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/libraries/eina/src/include/eina_sched.h b/libraries/eina/src/include/eina_sched.h new file mode 100644 index 0000000..43f32b9 --- /dev/null +++ b/libraries/eina/src/include/eina_sched.h @@ -0,0 +1,39 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 ProFUSION embedded systems + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_SCHED_H_ +#define EINA_SCHED_H_ + +#include "eina_types.h" + + +/** + * @brief Lower priority of current thread. + * + * It's used by worker threads so they use up background cpu and do not stall + * the main thread If current thread is running with real-time priority, we + * decrease our priority by @c RTNICENESS. This is done in a portable way. + * + * Otherwise (we are running with SCHED_OTHER policy) there's no portable way to + * set the nice level on current thread. In Linux, it does work and it's the + * only one that is implemented as of now. In this case the nice level is + * incremented on this thread by @c NICENESS. + */ +EAPI void eina_sched_prio_drop(void); + +#endif /* EINA_SCHED_H_ */ diff --git a/libraries/eina/src/include/eina_simple_xml_parser.h b/libraries/eina/src/include/eina_simple_xml_parser.h new file mode 100644 index 0000000..db9a4e1 --- /dev/null +++ b/libraries/eina/src/include/eina_simple_xml_parser.h @@ -0,0 +1,386 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Gustavo Sverzut Barbieri + * Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_SIMPLE_XML_H_ +#define EINA_SIMPLE_XML_H_ + +#include "eina_config.h" + +#include "eina_types.h" +#include "eina_magic.h" +#include "eina_inlist.h" + +/** + * @defgroup Eina_Simple_XML_Group Simple_XML + * + * Simplistic relaxed SAX-like XML parser. + * + * This parser is far from being compliant with XML standard, but will + * do for most XMLs out there. If you know that your format is simple + * and will not vary in future with strange corner cases, then you can + * use it safely. + * + * The parser is SAX like, that is, it will tokenize contents and call + * you back so you can take some action. No contents are allocated + * during this parser work and it's not recursive, so you can use it + * with a very large document without worries. + * + * It will not validate the document anyhow, neither it will create a + * tree hierarchy. That's up to you. + * + * Accordingly to XML, open tags may contain attributes. This parser + * will not tokenize this. If you want you can use + * eina_simple_xml_tag_attributes_find() and then + * eina_simple_xml_attributes_parse(). + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @defgroup Eina_Simple_XML_Group Simple_XML + * + * @{ + */ + +typedef struct _Eina_Simple_XML_Node Eina_Simple_XML_Node; +typedef struct _Eina_Simple_XML_Node_Tag Eina_Simple_XML_Node_Root; +typedef struct _Eina_Simple_XML_Node_Tag Eina_Simple_XML_Node_Tag; +typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Data; +typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_CData; +typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Processing; +typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Doctype; +typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Comment; +typedef struct _Eina_Simple_XML_Attribute Eina_Simple_XML_Attribute; + +struct _Eina_Simple_XML_Attribute +{ + EINA_INLIST; + EINA_MAGIC; + + Eina_Simple_XML_Node_Tag *parent; + const char *key; + const char *value; +}; + +typedef enum _Eina_Simple_XML_Node_Type +{ + EINA_SIMPLE_XML_NODE_ROOT = 0, + EINA_SIMPLE_XML_NODE_TAG, + EINA_SIMPLE_XML_NODE_DATA, + EINA_SIMPLE_XML_NODE_CDATA, + EINA_SIMPLE_XML_NODE_PROCESSING, + EINA_SIMPLE_XML_NODE_DOCTYPE, + EINA_SIMPLE_XML_NODE_COMMENT +} Eina_Simple_XML_Node_Type; + +struct _Eina_Simple_XML_Node +{ + EINA_INLIST; + EINA_MAGIC; + + Eina_Simple_XML_Node_Tag *parent; + Eina_Simple_XML_Node_Type type; +}; + +struct _Eina_Simple_XML_Node_Tag +{ + Eina_Simple_XML_Node base; + Eina_Inlist *children; + Eina_Inlist *attributes; + const char *name; +}; + +struct _Eina_Simple_XML_Node_Data +{ + Eina_Simple_XML_Node base; + size_t length; + char data[]; +}; + +typedef enum _Eina_Simple_XML_Type +{ + EINA_SIMPLE_XML_OPEN = 0, /* */ + EINA_SIMPLE_XML_OPEN_EMPTY, /* */ + EINA_SIMPLE_XML_CLOSE, /* */ + EINA_SIMPLE_XML_DATA, /* tag text data */ + EINA_SIMPLE_XML_CDATA, /* */ + EINA_SIMPLE_XML_ERROR, /* error contents */ + EINA_SIMPLE_XML_PROCESSING, /* */ + EINA_SIMPLE_XML_DOCTYPE, /* */ + EINA_SIMPLE_XML_IGNORED /* whatever is ignored by parser, like whitespace */ +} Eina_Simple_XML_Type; + +typedef Eina_Bool (*Eina_Simple_XML_Cb)(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset, unsigned length); +typedef Eina_Bool (*Eina_Simple_XML_Attribute_Cb)(void *data, const char *key, const char *value); + + +/** + * Parse a section of XML string text + * + * @param buf the input string. May not contain \0 terminator. + * @param buflen the input string size. + * @param strip whenever this parser should strip leading and trailing + * whitespace. These whitespace will still be issued, but as type + * #EINA_SIMPLE_XML_IGNORED. + * @param func what to call back while parse to do some action. The + * first parameter is the given user @a data, the second is the + * token type, the third is the pointer to content start (it's + * not a NULL terminated string!), the forth is where this + * content is located inside @a buf (does not include tag + * start, for instance "" the offset points at + * "value"), the fifth is the size of the content. Whenever this + * function return EINA_FALSE the parser will abort. @param + * data what to give as context to @a func. + * + * @return EINA_TRUE on success or EINA_FALSE if it was aborted by user or + * parsing error. + */ +EAPI Eina_Bool eina_simple_xml_parse(const char *buf, unsigned buflen, + Eina_Bool strip, + Eina_Simple_XML_Cb func, const void *data); + + +/** + * Given the contents of a tag, find where the attributes start. + * + * The tag contents is returned by eina_simple_xml_parse() when + * type is #EINA_SIMPLE_XML_OPEN or #EINA_SIMPLE_XML_OPEN_EMPTY. + * + * @return pointer to the start of attributes, it can be used + * to feed eina_simple_xml_attributes_parse(). NULL is returned + * if no attributes were found. + */ +EAPI const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen); + +/** + * Given a buffer with xml attributes, parse them to key=value pairs. + * + * @param buf the input string. May not contain \0 terminator. + * @param buflen the input string size. + * @param func what to call back while parse to do some action. The + * first parameter is the given user @a data, the second is the + * key (null-terminated) and the last is the value (null + * terminated). These strings should not be modified and + * reference is just valid until the function return. + * + * @return EINA_TRUE on success or EINA_FALSE if it was aborted by user or + * parsing error. + */ +EAPI Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, + Eina_Simple_XML_Attribute_Cb func, const void *data); + +/** + * Create (and append) new attribute to tag. + * + * @param parent if provided, will be set in the resulting structure + * as well as the attribute will be appended to attributes list. + * @param key null-terminated string. Must not be NULL. + * @param value null-terminated string. If NULL, the empty string will be used. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_attribute_free() or indirectly + * with eina_simple_xml_node_tag_free(). + */ +EAPI Eina_Simple_XML_Attribute * eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value); + +/** + * Remove attribute from parent and delete it. + * + * @param attr attribute to release memory. + */ +EAPI void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr); + + +/** + * Create new tag. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the tag will be appended to children list. + * @param name null-terminated string. Must not be NULL. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_tag_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_Tag * eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name); + +/** + * Remove tag from parent and delete it. + * + * @param tag to release memory. + */ +EAPI void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag); + + +/** + * Create new data. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the data will be appended to children list. + * @param content string to be used. Must not be NULL. + * @param length size in bytes of @a content. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_data_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_Data * eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length); + +/** + * Remove data from parent and delete it. + * + * @param data to release memory. + */ +EAPI void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node); + + +/** + * Create new cdata. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the cdata will be appended to children list. + * @param content string to be used. Must not be NULL. + * @param length size in bytes of @a content. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_cdata_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_CData * eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length); + +/** + * Remove cdata from parent and delete it. + * + * @param cdata to release memory. + */ +EAPI void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node); + + +/** + * Create new processing. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the processing will be appended to children list. + * @param content string to be used. Must not be NULL. + * @param length size in bytes of @a content. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_processing_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_Processing * eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length); + +/** + * Remove processing from parent and delete it. + * + * @param processing to release memory. + */ +EAPI void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node); + + +/** + * Create new doctype. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the doctype will be appended to children list. + * @param content string to be used. Must not be NULL. + * @param length size in bytes of @a content. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_doctype_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_Doctype * eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length); + +/** + * Remove doctype from parent and delete it. + * + * @param doctype to release memory. + */ +EAPI void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node); + + +/** + * Create new comment. If parent is provided, it is automatically appended. + * + * @param parent if provided, will be set in the resulting structure + * as well as the comment will be appended to children list. + * @param content string to be used. Must not be NULL. + * @param length size in bytes of @a content. + * + * @return newly allocated memory or NULL on error. This memory should be + * released with eina_simple_xml_node_comment_free() or indirectly + * with eina_simple_xml_node_tag_free() of the parent. + */ +EAPI Eina_Simple_XML_Node_Comment * eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length); + +/** + * Remove comment from parent and delete it. + * + * @param comment to release memory. + */ +EAPI void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node); + + +/** + * Load a XML node tree based on the given string. + * + * @param buf the input string. May not contain \0 terminator. + * @param buflen the input string size. + * @param strip whenever this parser should strip leading and trailing + * whitespace. + * + * @return document root with children tags, or NULL on errors. + * Document with errors may return partial tree instead of NULL, + * we'll do our best to avoid returning nothing. + */ +EAPI Eina_Simple_XML_Node_Root * eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip); + +/** + * Free node tree build with eina_simple_xml_node_load() + * + * @param root memory returned by eina_simple_xml_node_load() + */ +EAPI void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root); + +/** + * Converts the node tree under the given element to a XML string. + * + * @param node the base node to convert. + * @param indent indentation string, or NULL to disable it. + * + * @param NULL on errors or a newly allocated string on success. + */ +EAPI char * eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent); + + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_SIMPLE_XML_H_ */ diff --git a/libraries/eina/src/include/eina_str.h b/libraries/eina/src/include/eina_str.h new file mode 100644 index 0000000..8b52ab2 --- /dev/null +++ b/libraries/eina/src/include/eina_str.h @@ -0,0 +1,325 @@ +#ifndef _EINA_STR_H +#define _EINA_STR_H + +#include +#include + +#include "eina_types.h" + +/** + * @page tutorial_eina_string Eina String example + * @dontinclude eina_str_01.c + * + * Whenever using eina we need to include it: + * @skipline #include + * @line #include + * + * In our main function we declare(and initialize) some variables and initialize + * eina: + * @until eina_init + * + * It's frequentely necessary to split a string into its constituent parts, + * eina_str_split() make's it easy to do so: + * @until printf + * + * Another common need is to make a string uppercase or lowercase, so let's + * create a string and make it uppercase and then make it lowercase again: + * @until printf + * @until printf + * + * Next we use eina to check if our @p names string starts or ends with some + * values: + * @until Has + * + * When strings will be used in a terminal(or a number of other places) it + * necessary to escape certain characters that appear in them: + * @until printf + * + * Much as we previously split a string we will now join two strings: + * @until printf + * + * With strlcpy() we can copy what portion of the @p prologue fits in @p str and + * be sure that it's still NULL terminated: + * @until printf + * + * Since we are done with @p prologue and @p str we should free them: + * @until free(str + * + * Finally we see strlcat in action: + * @until printf(" + * + * And then shut eina down and exit: + * @until } + * @example eina_str_01.c + */ +/** + * @addtogroup Eina_String_Group String + * + * @brief Provide useful functions for C string manipulation. + * + * This group of functions allow you to more easily manipulate strings, they + * provide functionality not available through string.h. + * + * @warning Since these functions modify the strings they can't be used with + * shared strings(eina_stringshare). + * + * See an example @ref tutorial_eina_string "here". + */ + +/** + * @addtogroup Eina_Tools_Group Tools + * + * For more information refer to the @ref tutorial_eina_string "string example". + * + * @{ + */ + +/** + * @defgroup Eina_String_Group String + * + * @{ + */ + +/* strlcpy implementation for libc's lacking it */ + +/** + * @brief Copy a c-string to another. + * + * @param dst The destination string. + * @param src The source string. + * @param siz The size of the destination string. + * @return The length of the source string. + * + * This function copies up to @p siz - 1 characters from the + * NUL-terminated string @p src to @p dst, NUL-terminating the result + * (unless @p siz is equal to 0). The returned value is the length of + * @p src. If the returned value is greater than @p siz, truncation + * occurred. + * + * @note The main difference between eina_strlcpy and strncpy is that this + * ensures @p dst is NULL terminated even if no NULL byte is found in the first + * @p siz bytes of src. + */ +EAPI size_t eina_strlcpy(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a c-string. + * + * @param dst The destination string. + * @param src The source string. + * @param siz The size of the destination string. + * @return The length of the source string plus MIN(siz, strlen(initial dst)) + * + * This function appends @p src to @p dst of size @p siz (unlike + * strncat, @p siz is the full size of @p dst, not space left). At + * most @p siz - 1 characters will be copied. Always NUL terminates + * (unless @p siz <= strlen(dst)). This function returns strlen(src) + + * MIN(siz, strlen(initial dst)). If the returned value is greater or + * equal than @p siz, truncation occurred. + */ +EAPI size_t eina_strlcat(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2); + + +/** + * @brief Check if the given string has the given prefix. + * + * @param str The string to work with. + * @param prefix The prefix to check for. + * @return #EINA_TRUE if the string has the given prefix, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p str has the prefix + * @p prefix, #EINA_FALSE otherwise. If the length of @p prefix is + * greater than @p str, #EINA_FALSE is returned. + */ +EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Check if the given string has the given suffix. + * + * @param str The string to work with. + * @param suffix The suffix to check for. + * @return #EINA_TRUE if the string has the given suffix, #EINA_FALSE otherwise. + * + * This function returns #EINA_TRUE if @p str has the suffix + * @p suffix, #EINA_FALSE otherwise. If the length of @p suffix is + * greater than @p str, #EINA_FALSE is returned. + */ +EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Check if the given string has the given extension. + * + * @param str The string to work with. + * @param ext The extension to check for. + * @return #EINA_TRUE if the string has the given extension, #EINA_FALSE otherwise. + * + * This function does the same as eina_str_has_suffix(), except it's case + * insensitive. + */ +EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Split a string using a delimiter. + * + * @param str The string to split. + * @param delim The string which specifies the places at which to split the string. + * @param max_tokens The maximum number of strings to split string into. + * @return A newly-allocated NULL-terminated array of strings or NULL if it + * fails to allocate the array. + * + * This functin splits @p str into a maximum of @p max_tokens pieces, + * using the given delimiter @p delim. @p delim is not included in any + * of the resulting strings, unless @p max_tokens is reached. If + * @p max_tokens is less than @c 1, the string is splitted completely. If + * @p max_tokens is reached, the last string in the returned string + * array contains the remainder of string. The returned value is a + * newly allocated NULL-terminated array of strings or NULL if it fails to + * allocate the array. To free it, free the first element of the array and the + * array itself. + * + * @note If you need the number of elements in the returned array see + * eina_str_split_full(). + */ +EAPI char **eina_str_split(const char *string, const char *delimiter, int max_tokens) EINA_ARG_NONNULL(1, 2) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Split a string using a delimiter and returns number of elements. + * + * @param str The string to split. + * @param delim The string which specifies the places at which to split the string. + * @param max_tokens The maximum number of strings to split string into. + * @param elements Where to return the number of elements in returned + * array (not counting the terminating @c NULL). May be @c NULL. + * @return A newly-allocated NULL-terminated array of strings or NULL if it + * fails to allocate the array. + * + * This functin splits @p str into a maximum of @p max_tokens pieces, + * using the given delimiter @p delim. @p delim is not included in any + * of the resulting strings, unless @p max_tokens is reached. If + * @p max_tokens is less than @c 1, the string is splitted completely. If + * @p max_tokens is reached, the last string in the returned string + * array contains the remainder of string. The returned value is a + * newly allocated NULL-terminated array of strings or NULL if it fails to + * allocate the array. To free it, free the first element of the array and the + * array itself. + * + * @see eina_str_split() + */ +EAPI 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; + + +/** + * @brief Join two strings of known length. + * + * @param dst The buffer to store the result. + * @param size Size (in byte) of the buffer. + * @param sep The separator character to use. + * @param a First string to use, before @p sep. + * @param a_len length of @p a. + * @param b Second string to use, after @p sep. + * @param b_len length of @p b. + * @return The number of characters printed. + * + * This function joins the strings @p a and @p b (in that order) and + * separate them with @p sep. The result is stored in the buffer + * @p dst and at most @p size - 1 characters will be written and the + * string is NULL-terminated. @p a_len is the length of @p a (not + * including '\\0') and @p b_len is the length of @p b (not including + * '\\0'). This function returns the number of characters printed (not + * including the trailing '\\0' used to end output to strings). Just + * like snprintf(), it will not write more than @p size bytes, thus a + * returned value of @p size or more means that the output was + * truncated. + * + * @see eina_str_join() + * @see eina_str_join_static() + */ +EAPI 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); + + +/** + * @brief Use Iconv to convert a text string from one encoding to another. + * + * @param enc_from Encoding to convert from. + * @param enc_to Encoding to convert to. + * @param text The text to convert. + * @return The converted text. + * + * This function converts @p text, encoded in @p enc_from. On success, + * the converted text is returned and is encoded in @p enc_to. On + * failure, @c NULL is returned. Iconv is used to convert @p text. If + * Iconv is not available, @c NULL is returned. When not used anymore, + * the returned value must be freed. + */ +EAPI 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); + + +/** + * @brief Escape slashes, spaces and apostrophes in strings. + * + * @param str The string to escape. + * @return The escaped string. + * + * Escaping is done by adding a slash "\" before any occurrence of slashes "\", + * spaces " " or apostrophes "'". This function returns a newly allocated + * escaped string on success, @c NULL on failure. When not used anymore, the + * returned value must be freed. + */ +EAPI char *eina_str_escape(const char *str) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1); + + +/** + * @brief Lowercase all the characters in range [A-Z] in the given string. + * + * @param str The string to lowercase. + * + * This function modifies the original string, changing all characters + * in [A-Z] to lowercase. If @p str is @c NULL or is an empty string, + * this function does nothing. + */ +EAPI void eina_str_tolower(char **str); + +/** + * @brief Uppercase all the characters in range [a-z] in the given string. + * + * @param str The string to uppercase. + * + * This function modifies the original string, changing all characters + * in [a-z] to uppercase. If @p str is @c NULL or is an empty string, + * this function does nothing. + */ +EAPI void eina_str_toupper(char **str); + +static 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); + +/** + * @def eina_str_join_static(dst, sep, a, b) + * @brief Join two static strings and store the result in a static buffer. + * + * @param dst The buffer to store the result. + * @param sep The separator character to use. + * @param a First string to use, before @p sep. + * @param b Second string to use, after @p sep. + * @return The number of characters printed. + * + * This function is similar to eina_str_join_len(), but will assume + * string sizes are know using sizeof(X). + * + * @see eina_str_join() + * @see eina_str_join_static() + */ +#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) + +static inline size_t eina_strlen_bounded(const char *str, size_t maxlen) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +#include "eina_inline_str.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STR_H */ diff --git a/libraries/eina/src/include/eina_strbuf.h b/libraries/eina/src/include/eina_strbuf.h new file mode 100644 index 0000000..7043575 --- /dev/null +++ b/libraries/eina/src/include/eina_strbuf.h @@ -0,0 +1,605 @@ +#ifndef EINA_STRBUF_H +#define EINA_STRBUF_H + +#include +#include + +#include "eina_types.h" + + +/** + * @page tutorial_strbuf Eina_Strbuf example + * @dontinclude eina_strbuf_01.c + * + * First thing always is including Eina: + * @skipline #include + * @until #include + * + * Next we initialize eina and create a string buffer to play with: + * @until strbuf_new + * + * Here you can see two different ways of creating a buffer with the same + * contents. We could create them in simpler ways, but this gives us an + * opportunity to demonstrate several functions in action: + * @until strbuf_reset + * @until strbuf_reset + * + * Next we use the printf family of functions to create a formated string, + * add, remove and replace some content: + * @until strbuf_string_get + * @until strbuf_string_get + * @until strbuf_string_get + * + * Once done we free our string buffer, shut down Eina and end the application: + * @until } + * + * @example eina_strbuf_01.c + */ +/** + * @addtogroup Eina_String_Buffer_Group String Buffer + * + * @brief These functions provide string buffers management. + * + * The String Buffer data type is designed to be a mutable string, + * allowing to append, prepend or insert a string to a buffer. + * + * For more information see @ref tutorial_strbuf "this example". + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_String_Buffer_Group String Buffer + * + * @{ + */ + +/** + * @typedef Eina_Strbuf + * Type for a string buffer. + */ +typedef struct _Eina_Strbuf Eina_Strbuf; + +/** + * @brief Create a new string buffer. + * + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_strbuf_free(). + * + * @see eina_strbuf_free() + * @see eina_strbuf_append() + * @see eina_strbuf_string_get() + */ +EAPI Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Create a new string buffer using the passed string. The passed + * string is used directly as the buffer, it's somehow the opposite function of + * @ref eina_strbuf_string_steal . The passed string must be malloced. + * + * @param str the string to manage + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_strbuf_free(). + * + * @see eina_strbuf_free() + * @see eina_strbuf_append() + * @see eina_strbuf_string_get() + * @since 1.1.0 + */ +EAPI Eina_Strbuf *eina_strbuf_manage_new(char *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Free a string buffer. + * + * @param buf The string buffer to free. + * + * This function frees the memory of @p buf. @p buf must have been + * created by eina_strbuf_new(). + */ +EAPI void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Reset a string buffer. + * + * @param buf The string buffer to reset. + * + * This function reset @p buf: the buffer len is set to 0, and the + * string is set to '\\0'. No memory is free'd. + */ +EAPI void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Append a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. It computes the length of + * @p str, so is slightly slower than eina_strbuf_append_length(). If + * the length is known beforehand, consider using that variant. If + * @p buf can't append it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + * + * @see eina_strbuf_append() + * @see eina_strbuf_append_length() + */ +EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append an escaped string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function escapes and then appends the string @p str to @p buf. If @p str + * can not be appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is + * returned. + */ +EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a string to a buffer, reallocating as necessary, + * limited by the given length. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @param maxlen The maximum number of characters to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends at most @p maxlen characters of @p str to + * @p buf. It can't append more than the length of @p str. It + * computes the length of @p str, so it is slightly slower than + * eina_strbuf_append_length(). If the length is known beforehand, + * consider using that variant (@p maxlen should then be checked so + * that it is greater than the size of @p str). If @p str can not be + * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is + * returned. + * + * @see eina_strbuf_append() + * @see eina_strbuf_append_length() + */ +EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t maxlen) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_strbuf_append() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_stringshare. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_strbuf_append() + * @see eina_strbuf_append_n() + */ +EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size_t length) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to append to. + * @param c The char to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf. If it can not insert it, + * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNULL(1); + +/** + * @brief Append a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param fmt The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends the string defined by the format @p fmt to @p buf. @p + * fmt must be of a valid format for printf family of functions. If it can't + * insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. + * + * @see eina_strbuf_append() + */ +EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3); + +/** + * @brief Append a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param fmt The string to append. + * @param args The variable arguments. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * @see eina_strbuf_append_printf() + */ +EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert. + * @param str The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf at position @p pos. It + * computes the length of @p str, so is slightly slower than + * eina_strbuf_insert_length(). If the length is known beforehand, + * consider using that variant. If @p buf can't insert it, #EINA_FALSE + * is returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert an escaped string to a buffer, reallocating as + * necessary. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function escapes and inserts the string @p str to @p buf at + * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is + * returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param maxlen The maximum number of chars to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf at position @p pos, with at + * most @p maxlen bytes. The number of inserted characters can not be + * greater than the length of @p str. It computes the length of + * @p str, so is slightly slower than eina_strbuf_insert_length(). If the + * length is known beforehand, consider using that variant (@p maxlen + * should then be checked so that it is greater than the size of + * @p str). If @p str can not be inserted, #EINA_FALSE is returned, + * otherwise, #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param length The exact length to use. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_strbuf_insert() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_strbuf_insert() + * @see eina_strbuf_insert_n() + */ +EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to insert to. + * @param c The char to insert. + * @param pos The position to insert the char. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf at position @p pos. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EINA_ARG_NONNULL(1); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert. + * @param fmt The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function insert a string as described by the format @p fmt to @p buf at + * the position @p pos. @p fmt must be of a valid format for printf family of + * functions. If it can't insert it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 4); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert. + * @param fmt The string to insert. + * @param pos The position to insert the string. + * @param args The variable arguments. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * @see eina_strbuf_insert_printf + */ +EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, size_t pos, va_list args) EINA_ARG_NONNULL(1, 2); + +/** + * @def eina_strbuf_prepend(buf, str) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert() at position 0. If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_strbuf_prepend(buf, str) eina_strbuf_insert(buf, str, 0) + +/** + * @def eina_strbuf_prepend_escaped(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_escaped() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_strbuf_prepend_escaped(buf, str) eina_strbuf_insert_escaped(buf, str, 0) + +/** + * @def eina_strbuf_prepend_n(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @param maxlen The maximum number of chars to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_n() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_strbuf_prepend_n(buf, str, maxlen) eina_strbuf_insert_n(buf, str, maxlen, 0) + +/** + * @def eina_strbuf_prepend_length(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_length() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_strbuf_prepend_length(buf, str, length) eina_strbuf_insert_length(buf, str, length, 0) + +/** + * @def eina_strbuf_prepend_char(buf, str) + * @brief Prepend the given character to the given buffer + * + * @param buf The string buffer to prepend to. + * @param c The character to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_char() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_strbuf_prepend_char(buf, c) eina_strbuf_insert_char(buf, c, 0) + +/** + * @def eina_strbuf_prepend_printf(buf, fmt, ...) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param fmt The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_printf() at position 0.If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_strbuf_prepend_printf(buf, fmt, ...) eina_strbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__) + +/** + * @def eina_strbuf_prepend_vprintf(buf, fmt, args) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param fmt The string to prepend. + * @param args The variable arguments. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_insert_vprintf() at position 0.If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_strbuf_prepend_vprintf(buf, fmt, args) eina_strbuf_insert_vprintf(buf, fmt, 0, args) + +/** + * @brief Remove a slice of the given string buffer. + * + * @param buf The string buffer to remove a slice. + * @param start The initial (inclusive) slice position to start + * removing, in bytes. + * @param end The final (non-inclusive) slice position to finish + * removing, in bytes. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function removes a slice of @p buf, starting at @p start + * (inclusive) and ending at @p end (non-inclusive). Both values are + * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. + */ + +EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve a pointer to the contents of a string buffer + * + * @param buf The string buffer. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. The returned + * value must not be modified and will no longer be valid if @p buf is + * modified. In other words, any eina_strbuf_append() or similar will + * make that pointer invalid. The pointer returned by this function must + * not be freed. + * + * @see eina_strbuf_string_steal() + */ +EAPI const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Steal the contents of a string buffer. + * + * @param buf The string buffer to steal. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. @p buf is + * then initialized and does not own the returned string anymore. The + * caller must release the memory of the returned string by calling + * free(). + * + * @see eina_strbuf_string_get() + */ +EAPI char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Free the contents of a string buffer but not the buffer. + * + * @param buf The string buffer to free the string of. + * + * This function frees the string contained in @p buf without freeing + * @p buf. + */ +EAPI void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve the length of the string buffer content. + * + * @param buf The string buffer. + * @return The current length of the string, in bytes. + * + * This function returns the length of @p buf. + */ +EAPI size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + + +/** + * @brief Replace the n-th string with an other string. + * + * @param buf The string buffer to work with. + * @param str The string to replace. + * @param with The replaceing string. + * @param n The number of the fitting string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function replaces the n-th occurrence of @p str in @p buf with + * @p with. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. + */ +EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) EINA_ARG_NONNULL(1, 2, 3); + +/** + * @def eina_strbuf_replace_first(buf, str, with) + * @brief Prepend the given character to the given buffer + * + * @param buf The string buffer to work with. + * @param str The string to replace. + * @param with The replaceing string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_strbuf_replace() with the n-th occurrence + * equal to @c 1. If @p buf can't replace it, #EINA_FALSE is returned, + * otherwise #EINA_TRUE is returned. + */ +#define eina_strbuf_replace_first(buf, str, with) eina_strbuf_replace(buf, str, with, 1) + + +/** + * @brief Replace all strings with an other string. + + * @param buf the string buffer to work with. + * @param str The string to replace. + * @param with The replaceing string. + * @return How often the string was replaced. + * + * This function replaces all the occurrences of @p str in @p buf with + * the string @p with. This function returns the number of times @p str + * has been replaced. On failure, it returns 0. + */ +EAPI int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3); + +/** + * @brief Trim the string buffer + + * @param buf the string buffer to work with. + * + * This function skips whitespaces in the beginning and the end of the buffer. + */ +EAPI void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Left trim the string buffer + + * @param buf the string buffer to work with. + * + * This function skips whitespaces in the beginning of the buffer. + */ +EAPI void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Right trim the string buffer + + * @param buf the string buffer to work with. + * + * This function skips whitespaces in the end of the buffer. + */ +EAPI void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRBUF_H */ diff --git a/libraries/eina/src/include/eina_stringshare.h b/libraries/eina/src/include/eina_stringshare.h new file mode 100644 index 0000000..af58add --- /dev/null +++ b/libraries/eina/src/include/eina_stringshare.h @@ -0,0 +1,321 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2008 Peter Wehrfritz + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef EINA_STRINGSHARE_H_ +#define EINA_STRINGSHARE_H_ + +#include + +#include "eina_types.h" + +/** + * @page eina_stringshare_example_01_page + * @dontinclude eina_stringshare_01.c + * + * Like all examples we start by including Eina: + * @skip #include + * @line #include + * + * Here we declare some variables and initialize eina: + * @until eina_init + * + * We start the substantive part of the example by showing how to make a part + * of a string shared and how to get the length of a shared string: + * @until stringshare_strlen + * As we add shared strings we also need to delete them when done using them: + * @line del + * + * There are many ways of creating shared strings including an equivalent to + * sprintf: + * @until del + * + * An equivalent to snprintf: + * @until printf + * + * But the simplest way of creating a shared string is through + * eina_stringshare_add(): + * @until printf + * + * Sometimes you already have a pointer to a shared string and want to use it, + * so to make sure the provider of the pointer won't free it while you're using + * it you can increase the shared string's ref count: + * @until printf + * + * Whenever you have a pointer to a shared string and would like to change it's + * value you should use eina_stringshare_replace(): + * @until printf + * @warning @b Don't use eina_stringshare_del() followed by + * eina_share_common_add(), under some circunstances you might end up deleting + * a shared string some other piece of code is using. + * + * We created str but haven't deleted it yet, and while we called + * eina_stringshare_del() on str2, we created it and then increased the ref + * count so it's still alive: + * @until str2 + * + * You can see the full source code @ref eina_stringshare_example_01 "here". + */ +/** + * @page eina_stringshare_example_01 + * @include eina_stringshare_01.c + * @example eina_stringshare_01.c + */ +/** + * @addtogroup Eina_Stringshare_Group Stringshare + * + * These functions allow you to store a single copy of a string, and use in + * multiple places throughout your program. + * + * This is a method to reduce the number of duplicated strings kept in + * memory. It's pretty common for the same strings to be dynamically + * allocated repeatedly between applications and libraries, especially in + * circumstances where you could have multiple copies of a structure that + * allocates the string. So rather than duplicating and freeing these + * strings, you request a read-only pointer to an existing string and + * only incur the overhead of a hash lookup. + * + * It sounds like micro-optimizing, but profiling has shown this can have + * a significant impact as you scale the number of copies up. It improves + * string creation/destruction speed, reduces memory use and decreases + * memory fragmentation, so a win all-around. + * + * The following diagram gives an idea of what happens as you create strings + * with eina_stringshare_add(): + * + * @image html eina_stringshare.png + * @image latex eina_stringshare.eps height=\textheight + * + * For more information, see @ref eina_stringshare_example_01_page + * "this example". + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Stringshare_Group Stringshare + * + * @{ + */ + + +/** + * @brief Retrieve an instance of a string for use in a program. + * + * @param str The string to retrieve an instance of. + * @param slen The string size (<= strlen(str)). + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p str. If @p str is + * @c NULL, then @c NULL is returned. If @p str is already stored, it + * is just returned and its reference counter is increased. Otherwise + * a duplicated string of @p str is returned. + * + * This function does not check string size, but uses the + * exact given size. This can be used to share_common part of a larger + * buffer or substring. + * + * @see eina_share_common_add() + */ +EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Retrieve an instance of a string for use in a program. + * + * @param str The NULL terminated string to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p str. If @p str is + * @c NULL, then @c NULL is returned. If @p str is already stored, it + * is just returned and its reference counter is increased. Otherwise + * a duplicated string of @p str is returned. + * + * The string @p str must be NULL terminated ('@\0') and its full + * length will be used. To use part of the string or non-null + * terminated, use eina_stringshare_add_length() instead. + * + * @see eina_stringshare_add_length() + */ +EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Retrieve an instance of a string for use in a program + * from a format string. + * + * @param fmt The NULL terminated format string to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p fmt. If @p fmt is + * @c NULL, then @c NULL is returned. If @p fmt is already stored, it + * is just returned and its reference counter is increased. Otherwise + * a duplicated string is returned. + * + * The format string @p fmt must be NULL terminated ('@\0') and its full + * length will be used. To use part of the format string or non-null + * terminated, use eina_stringshare_nprintf() instead. + * + * @see eina_stringshare_nprintf() + */ +EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2); + +/** + * @brief Retrieve an instance of a string for use in a program + * from a format string. + * + * @param fmt The NULL terminated format string to retrieve an instance of. + * @param args The va_args for @p fmt + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p fmt with @p args. If @p fmt is + * @c NULL, then @c NULL is returned. If @p fmt with @p args is already stored, it + * is just returned and its reference counter is increased. Otherwise + * a duplicated string is returned. + * + * The format string @p fmt must be NULL terminated ('@\0') and its full + * length will be used. To use part of the format string or non-null + * terminated, use eina_stringshare_nprintf() instead. + * + * @see eina_stringshare_nprintf() + */ +EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Retrieve an instance of a string for use in a program + * from a format string with size limitation. + * @param len The length of the format string to use + * @param fmt The format string to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p fmt limited by @p len. If @p fmt is + * @c NULL or @p len is < 1, then @c NULL is returned. If the resulting string + * is already stored, it is returned and its reference counter is increased. + * Otherwise a duplicated string is returned. + * + * @p len length of the format string will be used. To use the + * entire format string, use eina_stringshare_printf() instead. + * + * @see eina_stringshare_printf() + */ +EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3); + +/** + * Increment references of the given shared string. + * + * @param str The shared string. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This is similar to eina_share_common_add(), but it's faster since it will + * avoid lookups if possible, but on the down side it requires the parameter + * to be shared string. In other words, it must be the return of a previous + * call to one of the stringshare functions. + * + * There is no unref since this is the work of eina_share_common_del(). + */ +EAPI const char *eina_stringshare_ref(const char *str); + +/** + * @brief Note that the given string has lost an instance. + * + * @param str string The given string. + * + * This function decreases the reference counter associated to @p str + * if it exists. If that counter reaches 0, the memory associated to + * @p str is freed. If @p str is NULL, the function returns + * immediately. + * + * Note that if the given pointer is not shared or NULL, bad things + * will happen, likely a segmentation fault. + */ +EAPI void eina_stringshare_del(const char *str); + +/** + * @brief Note that the given string @b must be shared. + * + * @param str the shared string to know the length. It is safe to + * give NULL, in that case -1 is returned. + * + * This function is a cheap way to known the length of a shared + * string. Note that if the given pointer is not shared, bad + * things will happen, likely a segmentation fault. If in doubt, try + * strlen(). + */ +EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Dump the contents of the share_common. + * + * This function dumps all strings in the share_common to stdout with a + * DDD: prefix per line and a memory usage summary. + */ +EAPI void eina_stringshare_dump(void); + +static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1); +static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1); + +#include "eina_inline_stringshare.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRINGSHARE_H_ */ diff --git a/libraries/eina/src/include/eina_tiler.h b/libraries/eina/src/include/eina_tiler.h new file mode 100644 index 0000000..5272099 --- /dev/null +++ b/libraries/eina/src/include/eina_tiler.h @@ -0,0 +1,310 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_TILER_H_ +#define EINA_TILER_H_ + +#include "eina_types.h" +#include "eina_iterator.h" +#include "eina_rectangle.h" + +/** + * @page eina_tiler_example_01 + * @dontinclude eina_tiler_01.c + * + * This is an example that illustrates how Eina_Tiler works for a given set of + * rectangles. The rectangles must be given in the command line in the form: + * x++ + * The example will show two panels, the first(input) will show the given + * rectangles(in different colors) and in the seconds(output) it will show the + * rectangles given by the tiler. The rectangles will be added one by one every + * two seconds. A lot of the example deals with actually painting the rectangles + * so we'll skip over quite a bit of code, but you can see all of it in @ref + * eina_tiler_01.c "eina_tiler_01.c". + * + * The first thing of note in our example is the creation of the tiler: + * @skipline eina_tiler_new + * @note @p maxw and @p maxh are calculated such that the tiler's size will + * fully encompass all given rectangles. + * + * We'll now look at the function that actually adds rectangles to our tiler. It + * first checks if we added all rectangles already and if so stops right there: + * @dontinclude eina_tiler_01.c + * @skip static Eina_Bool + * @until } + * + * Our function then clears all rectangles given to us by tiler from the last + * execution. It does this because each rectangle we add may change everything + * about the output of eina_tiler: + * @until output_rects_reset + * + * Next we get another rectangle, print it and show it in the input panel: + * @until add_input_rect + * + * We now come to the tiler stuff, we add our new rectangle to it and get a new + * iterator for the tiler: + * @until itr + * + * We now iterate over our tiler printing every rect it gives us and sowing it + * in the output panel: + * @until } + * + * We of course must remember to free our iterator and that's it for this + * function: + * @until } + * + * You should try many different inputs to see how the tiler works, here are a + * few suggestions: + * @li 100x100+0+0 100x100+200+200 + * @li 100x100+0+0 100x100+5+5 100x100+10+10 100x100+15+15 100x100+20+20 + * @li 100x100+0+0 100x100+100+100 100x100+200+0 100x100+0+200 100x100+200+200 + * @li 10x10+0+0 10x10+10+10 10x10+20+0 10x10+0+20 10x10+20+20 + * + * @example eina_tiler_01.c + */ +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Tiler_Group Tiler + * + * @warning This is a very low level tool, in most situations(for example if + * you're using evas) you won't need this. + * + * @section basic Basic usage + * + * Eina_Tiler is a tool to facilitate calculations of which areas are damaged + * and thus need to be re-rendered. The basic usage of Eina_Tiler is to give it + * the size of your canvas and a set of rectangular areas that need + * re-rendering, from that and using heuristics it'll tell you an efficient way + * to re-render in the form of a set of non-overlapping rectangles that covers + * the whole area that needs re-rendering. + * + * The following is pseudo-code showing some simple use of Eina_Tiler: + * @code + * tiler = eina_tiler_new(MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT); + * EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering, l, rect) + * eina_tiler_add(tiler, rect); + * itr = eina_tiler_iterator_new(tiler); + * EINA_ITERATOR_FOREACH(itr, rect) + * my_function_that_repaints_areas_of_the_canvas(rect); + * @endcode + * + * @see eina_tiler_new() + * @see eina_tiler_rect_add() + * @see eina_tiler_iterator_new() + * + * @warning There are no guarantees that this will be the most efficient way to + * re-render for any particular case. + * + * @section grid_slicer Grid Slicer + * + * Grid slicer and Eina_Tiler are usually used together, that is however @b not + * nescessary, they can be used independently. Grid slicer provides an easy API + * to divide an area in tiles which is usefull in certain applications to divide + * the area that will be rendered into tiles. It's customary to, then create one + * Eina_Tiler for each tile. + * + * The following is pseudo-code showing a very simplified use of grid slicer + * together with Eina_Tiler: + * @code + * itr = eina_tile_grid_slicer_iterator_new(0, 0, MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT, TILE_WIDTH, TILE_HEIGHT); + * EINA_ITERATOR_FOREACH(itr, grid_info) + * { + * tiler = eina_tiler_new(grid_info->rect.w, grid_info->rect.w); + * EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering_in_this_tile, l, rect) + * eina_tiler_add(tiler, rect); + * itr = eina_tiler_iterator_new(tiler); + * EINA_ITERATOR_FOREACH(itr, rect) + * my_function_that_repaints_areas_of_the_canvas(rect); + * } + * @endcode + * + * @see eina_tiler_new() + * @see eina_tiler_rect_add() + * @see eina_tile_grid_slicer_setup() + * @see eina_tile_grid_slicer_next() + * @see eina_tile_grid_slicer_iterator_new() + * + * @{ + */ + +/** + * @typedef Eina_Tiler + * Tiler type. + */ +typedef struct _Eina_Tiler Eina_Tiler; + +/** + * @typedef Eina_Tile_Grid_Info + * Grid type of a tiler. + */ +typedef struct Eina_Tile_Grid_Info Eina_Tile_Grid_Info; + +/** + * @struct Eina_Tile_Grid_Info + * Grid type of a tiler. + */ +struct Eina_Tile_Grid_Info +{ + unsigned long col; /**< column of the tile grid */ + unsigned long row; /**< row of the tile grid*/ + Eina_Rectangle rect; /**< rectangle of the tile grid, coordinates are + relative to tile*/ + Eina_Bool full; /**< whether the grid is full or not */ +}; + +typedef struct _Eina_Tile_Grid_Slicer Eina_Tile_Grid_Slicer; + +/** + * @brief Creates a new tiler with @p w width and @p h height. + * + * @param w Width of the tiler + * @param h Height of the tiler + * @return The newly created tiler + * + * @see eina_tiler_free() + */ +EAPI Eina_Tiler *eina_tiler_new(int w, int h); +/** + * @brief Frees a tiler. + * + * @param t The tiler to free. + * + * This function frees @p t. It does not free the memory allocated for the + * elements of @p t. + */ +EAPI void eina_tiler_free(Eina_Tiler *t); +/** + * @brief Sets the size of tiles for a tiler. + * + * @param t The tiler whose tile size will be set. + * @param w Width of the tiles. + * @param h Height of the tiles. + * + * @warning @p w and @p h @b must be greater than zero, otherwise tile size + * won't be changed. + * @warning Tile size is not used! + */ +EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h); +/** + * @brief Adds a rectangle to a tiler. + * + * @param t The tiler in which to add a container. + * @param r The rectangle to be added. + * + * @see eina_tiler_rect_del() + */ +EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r); +/** + * @brief Removes a rectangle from a tiler. + * + * @param t The tiler in which to add a container. + * @param r The rectangle to be removed. + * + * @see eina_tiler_rect_add() + * @see eina_tiler_clear() + */ +EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r); +/** + * @brief Removes all rectangles from tiles. + * + * @param t The tiler to clear. + * + * @see eina_tiler_rect_del() + */ +EAPI void eina_tiler_clear(Eina_Tiler *t); +/** + * @brief Create a iterator to access the tilers calculated rectangles. + * + * @param t The tiler to iterate over. + * @return A iterator containing Eina_Rectangle. + */ +EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t); + +/** + * @brief Creates a new Eina_Iterator that iterates over a list of tiles. + * + * @param x X axis coordinate. + * @param y Y axis coordinate. + * @param w width. + * @param h height. + * @param tile_w tile width. + * @param tile_h tile height. + * @return A pointer to the Eina_Iterator. @c NULL on failure. + * + * The region defined by @a x, @a y, @a w, @a h will be divided in to a grid of + * tiles of width @a tile_w and height @p tile_h, the returned iterator will + * iterate over every tile in the grid having as its data a + * #Eina_Tile_Grid_Info. + * + * @note This is a convinience function, iterating over the returned iterator is + * equivalent to calling eina_tile_grid_slicer_setup() and calling + * eina_tile_grid_slicer_next() untill it returns EINA_FALSE. + */ +EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w, int h, int tile_w, int tile_h); +/** + * @brief Iterates over the tiles set by eina_tile_grid_slicer_setup(). + * + * @param slc Pointer to an Eina_Tile_Grid_Slicer struct. + * @param rect Pointer to a struct Eina_Tile_Grid_Info *. + * @return @c EINA_TRUE if the current rect is valid. + * @c EINA_FALSE if there is no more rects to iterate over (and + * thus the current one isn't valid). + * + * This functions iterates over each Eina_Tile_Grid_Info *rect of the grid. + * eina_tile_grid_slicer_setup() must be called first, and *rect is only valid + * if this function returns EINA_TRUE. Its content shouldn't be modified. + * + * @note Consider using eina_tile_grid_slicer_iterator_new() instead. + */ +static inline Eina_Bool eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect); +/** + * @brief Setup an Eina_Tile_Grid_Slicer struct. + * + * @param slc Pointer to an Eina_Tile_Grid_Slicer struct. + * @param x X axis coordinate. + * @param y Y axis coordinate. + * @param w width. + * @param h height. + * @param tile_w tile width. + * @param tile_h tile height. + * @return A pointer to the Eina_Iterator. @c NULL on failure. + * + * The region defined by @a x, @a y, @a w, @a h will be divided in to a grid of + * tiles of width @a tile_w and height @p tile_h, @p slc can then be used with + * eina_tile_grid_slicer_next() to access each tile. + * + * @note Consider using eina_tile_grid_slicer_iterator_new() instead. + */ +static 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); + +#include "eina_inline_tiler.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_TILER_H_ */ diff --git a/libraries/eina/src/include/eina_trash.h b/libraries/eina/src/include/eina_trash.h new file mode 100644 index 0000000..f53d99e --- /dev/null +++ b/libraries/eina/src/include/eina_trash.h @@ -0,0 +1,100 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_TRASH_H__ +#define EINA_TRASH_H__ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @addtogroup Eina_Containers_Group Containers + * + * @{ + */ + +/** + * @defgroup Eina_Trash_Group Trash + * + * @{ + */ + +/** + * @typedef Eina_Trash + * Type for a generic container of unused allocated pointer. + */ +typedef struct _Eina_Trash Eina_Trash; + +/** + * @struct _Eina_Trash + * Type for a generic container of unused allocated pointer. + */ +struct _Eina_Trash +{ + Eina_Trash *next; /**< next item in trash. */ +}; + +static inline void eina_trash_init(Eina_Trash **trash) EINA_ARG_NONNULL(1); +static inline void eina_trash_push(Eina_Trash **trash, void *data) EINA_ARG_NONNULL(1); +static inline void *eina_trash_pop(Eina_Trash **trash) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @def EINA_TRASH_CLEAN + * @brief Macro to remove all pointer from the trash. + * + * @param trash The trash to clean. + * @param data The pointer extracted from the trash. + * + * This macro allow the cleaning of @p trash in an easy way. It will + * remove all pointers from @p trash until it's empty. + * + * This macro can be used for freeing the data in the trash, like in + * the following example: + * + * @code + * Eina_Trash *trash = NULL; + * char *data; + * + * // trash is filled with pointer to some duped strings. + * + * EINA_TRASH_CLEAN(&trash, data) + * free(data); + * @endcode + * + * @note this macro is useful when you implement some memory pool. + */ +#define EINA_TRASH_CLEAN(trash, data) while ((data = eina_trash_pop(trash))) + +#include "eina_inline_trash.x" + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_TRASH_H_ */ diff --git a/libraries/eina/src/include/eina_types.h b/libraries/eina/src/include/eina_types.h new file mode 100644 index 0000000..8c77cdf --- /dev/null +++ b/libraries/eina/src/include/eina_types.h @@ -0,0 +1,282 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_TYPES_H_ +#define EINA_TYPES_H_ + +/** + * @addtogroup Eina_Core_Group Core + * + * @{ + */ + +/** + * @defgroup Eina_Types_Group Types + * + * @{ + */ + +#ifdef EAPI +# undef EAPI +#endif + +#ifdef _WIN32 +# ifdef EFL_EINA_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif /* ! DLL_EXPORT */ +# else +# define EAPI __declspec(dllimport) +# endif /* ! EFL_EINA_BUILD */ +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif + +#include "eina_config.h" + +#ifdef EINA_WARN_UNUSED_RESULT +# undef EINA_WARN_UNUSED_RESULT +#endif +#ifdef EINA_ARG_NONNULL +# undef EINA_ARG_NONNULL +#endif +#ifdef EINA_DEPRECATED +# undef EINA_DEPRECATED +#endif +#ifdef EINA_MALLOC +# undef EINA_MALLOC +#endif +#ifdef EINA_PURE +# undef EINA_PURE +#endif +#ifdef EINA_PRINTF +# undef EINA_PRINTF +#endif +#ifdef EINA_SCANF +# undef EINA_SCANF +#endif +#ifdef EINA_FORMAT +# undef EINA_FORMAT +#endif +#ifdef EINA_CONST +# undef EINA_CONST +#endif +#ifdef EINA_NOINSTRUMENT +# undef EINA_NOINSTRUMENT +#endif +#ifdef EINA_UNLIKELY +# undef EINA_UNLIKELY +#endif +#ifdef EINA_LIKELY +# undef EINA_LIKELY +#endif + +#ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# define EINA_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) +# else +# define EINA_WARN_UNUSED_RESULT +# endif + +# if (!defined(EINA_SAFETY_CHECKS)) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) +# define EINA_ARG_NONNULL(idx, ...) __attribute__ ((nonnull(idx, ## __VA_ARGS__))) +# else +# define EINA_ARG_NONNULL(idx, ...) +# endif + +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define EINA_DEPRECATED __attribute__ ((__deprecated__)) +# else +# define EINA_DEPRECATED +# endif + +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define EINA_MALLOC __attribute__ ((malloc)) +# define EINA_PURE __attribute__ ((pure)) +# else +# define EINA_MALLOC +# define EINA_PURE +# endif + +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) +# define EINA_PRINTF(fmt, arg) __attribute__((format (printf, fmt, arg))) +# define EINA_SCANF(fmt, arg) __attribute__((format (scanf, fmt, arg))) +# define EINA_FORMAT(fmt) __attribute__((format_arg(fmt))) +# define EINA_CONST __attribute__((const)) +# define EINA_NOINSTRUMENT __attribute__((no_instrument_function)) +# define EINA_UNLIKELY(exp) __builtin_expect((exp), 0) +# define EINA_LIKELY(exp) __builtin_expect((exp), 1) +# else +# define EINA_PRINTF(fmt, arg) +# define EINA_SCANF(fmt, arg) +# define EINA_FORMAT(fmt) +# define EINA_CONST +# define EINA_NOINSTRUMENT +# define EINA_UNLIKELY(exp) exp +# define EINA_LIKELY(exp) exp +# endif + +#elif defined(_WIN32) +# define EINA_WARN_UNUSED_RESULT +# define EINA_ARG_NONNULL(idx, ...) +# if defined(_MSC_VER) && _MSC_VER >= 1300 +# define EINA_DEPRECATED __declspec(deprecated) +# else +# define EINA_DEPRECATED +# endif +# define EINA_MALLOC +# define EINA_PURE +# define EINA_PRINTF(fmt, arg) +# define EINA_SCANF(fmt, arg) +# define EINA_FORMAT(fmt) +# define EINA_CONST +# define EINA_NOINSTRUMENT +# define EINA_UNLIKELY(exp) exp +# define EINA_LIKELY(exp) exp + +#elif defined(__SUNPRO_C) +# define EINA_WARN_UNUSED_RESULT +# define EINA_ARG_NONNULL(...) +# define EINA_DEPRECATED +# if __SUNPRO_C >= 0x590 +# define EINA_MALLOC __attribute__ ((malloc)) +# define EINA_PURE __attribute__ ((pure)) +# else +# define EINA_MALLOC +# define EINA_PURE +# endif +# define EINA_PRINTF(fmt, arg) +# define EINA_SCANF(fmt, arg) +# define EINA_FORMAT(fmt) +# if __SUNPRO_C >= 0x590 +# define EINA_CONST __attribute__ ((const)) +# else +# define EINA_CONST +# endif +# define EINA_NOINSTRUMENT +# define EINA_UNLIKELY(exp) exp +# define EINA_LIKELY(exp) exp + +#else /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */ + +/** + * @def EINA_WARN_UNUSED_RESULT + * Used to warn when the returned value of the function is not used. + */ +# define EINA_WARN_UNUSED_RESULT + +/** + * @def EINA_ARG_NONNULL + * Used to warn when the specified arguments of the function are @c NULL. + */ +# define EINA_ARG_NONNULL(idx, ...) + +/** + * @def EINA_DEPRECATED + * Used to warn when the function is considered as deprecated. + */ +# define EINA_DEPRECATED +# define EINA_MALLOC +# define EINA_PURE +# define EINA_PRINTF(fmt, arg) +# define EINA_SCANF(fmt, arg) +# define EINA_FORMAT(fmt) +# define EINA_CONST +# define EINA_NOINSTRUMENT +# define EINA_UNLIKELY(exp) exp +# define EINA_LIKELY(exp) exp +#endif /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */ + +/** + * @typedef Eina_Bool + * Type to mimic a boolean. + * + * @note it differs from stdbool.h as this is defined as an unsigned + * char to make it usable by bitfields (Eina_Bool name:1) and + * also take as few bytes as possible. + */ +typedef unsigned char Eina_Bool; + +/** + * @def EINA_FALSE + * boolean value FALSE (numerical value 0) + */ +#define EINA_FALSE ((Eina_Bool)0) + +/** + * @def EINA_TRUE + * boolean value TRUE (numerical value 1) + */ +#define EINA_TRUE ((Eina_Bool)1) + +EAPI extern const unsigned int eina_prime_table[]; + +/** + * @typedef Eina_Compare_Cb + * Function used in functions using sorting. It compares @p data1 and + * @p data2. If @p data1 is 'less' than @p data2, -1 must be returned, + * if it is 'greater', 1 must be returned, and if they are equal, 0 + * must be returned. + */ +typedef int (*Eina_Compare_Cb)(const void *data1, const void *data2); + +/** + * @def EINA_COMPARE_CB + * Macro to cast to Eina_Compare_Cb. + */ +#define EINA_COMPARE_CB(function) ((Eina_Compare_Cb)function) + +typedef Eina_Bool (*Eina_Each_Cb)(const void *container, void *data, void *fdata); + +/** + * @def EINA_EACH_CB + * Macro to cast to Eina_Each. + */ +#define EINA_EACH_CB(Function) ((Eina_Each_Cb)Function) + +/** + * @typedef Eina_Free_Cb + * A callback type used to free data when iterating over a container. + */ +typedef void (*Eina_Free_Cb)(void *data); + +/** + * @def EINA_FREE_CB + * Macro to cast to Eina_Free_Cb. + */ +#define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function) + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_TYPES_H_ */ diff --git a/libraries/eina/src/include/eina_unicode.h b/libraries/eina/src/include/eina_unicode.h new file mode 100644 index 0000000..aed59af --- /dev/null +++ b/libraries/eina/src/include/eina_unicode.h @@ -0,0 +1,177 @@ +#ifndef EINA_UNICODE_H +#define EINA_UNICODE_H + +#include + +#include "eina_config.h" +#include "eina_types.h" + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ +/** + * @addtogroup Eina_Unicode_String Unicode String + * + * @brief These functions provide basic unicode string handling + * + * Eina_Unicode is a type that holds unicode codepoints. + * + * @{ + */ + +/** + * @typedef Eina_Unicode + * A type that holds Unicode codepoints. + */ +#if EINA_SIZEOF_WCHAR_T >= 4 +# include +typedef wchar_t Eina_Unicode; +#elif defined(EINA_HAVE_INTTYPES_H) +# include +typedef uint32_t Eina_Unicode; +#elif defined(EINA_HAVE_STDINT_H) +# include +typedef uint32_t Eina_Unicode; +#else +/* Hope that int is big enough */ +typedef unsigned int Eina_Unicode; +#endif + + +/** + * @brief Same as the standard strlen just with Eina_Unicode instead of char. + */ +EAPI extern const Eina_Unicode *EINA_UNICODE_EMPTY_STRING; + +EAPI size_t eina_unicode_strlen(const Eina_Unicode *ustr) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE; + +/** + * @brief Returns the length of a Eina_Unicode string, up to a limit. + * + * This function returns the number of characters in string, up to a maximum + * of n. If the terminating character is not found in the string, it returns + * n. + * + * @param ustr String to search + * @param n Max length to search + * @return Number of characters or n. + */ +EAPI size_t eina_unicode_strnlen(const Eina_Unicode *ustr, int n) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE; + + +/** + * @brief Same as the standard strdup just with Eina_Unicode instead of char. + */ +EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode *text) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + + +/** + * @brief Same as strdup but cuts on n. Assumes n < len + * @since 1.1.0 + */ +EAPI Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + + +/** + * @brief Same as the standard strcmp just with Eina_Unicode instead of char. + */ +EAPI int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; + + +/** + * @brief Same as the standard strcpy just with Eina_Unicode instead of char. + */ +EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) EINA_ARG_NONNULL(1, 2); + + +/** + * @brief Same as the standard strstr just with Eina_Unicode instead of char. + */ +EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; + + +/** + * @brief Same as the standard strncpy just with Eina_Unicode instead of char. + */ +EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) EINA_ARG_NONNULL(1, 2); + + +/** + * @see eina_str_escape() + */ +EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode *str) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/* UTF-8 Handling */ + + +/** + * Reads UTF8 bytes from @buf, starting at *@index and returns + * the decoded code point at iindex offset, and advances iindex + * to the next code point after this. iindex is always advanced, + * unless if the advancement is after the NULL. + * On error: return a codepoint between DC80 to DCFF where the low 8 bits + * are the byte's value. + * + * @param buf the string + * @param iindex the index to look at and return by. + * @return the codepoint found. + * @since 1.1.0 + */ +EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2); + +/** + * Reads UTF8 bytes from @buf, starting at *@iindex and returns + * the decoded code point at iindex offset, and moves iindex + * to the previous code point. iindex is always moved, as long + * as it's not past the start of the string. + * On error: return a codepoint between DC80 to DCFF where the low 8 bits + * are the byte's value. + * + * @param buf the string + * @param iindex the index to look at and return by. + * @return the codepoint found. + * @since 1.1.0 + */ +EAPI Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2); + +/** + * Returns the number of unicode characters in the string. That is, + * the number of Eina_Unicodes it'll take to store this string in + * an Eina_Unicode string. + * + * @param buf the string + * @return the number of unicode characters (not bytes) in the string + * @since 1.1.0 + */ +EAPI int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1); + +/** + * Converts a utf-8 string to a newly allocated Eina_Unicode string. + * + * @param utf the string in utf-8 + * @param _len the length of the returned Eina_Unicode string. + * @return the newly allocated Eina_Unicode string. + * @since 1.1.0 + */ +EAPI Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * Converts an Eina_Unicode string to a newly allocated utf-8 string. + * + * @param uni the Eina_Unicode string + * @param _len the length byte length of the return utf8 string. + * @return the newly allocated utf-8 string. + * @since 1.1.0 + */ +EAPI char * eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; + +/** + * @} + */ +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/include/eina_ustrbuf.h b/libraries/eina/src/include/eina_ustrbuf.h new file mode 100644 index 0000000..f68cb7b --- /dev/null +++ b/libraries/eina/src/include/eina_ustrbuf.h @@ -0,0 +1,446 @@ +#ifndef EINA_USTRBUF_H +#define EINA_USTRBUF_H + +#include + +#include "eina_types.h" +#include "eina_unicode.h" + +/** + * @addtogroup Eina_Unicode_String_Buffer_Group Unicode String Buffer + * + * @brief These functions provide unicode string buffers management. + * + * The Unicode String Buffer data type is designed to be a mutable string, + * allowing to append, prepend or insert a string to a buffer. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_Unicode_String_Buffer_Group Unicode String Buffer + * + * @{ + */ + +/** + * @typedef Eina_UStrbuf + * Type for a string buffer. + */ +typedef struct _Eina_Strbuf Eina_UStrbuf; + +/** + * @brief Create a new string buffer. + * + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_ustrbuf_free(). + * + * @see eina_ustrbuf_free() + * @see eina_ustrbuf_append() + * @see eina_ustrbuf_string_get() + */ +EAPI Eina_UStrbuf *eina_ustrbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Create a new string buffer using the passed string. The passed + * string is used directly as the buffer, it's somehow the opposite function of + * @ref eina_ustrbuf_string_steal . The passed string must be malloced. + * + * @param str the string to manage + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_strbuf_free(). + * + * @see eina_ustrbuf_free() + * @see eina_ustrbuf_append() + * @see eina_ustrbuf_string_get() + * @since 1.1.0 + */ +EAPI Eina_Strbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT; + +/** + * @brief Free a string buffer. + * + * @param buf The string buffer to free. + * + * This function frees the memory of @p buf. @p buf must have been + * created by eina_ustrbuf_new(). + */ +EAPI void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Reset a string buffer. + * + * @param buf The string buffer to reset. + * + * This function reset @p buf: the buffer len is set to 0, and the + * string is set to '\\0'. No memory is free'd. + */ +EAPI void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Append a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. It computes the length of + * @p str, so is slightly slower than eina_ustrbuf_append_length(). If + * the length is known beforehand, consider using that variant. If + * @p buf can't append it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + * + * @see eina_ustrbuf_append() + * @see eina_ustrbuf_append_length() + */ +EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append an escaped string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends the escaped string @p str to @p buf. If @p + * str can not be appended, #EINA_FALSE is returned, otherwise, + * #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a string to a buffer, reallocating as necessary, + * limited by the given length. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @param maxlen The maximum number of characters to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends at most @p maxlen characters of @p str to + * @p buf. It can't appends more than the length of @p str. It + * computes the length of @p str, so is slightly slower than + * eina_ustrbuf_append_length(). If the length is known beforehand, + * consider using that variant (@p maxlen should then be checked so + * that it is greater than the size of @p str). If @p str can not be + * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is + * returned. + * + * @see eina_ustrbuf_append() + * @see eina_ustrbuf_append_length() + */ +EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to append to. + * @param str The string to append. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_ustrbuf_append() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_ustrbuf_append() + * @see eina_ustrbuf_append_n() + */ +EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Append a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to append to. + * @param c The char to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf. If it can not insert it, + * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_ARG_NONNULL(1); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert. + * @param str The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf at position @p pos. It + * computes the length of @p str, so is slightly slower than + * eina_ustrbuf_insert_length(). If the length is known beforehand, + * consider using that variant. If @p buf can't insert it, #EINA_FALSE + * is returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert an escaped string to a buffer, reallocating as + * necessary. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts the escaped string @p str to @p buf at + * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is + * returned, otherwise #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param maxlen The maximum number of chars to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str ot @p buf at position @p pos, with at + * most @p maxlen bytes. The number of inserted characters can not be + * greater than the length of @p str. It computes the length of + * @p str, so is slightly slower than eina_ustrbuf_insert_length(). If the + * length is known beforehand, consider using that variant (@p maxlen + * should then be checked so that it is greater than the size of + * @p str). If @p str can not be inserted, #EINA_FALSE is returned, + * otherwise, #EINA_TRUE is returned. + */ +EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a string of exact length to a buffer, reallocating as necessary. + * + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param length The exact length to use. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_ustrbuf_insert() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_ustrbuf_insert() + * @see eina_ustrbuf_insert_n() + */ +EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2); + +/** + * @brief Insert a character to a string buffer, reallocating as + * necessary. + * + * @param buf The string buffer to insert to. + * @param c The char to insert. + * @param pos The position to insert the char. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf at position @p pos. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_t pos) EINA_ARG_NONNULL(1); + +/** + * @def eina_ustrbuf_prepend(buf, str) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert() at position 0.If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_ustrbuf_prepend(buf, str) eina_ustrbuf_insert(buf, str, 0) + +/** + * @def eina_ustrbuf_prepend_escaped(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_escaped() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_ustrbuf_prepend_escaped(buf, str) eina_ustrbuf_insert_escaped(buf, str, 0) + +/** + * @def eina_ustrbuf_prepend_n(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @param maxlen The maximum number of Eina_Unicode *s to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_n() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_ustrbuf_prepend_n(buf, str, maxlen) eina_ustrbuf_insert_n(buf, str, maxlen, 0) + +/** + * @def eina_ustrbuf_prepend_length(buf, str) + * @brief Prepend the given escaped string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param str The string to prepend. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_length() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_ustrbuf_prepend_length(buf, str, length) eina_ustrbuf_insert_length(buf, str, length, 0) + +/** + * @def eina_ustrbuf_prepend_char(buf, c) + * @brief Prepend the given unicode character to the given buffer + * + * @param buf The string buffer to prepend to. + * @param c The Eina_Unicode character to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_Eina_Unicode *() at position 0. If + * @p buf can't prepend it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + */ +#define eina_ustrbuf_prepend_char(buf, c) eina_ustrbuf_insert_char(buf, c, 0) + +/** + * @def eina_ustrbuf_prepend_printf(buf, fmt, ...) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param fmt The string to prepend. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_printf() at position 0.If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_ustrbuf_prepend_printf(buf, fmt, ...) eina_ustrbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__) + +/** + * @def eina_ustrbuf_prepend_vprintf(buf, fmt, args) + * @brief Prepend the given string to the given buffer + * + * @param buf The string buffer to prepend to. + * @param fmt The string to prepend. + * @param args The variable arguments. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This macro is calling eina_ustrbuf_insert_vprintf() at position 0.If @p buf + * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +#define eina_ustrbuf_prepend_vprintf(buf, fmt, args) eina_ustrbuf_insert_vprintf(buf, fmt, 0, args) + +/** + * @brief Remove a slice of the given string buffer. + * + * @param buf The string buffer to remove a slice. + * @param start The initial (inclusive) slice position to start + * removing, in bytes. + * @param end The final (non-inclusive) slice position to finish + * removing, in bytes. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function removes a slice of @p buf, starting at @p start + * (inclusive) and ending at @p end (non-inclusive). Both values are + * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. + */ +EAPI Eina_Bool +eina_ustrbuf_remove(Eina_UStrbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve a pointer to the contents of a string buffer + * + * @param buf The string buffer. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. The returned + * value must not be modified and will no longer be valid if @p buf is + * modified. In other words, any eina_ustrbuf_append() or similar will + * make that pointer invalid. + * + * @see eina_ustrbuf_string_steal() + */ +EAPI const Eina_Unicode * +eina_ustrbuf_string_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Steal the contents of a string buffer. + * + * @param buf The string buffer to steal. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. @p buf is + * then initialized and does not own the returned string anymore. The + * caller must release the memory of the returned string by calling + * free(). + * + * @see eina_ustrbuf_string_get() + */ +EAPI Eina_Unicode * +eina_ustrbuf_string_steal(Eina_UStrbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); + +/** + * @brief Free the contents of a string buffer but not the buffer. + * + * @param buf The string buffer to free the string of. + * + * This function frees the string contained in @p buf without freeing + * @p buf. + */ +EAPI void +eina_ustrbuf_string_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1); + +/** + * @brief Retrieve the length of the string buffer content. + * + * @param buf The string buffer. + * @return The current length of the string, in bytes. + * + * This function returns the length of @p buf. + */ +EAPI size_t +eina_ustrbuf_length_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRBUF_H */ diff --git a/libraries/eina/src/include/eina_ustringshare.h b/libraries/eina/src/include/eina_ustringshare.h new file mode 100644 index 0000000..1036573 --- /dev/null +++ b/libraries/eina/src/include/eina_ustringshare.h @@ -0,0 +1,200 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2008 Peter Wehrfritz + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef EINA_USTRINGSHARE_H_ +#define EINA_USTRINGSHARE_H_ + +#include "eina_types.h" +#include "eina_unicode.h" + +/** + * @addtogroup Eina_UStringshare_Group Unicode Stringshare + * + * These functions allow you to store one copy of a string, and use it + * throughout your program. + * + * This is a method to reduce the number of duplicated strings kept in + * memory. It's pretty common for the same strings to be dynamically + * allocated repeatedly between applications and libraries, especially in + * circumstances where you could have multiple copies of a structure that + * allocates the string. So rather than duplicating and freeing these + * strings, you request a read-only pointer to an existing string and + * only incur the overhead of a hash lookup. + * + * It sounds like micro-optimizing, but profiling has shown this can have + * a significant impact as you scale the number of copies up. It improves + * string creation/destruction speed, reduces memory use and decreases + * memory fragmentation, so a win all-around. + * + * For more information, you can look at the @ref tutorial_ustringshare_page. + */ + +/** + * @addtogroup Eina_Data_Types_Group Data Types + * + * @{ + */ + +/** + * @defgroup Eina_UStringshare_Group Unicode Stringshare + * + * @{ + */ + + +/** + * @brief Retrieve an instance of a string for use in a program. + * + * @param str The string to retrieve an instance of. + * @param slen The string size (<= strlen(str)). + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p str. If @p str is + * @c NULL, then @c NULL is returned. If @p str is already stored, it + * is just returned and its reference counter is increased. Otherwise + * it is added to the strings to be searched and a duplicated string + * of @p str is returned. + * + * This function does not check string size, but uses the + * exact given size. This can be used to share_common part of a larger + * buffer or substring. + * + * @see eina_ustringshare_add() + */ +EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) EINA_WARN_UNUSED_RESULT; + +/** + * @brief Retrieve an instance of a string for use in a program. + * + * @param str The NULL terminated string to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This function retrieves an instance of @p str. If @p str is + * @c NULL, then @c NULL is returned. If @p str is already stored, it + * is just returned and its reference counter is increased. Otherwise + * it is added to the strings to be searched and a duplicated string + * of @p str is returned. + * + * The string @p str must be NULL terminated ('@\0') and its full + * length will be used. To use part of the string or non-null + * terminated, use eina_stringshare_add_length() instead. + * + * @see eina_ustringshare_add_length() + */ +EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode *str) EINA_WARN_UNUSED_RESULT; + +/** + * Increment references of the given shared string. + * + * @param str The shared string. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * + * This is similar to eina_share_common_add(), but it's faster since it will + * avoid lookups if possible, but on the down side it requires the parameter + * to be shared before, in other words, it must be the return of a previous + * eina_ustringshare_add(). + * + * There is no unref since this is the work of eina_ustringshare_del(). + */ +EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode *str); + +/** + * @brief Note that the given string has lost an instance. + * + * @param str string The given string. + * + * This function decreases the reference counter associated to @p str + * if it exists. If that counter reaches 0, the memory associated to + * @p str is freed. If @p str is NULL, the function returns + * immediately. + * + * Note that if the given pointer is not shared or NULL, bad things + * will happen, likely a segmentation fault. + */ +EAPI void eina_ustringshare_del(const Eina_Unicode *str); + +/** + * @brief Note that the given string @b must be shared. + * + * @param str the shared string to know the length. It is safe to + * give NULL, in that case -1 is returned. + * + * This function is a cheap way to known the length of a shared + * string. Note that if the given pointer is not shared, bad + * things will happen, likely a segmentation fault. If in doubt, try + * strlen(). + */ +EAPI int eina_ustringshare_strlen(const Eina_Unicode *str) EINA_PURE EINA_WARN_UNUSED_RESULT; + +/** + * @brief Dump the contents of the share_common. + * + * This function dumps all strings in the share_common to stdout with a + * DDD: prefix per line and a memory usage summary. + */ +EAPI void eina_ustringshare_dump(void); + +static inline Eina_Bool eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news) EINA_ARG_NONNULL(1); +static inline Eina_Bool eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen) EINA_ARG_NONNULL(1); + +#include "eina_inline_ustringshare.x" + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EINA_STRINGSHARE_H_ */ diff --git a/libraries/eina/src/include/eina_xattr.h b/libraries/eina/src/include/eina_xattr.h new file mode 100644 index 0000000..8ddb30a --- /dev/null +++ b/libraries/eina/src/include/eina_xattr.h @@ -0,0 +1,168 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_XATTR_H_ +#define EINA_XATTR_H_ + +#include "eina_types.h" + +/** + * @addtogroup Eina_Tools_Group Tools + * + * @{ + */ + +/** + * @typedef Eina_Xattr_Flags + * define extended attribute creation + * + * @since 1.1 + */ +typedef enum { + EINA_XATTR_INSERT, /**< This is the default behaviour, it will either create or replace the extended attribute */ + EINA_XATTR_REPLACE, /**< This will only succeed if the extended attribute previously existed */ + EINA_XATTR_CREATED /**< This will only succeed if the extended attribute wasn't previously set */ +} Eina_Xattr_Flags; + + +/** + * @brief Get an iterator that list all extended attribute of a file. + * + * @param file The filename to retrieve the extended attribute list from. + * @return an iterator. + * + * The iterator will not allocate any data during the iteration step, so you need to copy them yourself + * if you need. + * + * @since 1.1 + */ +EAPI Eina_Iterator *eina_xattr_ls(const char *file); + +/** + * @brief Retrieve an extended attribute from a file. + * + * @param file The file to retrieve the extended attribute from. + * @param atttribute The extended attribute name to retrieve. + * @param size The size of the retrieved extended attribute. + * @return the allocated data that hold the extended attribute value. + * + * It will return NULL and *size will be @c 0 if it fails. + * + * @since 1.1 + */ +EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size); + +/** + * @brief Set an extended attribute on a file. + * + * @param file The file to set the extended attribute to. + * @param attribute The attribute to set. + * @param data The data to set. + * @param length The length of the data to set. + * @param flags Define the set policy. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags); + +/** + * @brief Set a string as a extended attribute properties. + * + * @param file The file to set the string to. + * @param attribute The attribute to set. + * @param data The NULL terminated string to set. + * @param flags Define the set policy. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags); + +/** + * @brief Get a string from an extended attribute properties. + * + * @param file The file to get the string from. + * @param attribute The attribute to get. + * @return a valid string on success, NULL otherwise. + * + * This call check that the string is properly NULL-terminated before returning it. + * + * @since 1.1 + */ +EAPI char *eina_xattr_string_get(const char *file, const char *attribute); + +/** + * @brief Set a double as a extended attribute properties. + * + * @param file The file to set the double to. + * @param attribute The attribute to set. + * @param data The NULL terminated double to set. + * @param flags Define the set policy. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags); + +/** + * @brief Get a double from an extended attribute properties. + * + * @param file The file to get the string from. + * @param attribute The attribute to get. + * @param value Where to put the extracted value + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * This call check that the double is correctly set. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value); + +/** + * @brief Set an int as a extended attribute properties. + * + * @param file The file to set the int to. + * @param attribute The attribute to set. + * @param data The NULL terminated int to set. + * @param flags Define the set policy. + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags); + +/** + * @brief Get a int from an extended attribute properties. + * + * @param file The file to get the string from. + * @param attribute The attribute to get. + * @param value Where to put the extracted value + * @return EINA_TRUE on success, EINA_FALSE otherwise. + * + * This call check that the int is correctly set. + * + * @since 1.1 + */ +EAPI Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value); + +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/lib/Makefile.am b/libraries/eina/src/lib/Makefile.am new file mode 100644 index 0000000..0537a61 --- /dev/null +++ b/libraries/eina/src/lib/Makefile.am @@ -0,0 +1,171 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +base_sources = \ +eina_accessor.c \ +eina_array.c \ +eina_benchmark.c \ +eina_binbuf.c \ +eina_binshare.c \ +eina_convert.c \ +eina_counter.c \ +eina_cpu.c \ +eina_error.c \ +eina_fp.c \ +eina_hamster.c \ +eina_hash.c \ +eina_inlist.c \ +eina_iterator.c \ +eina_lalloc.c \ +eina_list.c \ +eina_log.c \ +eina_magic.c \ +eina_main.c \ +eina_matrixsparse.c \ +eina_mempool.c \ +eina_mmap.c \ +eina_module.c \ +eina_prefix.c \ +eina_quadtree.c \ +eina_rbtree.c \ +eina_rectangle.c \ +eina_safety_checks.c \ +eina_sched.c \ +eina_share_common.c \ +eina_simple_xml_parser.c \ +eina_str.c \ +eina_strbuf.c \ +eina_strbuf_common.c \ +eina_stringshare.c \ +eina_tiler.c \ +eina_unicode.c \ +eina_ustrbuf.c \ +eina_ustringshare.c \ +eina_value.c \ +eina_xattr.c + +# Will be back for developper after 1.1 +# eina_object.c + +if EINA_HAVE_WIN32 +base_sources += eina_file_win32.c +else +base_sources += eina_file.c +endif + +EXTRA_DIST = \ +eina_share_common.h \ +eina_private.h \ +eina_strbuf_common.h \ +eina_strbuf_template_c.x \ +eina_binbuf_template_c.x + + + +if EINA_STATIC_BUILD_BUDDY +base_sources += $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c +endif + +if EINA_STATIC_BUILD_CHAINED_POOL +base_sources += $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c +endif + +if EINA_STATIC_BUILD_EMEMOA_FIXED +base_sources += $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c +endif + +if EINA_STATIC_BUILD_EMEMOA_UNKNOWN +base_sources += $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c +endif + +if EINA_STATIC_BUILD_FIXED_BITMAP +base_sources += $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c +endif + +if EINA_STATIC_BUILD_ONE_BIG +base_sources += $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c +endif + +if EINA_STATIC_BUILD_PASS_THROUGH +base_sources += $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c +endif + +lib_LTLIBRARIES = libeina.la + +if EINA_AMALGAMATION +nodist_libeina_la_SOURCES = eina_amalgamation.c + +eina_amalgamation.c: $(base_sources) Makefile + -rm -f eina_amalgamation.c + + @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c + @echo "#include \"config.h\"" >> eina_amalgamation.c + @echo "#endif" >> eina_amalgamation.c + + @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c + @echo "# include " >> eina_amalgamation.c + @echo "#elif defined __GNUC__" >> eina_amalgamation.c + @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c + @echo "#elif defined _AIX" >> eina_amalgamation.c + @echo "# define alloca __alloca" >> eina_amalgamation.c + @echo "#elif defined _MSC_VER" >> eina_amalgamation.c + @echo "# include " >> eina_amalgamation.c + @echo "# define alloca _alloca" >> eina_amalgamation.c + @echo "#else" >> eina_amalgamation.c + @echo "# include " >> eina_amalgamation.c + @echo "# ifdef __cplusplus" >> eina_amalgamation.c + @echo "#extern \"C\"" >> eina_amalgamation.c + @echo "# endif" >> eina_amalgamation.c + @echo "#void *alloca (size_t);" >> eina_amalgamation.c + @echo "#endif" >> eina_amalgamation.c + + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + @echo "#include " >> eina_amalgamation.c + + @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c + @echo "# include " >> eina_amalgamation.c + @echo "#endif" >> eina_amalgamation.c + + @echo "#include \"eina_config.h\"" >> eina_amalgamation.c + @echo "#include \"eina_private.h\"" >> eina_amalgamation.c + @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c + @echo "#include \"Eina.h\"" >> eina_amalgamation.c + @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c + @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c + + @for f in $(base_sources); do \ + if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \ + file="$(srcdir)/$$f" ; \ + else \ + file="$$f" ; \ + fi ; \ + echo "/* file: $$file */" >> eina_amalgamation.c; \ + grep -v -e '^# *include \+.\(config\|eina_[a-z_]\+\|Evil\|stdio\|stdlib\|string\|dlfcn\|dirent\|assert\|errno\|fnmatch\)[.]h.*' $$file >> eina_amalgamation.c; \ + done + @echo "eina_amalgamation.c generated" + +else +libeina_la_SOURCES = $(base_sources) +endif + +libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@ +libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@ +libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ + +clean-local: + rm -rf *.gcno eina_amalgamation.c diff --git a/libraries/eina/src/lib/Makefile.in b/libraries/eina/src/lib/Makefile.in new file mode 100644 index 0000000..359aba0 --- /dev/null +++ b/libraries/eina/src/lib/Makefile.in @@ -0,0 +1,1226 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ + +# Will be back for developper after 1.1 +# eina_object.c +@EINA_HAVE_WIN32_TRUE@am__append_1 = eina_file_win32.c +@EINA_HAVE_WIN32_FALSE@am__append_2 = eina_file.c +@EINA_STATIC_BUILD_BUDDY_TRUE@am__append_3 = $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c +@EINA_STATIC_BUILD_CHAINED_POOL_TRUE@am__append_4 = $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c +@EINA_STATIC_BUILD_EMEMOA_FIXED_TRUE@am__append_5 = $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c +@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_TRUE@am__append_6 = $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c +@EINA_STATIC_BUILD_FIXED_BITMAP_TRUE@am__append_7 = $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c +@EINA_STATIC_BUILD_ONE_BIG_TRUE@am__append_8 = $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c +@EINA_STATIC_BUILD_PASS_THROUGH_TRUE@am__append_9 = $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c +subdir = src/lib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libeina_la_DEPENDENCIES = +am__libeina_la_SOURCES_DIST = eina_accessor.c eina_array.c \ + eina_benchmark.c eina_binbuf.c eina_binshare.c eina_convert.c \ + eina_counter.c eina_cpu.c eina_error.c eina_fp.c \ + eina_hamster.c eina_hash.c eina_inlist.c eina_iterator.c \ + eina_lalloc.c eina_list.c eina_log.c eina_magic.c eina_main.c \ + eina_matrixsparse.c eina_mempool.c eina_mmap.c eina_module.c \ + eina_prefix.c eina_quadtree.c eina_rbtree.c eina_rectangle.c \ + eina_safety_checks.c eina_sched.c eina_share_common.c \ + eina_simple_xml_parser.c eina_str.c eina_strbuf.c \ + eina_strbuf_common.c eina_stringshare.c eina_tiler.c \ + eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \ + eina_xattr.c eina_file_win32.c eina_file.c \ + $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c \ + $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c \ + $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c \ + $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c \ + $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c \ + $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c \ + $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c +@EINA_HAVE_WIN32_TRUE@am__objects_1 = libeina_la-eina_file_win32.lo +@EINA_HAVE_WIN32_FALSE@am__objects_2 = libeina_la-eina_file.lo +@EINA_STATIC_BUILD_BUDDY_TRUE@am__objects_3 = \ +@EINA_STATIC_BUILD_BUDDY_TRUE@ libeina_la-eina_buddy.lo +@EINA_STATIC_BUILD_CHAINED_POOL_TRUE@am__objects_4 = libeina_la-eina_chained_mempool.lo +@EINA_STATIC_BUILD_EMEMOA_FIXED_TRUE@am__objects_5 = libeina_la-eina_ememoa_fixed.lo +@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_TRUE@am__objects_6 = libeina_la-eina_ememoa_unknown.lo +@EINA_STATIC_BUILD_FIXED_BITMAP_TRUE@am__objects_7 = libeina_la-eina_fixed_bitmap.lo +@EINA_STATIC_BUILD_ONE_BIG_TRUE@am__objects_8 = \ +@EINA_STATIC_BUILD_ONE_BIG_TRUE@ libeina_la-eina_one_big.lo +@EINA_STATIC_BUILD_PASS_THROUGH_TRUE@am__objects_9 = libeina_la-eina_pass_through.lo +am__objects_10 = libeina_la-eina_accessor.lo libeina_la-eina_array.lo \ + libeina_la-eina_benchmark.lo libeina_la-eina_binbuf.lo \ + libeina_la-eina_binshare.lo libeina_la-eina_convert.lo \ + libeina_la-eina_counter.lo libeina_la-eina_cpu.lo \ + libeina_la-eina_error.lo libeina_la-eina_fp.lo \ + libeina_la-eina_hamster.lo libeina_la-eina_hash.lo \ + libeina_la-eina_inlist.lo libeina_la-eina_iterator.lo \ + libeina_la-eina_lalloc.lo libeina_la-eina_list.lo \ + libeina_la-eina_log.lo libeina_la-eina_magic.lo \ + libeina_la-eina_main.lo libeina_la-eina_matrixsparse.lo \ + libeina_la-eina_mempool.lo libeina_la-eina_mmap.lo \ + libeina_la-eina_module.lo libeina_la-eina_prefix.lo \ + libeina_la-eina_quadtree.lo libeina_la-eina_rbtree.lo \ + libeina_la-eina_rectangle.lo libeina_la-eina_safety_checks.lo \ + libeina_la-eina_sched.lo libeina_la-eina_share_common.lo \ + libeina_la-eina_simple_xml_parser.lo libeina_la-eina_str.lo \ + libeina_la-eina_strbuf.lo libeina_la-eina_strbuf_common.lo \ + libeina_la-eina_stringshare.lo libeina_la-eina_tiler.lo \ + libeina_la-eina_unicode.lo libeina_la-eina_ustrbuf.lo \ + libeina_la-eina_ustringshare.lo libeina_la-eina_value.lo \ + libeina_la-eina_xattr.lo $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) $(am__objects_4) $(am__objects_5) \ + $(am__objects_6) $(am__objects_7) $(am__objects_8) \ + $(am__objects_9) +@EINA_AMALGAMATION_FALSE@am_libeina_la_OBJECTS = $(am__objects_10) +@EINA_AMALGAMATION_TRUE@nodist_libeina_la_OBJECTS = \ +@EINA_AMALGAMATION_TRUE@ libeina_la-eina_amalgamation.lo +libeina_la_OBJECTS = $(am_libeina_la_OBJECTS) \ + $(nodist_libeina_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libeina_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libeina_la_CFLAGS) \ + $(CFLAGS) $(libeina_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libeina_la_SOURCES) $(nodist_libeina_la_SOURCES) +DIST_SOURCES = $(am__libeina_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +base_sources = eina_accessor.c eina_array.c eina_benchmark.c \ + eina_binbuf.c eina_binshare.c eina_convert.c eina_counter.c \ + eina_cpu.c eina_error.c eina_fp.c eina_hamster.c eina_hash.c \ + eina_inlist.c eina_iterator.c eina_lalloc.c eina_list.c \ + eina_log.c eina_magic.c eina_main.c eina_matrixsparse.c \ + eina_mempool.c eina_mmap.c eina_module.c eina_prefix.c \ + eina_quadtree.c eina_rbtree.c eina_rectangle.c \ + eina_safety_checks.c eina_sched.c eina_share_common.c \ + eina_simple_xml_parser.c eina_str.c eina_strbuf.c \ + eina_strbuf_common.c eina_stringshare.c eina_tiler.c \ + eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \ + eina_xattr.c $(am__append_1) $(am__append_2) $(am__append_3) \ + $(am__append_4) $(am__append_5) $(am__append_6) \ + $(am__append_7) $(am__append_8) $(am__append_9) +EXTRA_DIST = \ +eina_share_common.h \ +eina_private.h \ +eina_strbuf_common.h \ +eina_strbuf_template_c.x \ +eina_binbuf_template_c.x + +lib_LTLIBRARIES = libeina.la +@EINA_AMALGAMATION_TRUE@nodist_libeina_la_SOURCES = eina_amalgamation.c +@EINA_AMALGAMATION_FALSE@libeina_la_SOURCES = $(base_sources) +libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@ +libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@ +libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libeina.la: $(libeina_la_OBJECTS) $(libeina_la_DEPENDENCIES) + $(AM_V_CCLD)$(libeina_la_LINK) -rpath $(libdir) $(libeina_la_OBJECTS) $(libeina_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_accessor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_amalgamation.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_array.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_benchmark.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binbuf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binshare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_buddy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_chained_mempool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_convert.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_counter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_cpu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file_win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hamster.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_inlist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_iterator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_lalloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_list.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_log.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_magic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_main.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_matrixsparse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mempool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_module.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_one_big.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_pass_through.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_prefix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_quadtree.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rbtree.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rectangle.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_safety_checks.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_sched.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_share_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_str.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf_common.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_stringshare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_tiler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_unicode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustrbuf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustringshare.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_value.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_xattr.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libeina_la-eina_accessor.lo: eina_accessor.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_accessor.Tpo $(DEPDIR)/libeina_la-eina_accessor.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_accessor.c' object='libeina_la-eina_accessor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_array.lo: eina_array.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_array.Tpo $(DEPDIR)/libeina_la-eina_array.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_array.c' object='libeina_la-eina_array.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_benchmark.lo: eina_benchmark.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_benchmark.Tpo $(DEPDIR)/libeina_la-eina_benchmark.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_benchmark.c' object='libeina_la-eina_benchmark.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_binbuf.lo: eina_binbuf.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binbuf.Tpo $(DEPDIR)/libeina_la-eina_binbuf.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binbuf.c' object='libeina_la-eina_binbuf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_binshare.lo: eina_binshare.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binshare.Tpo $(DEPDIR)/libeina_la-eina_binshare.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binshare.c' object='libeina_la-eina_binshare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_convert.lo: eina_convert.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_convert.Tpo $(DEPDIR)/libeina_la-eina_convert.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_convert.c' object='libeina_la-eina_convert.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_counter.lo: eina_counter.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_counter.Tpo $(DEPDIR)/libeina_la-eina_counter.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_counter.c' object='libeina_la-eina_counter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_cpu.lo: eina_cpu.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_cpu.Tpo $(DEPDIR)/libeina_la-eina_cpu.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_cpu.c' object='libeina_la-eina_cpu.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_error.lo: eina_error.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_error.Tpo $(DEPDIR)/libeina_la-eina_error.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_error.c' object='libeina_la-eina_error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_fp.lo: eina_fp.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fp.Tpo $(DEPDIR)/libeina_la-eina_fp.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fp.c' object='libeina_la-eina_fp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_hamster.lo: eina_hamster.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hamster.Tpo $(DEPDIR)/libeina_la-eina_hamster.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hamster.c' object='libeina_la-eina_hamster.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_hash.lo: eina_hash.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hash.Tpo $(DEPDIR)/libeina_la-eina_hash.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hash.c' object='libeina_la-eina_hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_inlist.lo: eina_inlist.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_inlist.Tpo $(DEPDIR)/libeina_la-eina_inlist.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_inlist.c' object='libeina_la-eina_inlist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_iterator.lo: eina_iterator.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_iterator.Tpo $(DEPDIR)/libeina_la-eina_iterator.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_iterator.c' object='libeina_la-eina_iterator.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_lalloc.lo: eina_lalloc.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_lalloc.Tpo $(DEPDIR)/libeina_la-eina_lalloc.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_lalloc.c' object='libeina_la-eina_lalloc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_list.lo: eina_list.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_list.Tpo $(DEPDIR)/libeina_la-eina_list.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_list.c' object='libeina_la-eina_list.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_log.lo: eina_log.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_log.Tpo $(DEPDIR)/libeina_la-eina_log.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_log.c' object='libeina_la-eina_log.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_magic.lo: eina_magic.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_magic.Tpo $(DEPDIR)/libeina_la-eina_magic.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_magic.c' object='libeina_la-eina_magic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_main.lo: eina_main.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_main.Tpo $(DEPDIR)/libeina_la-eina_main.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_main.c' object='libeina_la-eina_main.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_matrixsparse.lo: eina_matrixsparse.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_matrixsparse.Tpo $(DEPDIR)/libeina_la-eina_matrixsparse.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_matrixsparse.c' object='libeina_la-eina_matrixsparse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_mempool.lo: eina_mempool.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mempool.Tpo $(DEPDIR)/libeina_la-eina_mempool.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mempool.c' object='libeina_la-eina_mempool.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_mmap.lo: eina_mmap.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mmap.Tpo $(DEPDIR)/libeina_la-eina_mmap.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mmap.c' object='libeina_la-eina_mmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_module.lo: eina_module.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_module.Tpo $(DEPDIR)/libeina_la-eina_module.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_module.c' object='libeina_la-eina_module.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_prefix.lo: eina_prefix.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_prefix.Tpo $(DEPDIR)/libeina_la-eina_prefix.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_prefix.c' object='libeina_la-eina_prefix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_quadtree.lo: eina_quadtree.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_quadtree.Tpo $(DEPDIR)/libeina_la-eina_quadtree.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_quadtree.c' object='libeina_la-eina_quadtree.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_rbtree.lo: eina_rbtree.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rbtree.Tpo $(DEPDIR)/libeina_la-eina_rbtree.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rbtree.c' object='libeina_la-eina_rbtree.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_rectangle.lo: eina_rectangle.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rectangle.Tpo $(DEPDIR)/libeina_la-eina_rectangle.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rectangle.c' object='libeina_la-eina_rectangle.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_safety_checks.lo: eina_safety_checks.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_safety_checks.Tpo $(DEPDIR)/libeina_la-eina_safety_checks.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_safety_checks.c' object='libeina_la-eina_safety_checks.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_sched.lo: eina_sched.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_sched.Tpo $(DEPDIR)/libeina_la-eina_sched.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_sched.c' object='libeina_la-eina_sched.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_share_common.lo: eina_share_common.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_share_common.Tpo $(DEPDIR)/libeina_la-eina_share_common.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_share_common.c' object='libeina_la-eina_share_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_simple_xml_parser.lo: eina_simple_xml_parser.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_simple_xml_parser.Tpo $(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_simple_xml_parser.c' object='libeina_la-eina_simple_xml_parser.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_str.lo: eina_str.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_str.Tpo $(DEPDIR)/libeina_la-eina_str.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_str.c' object='libeina_la-eina_str.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_strbuf.lo: eina_strbuf.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf.Tpo $(DEPDIR)/libeina_la-eina_strbuf.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf.c' object='libeina_la-eina_strbuf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_strbuf_common.lo: eina_strbuf_common.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf_common.Tpo $(DEPDIR)/libeina_la-eina_strbuf_common.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf_common.c' object='libeina_la-eina_strbuf_common.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_stringshare.lo: eina_stringshare.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_stringshare.Tpo $(DEPDIR)/libeina_la-eina_stringshare.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_stringshare.c' object='libeina_la-eina_stringshare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_tiler.lo: eina_tiler.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_tiler.Tpo $(DEPDIR)/libeina_la-eina_tiler.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_tiler.c' object='libeina_la-eina_tiler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_unicode.lo: eina_unicode.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_unicode.Tpo $(DEPDIR)/libeina_la-eina_unicode.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_unicode.c' object='libeina_la-eina_unicode.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_ustrbuf.lo: eina_ustrbuf.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustrbuf.Tpo $(DEPDIR)/libeina_la-eina_ustrbuf.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustrbuf.c' object='libeina_la-eina_ustrbuf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_ustringshare.lo: eina_ustringshare.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustringshare.Tpo $(DEPDIR)/libeina_la-eina_ustringshare.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustringshare.c' object='libeina_la-eina_ustringshare.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_value.lo: eina_value.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_value.Tpo $(DEPDIR)/libeina_la-eina_value.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_value.c' object='libeina_la-eina_value.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_xattr.lo: eina_xattr.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_xattr.Tpo $(DEPDIR)/libeina_la-eina_xattr.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_xattr.c' object='libeina_la-eina_xattr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_file_win32.lo: eina_file_win32.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file_win32.Tpo $(DEPDIR)/libeina_la-eina_file_win32.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file_win32.c' object='libeina_la-eina_file_win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_file.lo: eina_file.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file.Tpo $(DEPDIR)/libeina_la-eina_file.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file.c' object='libeina_la-eina_file.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_buddy.lo: $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_buddy.Tpo $(DEPDIR)/libeina_la-eina_buddy.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c' object='libeina_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_chained_mempool.lo: $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_chained_mempool.Tpo $(DEPDIR)/libeina_la-eina_chained_mempool.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_ememoa_fixed.lo: $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_fixed.Tpo $(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_ememoa_unknown.lo: $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_unknown.Tpo $(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_fixed_bitmap.lo: $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fixed_bitmap.Tpo $(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_one_big.lo: $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_one_big.Tpo $(DEPDIR)/libeina_la-eina_one_big.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_pass_through.lo: $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_pass_through.Tpo $(DEPDIR)/libeina_la-eina_pass_through.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@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@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +libeina_la-eina_amalgamation.lo: eina_amalgamation.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_amalgamation.Tpo $(DEPDIR)/libeina_la-eina_amalgamation.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_amalgamation.c' object='libeina_la-eina_amalgamation.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-local ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +@EINA_AMALGAMATION_TRUE@eina_amalgamation.c: $(base_sources) Makefile +@EINA_AMALGAMATION_TRUE@ -rm -f eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"config.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#elif defined __GNUC__" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _AIX" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __alloca" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _MSC_VER" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# define alloca _alloca" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#else" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# ifdef __cplusplus" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#extern \"C\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# endif" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#void *alloca (size_t);" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include " >> eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "# include " >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_config.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_private.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"Eina.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c +@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c + +@EINA_AMALGAMATION_TRUE@ @for f in $(base_sources); do \ +@EINA_AMALGAMATION_TRUE@ if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \ +@EINA_AMALGAMATION_TRUE@ file="$(srcdir)/$$f" ; \ +@EINA_AMALGAMATION_TRUE@ else \ +@EINA_AMALGAMATION_TRUE@ file="$$f" ; \ +@EINA_AMALGAMATION_TRUE@ fi ; \ +@EINA_AMALGAMATION_TRUE@ echo "/* file: $$file */" >> eina_amalgamation.c; \ +@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; \ +@EINA_AMALGAMATION_TRUE@ done +@EINA_AMALGAMATION_TRUE@ @echo "eina_amalgamation.c generated" + +clean-local: + rm -rf *.gcno eina_amalgamation.c + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/lib/eina_accessor.c b/libraries/eina/src/lib/eina_accessor.c new file mode 100644 index 0000000..aec44ef --- /dev/null +++ b/libraries/eina/src/lib/eina_accessor.c @@ -0,0 +1,176 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_config.h" +#include "eina_private.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_accessor.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_MAGIC_ACCESSOR_STR[] = "Eina Accessor"; + +#define EINA_MAGIC_CHECK_ACCESSOR(d) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ACCESSOR)) { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); } \ + } while(0) + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the accessor module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the accessor module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_accessor_init(void) +{ + return eina_magic_string_set(EINA_MAGIC_ACCESSOR, EINA_MAGIC_ACCESSOR_STR); +} + +/** + * @internal + * @brief Shut down the accessor module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the accessor module set up by + * eina_accessor_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_accessor_shutdown(void) +{ + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + + +EAPI void +eina_accessor_free(Eina_Accessor *accessor) +{ + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN(accessor); + EINA_SAFETY_ON_NULL_RETURN(accessor->free); + accessor->free(accessor); +} + +EAPI void * +eina_accessor_container_get(Eina_Accessor *accessor) +{ + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_container, NULL); + return accessor->get_container(accessor); +} + +EAPI Eina_Bool +eina_accessor_data_get(Eina_Accessor *accessor, + unsigned int position, + void **data) +{ + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_at, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + return accessor->get_at(accessor, position, data); +} + +EAPI void +eina_accessor_over(Eina_Accessor *accessor, + Eina_Each_Cb cb, + unsigned int start, + unsigned int end, + const void *fdata) +{ + const void *container; + void *data; + unsigned int i; + + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN(accessor); + EINA_SAFETY_ON_NULL_RETURN(accessor->get_container); + EINA_SAFETY_ON_NULL_RETURN(accessor->get_at); + EINA_SAFETY_ON_NULL_RETURN(cb); + EINA_SAFETY_ON_FALSE_RETURN(start < end); + + if (!eina_accessor_lock(accessor)) + return ; + + container = accessor->get_container(accessor); + for (i = start; i < end && accessor->get_at(accessor, i, &data) == EINA_TRUE; + ++i) + if (cb(container, data, (void *)fdata) != EINA_TRUE) + goto on_exit; + + on_exit: + (void) eina_accessor_unlock(accessor); +} + +EAPI Eina_Bool +eina_accessor_lock(Eina_Accessor *accessor) +{ + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); + + if (accessor->lock) + return accessor->lock(accessor); + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_accessor_unlock(Eina_Accessor *accessor) +{ + EINA_MAGIC_CHECK_ACCESSOR(accessor); + EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); + + if (accessor->unlock) + return accessor->unlock(accessor); + return EINA_TRUE; +} diff --git a/libraries/eina/src/lib/eina_array.c b/libraries/eina/src/lib/eina_array.c new file mode 100644 index 0000000..5a850ac --- /dev/null +++ b/libraries/eina/src/lib/eina_array.c @@ -0,0 +1,491 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_array.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_MAGIC_ARRAY_STR[] = "Eina Array"; +static const char EINA_MAGIC_ARRAY_ITERATOR_STR[] = "Eina Array Iterator"; +static const char EINA_MAGIC_ARRAY_ACCESSOR_STR[] = "Eina Array Accessor"; + +#define EINA_MAGIC_CHECK_ARRAY(d) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY)) { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY); } \ + } while (0) + +#define EINA_MAGIC_CHECK_ARRAY_ITERATOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ITERATOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY_ITERATOR); \ + return __VA_ARGS__; \ + } \ + } while (0) + +#define EINA_MAGIC_CHECK_ARRAY_ACCESSOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ACCESSOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); \ + return __VA_ARGS__; \ + } \ + } while (0) + + +typedef struct _Eina_Iterator_Array Eina_Iterator_Array; +struct _Eina_Iterator_Array +{ + Eina_Iterator iterator; + + const Eina_Array *array; + unsigned int index; + + EINA_MAGIC +}; + +typedef struct _Eina_Accessor_Array Eina_Accessor_Array; +struct _Eina_Accessor_Array +{ + Eina_Accessor accessor; + const Eina_Array *array; + EINA_MAGIC +}; + +static int _eina_array_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_array_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_array_log_dom, __VA_ARGS__) + +static void eina_array_iterator_free(Eina_Iterator_Array *it) EINA_ARG_NONNULL(1); +static Eina_Array *eina_array_iterator_get_container(Eina_Iterator_Array *it) EINA_ARG_NONNULL(1); +static Eina_Bool eina_array_iterator_next(Eina_Iterator_Array *it, + void **data) EINA_ARG_NONNULL(1); + +static Eina_Bool eina_array_accessor_get_at(Eina_Accessor_Array *it, + unsigned int idx, + void **data) EINA_ARG_NONNULL(1); +static Eina_Array *eina_array_accessor_get_container(Eina_Accessor_Array *it) EINA_ARG_NONNULL(1); +static void eina_array_accessor_free(Eina_Accessor_Array *it) EINA_ARG_NONNULL(1); + +static Eina_Bool +eina_array_iterator_next(Eina_Iterator_Array *it, void **data) +{ + EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, EINA_FALSE); + + if (!(it->index < eina_array_count_get(it->array))) + return EINA_FALSE; + + if (data) + *data = eina_array_data_get(it->array, it->index); + + it->index++; + return EINA_TRUE; +} + +static Eina_Array * +eina_array_iterator_get_container(Eina_Iterator_Array *it) +{ + EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, NULL); + return (Eina_Array *)it->array; +} + +static void +eina_array_iterator_free(Eina_Iterator_Array *it) +{ + EINA_MAGIC_CHECK_ARRAY_ITERATOR(it); + MAGIC_FREE(it); +} + +static Eina_Bool +eina_array_accessor_get_at(Eina_Accessor_Array *it, + unsigned int idx, + void **data) +{ + EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, EINA_FALSE); + + if (!(idx < eina_array_count_get(it->array))) + return EINA_FALSE; + + if (data) + *data = eina_array_data_get(it->array, idx); + + return EINA_TRUE; +} + +static Eina_Array * +eina_array_accessor_get_container(Eina_Accessor_Array *it) +{ + EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, NULL); + return (Eina_Array *)it->array; +} + +static void +eina_array_accessor_free(Eina_Accessor_Array *it) +{ + EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it); + MAGIC_FREE(it); +} + +/* used from eina_inline_array.x, thus a needed symbol */ +EAPI Eina_Bool +eina_array_grow(Eina_Array *array) +{ + void **tmp; + unsigned int total; + + EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); + + EINA_MAGIC_CHECK_ARRAY(array); + + total = array->total + array->step; + eina_error_set(0); + tmp = realloc(array->data, sizeof (void *) * total); + if (EINA_UNLIKELY(!tmp)) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return 0; + } + + array->total = total; + array->data = tmp; + + return 1; +} + +/** + * @endcond + */ + + +/*============================================================================* + * Global * + *============================================================================*/ + +/** + * @internal + * @brief Initialize the array module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the error and magic modules or Eina. It is + * called by eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_array_init(void) +{ + _eina_array_log_dom = eina_log_domain_register("eina_array", + EINA_LOG_COLOR_DEFAULT); + if (_eina_array_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_array"); + return EINA_FALSE; + } + +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_ARRAY); + EMS(EINA_MAGIC_ARRAY_ITERATOR); + EMS(EINA_MAGIC_ARRAY_ACCESSOR); +#undef EMS + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the array module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the array module set up by + * eina_array_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_array_shutdown(void) +{ + eina_log_domain_unregister(_eina_array_log_dom); + _eina_array_log_dom = -1; + return EINA_TRUE; +} + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI Eina_Array * +eina_array_new(unsigned int step) +{ + Eina_Array *array; + + eina_error_set(0); + array = malloc(sizeof (Eina_Array)); + if (!array) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY); + + array->version = EINA_ARRAY_VERSION; + array->data = NULL; + array->total = 0; + array->count = 0; + array->step = step; + + return array; +} + +EAPI void +eina_array_free(Eina_Array *array) +{ + eina_array_flush(array); + + EINA_SAFETY_ON_NULL_RETURN(array); + EINA_MAGIC_CHECK_ARRAY(array); + MAGIC_FREE(array); +} + +EAPI void +eina_array_step_set(Eina_Array *array, + unsigned int sizeof_eina_array, + unsigned int step) +{ + EINA_SAFETY_ON_NULL_RETURN(array); + + if (sizeof (Eina_Array) != sizeof_eina_array) + { + ERR("Unknow Eina_Array size ! Got %i, expected %i !\n", + sizeof_eina_array, + (int) sizeof (Eina_Array)); + /* Force memory to zero to provide a small layer of security */ + memset(array, 0, sizeof_eina_array); + return ; + } + + array->version = EINA_ARRAY_VERSION; + array->data = NULL; + array->total = 0; + array->count = 0; + array->step = step; + EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY); +} + +EAPI void +eina_array_flush(Eina_Array *array) +{ + EINA_SAFETY_ON_NULL_RETURN(array); + EINA_MAGIC_CHECK_ARRAY(array); + + array->count = 0; + array->total = 0; + + if (!array->data) + return; + + free(array->data); + array->data = NULL; +} + +EAPI Eina_Bool +eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, + void *gdata), + void *gdata) +{ + void **tmp; + /* WARNING: + The algorithm does exit before using unitialized data. So compiler is + giving you a false positiv here too. + */ + void *data = NULL; + unsigned int total = 0; + unsigned int limit; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(keep, EINA_FALSE); + EINA_MAGIC_CHECK_ARRAY(array); + + if (array->total == 0) + return EINA_TRUE; + + for (i = 0; i < array->count; ++i) + { + data = eina_array_data_get(array, i); + + if (keep(data, gdata) == EINA_FALSE) + break; + } + limit = i; + if (i < array->count) + ++i; + + for (; i < array->count; ++i) + { + data = eina_array_data_get(array, i); + + if (keep(data, gdata) == EINA_TRUE) + break; + } + /* Special case all objects that need to stay are at the beginning of the array. */ + if (i == array->count) + { + array->count = limit; + if (array->count == 0) + { + free(array->data); + array->total = 0; + array->data = NULL; + } + + return EINA_TRUE; + } + + eina_error_set(0); + tmp = malloc(sizeof (void *) * array->total); + if (!tmp) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return EINA_FALSE; + } + + memcpy(tmp, array->data, limit * sizeof(void *)); + total = limit; + + if (i < array->count) + { + tmp[total] = data; + total++; + ++i; + } + + for (; i < array->count; ++i) + { + data = eina_array_data_get(array, i); + + if (keep(data, gdata)) + { + tmp[total] = data; + total++; + } + } + + free(array->data); + + /* If we do not keep any object in the array, we should have exited + earlier in test (i == array->count). */ + assert(total != 0); + + array->data = tmp; + array->count = total; + return EINA_TRUE; +} + +EAPI Eina_Iterator * +eina_array_iterator_new(const Eina_Array *array) +{ + Eina_Iterator_Array *it; + + EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); + EINA_MAGIC_CHECK_ARRAY(array); + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Array)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(it, EINA_MAGIC_ARRAY_ITERATOR); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->array = array; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(eina_array_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + eina_array_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(eina_array_iterator_free); + + return &it->iterator; +} + +EAPI Eina_Accessor * +eina_array_accessor_new(const Eina_Array *array) +{ + Eina_Accessor_Array *ac; + + EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); + EINA_MAGIC_CHECK_ARRAY(array); + + eina_error_set(0); + ac = calloc(1, sizeof (Eina_Accessor_Array)); + if (!ac) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(ac, EINA_MAGIC_ARRAY_ACCESSOR); + EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); + + ac->array = array; + + ac->accessor.version = EINA_ACCESSOR_VERSION; + ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_array_accessor_get_at); + ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER( + eina_array_accessor_get_container); + ac->accessor.free = FUNC_ACCESSOR_FREE(eina_array_accessor_free); + + return &ac->accessor; +} diff --git a/libraries/eina/src/lib/eina_benchmark.c b/libraries/eina/src/lib/eina_benchmark.c new file mode 100644 index 0000000..1ba2a00 --- /dev/null +++ b/libraries/eina/src/lib/eina_benchmark.c @@ -0,0 +1,372 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_log.h" +#include "eina_benchmark.h" +#include "eina_inlist.h" +#include "eina_list.h" +#include "eina_counter.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_BENCHMARK_FILENAME_MASK "bench_%s_%s.gnuplot" +#define EINA_BENCHMARK_DATA_MASK "bench_%s_%s.%s.data" + +typedef struct _Eina_Run Eina_Run; +struct _Eina_Run +{ + EINA_INLIST; + + Eina_Benchmark_Specimens cb; + const char *name; + int start; + int end; + int step; +}; + +struct _Eina_Benchmark +{ + const char *name; + const char *run; + + Eina_Inlist *runs; + Eina_List *names; +}; + +static int _eina_benchmark_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_benchmark_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_benchmark_log_dom, __VA_ARGS__) + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the benchmark module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the benchmark module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_benchmark_init(void) +{ + _eina_benchmark_log_dom = eina_log_domain_register("eina_benchmark", + EINA_LOG_COLOR_DEFAULT); + if (_eina_benchmark_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_benchmark"); + return EINA_FALSE; + } + + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the benchmark module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the benchmark module set up by + * eina_benchmark_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_benchmark_shutdown(void) +{ + eina_log_domain_unregister(_eina_benchmark_log_dom); + _eina_benchmark_log_dom = -1; + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Benchmark * +eina_benchmark_new(const char *name, const char *run) +{ + Eina_Benchmark *new; + + eina_error_set(0); + new = calloc(1, sizeof (Eina_Benchmark)); + if (!new) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + new->name = name; + new->run = run; + + return new; +} + +EAPI void +eina_benchmark_free(Eina_Benchmark *bench) +{ + Eina_Array *names; + + if (!bench) + return; + + while (bench->runs) + { + Eina_Run *run = (Eina_Run *)bench->runs; + + bench->runs = eina_inlist_remove(bench->runs, bench->runs); + free(run); + } + + EINA_LIST_FREE(bench->names, names) + { + Eina_Array_Iterator it; + char *tmp; + unsigned int i; + + EINA_ARRAY_ITER_NEXT(names, i, tmp, it) + free(tmp); + + eina_array_free(names); + } + + free(bench); +} + +EAPI Eina_Bool +eina_benchmark_register(Eina_Benchmark *bench, + const char *name, + Eina_Benchmark_Specimens bench_cb, + int count_start, + int count_end, + int count_step) +{ + Eina_Run *run; + + if (!bench) + return EINA_FALSE; + + if (count_step == 0) + return EINA_FALSE; + + eina_error_set(0); + run = calloc(1, sizeof (Eina_Run)); + if (!run) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return EINA_FALSE; + } + + run->cb = bench_cb; + run->name = name; + run->start = count_start; + run->end = count_end; + run->step = count_step; + + bench->runs = eina_inlist_append(bench->runs, EINA_INLIST_GET(run)); + + return EINA_TRUE; +} + +EAPI Eina_Array * +eina_benchmark_run(Eina_Benchmark *bench) +{ + FILE *main_script; + FILE *current_data; + Eina_Array *ea; + Eina_Run *run; + char *buffer; + Eina_Bool first = EINA_FALSE; + size_t length; + + if (!bench) + return NULL; + + length = strlen(EINA_BENCHMARK_FILENAME_MASK) + strlen(bench->name) + strlen( + bench->run); + + buffer = alloca(sizeof (char) * length); + if (!buffer) + return NULL; + + snprintf(buffer, + length, + EINA_BENCHMARK_FILENAME_MASK, + bench->name, + bench->run); + + main_script = fopen(buffer, "w"); + if (!main_script) + return NULL; + + ea = eina_array_new(16); + if (!ea) + { + fclose(main_script); + return NULL; + } + + eina_array_push(ea, strdup(buffer)); + + fprintf( + main_script, + "set autoscale # scale axes automatically\n" + "unset log # remove any log-scaling\n" + "unset label # remove any previous labels\n" + "set xtic auto # set xtics automatically\n" + "set ytic auto # set ytics automatically\n" +/* "set logscale y\n" */ + "set terminal png size 1024,768\n" + "set output \"output_%s_%s.png\"\n" + "set title \"%s %s\n" + "set xlabel \"tests\"\n" + "set ylabel \"time\"\n" + "plot ", + bench->name, + bench->run, + bench->name, + bench->run); + + EINA_INLIST_FOREACH(bench->runs, run) + { + Eina_Counter *counter; + char *result; + size_t tmp; + int i; + + tmp = strlen(EINA_BENCHMARK_DATA_MASK) + strlen(bench->name) + strlen( + bench->run) + strlen(run->name); + if (tmp > length) + { + buffer = alloca(sizeof (char) * tmp); + length = tmp; + } + + snprintf(buffer, + length, + EINA_BENCHMARK_DATA_MASK, + bench->name, + bench->run, + run->name); + + current_data = fopen(buffer, "w"); + if (!current_data) + continue; + + eina_array_push(ea, strdup(buffer)); + + counter = eina_counter_new(run->name); + + for (i = run->start; i < run->end; i += run->step) + { + fprintf(stderr, "Run %s: %i\n", run->name, i); + eina_counter_start(counter); + + run->cb(i); + + eina_counter_stop(counter, i); + } + + result = eina_counter_dump(counter); + if (result) + { + fprintf(current_data, "%s", result); + free(result); + } + + eina_counter_free(counter); + + fclose(current_data); + + if (first == EINA_FALSE) + first = EINA_TRUE; + else + fprintf(main_script, ", \\\n"); + + fprintf(main_script, + "\"%s\" using 1:2 title \'%s\' with line", + buffer, run->name); + } + + fprintf(main_script, "\n"); + + fclose(main_script); + + bench->names = eina_list_append(bench->names, ea); + + return ea; +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_binbuf.c b/libraries/eina/src/lib/eina_binbuf.c new file mode 100644 index 0000000..3cbebd1 --- /dev/null +++ b/libraries/eina/src/lib/eina_binbuf.c @@ -0,0 +1,62 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_private.h" +#include "eina_strbuf_common.h" +#include "eina_binbuf.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifdef _STRBUF_DATA_TYPE +# undef _STRBUF_DATA_TYPE +#endif + +#ifdef _STRBUF_CSIZE +# undef _STRBUF_CSIZE +#endif + +#ifdef _STRBUF_STRUCT_NAME +# undef _STRBUF_STRUCT_NAME +#endif + +#ifdef _STRBUF_MAGIC +# undef _STRBUF_MAGIC +#endif + +#ifdef _STRBUF_MAGIC_STR +# undef _STRBUF_MAGIC_STR +#endif + +#ifdef _FUNC_EXPAND +# undef _FUNC_EXPAND +#endif + + +#define _STRBUF_DATA_TYPE unsigned char +#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE) +#define _STRBUF_STRUCT_NAME Eina_Binbuf +#define _STRBUF_MAGIC EINA_MAGIC_BINBUF +#define _STRBUF_MAGIC_STR __BINBUF_MAGIC_STR +static const char __BINBUF_MAGIC_STR[] = "Eina Binbuf"; + +#define _FUNC_EXPAND(y) eina_binbuf_ ## y + +#include "eina_binbuf_template_c.x" + +/** + * @endcond + */ diff --git a/libraries/eina/src/lib/eina_binbuf_template_c.x b/libraries/eina/src/lib/eina_binbuf_template_c.x new file mode 100644 index 0000000..613a715 --- /dev/null +++ b/libraries/eina/src/lib/eina_binbuf_template_c.x @@ -0,0 +1,144 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ + +/* This file should be included from files implementing binbuf. + * The including file should define the following macros: + * _STRBUF_DATA_TYPE + * _STRBUF_CSIZE + * _STRBUF_STRUCT_NAME + * _STRBUF_MAGIC + * _STRBUF_MAGIC_STR + * _FUNC_EXPAND + * See how it's done in eina_ustrbuf.c and eina_strbuf.c. This just makes things + * a lot easier since those are essentially the same just with different sizes. + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/** + * @internal + * @brief Initialize the strbuf module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the strbuf module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +_FUNC_EXPAND(init)(void) +{ + eina_magic_string_static_set(_STRBUF_MAGIC, _STRBUF_MAGIC_STR); + return eina_strbuf_common_init(); +} + +/** + * @internal + * @brief Shut down the strbuf module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the strbuf module set up by + * eina_ustrbuf_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +_FUNC_EXPAND(shutdown)(void) +{ + return eina_strbuf_common_shutdown(); +} + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI _STRBUF_STRUCT_NAME * +_FUNC_EXPAND(new)(void) +{ + _STRBUF_STRUCT_NAME *buf = eina_strbuf_common_new(_STRBUF_CSIZE); + EINA_MAGIC_SET(buf, _STRBUF_MAGIC); + return buf; +} + +EAPI void +_FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf); + EINA_MAGIC_SET(buf, EINA_MAGIC_NONE); + eina_strbuf_common_free(buf); +} + +EAPI void +_FUNC_EXPAND(reset)(_STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf); + eina_strbuf_common_reset(_STRBUF_CSIZE, buf); +} + +EAPI Eina_Bool +_FUNC_EXPAND(append_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (const void *) str, length); +} + +EAPI Eina_Bool +_FUNC_EXPAND(insert_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length, size_t pos) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, (const void *) str, length, pos); +} + +EAPI Eina_Bool +_FUNC_EXPAND(append_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_append_char(_STRBUF_CSIZE, buf, (const void *) &c); +} + +EAPI Eina_Bool +_FUNC_EXPAND(insert_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c, size_t pos) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_insert_char(_STRBUF_CSIZE, buf, (const void *) &c, pos); +} + +EAPI Eina_Bool +_FUNC_EXPAND(remove)(_STRBUF_STRUCT_NAME *buf, size_t start, size_t end) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_remove(_STRBUF_CSIZE, buf, start, end); +} + +EAPI const _STRBUF_DATA_TYPE * +_FUNC_EXPAND(string_get)(const _STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf, NULL); + return (const _STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(buf); +} + +EAPI _STRBUF_DATA_TYPE * +_FUNC_EXPAND(string_steal)(_STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf, NULL); + return (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_steal(_STRBUF_CSIZE, buf); +} + +EAPI void +_FUNC_EXPAND(string_free)(_STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf); + eina_strbuf_common_string_free(_STRBUF_CSIZE, buf); +} + +EAPI size_t +_FUNC_EXPAND(length_get)(const _STRBUF_STRUCT_NAME *buf) +{ + EINA_MAGIC_CHECK_STRBUF(buf, 0); + return eina_strbuf_common_length_get(buf); +} diff --git a/libraries/eina/src/lib/eina_binshare.c b/libraries/eina/src/lib/eina_binshare.c new file mode 100644 index 0000000..68a82fc --- /dev/null +++ b/libraries/eina/src/lib/eina_binshare.c @@ -0,0 +1,127 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, + * Jorge Luis Zapata Muga, + * Cedric Bail, + * Gustavo Sverzut Barbieri + * Tom Hacohen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + + */ + +#include "eina_share_common.h" +#include "eina_unicode.h" +#include "eina_private.h" +#include "eina_binshare.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +/* The actual share */ +static Eina_Share *binshare_share; +static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the share_common module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +EAPI Eina_Bool +eina_binshare_init(void) +{ + return eina_share_common_init(&binshare_share, + EINA_MAGIC_BINSHARE_NODE, + EINA_MAGIC_BINSHARE_NODE_STR); +} + +/** + * @internal + * @brief Shut down the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the share_common module set up by + * eina_share_common_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +EAPI Eina_Bool +eina_binshare_shutdown(void) +{ + Eina_Bool ret; + ret = eina_share_common_shutdown(&binshare_share); + return ret; +} + + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI void +eina_binshare_del(const void *obj) +{ + if (!obj) + return; + + eina_share_common_del(binshare_share, obj); +} + +EAPI const void * +eina_binshare_add_length(const void *obj, unsigned int olen) +{ + return eina_share_common_add_length(binshare_share, + obj, + (olen) * sizeof(char), + 0); +} + +EAPI const void * +eina_binshare_ref(const void *obj) +{ + return eina_share_common_ref(binshare_share, obj); +} + +EAPI int +eina_binshare_length(const void *obj) +{ + return eina_share_common_length(binshare_share, obj); +} + +EAPI void +eina_binshare_dump(void) +{ + eina_share_common_dump(binshare_share, NULL, 0); +} diff --git a/libraries/eina/src/lib/eina_convert.c b/libraries/eina/src/lib/eina_convert.c new file mode 100644 index 0000000..63b6654 --- /dev/null +++ b/libraries/eina/src/lib/eina_convert.c @@ -0,0 +1,483 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_convert.h" +#include "eina_fp.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char look_up_table[] = {'0', '1', '2', '3', '4', + '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f'}; +static int _eina_convert_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_convert_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_convert_log_dom, __VA_ARGS__) + +#define HEXA_TO_INT(Hexa) (Hexa >= 'a') ? Hexa - 'a' + 10 : Hexa - '0' + +static inline void reverse(char s[], int length) +{ + int i, j; + char c; + + for (i = 0, j = length - 1; i < j; i++, j--) + { + c = s[i]; + s[i] = s[j]; + s[j] = c; + } +} + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +EAPI Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND = 0; +EAPI Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND = 0; +EAPI Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH = 0; + +static const char EINA_ERROR_CONVERT_0X_NOT_FOUND_STR[] = + "Error during string conversion to float, First '0x' was not found."; +static const char EINA_ERROR_CONVERT_P_NOT_FOUND_STR[] = + "Error during string conversion to float, First 'p' was not found."; +static const char EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH_STR[] = + "Error outrun string limit during conversion string conversion to float."; + +/** + * @endcond + */ + +/** + * @internal + * @brief Initialize the convert module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the convert module of Eina. It is called by + * eina_init(). + * + * This function sets up the error module of Eina and registers the + * errors #EINA_ERROR_CONVERT_0X_NOT_FOUND, + * #EINA_ERROR_CONVERT_P_NOT_FOUND and + * #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH. + * + * @see eina_init() + */ +Eina_Bool +eina_convert_init(void) +{ + _eina_convert_log_dom = eina_log_domain_register("eina_convert", + EINA_LOG_COLOR_DEFAULT); + if (_eina_convert_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_convert"); + return EINA_FALSE; + } + +#define EEMR(n) n = eina_error_msg_static_register(n ## _STR) + EEMR(EINA_ERROR_CONVERT_0X_NOT_FOUND); + EEMR(EINA_ERROR_CONVERT_P_NOT_FOUND); + EEMR(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH); +#undef EEMR + + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the convert module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the convert module set up by + * eina_convert_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_convert_shutdown(void) +{ + eina_log_domain_unregister(_eina_convert_log_dom); + _eina_convert_log_dom = -1; + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +/* + * Come from the second edition of The C Programming Language ("K&R2") on page 64 + */ + +EAPI int +eina_convert_itoa(int n, char *s) +{ + int i = 0; + int r = 0; + + EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0); + + if (n < 0) + { + n = -n; + *s++ = '-'; + r = 1; + } + + do { + s[i++] = n % 10 + '0'; + } while ((n /= 10) > 0); + + s[i] = '\0'; + + reverse(s, i); + + return i + r; +} + +EAPI int +eina_convert_xtoa(unsigned int n, char *s) +{ + int i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0); + + i = 0; + do { + s[i++] = look_up_table[n & 0xF]; + } while ((n >>= 4) > 0); + + s[i] = '\0'; + + reverse(s, i); + + return i; +} + +EAPI Eina_Bool +eina_convert_atod(const char *src, int length, long long *m, long *e) +{ + const char *str = src; + long long mantisse; + long exponent; + int nbr_decimals = 0; + int sign = 1; + + EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); + + if (length <= 0) + goto on_length_error; + + /* Compute the mantisse. */ + if (*str == '-') + { + sign = -1; + str++; + length--; + } + + if (length <= 2) + goto on_length_error; + + if (strncmp(str, "0x", 2)) + { + eina_error_set(EINA_ERROR_CONVERT_0X_NOT_FOUND); + DBG("'0x' not found in '%s'", src); + return EINA_FALSE; + } + + str += 2; + length -= 2; + + mantisse = HEXA_TO_INT(*str); + + str++; + length--; if (length <= 0) + goto on_length_error; + + if (*str == '.') + for (str++, length--; + length > 0 && *str != 'p'; + ++str, --length, ++nbr_decimals) + { + mantisse <<= 4; + mantisse += HEXA_TO_INT(*str); + } + + if (sign < 0) + mantisse = -mantisse; + + /* Compute the exponent. */ + if (*str != 'p') + { + eina_error_set(EINA_ERROR_CONVERT_P_NOT_FOUND); + DBG("'p' not found in '%s'", src); + return EINA_FALSE; + } + + sign = +1; + + str++; + length--; if (length <= 0) + goto on_length_error; + + if (strchr("-+", *str)) + { + sign = (*str == '-') ? -1 : +1; + + str++; length--; + } + + for (exponent = 0; length > 0 && *str != '\0'; ++str, --length) + { + exponent *= 10; + exponent += *str - '0'; + } + + if (length < 0) + goto on_length_error; + + if (sign < 0) + exponent = -exponent; + + *m = mantisse; + *e = exponent - (nbr_decimals << 2); + + return EINA_TRUE; + +on_length_error: + eina_error_set(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH); + return EINA_FALSE; +} + +EAPI int +eina_convert_dtoa(double d, char *des) +{ + int length = 0; + int p; + int i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE); + + if (d < 0.0) + { + *(des++) = '-'; + d = -d; + length++; + } + + d = frexp(d, &p); + + if (p) + { + d *= 2; + p -= 1; + } + + *(des++) = '0'; + *(des++) = 'x'; + *(des++) = look_up_table[(size_t)d]; + *(des++) = '.'; + length += 4; + + for (i = 0; i < 16; i++, length++) + { + d -= floor(d); + d *= 16; + *(des++) = look_up_table[(size_t)d]; + } + + while (*(des - 1) == '0') + { + des--; + length--; + } + + if (*(des - 1) == '.') + { + des--; + length--; + } + + *(des++) = 'p'; + if (p < 0) + { + *(des++) = '-'; + p = -p; + } + else + *(des++) = '+'; + + length += 2; + + return length + eina_convert_itoa(p, des); +} + +EAPI int +eina_convert_fptoa(Eina_F32p32 fp, char *des) +{ + int length = 0; + int p = 0; + int i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE); + + if (fp == 0) + { + memcpy(des, "0x0p+0", 7); + return 7; + } + + if (fp < 0) + { + *(des++) = '-'; + fp = -fp; + length++; + } + + /* fp >= 1 */ + if (fp >= 0x0000000100000000LL) + while (fp >= 0x0000000100000000LL) + { + p++; + /* fp /= 2 */ + fp >>= 1; + } /* fp < 0.5 */ + else if (fp < 0x80000000) + while (fp < 0x80000000) + { + p--; + /* fp *= 2 */ + fp <<= 1; + } + + if (p) + { + p--; + /* fp *= 2 */ + fp <<= 1; + } + + *(des++) = '0'; + *(des++) = 'x'; + *(des++) = look_up_table[fp >> 32]; + *(des++) = '.'; + length += 4; + + for (i = 0; i < 16; i++, length++) + { + fp &= 0x00000000ffffffffLL; + fp <<= 4; /* fp *= 16 */ + *(des++) = look_up_table[fp >> 32]; + } + + while (*(des - 1) == '0') + { + des--; + length--; + } + + if (*(des - 1) == '.') + { + des--; + length--; + } + + *(des++) = 'p'; + if (p < 0) + { + *(des++) = '-'; + p = -p; + } + else + *(des++) = '+'; + + length += 2; + + return length + eina_convert_itoa(p, des); +} + +EAPI Eina_Bool +eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) +{ + long long m; + long e; + + if (!eina_convert_atod(src, length, &m, &e)) + return EINA_FALSE; + + if (!fp) + return EINA_TRUE; + + e += 32; + + if (e > 0) + *fp = m << e; + else + *fp = m >> -e; + + return EINA_TRUE; +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_counter.c b/libraries/eina/src/lib/eina_counter.c new file mode 100644 index 0000000..6ca9417 --- /dev/null +++ b/libraries/eina/src/lib/eina_counter.c @@ -0,0 +1,362 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +#else +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +#endif /* _WIN2 */ + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_inlist.h" +#include "eina_error.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_counter.h" + +#ifdef HAVE_ESCAPE +# include +#endif + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifndef _WIN32 +typedef struct timespec Eina_Nano_Time; +#else +typedef LARGE_INTEGER Eina_Nano_Time; +#endif + +typedef struct _Eina_Clock Eina_Clock; + +struct _Eina_Counter +{ + EINA_INLIST; + + Eina_Inlist *clocks; + const char *name; +}; + +struct _Eina_Clock +{ + EINA_INLIST; + + Eina_Nano_Time start; + Eina_Nano_Time end; + int specimen; + + Eina_Bool valid; +}; + +#ifndef _WIN32 +static inline int +_eina_counter_time_get(Eina_Nano_Time *tp) +{ +# if defined(CLOCK_PROCESS_CPUTIME_ID) + return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, tp); +# elif defined(CLOCK_PROF) + return clock_gettime(CLOCK_PROF, tp); +# elif defined(CLOCK_REALTIME) + return clock_gettime(CLOCK_REALTIME, tp); +# else + struct timeval tv; + + if (gettimeofday(&tv, NULL)) + return -1; + + tp->tv_sec = tv.tv_sec; + tp->tv_nsec = tv.tv_usec * 1000L; + + return 0; +# endif +} +#else +static const char EINA_ERROR_COUNTER_WINDOWS_STR[] = + "Change your OS, you moron !"; +static int EINA_ERROR_COUNTER_WINDOWS = 0; +static LARGE_INTEGER _eina_counter_frequency; + +static inline int +_eina_counter_time_get(Eina_Nano_Time *tp) +{ + return QueryPerformanceCounter(tp); +} +#endif /* _WIN2 */ + +static char * +_eina_counter_asiprintf(char *base, int *position, const char *format, ...) +{ + char *tmp, *result; + int size = 32; + int n; + va_list ap; + + tmp = realloc(base, sizeof (char) * (*position + size)); + if (!tmp) + return base; + + result = tmp; + + while (1) + { + va_start(ap, format); + n = vsnprintf(result + *position, size, format, ap); + va_end(ap); + + if (n > -1 && n < size) + { + /* If we always have glibc > 2.2, we could just return *position += n. */ + *position += strlen(result + *position); + return result; + } + + if (n > -1) + size = n + 1; + else + size <<= 1; + + tmp = realloc(result, sizeof (char) * (*position + size)); + if (!tmp) + return result; + + result = tmp; + } +} + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/** + * @internal + * @brief Initialize the eina counter internal structure. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the counter module set up by + * eina_counter_init(). It is called by eina_init(). + * + * This function sets up the error module of Eina and only on Windows, + * it initializes the high precision timer. It also registers, only on + * Windows, the error #EINA_ERROR_COUNTER_WINDOWS. It is also called + * by eina_init(). It returns 0 on failure, otherwise it returns the + * number of times it has already been called. + * + * @see eina_init() + */ +Eina_Bool +eina_counter_init(void) +{ +#ifdef _WIN32 + EINA_ERROR_COUNTER_WINDOWS = eina_error_msg_static_register( + EINA_ERROR_COUNTER_WINDOWS_STR); + if (!QueryPerformanceFrequency(&_eina_counter_frequency)) + { + eina_error_set(EINA_ERROR_COUNTER_WINDOWS); + return EINA_FALSE; + } + +#endif /* _WIN2 */ + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the counter module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the counter module set up by + * eina_counter_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_counter_shutdown(void) +{ + return EINA_TRUE; +} + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI Eina_Counter * +eina_counter_new(const char *name) +{ + Eina_Counter *counter; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); + + length = strlen(name) + 1; + + eina_error_set(0); + counter = calloc(1, sizeof (Eina_Counter) + length); + if (!counter) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + counter->name = (char *)(counter + 1); + memcpy((char *)counter->name, name, length); + + return counter; +} + +EAPI void +eina_counter_free(Eina_Counter *counter) +{ + EINA_SAFETY_ON_NULL_RETURN(counter); + + while (counter->clocks) + { + Eina_Clock *clk = (Eina_Clock *)counter->clocks; + + counter->clocks = eina_inlist_remove(counter->clocks, counter->clocks); + free(clk); + } + + free(counter); +} + +EAPI void +eina_counter_start(Eina_Counter *counter) +{ + Eina_Clock *clk; + Eina_Nano_Time tp; + + EINA_SAFETY_ON_NULL_RETURN(counter); + if (_eina_counter_time_get(&tp) != 0) + return; + + eina_error_set(0); + clk = calloc(1, sizeof (Eina_Clock)); + if (!clk) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return; + } + + counter->clocks = eina_inlist_prepend(counter->clocks, EINA_INLIST_GET(clk)); + + clk->valid = EINA_FALSE; + clk->start = tp; +} + +EAPI void +eina_counter_stop(Eina_Counter *counter, int specimen) +{ + Eina_Clock *clk; + Eina_Nano_Time tp; + + EINA_SAFETY_ON_NULL_RETURN(counter); + if (_eina_counter_time_get(&tp) != 0) + return; + + clk = (Eina_Clock *)counter->clocks; + + if (!clk || clk->valid == EINA_TRUE) + return; + + clk->end = tp; + clk->specimen = specimen; + clk->valid = EINA_TRUE; +} + +EAPI char * +eina_counter_dump(Eina_Counter *counter) +{ + Eina_Clock *clk; + char *result = NULL; + int position = 0; + + EINA_SAFETY_ON_NULL_RETURN_VAL(counter, NULL); + + result = _eina_counter_asiprintf( + result, + &position, + "# specimen\texperiment time\tstarting time\tending time\n"); + if (!result) + return NULL; + + EINA_INLIST_REVERSE_FOREACH(counter->clocks, clk) + { + long int start; + long int end; + long int diff; + + if (clk->valid == EINA_FALSE) + continue; + +#ifndef _WIN32 + start = clk->start.tv_sec * 1000000000 + clk->start.tv_nsec; + end = clk->end.tv_sec * 1000000000 + clk->end.tv_nsec; + diff = + (clk->end.tv_sec - + clk->start.tv_sec) * 1000000000 + clk->end.tv_nsec - + clk->start.tv_nsec; +#else + start = + (long int)(((long long int)clk->start.QuadPart * + 1000000000ll) / + (long long int)_eina_counter_frequency.QuadPart); + end = + (long int)(((long long int)clk->end.QuadPart * + 1000000000LL) / + (long long int)_eina_counter_frequency.QuadPart); + diff = + (long int)(((long long int)(clk->end.QuadPart - + clk->start.QuadPart) * + 1000000000LL) / + (long long int)_eina_counter_frequency.QuadPart); +#endif /* _WIN2 */ + + result = _eina_counter_asiprintf(result, &position, + "%i\t%li\t%li\t%li\n", + clk->specimen, + diff, + start, + end); + } + + return result; +} diff --git a/libraries/eina/src/lib/eina_cpu.c b/libraries/eina/src/lib/eina_cpu.c new file mode 100644 index 0000000..8af550d --- /dev/null +++ b/libraries/eina/src/lib/eina_cpu.c @@ -0,0 +1,207 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef EFL_HAVE_THREADS +# ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# include +# elif defined (__SUNPRO_C) || defined(__GNU__) +# include +# elif defined (__FreeBSD__) || defined (__OpenBSD__) || \ + defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \ + (defined (__MACH__) && defined (__APPLE__)) +# include +# include +# include +# elif defined (__linux__) || defined(__GLIBC__) +# include +# endif +# ifdef EFL_HAVE_POSIX_THREADS +# include +# endif + +# define TH_MAX 8 +#endif + +#include +#include +#include + +#include "eina_cpu.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/* FIXME this ifdefs should be replaced */ +#if defined(__i386__) || defined(__x86_64__) +/* We save ebx and restore it to be PIC compatible */ +static inline void _x86_cpuid(int op, int *a, int *b, int *c, int *d) +{ + asm volatile ( +#if defined(__x86_64__) + "pushq %%rbx \n\t" /* save %ebx */ +#else + "pushl %%ebx \n\t" /* save %ebx */ +#endif + "cpuid \n\t" + "movl %%ebx, %1 \n\t" /* save what cpuid just put in %ebx */ +#if defined(__x86_64__) + "popq %%rbx \n\t" /* restore the old %ebx */ +#else + "popl %%ebx \n\t" /* restore the old %ebx */ +#endif + : "=a" (*a), "=r" (*b), "=c" (*c), "=d" (*d) + : "a" (op) + : "cc"); +} + +static +void _x86_simd(Eina_Cpu_Features *features) +{ + int a, b, c, d; + + _x86_cpuid(1, &a, &b, &c, &d); + /* + * edx + * 18 = PN (Processor Number) + * 19 = CLFlush (Cache Line Flush) + * 23 = MMX + * 25 = SSE + * 26 = SSE2 + * 28 = HTT (Hyper Threading) + * ecx + * 0 = SSE3 + */ + if ((d >> 23) & 1) + *features |= EINA_CPU_MMX; + + if ((d >> 25) & 1) + *features |= EINA_CPU_SSE; + + if ((d >> 26) & 1) + *features |= EINA_CPU_SSE2; + + if (c & 1) + *features |= EINA_CPU_SSE3; +} +#endif + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +/* FIXME the features checks should be called when this function is called? + * or make it static by doing eina_cpu_init() and return a local var + */ +/** + * + * @return + */ +EAPI Eina_Cpu_Features eina_cpu_features_get(void) +{ + Eina_Cpu_Features ecf = 0; +#if defined(__i386__) || defined(__x86_64__) + _x86_simd(&ecf); +#endif + return ecf; +} + +EAPI int eina_cpu_count(void) +{ +#ifdef EFL_HAVE_THREADS + +# if defined (_WIN32) + SYSTEM_INFO sysinfo; + + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; + +# elif defined (__SUNPRO_C) || defined(__GNU__) + /* + * _SC_NPROCESSORS_ONLN: number of processors that are online, that + is available when sysconf is called. The number + of cpu can change by admins. + * _SC_NPROCESSORS_CONF: maximum number of processors that are available + to the current OS instance. That number can be + change after a reboot. + * _SC_NPROCESSORS_MAX : maximum number of processors that are on the + motherboard. + */ + return sysconf(_SC_NPROCESSORS_ONLN); + +# elif defined (__FreeBSD__) || defined (__OpenBSD__) || \ + defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \ + (defined (__MACH__) && defined (__APPLE__)) + + int mib[4]; + int cpus; + size_t len = sizeof(cpus); + + mib[0] = CTL_HW; +#ifdef HW_AVAILCPU + mib[1] = HW_AVAILCPU; +#else + mib[1] = HW_NCPU; +#endif + sysctl(mib, 2, &cpus, &len, NULL, 0); + if (cpus < 1) + cpus = 1; + + return cpus; + +# elif defined (__linux__) || defined(__GLIBC__) + cpu_set_t cpu; + int i; + static int cpus = 0; + + if (cpus != 0) + return cpus; + + CPU_ZERO(&cpu); + if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0) + { + fprintf(stderr, "[Eina] could not get cpu affinity: %s\n", + strerror(errno)); + return 1; + } + + for (i = 0; i < TH_MAX; i++) + { + if (CPU_ISSET(i, &cpu)) + cpus = i + 1; + else + break; + } + return cpus; + +# else +# error "eina_cpu_count() error: Platform not supported" +# endif +#else + return 1; +#endif +} diff --git a/libraries/eina/src/lib/eina_error.c b/libraries/eina/src/lib/eina_error.c new file mode 100644 index 0000000..428c414 --- /dev/null +++ b/libraries/eina/src/lib/eina_error.c @@ -0,0 +1,279 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" + + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_error.h" +#include "eina_stringshare.h" + +/* TODO + * + add a wrapper for assert? + * + add common error numbers, messages + * + add a calltrace of errors, not only store the last error but a list of them + * and also store the function that set it + */ + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +typedef struct _Eina_Error_Message Eina_Error_Message; +struct _Eina_Error_Message +{ + Eina_Bool string_allocated; + const char *string; +}; + +static Eina_Error_Message *_eina_errors = NULL; +static size_t _eina_errors_count = 0; +static size_t _eina_errors_allocated = 0; +static Eina_Error _eina_last_error; + +static Eina_Error_Message * +_eina_error_msg_alloc(void) +{ + size_t idx; + + if (_eina_errors_count == _eina_errors_allocated) + { + void *tmp; + size_t size; + + if (EINA_UNLIKELY(_eina_errors_allocated == 0)) + size = 24; + else + size = _eina_errors_allocated + 8; + + tmp = realloc(_eina_errors, sizeof(Eina_Error_Message) * size); + if (!tmp) + return NULL; + + _eina_errors = tmp; + _eina_errors_allocated = size; + } + + idx = _eina_errors_count; + _eina_errors_count++; + return _eina_errors + idx; +} + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +EAPI Eina_Error EINA_ERROR_OUT_OF_MEMORY = 0; + +static const char EINA_ERROR_OUT_OF_MEMORY_STR[] = "Out of memory"; + +/** + * @endcond + */ + +/** + * @internal + * @brief Initialize the error module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the error module of Eina. It is called by + * eina_init(). + * + * This function registers the error #EINA_ERROR_OUT_OF_MEMORY. + * + * @see eina_init() + */ +Eina_Bool +eina_error_init(void) +{ + /* TODO register the eina's basic errors */ + EINA_ERROR_OUT_OF_MEMORY = eina_error_msg_static_register( + EINA_ERROR_OUT_OF_MEMORY_STR); + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the error module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the error module set up by + * eina_error_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_error_shutdown(void) +{ + Eina_Error_Message *eem, *eem_end; + + eem = _eina_errors; + eem_end = eem + _eina_errors_count; + + for (; eem < eem_end; eem++) + if (eem->string_allocated) + eina_stringshare_del(eem->string); + + free(_eina_errors); + _eina_errors = NULL; + _eina_errors_count = 0; + _eina_errors_allocated = 0; + + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Error +eina_error_msg_register(const char *msg) +{ + Eina_Error_Message *eem; + + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); + + eem = _eina_error_msg_alloc(); + if (!eem) + return 0; + + eem->string_allocated = EINA_TRUE; + eem->string = eina_stringshare_add(msg); + if (!eem->string) + { + _eina_errors_count--; + return 0; + } + + return _eina_errors_count; /* identifier = index + 1 (== _count). */ +} + +EAPI Eina_Error +eina_error_msg_static_register(const char *msg) +{ + Eina_Error_Message *eem; + + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); + + eem = _eina_error_msg_alloc(); + if (!eem) + return 0; + + eem->string_allocated = EINA_FALSE; + eem->string = msg; + return _eina_errors_count; /* identifier = index + 1 (== _count). */ +} + +EAPI Eina_Bool +eina_error_msg_modify(Eina_Error error, const char *msg) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE); + if (error < 1) + return EINA_FALSE; + + if ((size_t)error > _eina_errors_count) + return EINA_FALSE; + + if (_eina_errors[error - 1].string_allocated) + { + const char *tmp; + + if (!(tmp = eina_stringshare_add(msg))) + return EINA_FALSE; + + eina_stringshare_del(_eina_errors[error - 1].string); + _eina_errors[error - 1].string = tmp; + return EINA_TRUE; + } + + _eina_errors[error - 1].string = msg; + return EINA_TRUE; +} + +EAPI const char * +eina_error_msg_get(Eina_Error error) +{ + if (error < 1) + return NULL; + + if ((size_t)error > _eina_errors_count) + return NULL; + + return _eina_errors[error - 1].string; +} + +EAPI Eina_Error +eina_error_get(void) +{ + return _eina_last_error; +} + +EAPI void +eina_error_set(Eina_Error err) +{ + _eina_last_error = err; +} + +EAPI Eina_Error +eina_error_find(const char *msg) +{ + size_t i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); + + for (i = 0; i < _eina_errors_count; i++) + { + if (_eina_errors[i].string_allocated) + { + if (_eina_errors[i].string == msg) + return i + 1; + } + if (!strcmp(_eina_errors[i].string, msg)) + return i + 1; + } + return 0; +} diff --git a/libraries/eina/src/lib/eina_file.c b/libraries/eina/src/lib/eina_file.c new file mode 100644 index 0000000..84b9e78 --- /dev/null +++ b/libraries/eina/src/lib/eina_file.c @@ -0,0 +1,1187 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Vincent Torri + * Copyright (C) 2010-2011 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PATH_DELIM '/' + +#include "eina_config.h" +#include "eina_private.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_file.h" +#include "eina_stringshare.h" +#include "eina_hash.h" +#include "eina_list.h" +#include "eina_lock.h" +#include "eina_mmap.h" + +#ifdef HAVE_ESCAPE_H +# include +#endif + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifndef EINA_LOG_COLOR_DEFAULT +#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN +#endif + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__) + +#define EINA_SMALL_PAGE 4096 +# define EINA_HUGE_PAGE 16 * 1024 * 1024 + +typedef struct _Eina_File_Iterator Eina_File_Iterator; +typedef struct _Eina_File_Map Eina_File_Map; + +struct _Eina_File_Iterator +{ + Eina_Iterator iterator; + + DIR *dirp; + int length; + + char dir[1]; +}; + +struct _Eina_File +{ + const char *filename; + + Eina_Hash *map; + Eina_Hash *rmap; + void *global_map; + + Eina_Lock lock; + + unsigned long long length; + time_t mtime; + ino_t inode; +#ifdef _STAT_VER_LINUX + unsigned long int mtime_nsec; +#endif + + int refcount; + int global_refcount; + + int fd; + + Eina_Bool shared : 1; + Eina_Bool delete_me : 1; +}; + +struct _Eina_File_Map +{ + void *map; + + unsigned long int offset; + unsigned long int length; + + int refcount; + + Eina_Bool hugetlb : 1; +}; + +static Eina_Hash *_eina_file_cache = NULL; +static Eina_Lock _eina_file_lock_cache; + +static int _eina_file_log_dom = -1; + +/* + * This complex piece of code is needed due to possible race condition. + * The code and description of the issue can be found at : + * http://womble.decadent.org.uk/readdir_r-advisory.html + */ +static long +_eina_name_max(DIR *dirp) +{ + long name_max; + +#if defined(HAVE_FPATHCONF) && defined(HAVE_DIRFD) && defined(_PC_NAME_MAX) + name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX); + + if (name_max == -1) + { +# if defined(NAME_MAX) + name_max = (NAME_MAX > 255) ? NAME_MAX : 255; +# else + name_max = PATH_MAX; +# endif + } +#else +# if defined(NAME_MAX) + name_max = (NAME_MAX > 255) ? NAME_MAX : 255; +# else +# ifdef _PC_NAME_MAX +# warning "buffer size for readdir_r cannot be determined safely, best effort, but racy" + name_max = pathconf(dirp, _PC_NAME_MAX); +# else +# error "buffer size for readdir_r cannot be determined safely" +# endif +# endif +#endif + + return name_max; +} + +static size_t +_eina_dirent_buffer_size(DIR *dirp) +{ + long name_max = _eina_name_max(dirp); + size_t name_end; + + name_end = (size_t) offsetof(struct dirent, d_name) + name_max + 1; + + return (name_end > sizeof (struct dirent) ? name_end : sizeof (struct dirent)); +} + +static Eina_Bool +_eina_file_ls_iterator_next(Eina_File_Iterator *it, void **data) +{ + struct dirent *dp; + char *name; + size_t length; + + dp = alloca(_eina_dirent_buffer_size(it->dirp)); + + do + { + if (readdir_r(it->dirp, dp, &dp)) + return EINA_FALSE; + if (dp == NULL) + return EINA_FALSE; + } + while ((dp->d_name[0] == '.') && + ((dp->d_name[1] == '\0') || + ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0')))); + +#ifdef _DIRENT_HAVE_D_NAMLEN + length = dp->d_namlen; +#else + length = strlen(dp->d_name); +#endif + name = alloca(length + 2 + it->length); + + memcpy(name, it->dir, it->length); + memcpy(name + it->length, "/", 1); + memcpy(name + it->length + 1, dp->d_name, length + 1); + + *data = (char *)eina_stringshare_add(name); + return EINA_TRUE; +} + +static DIR * +_eina_file_ls_iterator_container(Eina_File_Iterator *it) +{ + return it->dirp; +} + +static void +_eina_file_ls_iterator_free(Eina_File_Iterator *it) +{ + closedir(it->dirp); + + EINA_MAGIC_SET(&it->iterator, 0); + free(it); +} + +typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; +struct _Eina_File_Direct_Iterator +{ + Eina_Iterator iterator; + + DIR *dirp; + int length; + + Eina_File_Direct_Info info; + + char dir[1]; +}; + +static Eina_Bool +_eina_file_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) +{ + struct dirent *dp; + size_t length; + + dp = alloca(_eina_dirent_buffer_size(it->dirp)); + + do + { + if (readdir_r(it->dirp, dp, &dp)) + return EINA_FALSE; + if (!dp) + return EINA_FALSE; + +#ifdef _DIRENT_HAVE_D_NAMLEN + length = dp->d_namlen; +#else + length = strlen(dp->d_name); +#endif + if (it->info.name_start + length + 1 >= EINA_PATH_MAX) + continue; + } + while ((dp->d_name[0] == '.') && + ((dp->d_name[1] == '\0') || + ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0')))); + + memcpy(it->info.path + it->info.name_start, dp->d_name, length); + it->info.name_length = length; + it->info.path_length = it->info.name_start + length; + it->info.path[it->info.path_length] = '\0'; + +#ifdef _DIRENT_HAVE_D_TYPE + switch (dp->d_type) + { + case DT_FIFO: + it->info.type = EINA_FILE_FIFO; + break; + case DT_CHR: + it->info.type = EINA_FILE_CHR; + break; + case DT_DIR: + it->info.type = EINA_FILE_DIR; + break; + case DT_BLK: + it->info.type = EINA_FILE_BLK; + break; + case DT_REG: + it->info.type = EINA_FILE_REG; + break; + case DT_LNK: + it->info.type = EINA_FILE_LNK; + break; + case DT_SOCK: + it->info.type = EINA_FILE_SOCK; + break; + case DT_WHT: + it->info.type = EINA_FILE_WHT; + break; + default: + it->info.type = EINA_FILE_UNKNOWN; + break; + } +#else + it->info.type = EINA_FILE_UNKNOWN; +#endif + + *data = &it->info; + return EINA_TRUE; +} + +static DIR * +_eina_file_direct_ls_iterator_container(Eina_File_Direct_Iterator *it) +{ + return it->dirp; +} + +static void +_eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator *it) +{ + closedir(it->dirp); + + EINA_MAGIC_SET(&it->iterator, 0); + free(it); +} + +static Eina_Bool +_eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) +{ + struct stat st; + + if (!_eina_file_direct_ls_iterator_next(it, data)) + return EINA_FALSE; + + if (it->info.type == EINA_FILE_UNKNOWN) + { +#ifdef HAVE_FSTATAT + int fd; + + fd = dirfd(it->dirp); + if (fstatat(fd, it->info.path + it->info.name_start, &st, 0)) +#else + if (stat(it->info.path, &st)) +#endif + it->info.type = EINA_FILE_UNKNOWN; + else + { + if (S_ISREG(st.st_mode)) + it->info.type = EINA_FILE_REG; + else if (S_ISDIR(st.st_mode)) + it->info.type = EINA_FILE_DIR; + else if (S_ISCHR(st.st_mode)) + it->info.type = EINA_FILE_CHR; + else if (S_ISBLK(st.st_mode)) + it->info.type = EINA_FILE_BLK; + else if (S_ISFIFO(st.st_mode)) + it->info.type = EINA_FILE_FIFO; + else if (S_ISLNK(st.st_mode)) + it->info.type = EINA_FILE_LNK; + else if (S_ISSOCK(st.st_mode)) + it->info.type = EINA_FILE_SOCK; + else + it->info.type = EINA_FILE_UNKNOWN; + } + } + + return EINA_TRUE; +} + +static void +_eina_file_real_close(Eina_File *file) +{ + if (file->refcount != 0) return; + + eina_hash_free(file->rmap); + eina_hash_free(file->map); + + if (file->global_map != MAP_FAILED) + munmap(file->global_map, file->length); + + close(file->fd); + + free(file); +} + +static void +_eina_file_map_close(Eina_File_Map *map) +{ + munmap(map->map, map->length); + free(map); +} + +static unsigned int +_eina_file_map_key_length(const void *key __UNUSED__) +{ + return sizeof (unsigned long int) * 2; +} + +static int +_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__, + const unsigned long int *key2, int key2_length __UNUSED__) +{ + if (key1[0] - key2[0] == 0) return key1[1] - key2[1]; + return key1[0] - key2[0]; +} + +static int +_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__) +{ + return eina_hash_int64(&key[0], sizeof (unsigned long int)) + ^ eina_hash_int64(&key[1], sizeof (unsigned long int)); +} + +#ifndef MAP_POPULATE +static unsigned int +_eina_file_map_populate(char *map, unsigned int size, Eina_Bool hugetlb) +{ + unsigned int r = 0xDEADBEEF; + unsigned int i; + unsigned int s; + + s = hugetlb ? EINA_HUGE_PAGE : EINA_SMALL_PAGE; + + for (i = 0; i < size; i += s) + r ^= map[i]; + + r ^= map[size]; + + return r; +} +#endif + +static int +_eina_file_map_rule_apply(Eina_File_Populate rule, void *addr, unsigned long int size, Eina_Bool hugetlb) +{ + int tmp = 42; + int flag = MADV_RANDOM; + + switch (rule) + { + case EINA_FILE_RANDOM: flag = MADV_RANDOM; break; + case EINA_FILE_SEQUENTIAL: flag = MADV_SEQUENTIAL; break; + case EINA_FILE_POPULATE: flag = MADV_WILLNEED; break; + case EINA_FILE_WILLNEED: flag = MADV_WILLNEED; break; + } + + madvise(addr, size, flag); + +#ifndef MAP_POPULATE + if (rule == EINA_FILE_POPULATE) + tmp ^= _eina_file_map_populate(addr, size, hugetlb); +#else + (void) hugetlb; +#endif + + return tmp; +} + +static Eina_Bool +_eina_file_timestamp_compare(Eina_File *f, struct stat *st) +{ + if (f->mtime != st->st_mtime) return EINA_FALSE; + if (f->length != (unsigned long long) st->st_size) return EINA_FALSE; + if (f->inode != st->st_ino) return EINA_FALSE; +#ifdef _STAT_VER_LINUX +# if (defined __USE_MISC && defined st_mtime) + if (f->mtime_nsec != (unsigned long int)st->st_mtim.tv_nsec) + return EINA_FALSE; +# else + if (f->mtime_nsec != (unsigned long int)st->st_mtimensec) + return EINA_FALSE; +# endif +#endif + return EINA_TRUE; +} + +static void +slprintf(char *str, size_t size, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + + vsnprintf(str, size, format, ap); + str[size - 1] = 0; + + va_end(ap); +} + +static char* +_eina_file_escape(const char* path, int* length) +{ + char *result = strdup(path ? path : ""); + char *p = result; + char *q = result; + int len; + + if (!result) + return NULL; + + if (length) len = *length; + else len = strlen(result); + + while ((p = strchr(p, '/'))) + { + // remove double `/' + if (p[1] == '/') + { + memmove(p, p + 1, --len - (p - result)); + result[len] = '\0'; + } + else + if (p[1] == '.' + && p[2] == '.') + { + // remove `/../' + if (p[3] == '/') + { + char tmp; + + len -= p + 3 - q; + memmove(q, p + 3, len - (q - result)); + result[len] = '\0'; + p = q; + + /* Update q correctly. */ + tmp = *p; + *p = '\0'; + q = strrchr(result, '/'); + if (!q) q = result; + *p = tmp; + } + else + // remove '/..$' + if (p[3] == '\0') + { + len -= p + 2 - q; + result[len] = '\0'; + q = p; + ++p; + } + else + { + q = p; + ++p; + } + } + else + { + q = p; + ++p; + } + } + + if (length) + *length = len; + return result; +} + +Eina_Bool +eina_file_init(void) +{ + _eina_file_log_dom = eina_log_domain_register("eina_file", + EINA_LOG_COLOR_DEFAULT); + if (_eina_file_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_file"); + return EINA_FALSE; + } + + _eina_file_cache = eina_hash_string_djb2_new(NULL); + if (!_eina_file_cache) + { + ERR("Could not create cache."); + eina_log_domain_unregister(_eina_file_log_dom); + _eina_file_log_dom = -1; + return EINA_FALSE; + } + + eina_lock_new(&_eina_file_lock_cache); + + return EINA_TRUE; +} + +Eina_Bool +eina_file_shutdown(void) +{ + if (eina_hash_population(_eina_file_cache) > 0) + { + Eina_Iterator *it; + const char *key; + + it = eina_hash_iterator_key_new(_eina_file_cache); + EINA_ITERATOR_FOREACH(it, key) + ERR("File [%s] still open !", key); + eina_iterator_free(it); + } + + eina_hash_free(_eina_file_cache); + + eina_lock_free(&_eina_file_lock_cache); + + eina_log_domain_unregister(_eina_file_log_dom); + _eina_file_log_dom = -1; + return EINA_TRUE; +} + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI char * +eina_file_path_sanitize(const char *path) +{ + char *result = NULL; + int len; + + if (!path) return NULL; + + len = strlen(path); + + if (*path != '/') + { + char cwd[PATH_MAX]; + char *tmp = NULL; + + tmp = getcwd(cwd, PATH_MAX); + if (!tmp) return NULL; + + len += strlen(cwd) + 2; + tmp = alloca(sizeof (char) * len); + + slprintf(tmp, len, "%s/%s", cwd, path); + + result = tmp; + } + + return _eina_file_escape(result ? result : path, &len); +} + +EAPI Eina_Bool +eina_file_dir_list(const char *dir, + Eina_Bool recursive, + Eina_File_Dir_List_Cb cb, + void *data) +{ + Eina_File_Direct_Info *info; + Eina_Iterator *it; + + EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); + EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); + + it = eina_file_stat_ls(dir); + if (!it) + return EINA_FALSE; + + EINA_ITERATOR_FOREACH(it, info) + { + cb(info->path + info->name_start, dir, data); + + if (recursive == EINA_TRUE && info->type == EINA_FILE_DIR) + { + eina_file_dir_list(info->path, recursive, cb, data); + } + } + + eina_iterator_free(it); + + return EINA_TRUE; +} + +EAPI Eina_Array * +eina_file_split(char *path) +{ + Eina_Array *ea; + char *current; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + + ea = eina_array_new(16); + + if (!ea) + return NULL; + + for (current = strchr(path, PATH_DELIM); + current; + path = current + 1, current = strchr(path, PATH_DELIM)) + { + length = current - path; + + if (length <= 0) + continue; + + eina_array_push(ea, path); + *current = '\0'; + } + + if (*path != '\0') + eina_array_push(ea, path); + + return ea; +} + +EAPI Eina_Iterator * +eina_file_ls(const char *dir) +{ + Eina_File_Iterator *it; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL); + + length = strlen(dir); + if (length < 1) + return NULL; + + it = calloc(1, sizeof (Eina_File_Iterator) + length); + if (!it) + return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->dirp = opendir(dir); + if (!it->dirp) + { + free(it); + return NULL; + } + + memcpy(it->dir, dir, length + 1); + if (dir[length - 1] != '/') + it->length = length; + else + it->length = length - 1; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_file_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_ls_iterator_free); + + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_file_direct_ls(const char *dir) +{ + Eina_File_Direct_Iterator *it; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL); + + length = strlen(dir); + if (length < 1) + return NULL; + + it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); + if (!it) + return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->dirp = opendir(dir); + if (!it->dirp) + { + free(it); + return NULL; + } + + if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX) + { + _eina_file_direct_ls_iterator_free(it); + return NULL; + } + + memcpy(it->dir, dir, length + 1); + it->length = length; + + memcpy(it->info.path, dir, length); + if (dir[length - 1] == '/') + it->info.name_start = length; + else + { + it->info.path[length] = '/'; + it->info.name_start = length + 1; + } + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_direct_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_file_direct_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free); + + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_file_stat_ls(const char *dir) +{ + Eina_File_Direct_Iterator *it; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL); + + length = strlen(dir); + if (length < 1) + return NULL; + + it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); + if (!it) + return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->dirp = opendir(dir); + if (!it->dirp) + { + free(it); + return NULL; + } + + if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX) + { + _eina_file_direct_ls_iterator_free(it); + return NULL; + } + + memcpy(it->dir, dir, length + 1); + it->length = length; + + memcpy(it->info.path, dir, length); + if (dir[length - 1] == '/') + it->info.name_start = length; + else + { + it->info.path[length] = '/'; + it->info.name_start = length + 1; + } + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_stat_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_file_direct_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free); + + return &it->iterator; +} + +EAPI Eina_File * +eina_file_open(const char *path, Eina_Bool shared) +{ + Eina_File *file; + Eina_File *n; + char *filename; + struct stat file_stat; + int fd = -1; + int flags; + + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + + filename = eina_file_path_sanitize(path); + if (!filename) return NULL; + + if (shared) +#ifdef HAVE_SHMOPEN + fd = shm_open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO); +#else + goto on_error; +#endif + else + fd = open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO); + + if (fd < 0) goto on_error; + +#ifdef HAVE_EXECVP + flags = fcntl(fd, F_GETFD); + if (flags == -1) + goto on_error; + + flags |= FD_CLOEXEC; + if (fcntl(fd, F_SETFD, flags) == -1) + goto on_error; +#endif + + if (fstat(fd, &file_stat)) + goto on_error; + + eina_lock_take(&_eina_file_lock_cache); + + file = eina_hash_find(_eina_file_cache, filename); + if ((file) && _eina_file_timestamp_compare(file, &file_stat)) + { + file->delete_me = EINA_TRUE; + eina_hash_del(_eina_file_cache, file->filename, file); + _eina_file_real_close(file); + file = NULL; + } + + if (!file) + { + n = malloc(sizeof (Eina_File) + strlen(filename) + 1); + if (!n) + { + eina_lock_release(&_eina_file_lock_cache); + goto on_error; + } + + n->filename = (char*) (n + 1); + strcpy((char*) n->filename, filename); + n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length), + EINA_KEY_CMP(_eina_file_map_key_cmp), + EINA_KEY_HASH(_eina_file_map_key_hash), + EINA_FREE_CB(_eina_file_map_close), + 3); + n->rmap = eina_hash_pointer_new(NULL); + n->global_map = MAP_FAILED; + n->global_refcount = 0; + n->length = file_stat.st_size; + n->mtime = file_stat.st_mtime; +#ifdef _STAT_VER_LINUX +# if (defined __USE_MISC && defined st_mtime) + n->mtime_nsec = (unsigned long int)file_stat.st_mtim.tv_nsec; +# else + n->mtime_nsec = (unsigned long int)file_stat.st_mtimensec; +# endif +#endif + n->inode = file_stat.st_ino; + n->refcount = 0; + n->fd = fd; + n->shared = shared; + n->delete_me = EINA_FALSE; + eina_lock_new(&n->lock); + eina_hash_direct_add(_eina_file_cache, n->filename, n); + } + else + { + close(fd); + n = file; + } + eina_lock_take(&n->lock); + n->refcount++; + eina_lock_release(&n->lock); + + eina_lock_release(&_eina_file_lock_cache); + + free(filename); + + return n; + + on_error: + free(filename); + if (fd >= 0) close(fd); + return NULL; +} + +EAPI void +eina_file_close(Eina_File *file) +{ + EINA_SAFETY_ON_NULL_RETURN(file); + + eina_lock_take(&file->lock); + file->refcount--; + eina_lock_release(&file->lock); + + if (file->refcount != 0) return; + eina_lock_take(&_eina_file_lock_cache); + + eina_hash_del(_eina_file_cache, file->filename, file); + _eina_file_real_close(file); + + eina_lock_release(&_eina_file_lock_cache); +} + +EAPI size_t +eina_file_size_get(Eina_File *file) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0); + return file->length; +} + +EAPI time_t +eina_file_mtime_get(Eina_File *file) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0); + return file->mtime; +} + +EAPI const char * +eina_file_filename_get(Eina_File *file) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + return file->filename; +} + +EAPI void * +eina_file_map_all(Eina_File *file, Eina_File_Populate rule) +{ + int flags = MAP_SHARED; + void *ret = NULL; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + +// bsd people will lack this feature +#ifdef MAP_POPULATE + if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE; +#endif +#ifdef MAP_HUGETLB + if (file->length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB; +#endif + + eina_mmap_safety_enabled_set(EINA_TRUE); + eina_lock_take(&file->lock); + if (file->global_map == MAP_FAILED) + file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0); +#ifdef MAP_HUGETLB + if ((file->global_map == MAP_FAILED) && (flags & MAP_HUGETLB)) + { + flags &= ~MAP_HUGETLB; + file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0); + } +#endif + + if (file->global_map != MAP_FAILED) + { + Eina_Bool hugetlb = EINA_FALSE; + +#ifdef MAP_HUGETLB + hugetlb = !!(flags & MAP_HUGETLB); +#endif + _eina_file_map_rule_apply(rule, file->global_map, file->length, hugetlb); + file->global_refcount++; + ret = file->global_map; + } + + eina_lock_release(&file->lock); + return ret; +} + +EAPI void * +eina_file_map_new(Eina_File *file, Eina_File_Populate rule, + unsigned long int offset, unsigned long int length) +{ + Eina_File_Map *map; + unsigned long int key[2]; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + + if (offset > file->length) + return NULL; + if (offset + length > file->length) + return NULL; + + if (offset == 0 && length == file->length) + return eina_file_map_all(file, rule); + + key[0] = offset; + key[1] = length; + + eina_mmap_safety_enabled_set(EINA_TRUE); + eina_lock_take(&file->lock); + + map = eina_hash_find(file->map, &key); + if (!map) + { + int flags = MAP_SHARED; + +// bsd people will lack this feature +#ifdef MAP_POPULATE + if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE; +#endif +#ifdef MAP_HUGETLB + if (length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB; +#endif + + map = malloc(sizeof (Eina_File_Map)); + if (!map) goto on_error; + + map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset); +#ifdef MAP_HUGETLB + if (map->map == MAP_FAILED && (flags & MAP_HUGETLB)) + { + flags &= ~MAP_HUGETLB; + map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset); + } + + map->hugetlb = !!(flags & MAP_HUGETLB); +#else + map->hugetlb = EINA_FALSE; +#endif + map->offset = offset; + map->length = length; + map->refcount = 0; + + if (map->map == MAP_FAILED) goto on_error; + + eina_hash_add(file->map, &key, map); + eina_hash_direct_add(file->rmap, map->map, map); + } + + map->refcount++; + + _eina_file_map_rule_apply(rule, map->map, length, map->hugetlb); + + eina_lock_release(&file->lock); + + return map->map; + + on_error: + free(map); + eina_lock_release(&file->lock); + + return NULL; +} + +EAPI void +eina_file_map_free(Eina_File *file, void *map) +{ + EINA_SAFETY_ON_NULL_RETURN(file); + + eina_lock_take(&file->lock); + + if (file->global_map == map) + { + file->global_refcount--; + + if (file->global_refcount > 0) goto on_exit; + + munmap(file->global_map, file->length); + file->global_map = MAP_FAILED; + } + else + { + Eina_File_Map *em; + unsigned long int key[2]; + + em = eina_hash_find(file->rmap, &map); + if (!em) return ; + + em->refcount--; + + if (em->refcount > 0) goto on_exit; + + key[0] = em->offset; + key[1] = em->length; + + eina_hash_del(file->rmap, &map, em); + eina_hash_del(file->map, &key, em); + } + + on_exit: + eina_lock_release(&file->lock); +} + + diff --git a/libraries/eina/src/lib/eina_file_win32.c b/libraries/eina/src/lib/eina_file_win32.c new file mode 100644 index 0000000..1cd8665 --- /dev/null +++ b/libraries/eina/src/lib/eina_file_win32.c @@ -0,0 +1,1021 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +//#include + +#include "eina_config.h" +#include "eina_private.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_file.h" +#include "eina_stringshare.h" +#include "eina_hash.h" +#include "eina_list.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifndef EINA_LOG_COLOR_DEFAULT +#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN +#endif + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__) + +#ifdef MAP_FAILED +# undef MAP_FAILED +#endif +#define MAP_FAILED ((void *)-1) + +typedef struct _Eina_File_Iterator Eina_File_Iterator; +typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; +typedef struct _Eina_File_Map Eina_File_Map; + +struct _Eina_File_Iterator +{ + Eina_Iterator iterator; + + WIN32_FIND_DATA data; + HANDLE handle; + size_t length; + Eina_Bool is_last : 1; + + char dir[1]; +}; + +struct _Eina_File_Direct_Iterator +{ + Eina_Iterator iterator; + + WIN32_FIND_DATA data; + HANDLE handle; + size_t length; + Eina_Bool is_last : 1; + + Eina_File_Direct_Info info; + + char dir[1]; +}; + +struct _Eina_File +{ + const char *filename; + + Eina_Hash *map; + Eina_Hash *rmap; + void *global_map; + + ULONGLONG length; + ULONGLONG mtime; + + int refcount; + int global_refcount; + + HANDLE handle; + HANDLE fm; + + Eina_Bool shared : 1; + Eina_Bool delete_me : 1; +}; + +struct _Eina_File_Map +{ + void *map; + + unsigned long int offset; + unsigned long int length; + + int refcount; +}; + +static Eina_Hash *_eina_file_cache = NULL; +static Eina_List *_eina_file_cache_lru = NULL; +static Eina_List *_eina_file_cache_delete = NULL; + +static int _eina_file_log_dom = -1; + +static void +_eina_file_win32_backslash_change(char *dir) +{ + char *tmp; + + tmp = dir; + while (*tmp) + { + if (*tmp == '/') *tmp = '\\'; + tmp++; + } +} + +static Eina_Bool +_eina_file_win32_is_dir(const char *dir) +{ +#ifdef UNICODE + wchar_t *wdir = NULL; +#endif + DWORD attr; + + /* check if it's a directory */ +#ifdef UNICODE + wdir = evil_char_to_wchar(dir); + if (!wdir) + return EINA_FALSE; + + attr = GetFileAttributes(wdir); + free(wdir); +#else + attr = GetFileAttributes(dir); +#endif + + if (attr == 0xFFFFFFFF) + return EINA_FALSE; + + if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) + return EINA_FALSE; + + return EINA_TRUE; +} + +static char * +_eina_file_win32_dir_new(const char *dir) +{ + char *new_dir; + size_t length; + + length = strlen(dir); + + new_dir = (char *)malloc(sizeof(char) * length + 5); + if (!new_dir) + return NULL; + + memcpy(new_dir, dir, length); + memcpy(new_dir + length, "\\*.*", 5); + _eina_file_win32_backslash_change(new_dir); + + return new_dir; +} + +static HANDLE +_eina_file_win32_first_file(const char *dir, WIN32_FIND_DATA *fd) +{ + HANDLE h; +#ifdef UNICODE + wchar_t *wdir = NULL; + + wdir = evil_char_to_wchar(dir); + if (!wdir) + return NULL; + + h = FindFirstFile(wdir, fd); + free(wdir); +#else + h = FindFirstFile(dir, fd); +#endif + + if (!h) + return NULL; + + while ((fd->cFileName[0] == '.') && + ((fd->cFileName[1] == '\0') || + ((fd->cFileName[1] == '.') && (fd->cFileName[2] == '\0')))) + { + if (!FindNextFile(h, fd)) + return NULL; + } + + return h; +} + +static Eina_Bool +_eina_file_win32_ls_iterator_next(Eina_File_Iterator *it, void **data) +{ +#ifdef UNICODE + wchar_t *old_name; +#else + char *old_name; +#endif + char *name; + char *cname; + size_t length; + Eina_Bool is_last; + Eina_Bool res = EINA_TRUE; + + if (it->handle == INVALID_HANDLE_VALUE) + return EINA_FALSE; + + is_last = it->is_last; +#ifdef UNICODE + old_name = _wcsdup(it->data.cFileName); +#else + old_name = _strdup(it->data.cFileName); +#endif + if (!old_name) + return EINA_FALSE; + + do { + if (!FindNextFile(it->handle, &it->data)) + { + if (GetLastError() == ERROR_NO_MORE_FILES) + it->is_last = EINA_TRUE; + else + res = EINA_FALSE; + } + } while ((it->data.cFileName[0] == '.') && + ((it->data.cFileName[1] == '\0') || + ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ + +#ifdef UNICODE + cname = evil_wchar_to_char(old_name); + if (!cname) + return EINA_FALSE; +#else + cname = old_name; +#endif + + length = strlen(cname); + name = alloca(length + 2 + it->length); + + memcpy(name, it->dir, it->length); + memcpy(name + it->length, "\\", 1); + memcpy(name + it->length + 1, cname, length + 1); + + *data = (char *)eina_stringshare_add(name); + +#ifdef UNICODE + free(cname); +#endif + free(old_name); + + if (is_last) + res = EINA_FALSE; + + return res; +} + +static HANDLE +_eina_file_win32_ls_iterator_container(Eina_File_Iterator *it) +{ + return it->handle; +} + +static void +_eina_file_win32_ls_iterator_free(Eina_File_Iterator *it) +{ + if (it->handle != INVALID_HANDLE_VALUE) + FindClose(it->handle); + + EINA_MAGIC_SET(&it->iterator, 0); + free(it); +} + +static Eina_Bool +_eina_file_win32_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data) +{ +#ifdef UNICODE + wchar_t *old_name; +#else + char *old_name; +#endif + char *cname; + size_t length; + DWORD attr; + Eina_Bool is_last; + Eina_Bool res = EINA_TRUE; + + if (it->handle == INVALID_HANDLE_VALUE) + return EINA_FALSE; + + attr = it->data.dwFileAttributes; + is_last = it->is_last; +#ifdef UNICODE + old_name = _wcsdup(it->data.cFileName); +#else + old_name = _strdup(it->data.cFileName); +#endif + if (!old_name) + return EINA_FALSE; + + do { + if (!FindNextFile(it->handle, &it->data)) + { + if (GetLastError() == ERROR_NO_MORE_FILES) + it->is_last = EINA_TRUE; + else + res = EINA_FALSE; + } + +#ifdef UNICODE + length = wcslen(old_name); +#else + length = strlen(old_name); +#endif + if (it->info.name_start + length + 1 >= PATH_MAX) + { + free(old_name); +#ifdef UNICODE + old_name = _wcsdup(it->data.cFileName); +#else + old_name = _strdup(it->data.cFileName); +#endif + continue; + } + + } while ((it->data.cFileName[0] == '.') && + ((it->data.cFileName[1] == '\0') || + ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */ + +#ifdef UNICODE + cname = evil_wchar_to_char(old_name); + if (!cname) + return EINA_FALSE; +#else + cname = old_name; +#endif + + memcpy(it->info.path + it->info.name_start, cname, length); + it->info.name_length = length; + it->info.path_length = it->info.name_start + length; + it->info.path[it->info.path_length] = '\0'; + + if (attr & FILE_ATTRIBUTE_DIRECTORY) + it->info.type = EINA_FILE_DIR; + else if (attr & FILE_ATTRIBUTE_REPARSE_POINT) + it->info.type = EINA_FILE_LNK; + else if (attr & (FILE_ATTRIBUTE_ARCHIVE | + FILE_ATTRIBUTE_COMPRESSED | + FILE_ATTRIBUTE_COMPRESSED | + FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_NORMAL | + FILE_ATTRIBUTE_SPARSE_FILE | + FILE_ATTRIBUTE_TEMPORARY)) + it->info.type = EINA_FILE_REG; + else + it->info.type = EINA_FILE_UNKNOWN; + + *data = &it->info; + +#ifdef UNICODE + free(cname); +#endif + + free(old_name); + + if (is_last) + res = EINA_FALSE; + + return res; +} + +static HANDLE +_eina_file_win32_direct_ls_iterator_container(Eina_File_Direct_Iterator *it) +{ + return it->handle; +} + +static void +_eina_file_win32_direct_ls_iterator_free(Eina_File_Direct_Iterator *it) +{ + if (it->handle != INVALID_HANDLE_VALUE) + FindClose(it->handle); + + EINA_MAGIC_SET(&it->iterator, 0); + free(it); +} + +static void +_eina_file_real_close(Eina_File *file) +{ + eina_hash_free(file->rmap); + eina_hash_free(file->map); + + if (file->global_map != MAP_FAILED) + UnmapViewOfFile(file->global_map); + + CloseHandle(file->fm); + CloseHandle(file->handle); + + eina_stringshare_del(file->filename); + + free(file); +} + +static void +_eina_file_map_close(Eina_File_Map *map) +{ + if (map->map != MAP_FAILED) + UnmapViewOfFile(map->map); + free(map); +} + +static unsigned int +_eina_file_map_key_length(const void *key __UNUSED__) +{ + return sizeof (unsigned long int) * 2; +} + +static int +_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__, + const unsigned long int *key2, int key2_length __UNUSED__) +{ + if (key1[0] - key2[0] == 0) return key1[1] - key2[1]; + return key1[0] - key2[0]; +} + +static int +_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__) +{ + return eina_hash_int64(&key[0], sizeof (unsigned long int)) + ^ eina_hash_int64(&key[1], sizeof (unsigned long int)); +} + +Eina_Bool +eina_file_init(void) +{ + _eina_file_log_dom = eina_log_domain_register("eina_file", + EINA_LOG_COLOR_DEFAULT); + if (_eina_file_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_file"); + return EINA_FALSE; + } + + _eina_file_cache = eina_hash_string_djb2_new(EINA_FREE_CB(_eina_file_real_close)); + if (!_eina_file_cache) + { + ERR("Could not create cache."); + eina_log_domain_unregister(_eina_file_log_dom); + _eina_file_log_dom = -1; + return EINA_FALSE; + } + + return EINA_TRUE; +} + +Eina_Bool +eina_file_shutdown(void) +{ + Eina_File *f; + Eina_List *l; + + EINA_LIST_FREE(_eina_file_cache_delete, f) + _eina_file_real_close(f); + + EINA_LIST_FOREACH(_eina_file_cache_lru, l, f) + eina_hash_del(_eina_file_cache, f->filename, f); + + if (eina_hash_population(_eina_file_cache) > 0) + { + Eina_Iterator *it; + const char *key; + + it = eina_hash_iterator_key_new(_eina_file_cache); + EINA_ITERATOR_FOREACH(it, key) + ERR("File [%s] still open !", key); + eina_iterator_free(it); + } + + eina_hash_free(_eina_file_cache); + + eina_log_domain_unregister(_eina_file_log_dom); + _eina_file_log_dom = -1; + return EINA_TRUE; +} + + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI Eina_Bool +eina_file_dir_list(const char *dir, + Eina_Bool recursive, + Eina_File_Dir_List_Cb cb, + void *data) +{ + WIN32_FIND_DATA file; + HANDLE h; + char *new_dir; + + EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); + EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); + + if (!_eina_file_win32_is_dir(dir)) + return EINA_FALSE; + + new_dir = _eina_file_win32_dir_new(dir); + if (!new_dir) + return EINA_FALSE; + + h = _eina_file_win32_first_file(new_dir, &file); + + if (h == INVALID_HANDLE_VALUE) + return EINA_FALSE; + + do + { + char *filename; + +# ifdef UNICODE + filename = evil_wchar_to_char(file.cFileName); +# else + filename = file.cFileName; +# endif /* ! UNICODE */ + if (!strcmp(filename, ".") || !strcmp(filename, "..")) + continue; + + cb(filename, dir, data); + + if (recursive == EINA_TRUE) + { + char *path; + + path = alloca(strlen(dir) + strlen(filename) + 2); + strcpy(path, dir); + strcat(path, "/"); + strcat(path, filename); + + if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + continue; + + eina_file_dir_list(path, recursive, cb, data); + } + +# ifdef UNICODE + free(filename); +# endif /* UNICODE */ + + } while (FindNextFile(h, &file)); + FindClose(h); + + return EINA_TRUE; +} + +EAPI Eina_Array * +eina_file_split(char *path) +{ + Eina_Array *ea; + char *current; + size_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + + ea = eina_array_new(16); + + if (!ea) + return NULL; + + for (current = strchr(path, '\\'); + current; + path = current + 1, current = strchr(path, '\\')) + { + length = current - path; + + if (length <= 0) + continue; + + eina_array_push(ea, path); + *current = '\0'; + } + + if (*path != '\0') + eina_array_push(ea, path); + + return ea; +} + +EAPI Eina_Iterator * +eina_file_ls(const char *dir) +{ + Eina_File_Iterator *it; + char *new_dir; + size_t length; + + if (!dir || !*dir) + return NULL; + + if (!_eina_file_win32_is_dir(dir)) + return NULL; + + length = strlen(dir); + + it = calloc(1, sizeof (Eina_File_Iterator) + length); + if (!it) + return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + new_dir = _eina_file_win32_dir_new(dir); + if (!new_dir) + goto free_it; + + it->handle = _eina_file_win32_first_file(new_dir, &it->data); + free(new_dir); + if (it->handle == INVALID_HANDLE_VALUE) + goto free_it; + + memcpy(it->dir, dir, length + 1); + if (dir[length - 1] != '\\') + it->length = length; + else + it->length = length - 1; + _eina_file_win32_backslash_change(it->dir); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_ls_iterator_free); + + return &it->iterator; + + free_it: + free(it); + + return NULL; +} + +EAPI Eina_Iterator * +eina_file_direct_ls(const char *dir) +{ + Eina_File_Direct_Iterator *it; + char *new_dir; + size_t length; + + if (!dir || !*dir) + return NULL; + + length = strlen(dir); + + if (length + 12 + 2 >= MAX_PATH) + return NULL; + + it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); + if (!it) + return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + new_dir = _eina_file_win32_dir_new(dir); + if (!new_dir) + goto free_it; + + it->handle = _eina_file_win32_first_file(new_dir, &it->data); + free(new_dir); + if (it->handle == INVALID_HANDLE_VALUE) + goto free_it; + + memcpy(it->dir, dir, length + 1); + it->length = length; + _eina_file_win32_backslash_change(it->dir); + + memcpy(it->info.path, dir, length); + if (dir[length - 1] == '\\') + it->info.name_start = length; + else + { + it->info.path[length] = '\\'; + it->info.name_start = length + 1; + } + _eina_file_win32_backslash_change(it->info.path); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_direct_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_direct_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_direct_ls_iterator_free); + + return &it->iterator; + + free_it: + free(it); + + return NULL; +} + +EAPI Eina_Iterator * +eina_file_stat_ls(const char *dir) +{ + return eina_file_direct_ls(dir); +} + +EAPI Eina_File * +eina_file_open(const char *filename, Eina_Bool shared) +{ + Eina_File *file; + Eina_File *n; + HANDLE handle; + HANDLE fm; + WIN32_FILE_ATTRIBUTE_DATA fad; + ULARGE_INTEGER length; + ULARGE_INTEGER mtime; + Eina_Bool create = EINA_FALSE; + + /* FIXME: always open absolute path (need to fix filename according to current + directory) */ + + /* FIXME: how to emulate shm_open ? Just OpenFileMapping ? */ +#if 0 + if (shared) + handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, + NULL); + else +#endif + handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, + NULL); + + if (handle == INVALID_HANDLE_VALUE) + return NULL; + + fm = CreateFileMapping(handle, NULL, PAGE_READONLY, 0, 0, NULL); + if (!fm) + goto close_handle; + + if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad)) + goto close_fm; + + length.u.LowPart = fad.nFileSizeLow; + length.u.HighPart = fad.nFileSizeHigh; + mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime; + mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime; + + file = eina_hash_find(_eina_file_cache, filename); + if (file && + (file->mtime != mtime.QuadPart || file->length != length.QuadPart)) + { + create = EINA_TRUE; + + if (file->refcount == 0) + { + _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file); + eina_hash_del(_eina_file_cache, file->filename, file); + + file = NULL; + } + else if (!file->delete_me) + { + file->delete_me = EINA_TRUE; + _eina_file_cache_delete = eina_list_prepend(_eina_file_cache_delete, file); + } + } + + if (!file || create) + { + n = calloc(1, sizeof (Eina_File)); + if (!n) + goto close_fm; + + n->filename = eina_stringshare_add(filename); + n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length), + EINA_KEY_CMP(_eina_file_map_key_cmp), + EINA_KEY_HASH(_eina_file_map_key_hash), + EINA_FREE_CB(_eina_file_map_close), + 3); + n->rmap = eina_hash_pointer_new(NULL); + n->global_map = MAP_FAILED; + n->length = length.QuadPart; + n->mtime = mtime.QuadPart; + n->refcount = 0; + n->handle = handle; + n->fm = fm; + n->shared = shared; + n->delete_me = EINA_FALSE; + + eina_hash_set(_eina_file_cache, filename, n); + } + else + { + CloseHandle(fm); + CloseHandle(handle); + + n = file; + + if (n->refcount == 0) + _eina_file_cache_lru = eina_list_remove(_eina_file_cache_lru, n); + } + + n->refcount++; + + return n; + + close_fm: + CloseHandle(fm); + close_handle: + CloseHandle(handle); + + return NULL; +} + +EAPI void +eina_file_close(Eina_File *file) +{ + file->refcount--; + + if (file->refcount != 0) return ; + + if (file->delete_me) + { + _eina_file_cache_delete = eina_list_remove(_eina_file_cache_delete, file); + _eina_file_real_close(file); + } + else + { + _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file); + } +} + +EAPI size_t +eina_file_size_get(Eina_File *file) +{ + return file->length; +} + +EAPI time_t +eina_file_mtime_get(Eina_File *file) +{ + return file->mtime; +} + +EAPI const char * +eina_file_filename_get(Eina_File *file) +{ + return file->filename; +} + +EAPI void * +eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__) +{ + if (file->global_map == MAP_FAILED) + { + void *data; + + data = MapViewOfFile(file->fm, FILE_MAP_READ, + 0, 0, file->length); + if (!data) + file->global_map = MAP_FAILED; + else + file->global_map = data; + } + + if (file->global_map != MAP_FAILED) + { + file->global_refcount++; + return file->global_map; + } + + return NULL; +} + +EAPI void * +eina_file_map_new(Eina_File *file, Eina_File_Populate rule, + unsigned long int offset, unsigned long int length) +{ + Eina_File_Map *map; + unsigned long int key[2]; + + if (offset > file->length) + return NULL; + if (offset + length > file->length) + return NULL; + + if (offset == 0 && length == file->length) + return eina_file_map_all(file, rule); + + key[0] = offset; + key[1] = length; + + map = eina_hash_find(file->map, &key); + if (!map) + { + void *data; + + map = malloc(sizeof (Eina_File_Map)); + if (!map) return NULL; + + data = MapViewOfFile(file->fm, FILE_MAP_READ, + offset & 0xffff0000, + offset & 0x0000ffff, + length); + if (!data) + map->map = MAP_FAILED; + else + map->map = data; + + map->offset = offset; + map->length = length; + map->refcount = 0; + + if (map->map == MAP_FAILED) + { + free(map); + return NULL; + } + + eina_hash_add(file->map, &key, map); + eina_hash_direct_add(file->rmap, map->map, map); + } + + map->refcount++; + + return map->map; +} + +EAPI void +eina_file_map_free(Eina_File *file, void *map) +{ + if (file->global_map == map) + { + file->global_refcount--; + + if (file->global_refcount > 0) return ; + + /* FIXME: are we sure that file->global_map != MAP_FAILED ? */ + if (file->global_map != MAP_FAILED) + UnmapViewOfFile(file->global_map); + file->global_map = MAP_FAILED; + } + else + { + Eina_File_Map *em; + unsigned long int key[2]; + + em = eina_hash_find(file->rmap, &map); + if (!em) return ; + + em->refcount--; + + if (em->refcount > 0) return ; + + key[0] = em->offset; + key[1] = em->length; + + eina_hash_del(file->rmap, &map, em); + eina_hash_del(file->map, &key, em); + } +} diff --git a/libraries/eina/src/lib/eina_fp.c b/libraries/eina/src/lib/eina_fp.c new file mode 100644 index 0000000..8984b49 --- /dev/null +++ b/libraries/eina/src/lib/eina_fp.c @@ -0,0 +1,532 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_types.h" +#include "eina_fp.h" + +#define MAX_PREC 1025 +static const Eina_F32p32 eina_trigo[MAX_PREC] = +{ + 0x0000000100000000, 0x00000000ffffec43, 0x00000000ffffb10b, + 0x00000000ffff4e5a, 0x00000000fffec42e, 0x00000000fffe1287, + 0x00000000fffd3967, 0x00000000fffc38cd, 0x00000000fffb10b9, + 0x00000000fff9c12c, + 0x00000000fff84a25, 0x00000000fff6aba5, 0x00000000fff4e5ac, + 0x00000000fff2f83b, 0x00000000fff0e351, 0x00000000ffeea6ef, + 0x00000000ffec4316, 0x00000000ffe9b7c5, 0x00000000ffe704fe, + 0x00000000ffe42ac0, + 0x00000000ffe1290b, 0x00000000ffddffe2, 0x00000000ffdaaf43, + 0x00000000ffd7372f, 0x00000000ffd397a8, 0x00000000ffcfd0ad, + 0x00000000ffcbe23f, 0x00000000ffc7cc5f, 0x00000000ffc38f0d, + 0x00000000ffbf2a4b, + 0x00000000ffba9e17, 0x00000000ffb5ea75, 0x00000000ffb10f63, + 0x00000000ffac0ce3, 0x00000000ffa6e2f6, 0x00000000ffa1919c, + 0x00000000ff9c18d6, 0x00000000ff9678a6, 0x00000000ff90b10b, + 0x00000000ff8ac208, + 0x00000000ff84ab9c, 0x00000000ff7e6dc8, 0x00000000ff78088f, + 0x00000000ff717bf0, 0x00000000ff6ac7ec, 0x00000000ff63ec85, + 0x00000000ff5ce9bc, 0x00000000ff55bf92, 0x00000000ff4e6e08, + 0x00000000ff46f51f, + 0x00000000ff3f54d8, 0x00000000ff378d34, 0x00000000ff2f9e35, + 0x00000000ff2787dc, 0x00000000ff1f4a2a, 0x00000000ff16e520, + 0x00000000ff0e58c0, 0x00000000ff05a50a, 0x00000000fefcca01, + 0x00000000fef3c7a6, + 0x00000000feea9df9, 0x00000000fee14cfe, 0x00000000fed7d4b3, + 0x00000000fece351d, 0x00000000fec46e3b, 0x00000000feba800f, + 0x00000000feb06a9c, 0x00000000fea62de1, 0x00000000fe9bc9e2, + 0x00000000fe913e9f, + 0x00000000fe868c1b, 0x00000000fe7bb256, 0x00000000fe70b153, + 0x00000000fe658913, 0x00000000fe5a3998, 0x00000000fe4ec2e4, + 0x00000000fe4324f9, 0x00000000fe375fd7, 0x00000000fe2b7382, + 0x00000000fe1f5ffa, + 0x00000000fe132543, 0x00000000fe06c35d, 0x00000000fdfa3a4b, + 0x00000000fded8a0e, 0x00000000fde0b2a8, 0x00000000fdd3b41c, + 0x00000000fdc68e6c, 0x00000000fdb94199, 0x00000000fdabcda5, + 0x00000000fd9e3294, + 0x00000000fd907065, 0x00000000fd82871d, 0x00000000fd7476bd, + 0x00000000fd663f46, 0x00000000fd57e0bd, 0x00000000fd495b21, + 0x00000000fd3aae77, 0x00000000fd2bdabf, 0x00000000fd1cdffd, + 0x00000000fd0dbe32, + 0x00000000fcfe7562, 0x00000000fcef058e, 0x00000000fcdf6eb8, + 0x00000000fccfb0e4, 0x00000000fcbfcc13, 0x00000000fcafc048, + 0x00000000fc9f8d86, 0x00000000fc8f33ce, 0x00000000fc7eb325, + 0x00000000fc6e0b8b, + 0x00000000fc5d3d03, 0x00000000fc4c4791, 0x00000000fc3b2b37, + 0x00000000fc29e7f7, 0x00000000fc187dd5, 0x00000000fc06ecd2, + 0x00000000fbf534f2, 0x00000000fbe35637, 0x00000000fbd150a3, + 0x00000000fbbf243b, + 0x00000000fbacd100, 0x00000000fb9a56f6, 0x00000000fb87b61f, + 0x00000000fb74ee7e, 0x00000000fb620016, 0x00000000fb4eeaea, + 0x00000000fb3baefd, 0x00000000fb284c52, 0x00000000fb14c2eb, + 0x00000000fb0112cd, + 0x00000000faed3bf9, 0x00000000fad93e73, 0x00000000fac51a3f, + 0x00000000fab0cf5e, 0x00000000fa9c5dd5, 0x00000000fa87c5a6, + 0x00000000fa7306d5, 0x00000000fa5e2164, 0x00000000fa491558, + 0x00000000fa33e2b3, + 0x00000000fa1e8978, 0x00000000fa0909ab, 0x00000000f9f36350, + 0x00000000f9dd9668, 0x00000000f9c7a2f9, 0x00000000f9b18905, + 0x00000000f99b488f, 0x00000000f984e19c, 0x00000000f96e542e, + 0x00000000f957a049, + 0x00000000f940c5f1, 0x00000000f929c528, 0x00000000f9129df3, + 0x00000000f8fb5056, 0x00000000f8e3dc53, 0x00000000f8cc41ee, + 0x00000000f8b4812b, 0x00000000f89c9a0e, 0x00000000f8848c9b, + 0x00000000f86c58d4, + 0x00000000f853febe, 0x00000000f83b7e5d, 0x00000000f822d7b4, + 0x00000000f80a0ac7, 0x00000000f7f1179a, 0x00000000f7d7fe31, + 0x00000000f7bebe90, 0x00000000f7a558ba, 0x00000000f78bccb3, + 0x00000000f7721a80, + 0x00000000f7584225, 0x00000000f73e43a5, 0x00000000f7241f04, + 0x00000000f709d446, 0x00000000f6ef6370, 0x00000000f6d4cc85, + 0x00000000f6ba0f8a, 0x00000000f69f2c83, 0x00000000f6842374, + 0x00000000f668f461, + 0x00000000f64d9f4e, 0x00000000f632243f, 0x00000000f616833a, + 0x00000000f5fabc41, 0x00000000f5decf59, 0x00000000f5c2bc87, + 0x00000000f5a683cf, 0x00000000f58a2535, 0x00000000f56da0be, + 0x00000000f550f66e, + 0x00000000f5342649, 0x00000000f5173054, 0x00000000f4fa1494, + 0x00000000f4dcd30c, 0x00000000f4bf6bc2, 0x00000000f4a1deb9, + 0x00000000f4842bf7, 0x00000000f4665380, 0x00000000f4485559, + 0x00000000f42a3186, + 0x00000000f40be80c, 0x00000000f3ed78ef, 0x00000000f3cee434, + 0x00000000f3b029e1, 0x00000000f39149f9, 0x00000000f3724482, + 0x00000000f3531980, 0x00000000f333c8f8, 0x00000000f31452ef, + 0x00000000f2f4b76a, + 0x00000000f2d4f66d, 0x00000000f2b50ffe, 0x00000000f2950421, + 0x00000000f274d2dc, 0x00000000f2547c33, 0x00000000f234002b, + 0x00000000f2135eca, 0x00000000f1f29814, 0x00000000f1d1ac0e, + 0x00000000f1b09abe, + 0x00000000f18f6429, 0x00000000f16e0853, 0x00000000f14c8742, + 0x00000000f12ae0fb, 0x00000000f1091583, 0x00000000f0e724e0, + 0x00000000f0c50f17, 0x00000000f0a2d42c, 0x00000000f0807426, + 0x00000000f05def09, + 0x00000000f03b44db, 0x00000000f01875a1, 0x00000000eff58161, + 0x00000000efd2681f, 0x00000000efaf29e2, 0x00000000ef8bc6af, + 0x00000000ef683e8b, 0x00000000ef44917b, 0x00000000ef20bf86, + 0x00000000eefcc8b1, + 0x00000000eed8ad01, 0x00000000eeb46c7b, 0x00000000ee900727, + 0x00000000ee6b7d08, 0x00000000ee46ce25, 0x00000000ee21fa83, + 0x00000000edfd0228, 0x00000000edd7e51a, 0x00000000edb2a35f, + 0x00000000ed8d3cfc, + 0x00000000ed67b1f6, 0x00000000ed420255, 0x00000000ed1c2e1d, + 0x00000000ecf63554, 0x00000000ecd01801, 0x00000000eca9d628, + 0x00000000ec836fd1, 0x00000000ec5ce501, 0x00000000ec3635bd, + 0x00000000ec0f620d, + 0x00000000ebe869f5, 0x00000000ebc14d7d, 0x00000000eb9a0ca9, + 0x00000000eb72a780, 0x00000000eb4b1e08, 0x00000000eb237047, + 0x00000000eafb9e43, 0x00000000ead3a803, 0x00000000eaab8d8d, + 0x00000000ea834ee6, + 0x00000000ea5aec15, 0x00000000ea326520, 0x00000000ea09ba0d, + 0x00000000e9e0eae4, 0x00000000e9b7f7a9, 0x00000000e98ee063, + 0x00000000e965a51a, 0x00000000e93c45d2, 0x00000000e912c292, + 0x00000000e8e91b61, + 0x00000000e8bf5046, 0x00000000e8956146, 0x00000000e86b4e68, + 0x00000000e84117b3, 0x00000000e816bd2d, 0x00000000e7ec3edc, + 0x00000000e7c19cc8, 0x00000000e796d6f6, 0x00000000e76bed6e, + 0x00000000e740e036, + 0x00000000e715af54, 0x00000000e6ea5ad0, 0x00000000e6bee2af, + 0x00000000e69346f9, 0x00000000e66787b5, 0x00000000e63ba4e9, + 0x00000000e60f9e9b, 0x00000000e5e374d4, 0x00000000e5b72798, + 0x00000000e58ab6f1, + 0x00000000e55e22e3, 0x00000000e5316b76, 0x00000000e50490b1, + 0x00000000e4d7929c, 0x00000000e4aa713c, 0x00000000e47d2c98, + 0x00000000e44fc4b9, 0x00000000e42239a4, 0x00000000e3f48b61, + 0x00000000e3c6b9f7, + 0x00000000e398c56c, 0x00000000e36aadc9, 0x00000000e33c7314, + 0x00000000e30e1554, 0x00000000e2df9490, 0x00000000e2b0f0d0, + 0x00000000e2822a1a, 0x00000000e2534077, 0x00000000e22433ec, + 0x00000000e1f50482, + 0x00000000e1c5b240, 0x00000000e1963d2d, 0x00000000e166a550, + 0x00000000e136eab0, 0x00000000e1070d56, 0x00000000e0d70d48, + 0x00000000e0a6ea8e, 0x00000000e076a52f, 0x00000000e0463d33, + 0x00000000e015b2a1, + 0x00000000dfe50580, 0x00000000dfb435d9, 0x00000000df8343b2, + 0x00000000df522f13, 0x00000000df20f804, 0x00000000deef9e8d, + 0x00000000debe22b5, 0x00000000de8c8483, 0x00000000de5ac3ff, + 0x00000000de28e131, + 0x00000000ddf6dc21, 0x00000000ddc4b4d6, 0x00000000dd926b59, + 0x00000000dd5fffb0, 0x00000000dd2d71e3, 0x00000000dcfac1fb, + 0x00000000dcc7f000, 0x00000000dc94fbf8, 0x00000000dc61e5ec, + 0x00000000dc2eade4, + 0x00000000dbfb53e8, 0x00000000dbc7d7ff, 0x00000000db943a31, + 0x00000000db607a88, 0x00000000db2c9909, 0x00000000daf895bf, + 0x00000000dac470af, 0x00000000da9029e3, 0x00000000da5bc163, + 0x00000000da273737, + 0x00000000d9f28b66, 0x00000000d9bdbdf9, 0x00000000d988cef8, + 0x00000000d953be6b, 0x00000000d91e8c5b, 0x00000000d8e938d0, + 0x00000000d8b3c3d1, 0x00000000d87e2d67, 0x00000000d848759b, + 0x00000000d8129c74, + 0x00000000d7dca1fb, 0x00000000d7a68638, 0x00000000d7704934, + 0x00000000d739eaf7, 0x00000000d7036b89, 0x00000000d6cccaf3, + 0x00000000d696093d, 0x00000000d65f266f, 0x00000000d6282293, + 0x00000000d5f0fdb0, + 0x00000000d5b9b7d0, 0x00000000d58250fa, 0x00000000d54ac937, + 0x00000000d513208f, 0x00000000d4db570c, 0x00000000d4a36cb6, + 0x00000000d46b6195, 0x00000000d43335b3, 0x00000000d3fae917, + 0x00000000d3c27bcb, + 0x00000000d389edd7, 0x00000000d3513f43, 0x00000000d318701a, + 0x00000000d2df8063, 0x00000000d2a67027, 0x00000000d26d3f6f, + 0x00000000d233ee43, 0x00000000d1fa7cae, 0x00000000d1c0eab7, + 0x00000000d1873867, + 0x00000000d14d65c8, 0x00000000d11372e1, 0x00000000d0d95fbd, + 0x00000000d09f2c64, 0x00000000d064d8df, 0x00000000d02a6537, + 0x00000000cfefd176, 0x00000000cfb51da3, 0x00000000cf7a49c8, + 0x00000000cf3f55ef, + 0x00000000cf044220, 0x00000000cec90e64, 0x00000000ce8dbac5, + 0x00000000ce52474c, 0x00000000ce16b401, 0x00000000cddb00ef, + 0x00000000cd9f2e1e, 0x00000000cd633b97, 0x00000000cd272964, + 0x00000000cceaf78e, + 0x00000000ccaea61e, 0x00000000cc72351e, 0x00000000cc35a497, + 0x00000000cbf8f492, 0x00000000cbbc2519, 0x00000000cb7f3634, + 0x00000000cb4227ee, 0x00000000cb04fa50, 0x00000000cac7ad63, + 0x00000000ca8a4131, + 0x00000000ca4cb5c3, 0x00000000ca0f0b22, 0x00000000c9d14159, + 0x00000000c9935870, 0x00000000c9555072, 0x00000000c9172967, + 0x00000000c8d8e35a, 0x00000000c89a7e53, 0x00000000c85bfa5e, + 0x00000000c81d5782, + 0x00000000c7de95cb, 0x00000000c79fb541, 0x00000000c760b5ee, + 0x00000000c72197dc, 0x00000000c6e25b15, 0x00000000c6a2ffa3, + 0x00000000c663858f, 0x00000000c623ece2, 0x00000000c5e435a8, + 0x00000000c5a45fe9, + 0x00000000c5646bb0, 0x00000000c5245906, 0x00000000c4e427f6, + 0x00000000c4a3d888, 0x00000000c4636ac8, 0x00000000c422debf, + 0x00000000c3e23476, 0x00000000c3a16bf9, 0x00000000c3608550, + 0x00000000c31f8087, + 0x00000000c2de5da6, 0x00000000c29d1cb8, 0x00000000c25bbdc8, + 0x00000000c21a40de, 0x00000000c1d8a606, 0x00000000c196ed49, + 0x00000000c15516b2, 0x00000000c113224a, 0x00000000c0d1101d, + 0x00000000c08ee033, + 0x00000000c04c9297, 0x00000000c00a2754, 0x00000000bfc79e73, + 0x00000000bf84f800, 0x00000000bf423404, 0x00000000beff5289, + 0x00000000bebc539a, 0x00000000be793741, 0x00000000be35fd89, + 0x00000000bdf2a67b, + 0x00000000bdaf3223, 0x00000000bd6ba08b, 0x00000000bd27f1bc, + 0x00000000bce425c2, 0x00000000bca03ca7, 0x00000000bc5c3676, + 0x00000000bc181338, 0x00000000bbd3d2f9, 0x00000000bb8f75c3, + 0x00000000bb4afba1, + 0x00000000bb06649c, 0x00000000bac1b0c0, 0x00000000ba7ce018, + 0x00000000ba37f2ad, 0x00000000b9f2e88b, 0x00000000b9adc1bc, + 0x00000000b9687e4a, 0x00000000b9231e41, 0x00000000b8dda1ac, + 0x00000000b8980894, + 0x00000000b8525305, 0x00000000b80c8109, 0x00000000b7c692ac, + 0x00000000b78087f7, 0x00000000b73a60f6, 0x00000000b6f41db4, + 0x00000000b6adbe3a, 0x00000000b6674296, 0x00000000b620aad0, + 0x00000000b5d9f6f4, + 0x00000000b593270e, 0x00000000b54c3b27, 0x00000000b505334a, + 0x00000000b4be0f84, 0x00000000b476cfde, 0x00000000b42f7464, + 0x00000000b3e7fd20, 0x00000000b3a06a1e, 0x00000000b358bb69, + 0x00000000b310f10c, + 0x00000000b2c90b11, 0x00000000b2810985, 0x00000000b238ec71, + 0x00000000b1f0b3e2, 0x00000000b1a85fe2, 0x00000000b15ff07c, + 0x00000000b11765bc, 0x00000000b0cebfad, 0x00000000b085fe5a, + 0x00000000b03d21ce, + 0x00000000aff42a15, 0x00000000afab1739, 0x00000000af61e946, + 0x00000000af18a048, 0x00000000aecf3c49, 0x00000000ae85bd55, + 0x00000000ae3c2377, 0x00000000adf26ebb, 0x00000000ada89f2c, + 0x00000000ad5eb4d5, + 0x00000000ad14afc2, 0x00000000acca8ffd, 0x00000000ac805594, + 0x00000000ac360090, 0x00000000abeb90fe, 0x00000000aba106e9, + 0x00000000ab56625d, 0x00000000ab0ba364, 0x00000000aac0ca0b, + 0x00000000aa75d65d, + 0x00000000aa2ac865, 0x00000000a9dfa030, 0x00000000a9945dc9, + 0x00000000a949013a, 0x00000000a8fd8a91, 0x00000000a8b1f9d8, + 0x00000000a8664f1c, 0x00000000a81a8a68, 0x00000000a7ceabc7, + 0x00000000a782b345, + 0x00000000a736a0ef, 0x00000000a6ea74cf, 0x00000000a69e2ef2, + 0x00000000a651cf63, 0x00000000a605562f, 0x00000000a5b8c360, + 0x00000000a56c1702, 0x00000000a51f5123, 0x00000000a4d271cc, + 0x00000000a485790b, + 0x00000000a43866eb, 0x00000000a3eb3b77, 0x00000000a39df6bd, + 0x00000000a35098c7, 0x00000000a30321a2, 0x00000000a2b5915a, + 0x00000000a267e7fa, 0x00000000a21a258e, 0x00000000a1cc4a24, + 0x00000000a17e55c5, + 0x00000000a1304880, 0x00000000a0e2225f, 0x00000000a093e36f, + 0x00000000a0458bbb, 0x000000009ff71b50, 0x000000009fa8923a, + 0x000000009f59f086, 0x000000009f0b363e, 0x000000009ebc6370, + 0x000000009e6d7827, + 0x000000009e1e746f, 0x000000009dcf5856, 0x000000009d8023e6, + 0x000000009d30d72d, 0x000000009ce17236, 0x000000009c91f50e, + 0x000000009c425fc1, 0x000000009bf2b25b, 0x000000009ba2ece8, + 0x000000009b530f76, + 0x000000009b031a0f, 0x000000009ab30cc1, 0x000000009a62e797, + 0x000000009a12aa9f, 0x0000000099c255e5, 0x000000009971e974, + 0x000000009921655a, 0x0000000098d0c9a2, 0x0000000098801659, + 0x00000000982f4b8d, + 0x0000000097de6948, 0x00000000978d6f97, 0x00000000973c5e88, + 0x0000000096eb3626, 0x000000009699f67f, 0x0000000096489f9e, + 0x0000000095f73190, 0x0000000095a5ac61, 0x000000009554101f, + 0x0000000095025cd6, + 0x0000000094b09292, 0x00000000945eb161, 0x00000000940cb94e, + 0x0000000093baaa66, 0x00000000936884b6, 0x000000009316484b, + 0x0000000092c3f531, 0x0000000092718b75, 0x00000000921f0b24, + 0x0000000091cc744b, + 0x000000009179c6f5, 0x0000000091270331, 0x0000000090d4290a, + 0x000000009081388e, 0x00000000902e31c8, 0x000000008fdb14c7, + 0x000000008f87e197, 0x000000008f349845, 0x000000008ee138dd, + 0x000000008e8dc36c, + 0x000000008e3a3800, 0x000000008de696a5, 0x000000008d92df68, + 0x000000008d3f1256, 0x000000008ceb2f7c, 0x000000008c9736e7, + 0x000000008c4328a3, 0x000000008bef04bf, 0x000000008b9acb46, + 0x000000008b467c45, + 0x000000008af217cb, 0x000000008a9d9de3, 0x000000008a490e9b, + 0x0000000089f469ff, 0x00000000899fb01e, 0x00000000894ae103, + 0x0000000088f5fcbc, 0x0000000088a10357, 0x00000000884bf4df, + 0x0000000087f6d163, + 0x0000000087a198f0, 0x00000000874c4b92, 0x0000000086f6e956, + 0x0000000086a1724b, 0x00000000864be67c, 0x0000000085f645f8, + 0x0000000085a090cc, 0x00000000854ac704, 0x0000000084f4e8ad, + 0x00000000849ef5d7, + 0x000000008448ee8c, 0x0000000083f2d2db, 0x00000000839ca2d1, + 0x0000000083465e7c, 0x0000000082f005e8, 0x0000000082999922, + 0x0000000082431839, 0x0000000081ec833a, 0x000000008195da31, + 0x00000000813f1d2d, + 0x0000000080e84c3a, 0x0000000080916766, 0x00000000803a6ebf, + 0x000000007fe36251, 0x000000007f8c422b, 0x000000007f350e59, + 0x000000007eddc6ea, 0x000000007e866bea, 0x000000007e2efd67, + 0x000000007dd77b6f, + 0x000000007d7fe60f, 0x000000007d283d54, 0x000000007cd0814c, + 0x000000007c78b205, 0x000000007c20cf8c, 0x000000007bc8d9ef, + 0x000000007b70d13b, 0x000000007b18b57e, 0x000000007ac086c5, + 0x000000007a68451f, + 0x000000007a0ff098, 0x0000000079b7893e, 0x00000000795f0f1f, + 0x0000000079068248, 0x0000000078ade2c8, 0x00000000785530ab, + 0x0000000077fc6c01, 0x0000000077a394d5, 0x00000000774aab36, + 0x0000000076f1af32, + 0x000000007698a0d6, 0x00000000763f8030, 0x0000000075e64d4e, + 0x00000000758d083e, 0x000000007533b10d, 0x0000000074da47c9, + 0x000000007480cc80, 0x0000000074273f3f, 0x0000000073cda016, + 0x000000007373ef10, + 0x00000000731a2c3d, 0x0000000072c057aa, 0x0000000072667164, + 0x00000000720c797a, 0x0000000071b26ffa, 0x00000000715854f2, + 0x0000000070fe286e, 0x0000000070a3ea7e, 0x0000000070499b30, + 0x000000006fef3a90, + 0x000000006f94c8ae, 0x000000006f3a4596, 0x000000006edfb157, + 0x000000006e850c00, 0x000000006e2a559d, 0x000000006dcf8e3d, + 0x000000006d74b5ee, 0x000000006d19ccbe, 0x000000006cbed2bb, + 0x000000006c63c7f3, + 0x000000006c08ac74, 0x000000006bad804c, 0x000000006b524389, + 0x000000006af6f639, 0x000000006a9b986b, 0x000000006a402a2c, + 0x0000000069e4ab8a, 0x0000000069891c94, 0x00000000692d7d57, + 0x0000000068d1cde3, + 0x0000000068760e44, 0x00000000681a3e89, 0x0000000067be5ec1, + 0x0000000067626ef9, 0x0000000067066f40, 0x0000000066aa5fa3, + 0x00000000664e4032, 0x0000000065f210f9, 0x000000006595d209, + 0x000000006539836d, + 0x0000000064dd2536, 0x000000006480b770, 0x0000000064243a2b, + 0x0000000063c7ad75, 0x00000000636b115c, 0x00000000630e65ed, + 0x0000000062b1ab39, 0x000000006254e14c, 0x0000000061f80835, + 0x00000000619b2002, + 0x00000000613e28c2, 0x0000000060e12283, 0x0000000060840d54, + 0x000000006026e943, 0x000000005fc9b65d, 0x000000005f6c74b2, + 0x000000005f0f2450, 0x000000005eb1c545, 0x000000005e5457a0, + 0x000000005df6db6f, + 0x000000005d9950c0, 0x000000005d3bb7a3, 0x000000005cde1024, + 0x000000005c805a54, 0x000000005c22963f, 0x000000005bc4c3f6, + 0x000000005b66e385, 0x000000005b08f4fd, 0x000000005aaaf86a, + 0x000000005a4ceddc, + 0x0000000059eed561, 0x000000005990af08, 0x0000000059327adf, + 0x0000000058d438f4, 0x000000005875e957, 0x0000000058178c16, + 0x0000000057b9213f, 0x00000000575aa8e0, 0x0000000056fc230a, + 0x00000000569d8fc9, + 0x00000000563eef2d, 0x0000000055e04144, 0x000000005581861d, + 0x000000005522bdc6, 0x0000000054c3e84e, 0x00000000546505c4, + 0x0000000054061636, 0x0000000053a719b3, 0x000000005348104a, + 0x0000000052e8fa09, + 0x000000005289d6ff, 0x00000000522aa73a, 0x0000000051cb6aca, + 0x00000000516c21bc, 0x00000000510ccc20, 0x0000000050ad6a05, + 0x00000000504dfb78, 0x000000004fee808a, 0x000000004f8ef947, + 0x000000004f2f65c0, + 0x000000004ecfc603, 0x000000004e701a1f, 0x000000004e106222, + 0x000000004db09e1b, 0x000000004d50ce19, 0x000000004cf0f22b, + 0x000000004c910a5f, 0x000000004c3116c5, 0x000000004bd1176b, + 0x000000004b710c5f, + 0x000000004b10f5b2, 0x000000004ab0d371, 0x000000004a50a5ab, + 0x0000000049f06c70, 0x00000000499027cd, 0x00000000492fd7d3, + 0x0000000048cf7c8f, 0x00000000486f1611, 0x00000000480ea467, + 0x0000000047ae27a1, + 0x00000000474d9fcd, 0x0000000046ed0cfa, 0x00000000468c6f37, + 0x00000000462bc693, 0x0000000045cb131c, 0x00000000456a54e3, + 0x0000000045098bf5, 0x0000000044a8b861, 0x000000004447da37, + 0x0000000043e6f186, + 0x000000004385fe5c, 0x00000000432500c8, 0x0000000042c3f8d9, + 0x000000004262e69f, 0x000000004201ca28, 0x0000000041a0a383, + 0x00000000413f72bf, 0x0000000040de37eb, 0x00000000407cf317, + 0x00000000401ba450, + 0x000000003fba4ba7, 0x000000003f58e92a, 0x000000003ef77ce8, + 0x000000003e9606f1, 0x000000003e348752, 0x000000003dd2fe1c, + 0x000000003d716b5e, 0x000000003d0fcf25, 0x000000003cae2982, + 0x000000003c4c7a83, + 0x000000003beac238, 0x000000003b8900b0, 0x000000003b2735f9, + 0x000000003ac56223, 0x000000003a63853d, 0x000000003a019f56, + 0x00000000399fb07d, 0x00000000393db8c1, 0x0000000038dbb831, + 0x000000003879aedd, + 0x0000000038179cd3, 0x0000000037b58222, 0x0000000037535edb, + 0x0000000036f1330b, 0x00000000368efec2, 0x00000000362cc20f, + 0x0000000035ca7d02, 0x0000000035682fa9, 0x000000003505da14, + 0x0000000034a37c51, + 0x0000000034411671, 0x0000000033dea881, 0x00000000337c3292, + 0x000000003319b4b3, 0x0000000032b72ef2, 0x000000003254a15e, + 0x0000000031f20c08, 0x00000000318f6efe, 0x00000000312cca50, + 0x0000000030ca1e0c, + 0x0000000030676a43, 0x000000003004af02, 0x000000002fa1ec5a, + 0x000000002f3f2259, 0x000000002edc510f, 0x000000002e79788b, + 0x000000002e1698dc, 0x000000002db3b212, 0x000000002d50c43c, + 0x000000002cedcf68, + 0x000000002c8ad3a7, 0x000000002c27d108, 0x000000002bc4c799, + 0x000000002b61b76b, 0x000000002afea08c, 0x000000002a9b830b, + 0x000000002a385ef9, 0x0000000029d53464, 0x000000002972035b, + 0x00000000290ecbee, + 0x0000000028ab8e2c, 0x0000000028484a25, 0x0000000027e4ffe7, + 0x000000002781af83, 0x00000000271e5906, 0x0000000026bafc82, + 0x0000000026579a04, 0x0000000025f4319d, 0x000000002590c35c, + 0x00000000252d4f4f, + 0x0000000024c9d587, 0x0000000024665613, 0x000000002402d101, + 0x00000000239f4662, 0x00000000233bb644, 0x0000000022d820b8, + 0x00000000227485cc, 0x000000002210e590, 0x0000000021ad4013, + 0x0000000021499565, + 0x0000000020e5e594, 0x00000000208230b1, 0x00000000201e76ca, + 0x000000001fbab7ef, 0x000000001f56f430, 0x000000001ef32b9b, + 0x000000001e8f5e41, 0x000000001e2b8c30, 0x000000001dc7b578, + 0x000000001d63da29, + 0x000000001cfffa51, 0x000000001c9c1600, 0x000000001c382d46, + 0x000000001bd44032, 0x000000001b704ed3, 0x000000001b0c5939, + 0x000000001aa85f74, 0x000000001a446191, 0x0000000019e05fa2, + 0x00000000197c59b5, + 0x0000000019184fdb, 0x0000000018b44221, 0x0000000018503098, + 0x0000000017ec1b50, 0x0000000017880257, 0x000000001723e5bd, + 0x0000000016bfc591, 0x00000000165ba1e4, 0x0000000015f77ac3, + 0x0000000015935040, + 0x00000000152f2269, 0x0000000014caf14d, 0x000000001466bcfd, + 0x0000000014028587, 0x00000000139e4afb, 0x00000000133a0d69, + 0x0000000012d5cce0, 0x000000001271896f, 0x00000000120d4326, + 0x0000000011a8fa15, + 0x000000001144ae4a, 0x0000000010e05fd6, 0x00000000107c0ec7, + 0x000000001017bb2d, 0x000000000fb36519, 0x000000000f4f0c98, + 0x000000000eeab1bb, 0x000000000e865491, 0x000000000e21f52a, + 0x000000000dbd9395, + 0x000000000d592fe1, 0x000000000cf4ca1f, 0x000000000c90625c, + 0x000000000c2bf8aa, 0x000000000bc78d18, 0x000000000b631fb4, + 0x000000000afeb08f, 0x000000000a9a3fb8, 0x000000000a35cd3e, + 0x0000000009d15931, + 0x00000000096ce3a1, 0x0000000009086c9c, 0x0000000008a3f433, + 0x00000000083f7a75, 0x0000000007daff71, 0x0000000007768337, + 0x00000000071205d6, 0x0000000006ad875f, 0x00000000064907df, + 0x0000000005e48768, + 0x0000000005800608, 0x00000000051b83cf, 0x0000000004b700cc, + 0x0000000004527d0f, 0x0000000003edf8a7, 0x00000000038973a4, + 0x000000000324ee16, 0x0000000002c0680b, 0x00000000025be194, + 0x0000000001f75ac0, + 0x000000000192d39e, 0x00000000012e4c3e, 0x0000000000c9c4af, + 0x0000000000653d02, 0x0000000000000000 +}; + +EAPI Eina_F32p32 +eina_f32p32_cos(Eina_F32p32 a) +{ + Eina_F32p32 F32P32_2PI; + Eina_F32p32 F32P32_PI2; + Eina_F32p32 F32P32_3PI2; + Eina_F32p32 remainder_2PI; + Eina_F32p32 remainder_PI; + Eina_F32p32 interpol; + Eina_F32p32 result; + int idx; + int index2; + + F32P32_2PI = EINA_F32P32_PI << 1; + F32P32_PI2 = EINA_F32P32_PI >> 1; + F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2; + + /* Take advantage of cosinus symetrie. */ + a = eina_fp32p32_llabs(a); + + /* Find table entry in 0 to PI / 2 */ + remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI; + + /* Find which case from 0 to 2 * PI */ + remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI; + + interpol = eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2), + EINA_F32P32_PI); + idx = eina_f32p32_int_to(interpol); + if (idx >= MAX_PREC) + idx = 2 * MAX_PREC - (idx + 1); + + index2 = idx + 1; + if (index2 == MAX_PREC) + index2 = idx - 1; + + result = eina_f32p32_add(eina_trigo[idx], + eina_f32p32_mul(eina_f32p32_sub(eina_trigo[idx], + eina_trigo[index2]), + (Eina_F32p32)eina_f32p32_fracc_get( + interpol))); + + if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2) + return result; + else if (F32P32_PI2 <= remainder_2PI && remainder_2PI < EINA_F32P32_PI) + return -result; + else if (EINA_F32P32_PI <= remainder_2PI && remainder_2PI < F32P32_3PI2) + return -result; + else /* if (F32P32_3PI2 <= remainder_2PI) */ + return result; +} + +EAPI Eina_F32p32 +eina_f32p32_sin(Eina_F32p32 a) +{ + Eina_F32p32 F32P32_2PI; + Eina_F32p32 F32P32_PI2; + Eina_F32p32 F32P32_3PI2; + Eina_F32p32 remainder_2PI; + Eina_F32p32 remainder_PI; + Eina_F32p32 interpol; + Eina_F32p32 result; + int idx; + int index2; + + F32P32_2PI = EINA_F32P32_PI << 1; + F32P32_PI2 = EINA_F32P32_PI >> 1; + F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2; + + /* We only have a table for cosinus, but sin(a) = cos(pi / 2 - a) */ + a = eina_f32p32_sub(F32P32_PI2, a); + + /* Take advantage of cosinus symetrie. */ + a = eina_fp32p32_llabs(a); + + /* Find table entry in 0 to PI / 2 */ + remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI; + + /* Find which case from 0 to 2 * PI */ + remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI; + + interpol = eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2), + EINA_F32P32_PI); + idx = eina_f32p32_int_to(interpol); + if (idx >= MAX_PREC) + idx = 2 * MAX_PREC - (idx + 1); + + index2 = idx + 1; + if (index2 == MAX_PREC) + index2 = idx - 1; + + result = eina_f32p32_add(eina_trigo[idx], + eina_f32p32_mul(eina_f32p32_sub(eina_trigo[idx], + eina_trigo[index2]), + (Eina_F32p32)eina_f32p32_fracc_get( + interpol))); + + if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2) + return result; + else if (F32P32_PI2 <= remainder_2PI && remainder_2PI < EINA_F32P32_PI) + return -result; + else if (EINA_F32P32_PI <= remainder_2PI && remainder_2PI < F32P32_3PI2) + return -result; + else /* if (F32P32_3PI2 <= remainder_2PI) */ + return result; +} + diff --git a/libraries/eina/src/lib/eina_hamster.c b/libraries/eina/src/lib/eina_hamster.c new file mode 100644 index 0000000..cebc10b --- /dev/null +++ b/libraries/eina/src/lib/eina_hamster.c @@ -0,0 +1,113 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_config.h" +#include "eina_types.h" +#include "eina_hamster.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +const char *_eina_hamster_time = __TIME__; +const char *_eina_hamster_date = __DATE__; +static int _eina_hamsters = -1; + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI int +eina_hamster_count(void) +{ + if (_eina_hamsters < 0) + { + int hrs = 0, min = 0, sec = 0; + char mon[8] = ""; + int monnum = 0, day = 0, year = 0; + int fields; + + fields = sscanf(_eina_hamster_time, "%02d:%02d:%02d", &hrs, &min, &sec); + if (fields == 3) + { + _eina_hamsters = (hrs * 60) + min; + fields = sscanf(_eina_hamster_date, "%s %d %d", mon, &day, &year); + if (fields == 3) + { + int i; + const char *mons[] = + { + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + }; + + for (i = 0; i < 12; i++) + { + if (!strcmp(mon, mons[i])) + { + monnum = i + 1; + break; + } + } + // alloc 60 for mins, 24 for hrs + // alloc 1-31 (32) for days, 1-12 (13) for months + // use year as-is, for 31 bits (signed) this gives us up to + // 3584 years, which is good enough imho. - 1500 years from + // now or so. :) + _eina_hamsters += + (day + (monnum * 32) + (13 * 32 * year)) * (24 * 60); + } + } + } + + // format: [rest - year][0-12 - month][0-31 - day][0-23 - hrs][0-59 - sec] + return _eina_hamsters; +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_hash.c b/libraries/eina/src/lib/eina_hash.c new file mode 100644 index 0000000..5df20aa --- /dev/null +++ b/libraries/eina/src/lib/eina_hash.c @@ -0,0 +1,1375 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, + * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_STDINT_H +# include +#endif + +#ifdef _MSC_VER +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_rbtree.h" +#include "eina_error.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_hash.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_MAGIC_CHECK_HASH(d) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH)) { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH); } \ + } while(0) + +#define EINA_MAGIC_CHECK_HASH_ITERATOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH_ITERATOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH_ITERATOR); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_HASH_BUCKET_SIZE 8 +#define EINA_HASH_SMALL_BUCKET_SIZE 5 + +#define EINA_HASH_RBTREE_MASK 0xFFF + +typedef struct _Eina_Hash_Head Eina_Hash_Head; +typedef struct _Eina_Hash_Element Eina_Hash_Element; +typedef struct _Eina_Hash_Foreach_Data Eina_Hash_Foreach_Data; +typedef struct _Eina_Iterator_Hash Eina_Iterator_Hash; +typedef struct _Eina_Hash_Each Eina_Hash_Each; + +struct _Eina_Hash +{ + Eina_Key_Length key_length_cb; + Eina_Key_Cmp key_cmp_cb; + Eina_Key_Hash key_hash_cb; + Eina_Free_Cb data_free_cb; + + Eina_Rbtree **buckets; + int size; + int mask; + + int population; + + EINA_MAGIC +}; + +struct _Eina_Hash_Head +{ + EINA_RBTREE; + int hash; + + Eina_Rbtree *head; +}; + +struct _Eina_Hash_Element +{ + EINA_RBTREE; + Eina_Hash_Tuple tuple; + Eina_Bool begin : 1; +}; + +struct _Eina_Hash_Foreach_Data +{ + Eina_Hash_Foreach cb; + const void *fdata; +}; + +typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator_Hash *it); +#define FUNC_ITERATOR_GET_CONTENT(Function) \ + ((Eina_Iterator_Get_Content_Callback)Function) + +struct _Eina_Iterator_Hash +{ + Eina_Iterator iterator; + + Eina_Iterator_Get_Content_Callback get_content; + const Eina_Hash *hash; + + Eina_Iterator *current; + Eina_Iterator *list; + Eina_Hash_Head *hash_head; + Eina_Hash_Element *hash_element; + int bucket; + + int index; + + EINA_MAGIC +}; + +struct _Eina_Hash_Each +{ + Eina_Hash_Head *hash_head; + const Eina_Hash_Element *hash_element; + const void *data; +}; + +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +# define get16bits(d) (*((const uint16_t *)(d))) +#endif + +#if !defined (get16bits) +# define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + + (uint32_t)(((const uint8_t *)(d))[0])) +#endif + +static inline int +_eina_hash_hash_rbtree_cmp_hash(const Eina_Hash_Head *hash_head, + const int *hash, + __UNUSED__ int key_length, + __UNUSED__ void *data) +{ + return hash_head->hash - *hash; +} + +static Eina_Rbtree_Direction +_eina_hash_hash_rbtree_cmp_node(const Eina_Hash_Head *left, + const Eina_Hash_Head *right, + __UNUSED__ void *data) +{ + if (left->hash - right->hash < 0) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static inline int +_eina_hash_key_rbtree_cmp_key_data(const Eina_Hash_Element *hash_element, + const Eina_Hash_Tuple *tuple, + __UNUSED__ unsigned int key_length, + Eina_Key_Cmp cmp) +{ + int result; + + result = cmp(hash_element->tuple.key, + hash_element->tuple.key_length, + tuple->key, + tuple->key_length); + + if (result == 0 && tuple->data && tuple->data != hash_element->tuple.data) + return 1; + + return result; +} + +static Eina_Rbtree_Direction +_eina_hash_key_rbtree_cmp_node(const Eina_Hash_Element *left, + const Eina_Hash_Element *right, + Eina_Key_Cmp cmp) +{ + int result; + + result = cmp(left->tuple.key, left->tuple.key_length, + right->tuple.key, right->tuple.key_length); + + if (result < 0) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static inline Eina_Bool +eina_hash_add_alloc_by_hash(Eina_Hash *hash, + const void *key, int key_length, int alloc_length, + int key_hash, + const void *data) +{ + Eina_Hash_Element *new_hash_element = NULL; + Eina_Hash_Head *hash_head; + Eina_Error error = 0; + int hash_num; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + error = EINA_ERROR_OUT_OF_MEMORY; + + /* Apply eina mask to hash. */ + hash_num = key_hash & hash->mask; + key_hash &= EINA_HASH_RBTREE_MASK; + + if (!hash->buckets) + { + hash->buckets = calloc(sizeof (Eina_Rbtree *), hash->size); + if (!hash->buckets) goto on_error; + + hash_head = NULL; + } + else + /* Look up for head node. */ + hash_head = (Eina_Hash_Head *) + eina_rbtree_inline_lookup(hash->buckets[hash_num], + &key_hash, 0, + EINA_RBTREE_CMP_KEY_CB( + _eina_hash_hash_rbtree_cmp_hash), + NULL); + + if (!hash_head) + { + /* If not found allocate it and an element. */ + hash_head = malloc(sizeof(Eina_Hash_Head) + sizeof(Eina_Hash_Element) + + alloc_length); + if (!hash_head) + goto on_error; + + hash_head->hash = key_hash; + hash_head->head = NULL; + + hash->buckets[hash_num] = + eina_rbtree_inline_insert(hash->buckets[hash_num], + EINA_RBTREE_GET(hash_head), + EINA_RBTREE_CMP_NODE_CB( + _eina_hash_hash_rbtree_cmp_node), + NULL); + + new_hash_element = (Eina_Hash_Element *)(hash_head + 1); + new_hash_element->begin = EINA_TRUE; + } + + if (!new_hash_element) + { + /* + Alloc a new element + (No more lookup as we expect to support more than one item for one key). + */ + new_hash_element = malloc(sizeof (Eina_Hash_Element) + alloc_length); + if (!new_hash_element) + goto on_error; + + new_hash_element->begin = EINA_FALSE; + } + + /* Setup the element */ + new_hash_element->tuple.key_length = key_length; + new_hash_element->tuple.data = (void *)data; + if (alloc_length > 0) + { + new_hash_element->tuple.key = (char *)(new_hash_element + 1); + memcpy((char *)new_hash_element->tuple.key, key, alloc_length); + } + else + new_hash_element->tuple.key = key; + + /* add the new element to the hash. */ + hash_head->head = eina_rbtree_inline_insert(hash_head->head, + EINA_RBTREE_GET(new_hash_element), + EINA_RBTREE_CMP_NODE_CB( + _eina_hash_key_rbtree_cmp_node), + (const void *)hash->key_cmp_cb); + hash->population++; + return EINA_TRUE; + +on_error: + eina_error_set(error); + return EINA_FALSE; +} + +static Eina_Bool +_eina_hash_rbtree_each(__UNUSED__ const Eina_Rbtree *container, + const Eina_Hash_Head *hash_head, + Eina_Hash_Each *data) +{ + Eina_Iterator *it; + Eina_Hash_Element *hash_element; + Eina_Bool found = EINA_TRUE; + + it = eina_rbtree_iterator_prefix(hash_head->head); + EINA_ITERATOR_FOREACH(it, hash_element) + { + if (hash_element->tuple.data == data->data) + { + data->hash_element = hash_element; + data->hash_head = (Eina_Hash_Head *)hash_head; + found = EINA_FALSE; + break; + } + } + + eina_iterator_free(it); + return found; +} + +static inline Eina_Hash_Element * +_eina_hash_find_by_hash(const Eina_Hash *hash, + Eina_Hash_Tuple *tuple, + int key_hash, + Eina_Hash_Head **hash_head) +{ + Eina_Hash_Element *hash_element; + int rb_hash = key_hash & EINA_HASH_RBTREE_MASK; + + key_hash &= hash->mask; + + if (!hash->buckets) + return NULL; + + *hash_head = (Eina_Hash_Head *) + eina_rbtree_inline_lookup(hash->buckets[key_hash], + &rb_hash, 0, + EINA_RBTREE_CMP_KEY_CB( + _eina_hash_hash_rbtree_cmp_hash), + NULL); + if (!*hash_head) + return NULL; + + hash_element = (Eina_Hash_Element *) + eina_rbtree_inline_lookup((*hash_head)->head, + tuple, 0, + EINA_RBTREE_CMP_KEY_CB( + _eina_hash_key_rbtree_cmp_key_data), + (const void *)hash->key_cmp_cb); + + return hash_element; +} + +static inline Eina_Hash_Element * +_eina_hash_find_by_data(const Eina_Hash *hash, + const void *data, + int *key_hash, + Eina_Hash_Head **hash_head) +{ + Eina_Hash_Each each; + Eina_Iterator *it; + int hash_num; + + if (!hash->buckets) + return NULL; + + each.hash_element = NULL; + each.data = data; + + for (hash_num = 0; hash_num < hash->size; hash_num++) + { + if (!hash->buckets[hash_num]) + continue; + + it = eina_rbtree_iterator_prefix(hash->buckets[hash_num]); + eina_iterator_foreach(it, EINA_EACH_CB(_eina_hash_rbtree_each), &each); + eina_iterator_free(it); + + if (each.hash_element) + { + *key_hash = hash_num; + *hash_head = each.hash_head; + return (Eina_Hash_Element *)each.hash_element; + } + } + + return NULL; +} + +static void +_eina_hash_el_free(Eina_Hash_Element *hash_element, Eina_Hash *hash) +{ + if (hash->data_free_cb) + hash->data_free_cb(hash_element->tuple.data); + + if (hash_element->begin == EINA_FALSE) + free(hash_element); +} + +static void +_eina_hash_head_free(Eina_Hash_Head *hash_head, Eina_Hash *hash) +{ + eina_rbtree_delete(hash_head->head, EINA_RBTREE_FREE_CB(_eina_hash_el_free), hash); + free(hash_head); +} + +static Eina_Bool +_eina_hash_del_by_hash_el(Eina_Hash *hash, + Eina_Hash_Element *hash_element, + Eina_Hash_Head *hash_head, + int key_hash) +{ + hash_head->head = eina_rbtree_inline_remove(hash_head->head, EINA_RBTREE_GET( + hash_element), EINA_RBTREE_CMP_NODE_CB( + _eina_hash_key_rbtree_cmp_node), + (const void *)hash->key_cmp_cb); + _eina_hash_el_free(hash_element, hash); + + if (!hash_head->head) + { + key_hash &= hash->mask; + + hash->buckets[key_hash] = + eina_rbtree_inline_remove(hash->buckets[key_hash], EINA_RBTREE_GET( + hash_head), + EINA_RBTREE_CMP_NODE_CB( + _eina_hash_hash_rbtree_cmp_node), NULL); + free(hash_head); + } + + hash->population--; + if (hash->population == 0) + { + free(hash->buckets); + hash->buckets = NULL; + } + + return EINA_TRUE; +} + +static Eina_Bool +_eina_hash_del_by_key_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) +{ + Eina_Hash_Element *hash_element; + Eina_Hash_Head *hash_head; + Eina_Hash_Tuple tuple; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + if (!hash->buckets) + return EINA_FALSE; + + tuple.key = (void *)key; + tuple.key_length = key_length; + tuple.data = (void *)data; + + hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); + if (!hash_element) + return EINA_FALSE; + + return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash); +} + +static Eina_Bool +_eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data) +{ + int key_length, key_hash; + + EINA_MAGIC_CHECK_HASH(hash); + if (!hash) + return EINA_FALSE; + + if (!key) + return EINA_FALSE; + + if (!hash->buckets) + return EINA_FALSE; + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + key_hash = hash->key_hash_cb(key, key_length); + return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); +} + +static unsigned int +_eina_string_key_length(const char *key) +{ + if (!key) + return 0; + + return (int)strlen(key) + 1; +} + +static int +_eina_string_key_cmp(const char *key1, __UNUSED__ int key1_length, + const char *key2, __UNUSED__ int key2_length) +{ + return strcmp(key1, key2); +} + +static int +_eina_stringshared_key_cmp(const char *key1, __UNUSED__ int key1_length, + const char *key2, __UNUSED__ int key2_length) +{ + return key1 - key2; +} + +static unsigned int +_eina_int32_key_length(__UNUSED__ const uint32_t *key) +{ + return 4; +} + +static int +_eina_int32_key_cmp(const uint32_t *key1, __UNUSED__ int key1_length, + const uint32_t *key2, __UNUSED__ int key2_length) +{ + return *key1 - *key2; +} + +static unsigned int +_eina_int64_key_length(__UNUSED__ const uint32_t *key) +{ + return 8; +} + +static int +_eina_int64_key_cmp(const uint64_t *key1, __UNUSED__ int key1_length, + const uint64_t *key2, __UNUSED__ int key2_length) +{ + return *key1 - *key2; +} + +static Eina_Bool +_eina_foreach_cb(const Eina_Hash *hash, + Eina_Hash_Tuple *data, + Eina_Hash_Foreach_Data *fdata) +{ + return fdata->cb((Eina_Hash *)hash, + data->key, + data->data, + (void *)fdata->fdata); +} + +static void * +_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it) +{ + Eina_Hash_Element *stuff; + + EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); + + stuff = it->hash_element; + + if (!stuff) + return NULL; + + return stuff->tuple.data; +} + +static void * +_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it) +{ + Eina_Hash_Element *stuff; + + EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); + + stuff = it->hash_element; + + if (!stuff) + return NULL; + + return (void *)stuff->tuple.key; +} + +static Eina_Hash_Tuple * +_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it) +{ + Eina_Hash_Element *stuff; + + EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); + + stuff = it->hash_element; + + if (!stuff) + return NULL; + + return &stuff->tuple; +} + +static Eina_Bool +_eina_hash_iterator_next(Eina_Iterator_Hash *it, void **data) +{ + Eina_Bool ok; + int bucket; + + if (!(it->index < it->hash->population)) + return EINA_FALSE; + + if (!it->current) + { + ok = EINA_FALSE; + bucket = 0; + it->index = -1; + } + else + { + ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element); + if (!ok) + { + eina_iterator_free(it->list); + it->list = NULL; + + ok = eina_iterator_next(it->current, (void **)(void*)&it->hash_head); + if (!ok) + { + eina_iterator_free(it->current); + it->current = NULL; + it->bucket++; + } + else + { + it->list = eina_rbtree_iterator_prefix(it->hash_head->head); + ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element); + } + } + + bucket = it->bucket; + } + + if (ok == EINA_FALSE) + { + while (bucket < it->hash->size) + { + if (it->hash->buckets[bucket]) + { + it->current = + eina_rbtree_iterator_prefix(it->hash->buckets[bucket]); + ok = eina_iterator_next(it->current, (void **)(void*)&it->hash_head); + if (ok) + break; + + eina_iterator_free(it->current); + it->current = NULL; + } + + ++bucket; + } + if (it->list) + eina_iterator_free(it->list); + + it->list = eina_rbtree_iterator_prefix(it->hash_head->head); + ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element); + if (bucket == it->hash->size) + ok = EINA_FALSE; + } + + it->index++; + it->bucket = bucket; + + if (ok) + *data = it->get_content(it); + + return ok; +} + +static void * +_eina_hash_iterator_get_container(Eina_Iterator_Hash *it) +{ + EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); + return (void *)it->hash; +} + +static void +_eina_hash_iterator_free(Eina_Iterator_Hash *it) +{ + EINA_MAGIC_CHECK_HASH_ITERATOR(it); + if (it->current) + eina_iterator_free(it->current); + + if (it->list) + eina_iterator_free(it->list); + + free(it); +} + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI void +eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) +{ + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN(hash); + + hash->data_free_cb = data_free_cb; +} + +EAPI Eina_Hash * +eina_hash_new(Eina_Key_Length key_length_cb, + Eina_Key_Cmp key_cmp_cb, + Eina_Key_Hash key_hash_cb, + Eina_Free_Cb data_free_cb, + int buckets_power_size) +{ + /* FIXME: Use mempool. */ + Eina_Hash *new; + + eina_error_set(0); + EINA_SAFETY_ON_NULL_RETURN_VAL(key_cmp_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key_hash_cb, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size <= 2, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size >= 17, NULL); + + new = malloc(sizeof (Eina_Hash)); + if (!new) + goto on_error; + + EINA_MAGIC_SET(new, EINA_MAGIC_HASH); + + new->key_length_cb = key_length_cb; + new->key_cmp_cb = key_cmp_cb; + new->key_hash_cb = key_hash_cb; + new->data_free_cb = data_free_cb; + new->buckets = NULL; + new->population = 0; + + new->size = 1 << buckets_power_size; + new->mask = new->size - 1; + + return new; + +on_error: + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; +} + +EAPI Eina_Hash * +eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), + EINA_KEY_CMP(_eina_string_key_cmp), + EINA_KEY_HASH(eina_hash_djb2), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +} + +EAPI Eina_Hash * +eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), + EINA_KEY_CMP(_eina_string_key_cmp), + EINA_KEY_HASH(eina_hash_superfast), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +} + +EAPI Eina_Hash * +eina_hash_string_small_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), + EINA_KEY_CMP(_eina_string_key_cmp), + EINA_KEY_HASH(eina_hash_superfast), + data_free_cb, + EINA_HASH_SMALL_BUCKET_SIZE); +} + +EAPI Eina_Hash * +eina_hash_int32_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length), + EINA_KEY_CMP(_eina_int32_key_cmp), + EINA_KEY_HASH(eina_hash_int32), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +} + +EAPI Eina_Hash * +eina_hash_int64_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length), + EINA_KEY_CMP(_eina_int64_key_cmp), + EINA_KEY_HASH(eina_hash_int64), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +} + +EAPI Eina_Hash * +eina_hash_pointer_new(Eina_Free_Cb data_free_cb) +{ +#ifdef __LP64__ + return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length), + EINA_KEY_CMP(_eina_int64_key_cmp), + EINA_KEY_HASH(eina_hash_int64), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +#else + return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length), + EINA_KEY_CMP(_eina_int32_key_cmp), + EINA_KEY_HASH(eina_hash_int32), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +#endif +} + +EAPI Eina_Hash * +eina_hash_stringshared_new(Eina_Free_Cb data_free_cb) +{ + return eina_hash_new(NULL, + EINA_KEY_CMP(_eina_stringshared_key_cmp), + EINA_KEY_HASH(eina_hash_superfast), + data_free_cb, + EINA_HASH_BUCKET_SIZE); +} + +EAPI int +eina_hash_population(const Eina_Hash *hash) +{ + if (!hash) + return 0; + + EINA_MAGIC_CHECK_HASH(hash); + return hash->population; +} + +EAPI void +eina_hash_free(Eina_Hash *hash) +{ + int i; + + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN(hash); + + if (hash->buckets) + { + for (i = 0; i < hash->size; i++) + eina_rbtree_delete(hash->buckets[i], EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash); + free(hash->buckets); + } + free(hash); +} + +EAPI void +eina_hash_free_buckets(Eina_Hash *hash) +{ + int i; + + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN(hash); + + if (hash->buckets) + { + for (i = 0; i < hash->size; i++) + eina_rbtree_delete(hash->buckets[i], + EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash); + free(hash->buckets); + hash->buckets = NULL; + hash->population = 0; + } +} + +EAPI Eina_Bool +eina_hash_add_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) +{ + return eina_hash_add_alloc_by_hash(hash, + key, + key_length, + key_length, + key_hash, + data); +} + +EAPI Eina_Bool +eina_hash_direct_add_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) +{ + return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data); +} + +EAPI Eina_Bool +eina_hash_add(Eina_Hash *hash, const void *key, const void *data) +{ + unsigned int key_length; + int key_hash; + + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + key_hash = hash->key_hash_cb(key, key_length); + + return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data); +} + +EAPI Eina_Bool +eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data) +{ + int key_length; + int key_hash; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + key_hash = hash->key_hash_cb(key, key_length); + + return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data); +} + +EAPI Eina_Bool +eina_hash_del_by_key_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + + return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, NULL); +} + +EAPI Eina_Bool +eina_hash_del_by_key(Eina_Hash *hash, const void *key) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); + + return _eina_hash_del_by_key(hash, key, NULL); +} + +EAPI Eina_Bool +eina_hash_del_by_data(Eina_Hash *hash, const void *data) +{ + Eina_Hash_Element *hash_element; + Eina_Hash_Head *hash_head; + int key_hash; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + hash_element = _eina_hash_find_by_data(hash, data, &key_hash, &hash_head); + if (!hash_element) + goto error; + + if (hash_element->tuple.data != data) + goto error; + + return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash); + +error: + return EINA_FALSE; +} + +EAPI Eina_Bool +eina_hash_del_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) +{ + Eina_Bool ret; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + if (key) + ret = _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); + else + ret = eina_hash_del_by_data(hash, data); + + return ret; +} + +EAPI Eina_Bool +eina_hash_del(Eina_Hash *hash, const void *key, const void *data) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + if (!key) + return eina_hash_del_by_data(hash, data); + + return _eina_hash_del_by_key(hash, key, data); +} + +EAPI void * +eina_hash_find_by_hash(const Eina_Hash *hash, + const void *key, + int key_length, + int key_hash) +{ + Eina_Hash_Head *hash_head; + Eina_Hash_Element *hash_element; + Eina_Hash_Tuple tuple; + + if (!hash) + return NULL; + + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + tuple.key = key; + tuple.key_length = key_length; + tuple.data = NULL; + + hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); + if (hash_element) + return hash_element->tuple.data; + + return NULL; +} + +EAPI void * +eina_hash_find(const Eina_Hash *hash, const void *key) +{ + int key_length; + int hash_num; + + if (!hash) + return NULL; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + hash_num = hash->key_hash_cb(key, key_length); + + return eina_hash_find_by_hash(hash, key, key_length, hash_num); +} + +EAPI void * +eina_hash_modify_by_hash(Eina_Hash *hash, + const void *key, + int key_length, + int key_hash, + const void *data) +{ + Eina_Hash_Head *hash_head; + Eina_Hash_Element *hash_element; + void *old_data = NULL; + Eina_Hash_Tuple tuple; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + tuple.key = key; + tuple.key_length = key_length; + tuple.data = NULL; + + hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); + if (hash_element) + { + old_data = hash_element->tuple.data; + hash_element->tuple.data = (void *)data; + } + + return old_data; +} + +EAPI void * +eina_hash_set(Eina_Hash *hash, const void *key, const void *data) +{ + Eina_Hash_Tuple tuple; + Eina_Hash_Head *hash_head; + Eina_Hash_Element *hash_element; + int key_length; + int key_hash; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + key_hash = hash->key_hash_cb(key, key_length); + + tuple.key = key; + tuple.key_length = key_length; + tuple.data = NULL; + + hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); + if (hash_element) + { + void *old_data = NULL; + + old_data = hash_element->tuple.data; + + if (data) + { + hash_element->tuple.data = (void *)data; + } + else + { + _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash); + } + + return old_data; + } + + if (!data) return NULL; + + eina_hash_add_alloc_by_hash(hash, + key, + key_length, + key_length, + key_hash, + data); + return NULL; +} +EAPI void * +eina_hash_modify(Eina_Hash *hash, const void *key, const void *data) +{ + int key_length; + int hash_num; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; + hash_num = hash->key_hash_cb(key, key_length); + + return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data); +} + +EAPI Eina_Bool +eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key) +{ + Eina_Free_Cb hash_free_cb; + const void *data; + Eina_Bool result = EINA_FALSE; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(old_key, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(new_key, EINA_FALSE); + EINA_MAGIC_CHECK_HASH(hash); + + data = eina_hash_find(hash, old_key); + if (!data) goto error; + + hash_free_cb = hash->data_free_cb; + hash->data_free_cb = NULL; + + eina_hash_del(hash, old_key, data); + result = eina_hash_add(hash, new_key, data); + + hash->data_free_cb = hash_free_cb; + +error: + return result; +} + +/*============================================================================* +* Iterator * +*============================================================================*/ + +EAPI void +eina_hash_foreach(const Eina_Hash *hash, + Eina_Hash_Foreach func, + const void *fdata) +{ + Eina_Iterator *it; + Eina_Hash_Foreach_Data foreach; + + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN(hash); + EINA_SAFETY_ON_NULL_RETURN(func); + + foreach.cb = func; + foreach.fdata = fdata; + + it = eina_hash_iterator_tuple_new(hash); + if (!it) + return; + eina_iterator_foreach(it, EINA_EACH_CB(_eina_foreach_cb), &foreach); + + eina_iterator_free(it); +} + +EAPI Eina_Iterator * +eina_hash_iterator_data_new(const Eina_Hash *hash) +{ + Eina_Iterator_Hash *it; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Hash)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + it->hash = hash; + it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_hash_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); + + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_hash_iterator_key_new(const Eina_Hash *hash) +{ + Eina_Iterator_Hash *it; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Hash)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + it->hash = hash; + it->get_content = FUNC_ITERATOR_GET_CONTENT( + _eina_hash_iterator_key_get_content); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_hash_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); + + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_hash_iterator_tuple_new(const Eina_Hash *hash) +{ + Eina_Iterator_Hash *it; + + EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); + EINA_MAGIC_CHECK_HASH(hash); + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Hash)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + it->hash = hash; + it->get_content = FUNC_ITERATOR_GET_CONTENT( + _eina_hash_iterator_tuple_get_content); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_hash_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); + + return &it->iterator; +} + +/* Common hash functions */ + +/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) + used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */ +EAPI int +eina_hash_superfast(const char *key, int len) +{ + int hash = len, tmp; + int rem; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (; len > 0; len--) + { + hash += get16bits(key); + tmp = (get16bits(key + 2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + key += 2 * sizeof (uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) + { + case 3: + hash += get16bits(key); + hash ^= hash << 16; + hash ^= key[sizeof (uint16_t)] << 18; + hash += hash >> 11; + break; + + case 2: + hash += get16bits(key); + hash ^= hash << 11; + hash += hash >> 17; + break; + + case 1: + hash += *key; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash; +} diff --git a/libraries/eina/src/lib/eina_inlist.c b/libraries/eina/src/lib/eina_inlist.c new file mode 100644 index 0000000..75a2cc1 --- /dev/null +++ b/libraries/eina/src/lib/eina_inlist.c @@ -0,0 +1,909 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_inlist.h" + +/* FIXME: TODO please, refactor this :) */ + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_INLIST_SORT_STACK_SIZE 32 + +typedef struct _Eina_Iterator_Inlist Eina_Iterator_Inlist; +typedef struct _Eina_Accessor_Inlist Eina_Accessor_Inlist; + +struct _Eina_Iterator_Inlist +{ + Eina_Iterator iterator; + const Eina_Inlist *head; + const Eina_Inlist *current; +}; + +struct _Eina_Accessor_Inlist +{ + Eina_Accessor accessor; + + const Eina_Inlist *head; + const Eina_Inlist *current; + + unsigned int index; +}; + +struct _Eina_Inlist_Sorted_State +{ + Eina_Inlist *jump_table[EINA_INLIST_JUMP_SIZE]; + + unsigned short jump_limit; + int jump_div; + + int inserted; +}; + +static Eina_Bool +eina_inlist_iterator_next(Eina_Iterator_Inlist *it, void **data) { + if (!it->current) + return EINA_FALSE; + + if (data) + *data = (void *)it->current; + + it->current = it->current->next; + + return EINA_TRUE; +} + +static Eina_Inlist * +eina_inlist_iterator_get_container(Eina_Iterator_Inlist *it) { + return (Eina_Inlist *)it->head; +} + +static void +eina_inlist_iterator_free(Eina_Iterator_Inlist *it) { + free(it); +} + +static Eina_Bool +eina_inlist_accessor_get_at(Eina_Accessor_Inlist *it, + unsigned int idx, + void **data) { + const Eina_Inlist *over; + unsigned int middle; + unsigned int i; + + if (it->index == idx) + over = it->current; + else if (idx > it->index) + /* Looking after current. */ + for (i = it->index, over = it->current; + i < idx && over; + ++i, over = over->next) + ; + else + { + middle = it->index >> 1; + + if (idx > middle) + /* Looking backward from current. */ + for (i = it->index, over = it->current; + i > idx && over; + --i, over = over->prev) + ; + else + /* Looking from the start. */ + for (i = 0, over = it->head; + i < idx && over; + ++i, over = over->next) + ; + } + + if (!over) + return EINA_FALSE; + + it->current = over; + it->index = idx; + + if (data) + *data = (void *)over; + + return EINA_TRUE; +} + +static Eina_Inlist * +eina_inlist_accessor_get_container(Eina_Accessor_Inlist *it) { + return (Eina_Inlist *)it->head; +} + +static void +eina_inlist_accessor_free(Eina_Accessor_Inlist *it) { + free(it); +} + +static Eina_Inlist * +eina_inlist_sort_merge(Eina_Inlist *a, Eina_Inlist *b, Eina_Compare_Cb func) +{ + Eina_Inlist *first, *last; + + if (func(a, b) < 0) + a = (last = first = a)->next; + else + b = (last = first = b)->next; + + while (a && b) + if (func(a, b) < 0) + a = (last = last->next = a)->next; + else + b = (last = last->next = b)->next; + + last->next = a ? a : b; + + return first; +} + +static Eina_Inlist * +eina_inlist_sort_rebuild_prev(Eina_Inlist *list) +{ + Eina_Inlist *prev = NULL; + + for (; list; list = list->next) + { + list->prev = prev; + prev = list; + } + + return prev; +} + +static void +_eina_inlist_sorted_state_compact(Eina_Inlist_Sorted_State *state) +{ + unsigned short i, j; + + /* compress the jump table */ + state->jump_div *= 2; + state->jump_limit /= 2; + + for (i = 2, j = 1; + i < EINA_INLIST_JUMP_SIZE; + i += 2, j++) + state->jump_table[j] = state->jump_table[i]; +} + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Inlist * +eina_inlist_append(Eina_Inlist *list, Eina_Inlist *new_l) +{ + Eina_Inlist *l; + + EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); + + new_l->next = NULL; + if (!list) + { + new_l->prev = NULL; + new_l->last = new_l; + return new_l; + } + + if (list->last) + l = list->last; + else + for (l = list; (l) && (l->next); l = l->next) + ; + + l->next = new_l; + new_l->prev = l; + list->last = new_l; + return list; +} + +EAPI Eina_Inlist * +eina_inlist_prepend(Eina_Inlist *list, Eina_Inlist *new_l) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); + + new_l->prev = NULL; + if (!list) + { + new_l->next = NULL; + new_l->last = new_l; + return new_l; + } + + new_l->next = list; + list->prev = new_l; + new_l->last = list->last; + list->last = NULL; + return new_l; +} + +EAPI Eina_Inlist * +eina_inlist_append_relative(Eina_Inlist *list, + Eina_Inlist *new_l, + Eina_Inlist *relative) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); + + if (relative) + { + if (relative->next) + { + new_l->next = relative->next; + relative->next->prev = new_l; + } + else + new_l->next = NULL; + + relative->next = new_l; + new_l->prev = relative; + if (!new_l->next) + list->last = new_l; + + return list; + } + + return eina_inlist_append(list, new_l); +} + +EAPI Eina_Inlist * +eina_inlist_prepend_relative(Eina_Inlist *list, + Eina_Inlist *new_l, + Eina_Inlist *relative) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); + + if (relative) + { + new_l->prev = relative->prev; + new_l->next = relative; + relative->prev = new_l; + if (new_l->prev) + { + new_l->prev->next = new_l; + /* new_l->next could not be NULL, as it was set to 'relative' */ + assert(new_l->next); + return list; + } + else + { + /* new_l->next could not be NULL, as it was set to 'relative' */ + assert(new_l->next); + + new_l->last = list->last; + list->last = NULL; + return new_l; + } + } + + return eina_inlist_prepend(list, new_l); +} + +EAPI Eina_Inlist * +eina_inlist_remove(Eina_Inlist *list, Eina_Inlist *item) +{ + Eina_Inlist *return_l; + + /* checkme */ + EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); + if (EINA_UNLIKELY((item != list) && (!item->prev) && (!item->next))) + { + eina_error_set(EINA_ERROR_SAFETY_FAILED); + EINA_LOG_ERR("safety check failed: item %p does not appear to be part of an inlist!", item); + return list; + } + + if (item->next) + item->next->prev = item->prev; + + if (item->prev) + { + item->prev->next = item->next; + return_l = list; + } + else + { + return_l = item->next; + if (return_l) + return_l->last = list->last; + } + + if (item == list->last) + list->last = item->prev; + + item->next = NULL; + item->prev = NULL; + return return_l; +} + +EAPI Eina_Inlist * +eina_inlist_promote(Eina_Inlist *list, Eina_Inlist *item) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); + + if (item == list) + return list; + + if (item->next) + item->next->prev = item->prev; + + item->prev->next = item->next; + + if (list->last == item) + list->last = item->prev; + + item->next = list; + item->prev = NULL; + item->last = list->last; + + list->prev = item; + list->last = NULL; + + return item; +} + +EAPI Eina_Inlist * +eina_inlist_demote(Eina_Inlist *list, Eina_Inlist *item) +{ + Eina_Inlist *l; + + EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); + + if (list->last == item) + return list; + + if (!list->last) + { + for (l = list; l->next; l = l->next) + ; + list->last = l; + } + + l = list; + if (item->prev) + item->prev->next = item->next; + else + l = item->next; + + item->next->prev = item->prev; + + list->last->next = item; + item->prev = list->last; + item->next = NULL; + + l->last = item; + return l; +} + +EAPI Eina_Inlist * +eina_inlist_find(Eina_Inlist *list, Eina_Inlist *item) +{ + Eina_Inlist *l; + + for (l = list; l; l = l->next) { + if (l == item) + return item; + } + return NULL; +} + +EAPI unsigned int +eina_inlist_count(const Eina_Inlist *list) +{ + const Eina_Inlist *l; + unsigned int i = 0; + + for (l = list; l; l = l->next) + i++; + + return i; +} + +EAPI int +eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list) +{ + Eina_Inlist *ct = NULL; + int count = 0; + int jump_count = 1; + + /* + * prepare a jump table to avoid doing unnecessary rewalk + * of the inlist as much as possible. + */ + for (ct = list; ct; ct = ct->next, jump_count++, count++) + { + if (jump_count == state->jump_div) + { + if (state->jump_limit == EINA_INLIST_JUMP_SIZE) + { + _eina_inlist_sorted_state_compact(state); + } + + state->jump_table[state->jump_limit] = ct; + state->jump_limit++; + jump_count = 0; + } + } + + state->inserted = count; + return count; +} + +EAPI Eina_Inlist_Sorted_State * +eina_inlist_sorted_state_new(void) +{ + Eina_Inlist_Sorted_State *r; + + r = calloc(1, sizeof (Eina_Inlist_Sorted_State)); + if (!r) return NULL; + + r->jump_div = 1; + + return r; +} + +EAPI void +eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state) +{ + free(state); +} + +static void +_eina_inlist_sorted_state_insert(Eina_Inlist_Sorted_State *state, + unsigned short idx, + int offset) +{ + Eina_Inlist *last; + int jump_count; + int start; + + state->inserted++; + + if (offset != 0) idx++; + for (; idx < state->jump_limit; idx++) + { + state->jump_table[idx] = state->jump_table[idx]->prev; + } + + start = state->jump_limit - 3; + if (start < 0) + start = 0; + + last = state->jump_table[start]; + start++; + + /* Correctly rebuild end of list */ + for (jump_count = 0; last->next != NULL; last = last->next, jump_count++) + { + if (jump_count == state->jump_div) + { + if (state->jump_limit == start) + { + if (state->jump_limit == EINA_INLIST_JUMP_SIZE) + { + _eina_inlist_sorted_state_compact(state); + start = state->jump_limit - 1; + continue ; + } + else + { + state->jump_limit++; + } + } + + state->jump_table[start++] = last; + jump_count = 0; + } + } +} + +EAPI Eina_Inlist * +eina_inlist_sorted_insert(Eina_Inlist *list, + Eina_Inlist *item, + Eina_Compare_Cb func) +{ + Eina_Inlist *ct = NULL; + Eina_Inlist_Sorted_State state; + int cmp = 0; + int inf, sup; + int cur = 0; + int count; + + if (!list) return eina_inlist_append(NULL, item); + + if (!list->next) + { + cmp = func(list, item); + + if (cmp < 0) + return eina_inlist_append(list, item); + return eina_inlist_prepend(list, item); + } + + state.jump_div = 1; + state.jump_limit = 0; + count = eina_inlist_sorted_state_init(&state, list); + + /* + * now do a dychotomic search directly inside the jump_table. + */ + inf = 0; + sup = state.jump_limit - 1; + cur = 0; + ct = state.jump_table[cur]; + cmp = func(ct, item); + + while (inf <= sup) + { + cur = inf + ((sup - inf) >> 1); + ct = state.jump_table[cur]; + + cmp = func(ct, item); + if (cmp == 0) + break ; + else if (cmp < 0) + inf = cur + 1; + else if (cmp > 0) + { + if (cur > 0) + sup = cur - 1; + else + break; + } + else + break; + } + + /* If at the beginning of the table and cmp < 0, + * insert just after the head */ + if (cur == 0 && cmp > 0) + return eina_inlist_prepend_relative(list, item, ct); + + /* If at the end of the table and cmp >= 0, + * just append the item to the list */ + if (cmp < 0 && ct == list->last) + return eina_inlist_append(list, item); + + /* + * Now do a dychotomic search between two entries inside the jump_table + */ + cur *= state.jump_div; + inf = cur - state.jump_div - 1; + sup = cur + state.jump_div + 1; + + if (sup > count - 1) sup = count - 1; + if (inf < 0) inf = 0; + + while (inf <= sup) + { + int tmp = cur; + + cur = inf + ((sup - inf) >> 1); + if (tmp < cur) + for (; tmp != cur; tmp++, ct = ct->next); + else if (tmp > cur) + for (; tmp != cur; tmp--, ct = ct->prev); + + cmp = func(ct, item); + if (cmp == 0) + break ; + else if (cmp < 0) + inf = cur + 1; + else if (cmp > 0) + { + if (cur > 0) + sup = cur - 1; + else + break; + } + else + break; + } + + if (cmp <= 0) + return eina_inlist_append_relative(list, item, ct); + return eina_inlist_prepend_relative(list, item, ct); +} + +EAPI Eina_Inlist * +eina_inlist_sorted_state_insert(Eina_Inlist *list, + Eina_Inlist *item, + Eina_Compare_Cb func, + Eina_Inlist_Sorted_State *state) +{ + Eina_Inlist *ct = NULL; + int cmp = 0; + int inf, sup; + int cur = 0; + int count; + unsigned short head; + unsigned int offset; + + if (!list) + { + state->inserted = 1; + state->jump_limit = 1; + state->jump_table[0] = item; + return eina_inlist_append(NULL, item); + } + + if (!list->next) + { + cmp = func(list, item); + + state->jump_limit = 2; + state->inserted = 2; + + if (cmp < 0) + { + state->jump_table[1] = item; + return eina_inlist_append(list, item); + } + state->jump_table[1] = state->jump_table[0]; + state->jump_table[0] = item; + return eina_inlist_prepend(list, item); + } + + count = state->inserted; + + /* + * now do a dychotomic search directly inside the jump_table. + */ + inf = 0; + sup = state->jump_limit - 1; + cur = 0; + ct = state->jump_table[cur]; + cmp = func(ct, item); + + while (inf <= sup) + { + cur = inf + ((sup - inf) >> 1); + ct = state->jump_table[cur]; + + cmp = func(ct, item); + if (cmp == 0) + break ; + else if (cmp < 0) + inf = cur + 1; + else if (cmp > 0) + { + if (cur > 0) + sup = cur - 1; + else + break; + } + else + break; + } + + /* If at the beginning of the table and cmp < 0, + * insert just after the head */ + if (cur == 0 && cmp > 0) + { + ct = eina_inlist_prepend_relative(list, item, ct); + _eina_inlist_sorted_state_insert(state, 0, 0); + return ct; + } + + /* If at the end of the table and cmp >= 0, + * just append the item to the list */ + if (cmp < 0 && ct == list->last) + { + ct = eina_inlist_append(list, item); + _eina_inlist_sorted_state_insert(state, state->jump_limit - 1, 1); + return ct; + } + + /* + * Now do a dychotomic search between two entries inside the jump_table + */ + cur *= state->jump_div; + inf = cur - state->jump_div - 1; + sup = cur + state->jump_div + 1; + + if (sup > count - 1) sup = count - 1; + if (inf < 0) inf = 0; + + while (inf <= sup) + { + int tmp = cur; + + cur = inf + ((sup - inf) >> 1); + if (tmp < cur) + for (; tmp != cur; tmp++, ct = ct->next); + else if (tmp > cur) + for (; tmp != cur; tmp--, ct = ct->prev); + + cmp = func(ct, item); + if (cmp == 0) + break ; + else if (cmp < 0) + inf = cur + 1; + else if (cmp > 0) + { + if (cur > 0) + sup = cur - 1; + else + break; + } + else + break; + } + + if (cmp <= 0) + { + cur++; + + ct = eina_inlist_append_relative(list, item, ct); + } + else + { + ct = eina_inlist_prepend_relative(list, item, ct); + } + + head = cur / state->jump_div; + offset = cur % state->jump_div; + + _eina_inlist_sorted_state_insert(state, head, offset); + return ct; +} + +EAPI Eina_Inlist * +eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func) +{ + unsigned int i = 0; + unsigned int n = 0; + Eina_Inlist *tail = head; + Eina_Inlist *unsort = NULL; + Eina_Inlist *stack[EINA_INLIST_SORT_STACK_SIZE]; + + EINA_SAFETY_ON_NULL_RETURN_VAL(head, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(func, head); + + while (tail) + { + unsigned int idx, tmp; + + Eina_Inlist *a = tail; + Eina_Inlist *b = tail->next; + + if (!b) + { + stack[i++] = a; + break; + } + + tail = b->next; + + if (func(a, b) < 0) + ((stack[i++] = a)->next = b)->next = 0; + else + ((stack[i++] = b)->next = a)->next = 0; + + tmp = n++; + for (idx = n ^ tmp; idx &= idx - 1; i--) + stack[i - 2] = eina_inlist_sort_merge(stack[i - 2], stack[i - 1], func); + } + + while (i-- > 1) + stack[i - 1] = eina_inlist_sort_merge(stack[i - 1], stack[i], func); + + head = stack[0]; + tail = eina_inlist_sort_rebuild_prev(head); + + if (unsort) + { + tail->next = unsort; + unsort->prev = tail; + } + + head->last = tail; + + return head; + +} + +EAPI Eina_Iterator * +eina_inlist_iterator_new(const Eina_Inlist *list) +{ + Eina_Iterator_Inlist *it; + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Inlist)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + it->head = list; + it->current = list; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(eina_inlist_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + eina_inlist_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(eina_inlist_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + return &it->iterator; +} + +EAPI Eina_Accessor * +eina_inlist_accessor_new(const Eina_Inlist *list) +{ + Eina_Accessor_Inlist *ac; + + eina_error_set(0); + ac = calloc(1, sizeof (Eina_Accessor_Inlist)); + if (!ac) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + ac->head = list; + ac->current = list; + ac->index = 0; + + ac->accessor.version = EINA_ACCESSOR_VERSION; + ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_inlist_accessor_get_at); + ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER( + eina_inlist_accessor_get_container); + ac->accessor.free = FUNC_ACCESSOR_FREE(eina_inlist_accessor_free); + + EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); + + return &ac->accessor; +} diff --git a/libraries/eina/src/lib/eina_iterator.c b/libraries/eina/src/lib/eina_iterator.c new file mode 100644 index 0000000..0721066 --- /dev/null +++ b/libraries/eina/src/lib/eina_iterator.c @@ -0,0 +1,172 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_config.h" +#include "eina_private.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_iterator.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_MAGIC_ITERATOR_STR[] = "Eina Iterator"; + +#define EINA_MAGIC_CHECK_ITERATOR(d) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ITERATOR)) { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ITERATOR); } \ + } while(0) + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the iterator module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the iterator module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_iterator_init(void) +{ + return eina_magic_string_set(EINA_MAGIC_ITERATOR, EINA_MAGIC_ITERATOR_STR); +} + +/** + * @internal + * @brief Shut down the iterator module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the iterator module set up by + * eina_iterator_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_iterator_shutdown(void) +{ + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI void +eina_iterator_free(Eina_Iterator *iterator) +{ + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN(iterator); + EINA_SAFETY_ON_NULL_RETURN(iterator->free); + iterator->free(iterator); +} + +EAPI void * +eina_iterator_container_get(Eina_Iterator *iterator) +{ + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->get_container, NULL); + return iterator->get_container(iterator); +} + +EAPI Eina_Bool +eina_iterator_next(Eina_Iterator *iterator, void **data) +{ + if (!iterator) + return EINA_FALSE; + + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->next, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + return iterator->next(iterator, data); +} + +EAPI void +eina_iterator_foreach(Eina_Iterator *iterator, + Eina_Each_Cb cb, + const void *fdata) +{ + const void *container; + void *data; + + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN(iterator); + EINA_SAFETY_ON_NULL_RETURN(iterator->get_container); + EINA_SAFETY_ON_NULL_RETURN(iterator->next); + EINA_SAFETY_ON_NULL_RETURN(cb); + + if (!eina_iterator_lock(iterator)) return ; + + container = iterator->get_container(iterator); + while (iterator->next(iterator, &data) == EINA_TRUE) { + if (cb(container, data, (void *)fdata) != EINA_TRUE) + goto on_exit; + } + + on_exit: + (void) eina_iterator_unlock(iterator); +} + +EAPI Eina_Bool +eina_iterator_lock(Eina_Iterator *iterator) +{ + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); + + if (iterator->lock) + return iterator->lock(iterator); + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_iterator_unlock(Eina_Iterator *iterator) +{ + EINA_MAGIC_CHECK_ITERATOR(iterator); + EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); + + if (iterator->unlock) + return iterator->unlock(iterator); + return EINA_TRUE; +} diff --git a/libraries/eina/src/lib/eina_lalloc.c b/libraries/eina/src/lib/eina_lalloc.c new file mode 100644 index 0000000..b1e62b7 --- /dev/null +++ b/libraries/eina/src/lib/eina_lalloc.c @@ -0,0 +1,158 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_config.h" +#include "eina_private.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_lalloc.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +struct _Eina_Lalloc +{ + void *data; + int num_allocated; + int num_elements; + int acc; + Eina_Lalloc_Alloc alloc_cb; + Eina_Lalloc_Free free_cb; +}; + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @addtogroup Eina_Lalloc_Group Lazy allocator + * + * @{ + */ + +EAPI Eina_Lalloc *eina_lalloc_new(void *data, + Eina_Lalloc_Alloc alloc_cb, + Eina_Lalloc_Free free_cb, + int num_init) +{ + Eina_Lalloc *a; + + EINA_SAFETY_ON_NULL_RETURN_VAL(alloc_cb, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(free_cb, NULL); + + a = calloc(1, sizeof(Eina_Lalloc)); + a->data = data; + a->alloc_cb = alloc_cb; + a->free_cb = free_cb; + if (num_init > 0) + { + a->num_allocated = num_init; + a->alloc_cb(a->data, a->num_allocated); + } + + return a; +} + +EAPI void eina_lalloc_free(Eina_Lalloc *a) +{ + EINA_SAFETY_ON_NULL_RETURN(a); + EINA_SAFETY_ON_NULL_RETURN(a->free_cb); + a->free_cb(a->data); + free(a); +} + +EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE); + + if (a->num_elements == a->num_allocated) + { + if (a->alloc_cb(a->data, (1 << a->acc)) == EINA_TRUE) + { + a->num_allocated = (1 << a->acc); + a->acc++; + } + else + return EINA_FALSE; + } + + a->num_elements++; + + return EINA_TRUE; +} + +EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a, int num) +{ + int tmp; + + EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE); + + tmp = a->num_elements + num; + if (tmp > a->num_allocated) + { + int allocated; + int acc; + + allocated = a->num_allocated; + acc = a->acc; + + while (tmp > allocated) + { + allocated = (1 << acc); + acc++; + } + + if (a->alloc_cb(a->data, allocated) == EINA_TRUE) + { + a->num_allocated = allocated; + a->acc = acc; + } + else + return EINA_FALSE; + } + + a->num_elements += num; + + return EINA_TRUE; +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_list.c b/libraries/eina/src/lib/eina_list.c new file mode 100644 index 0000000..d45cffd --- /dev/null +++ b/libraries/eina/src/lib/eina_list.c @@ -0,0 +1,1490 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, Tilman Sauerbeck, + * Vincent Torri, Cedric Bail, Jorge Luis Zapata Muga, + * Corey Donohoe, Arnaud de Turckheim, Alexandre Becoulet + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2004 ncn + * Copyright (C) 2006 Sebastian Dransfeld + * Copyright (C) 2007 Christopher Michael + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_mempool.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_list.h" + + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_MAGIC_LIST_STR[] = "Eina List"; +static const char EINA_MAGIC_LIST_ITERATOR_STR[] = "Eina List Iterator"; +static const char EINA_MAGIC_LIST_ACCESSOR_STR[] = "Eina List Accessor"; +static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = "Eina List Accounting"; + + +#define EINA_MAGIC_CHECK_LIST(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_LIST_ITERATOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ITERATOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ITERATOR); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_LIST_ACCESSOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCESSOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCESSOR); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING); \ + return; \ + } \ + } while(0) + +#define EINA_LIST_SORT_STACK_SIZE 32 + +typedef struct _Eina_Iterator_List Eina_Iterator_List; +typedef struct _Eina_Accessor_List Eina_Accessor_List; + +struct _Eina_Iterator_List +{ + Eina_Iterator iterator; + + const Eina_List *head; + const Eina_List *current; + + EINA_MAGIC +}; + +struct _Eina_Accessor_List +{ + Eina_Accessor accessor; + + const Eina_List *head; + const Eina_List *current; + + unsigned int index; + + EINA_MAGIC +}; + +static Eina_Mempool *_eina_list_mp = NULL; +static Eina_Mempool *_eina_list_accounting_mp = NULL; +static int _eina_list_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_list_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_list_log_dom, __VA_ARGS__) + +static inline Eina_List_Accounting * +_eina_list_mempool_accounting_new(__UNUSED__ Eina_List *list) +{ + Eina_List_Accounting *tmp; + + tmp = + eina_mempool_malloc(_eina_list_accounting_mp, + sizeof (Eina_List_Accounting)); + if (!tmp) + return NULL; + + EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST_ACCOUNTING); + + return tmp; +} +static inline void +_eina_list_mempool_accounting_free(Eina_List_Accounting *accounting) +{ + EINA_MAGIC_CHECK_LIST_ACCOUNTING(accounting); + + EINA_MAGIC_SET(accounting, EINA_MAGIC_NONE); + eina_mempool_free(_eina_list_accounting_mp, accounting); +} + +static inline Eina_List * +_eina_list_mempool_list_new(__UNUSED__ Eina_List *list) +{ + Eina_List *tmp; + + tmp = eina_mempool_malloc(_eina_list_mp, sizeof (Eina_List)); + if (!tmp) + return NULL; + + EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST); + + return tmp; +} +static inline void +_eina_list_mempool_list_free(Eina_List *list) +{ + EINA_MAGIC_CHECK_LIST(list); + + list->accounting->count--; + if (list->accounting->count == 0) + _eina_list_mempool_accounting_free(list->accounting); + + EINA_MAGIC_SET(list, EINA_MAGIC_NONE); + eina_mempool_free(_eina_list_mp, list); +} + +static Eina_List * +_eina_list_setup_accounting(Eina_List *list) +{ + EINA_MAGIC_CHECK_LIST(list, NULL); + + list->accounting = _eina_list_mempool_accounting_new(list); + if (!list->accounting) + goto on_error; + + list->accounting->last = list; + list->accounting->count = 1; + + return list; + +on_error: + _eina_list_mempool_list_free(list); + return NULL; +} + +static inline void +_eina_list_update_accounting(Eina_List *list, Eina_List *new_list) +{ + EINA_MAGIC_CHECK_LIST(list); + EINA_MAGIC_CHECK_LIST(new_list); + + list->accounting->count++; + new_list->accounting = list->accounting; +} + +#if 0 +static Eina_Mempool2 _eina_list_mempool = +{ + sizeof(Eina_List), + 320, + 0, NULL, NULL +}; +static Eina_Mempool2 _eina_list_accounting_mempool = +{ + sizeof(Eina_List_Accounting), + 80, + 0, NULL, NULL +}; +#endif + +static Eina_Bool +eina_list_iterator_next(Eina_Iterator_List *it, void **data) +{ + EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE); + + if (!it->current) + return EINA_FALSE; + + *data = eina_list_data_get(it->current); + + it->current = eina_list_next(it->current); + + return EINA_TRUE; +} + +static Eina_Bool +eina_list_iterator_prev(Eina_Iterator_List *it, void **data) +{ + EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE); + + if (!it->current) + return EINA_FALSE; + + *data = eina_list_data_get(it->current); + + it->current = eina_list_prev(it->current); + + return EINA_TRUE; +} + +static Eina_List * +eina_list_iterator_get_container(Eina_Iterator_List *it) +{ + EINA_MAGIC_CHECK_LIST_ITERATOR(it, NULL); + + return (Eina_List *)it->head; +} + +static void +eina_list_iterator_free(Eina_Iterator_List *it) +{ + EINA_MAGIC_CHECK_LIST_ITERATOR(it); + + MAGIC_FREE(it); +} + +static Eina_Bool +eina_list_accessor_get_at(Eina_Accessor_List *it, unsigned int idx, void **data) +{ + const Eina_List *over; + unsigned int middle; + unsigned int i; + + EINA_MAGIC_CHECK_LIST_ACCESSOR(it, EINA_FALSE); + + if (idx >= eina_list_count(it->head)) + return EINA_FALSE; + + if (it->index == idx) + over = it->current; + else if (idx > it->index) + { + /* After current position. */ + middle = ((eina_list_count(it->head) - it->index) >> 1) + it->index; + + if (idx > middle) + /* Go backward from the end. */ + for (i = eina_list_count(it->head) - 1, + over = eina_list_last(it->head); + i > idx && over; + --i, over = eina_list_prev(over)) + ; + else + /* Go forward from current. */ + for (i = it->index, over = it->current; + i < idx && over; + ++i, over = eina_list_next(over)) + ; + } + else + { + /* Before current position. */ + middle = it->index >> 1; + + if (idx > middle) + /* Go backward from current. */ + for (i = it->index, over = it->current; + i > idx && over; + --i, over = eina_list_prev(over)) + ; + else + /* Go forward from start. */ + for (i = 0, over = it->head; + i < idx && over; + ++i, over = eina_list_next(over)) + ; + } + + if (!over) + return EINA_FALSE; + + it->current = over; + it->index = idx; + + *data = eina_list_data_get(it->current); + return EINA_TRUE; +} + +static Eina_List * +eina_list_accessor_get_container(Eina_Accessor_List *it) +{ + EINA_MAGIC_CHECK_LIST_ACCESSOR(it, NULL); + + return (Eina_List *)it->head; +} + +static void +eina_list_accessor_free(Eina_Accessor_List *it) +{ + EINA_MAGIC_CHECK_LIST_ACCESSOR(it); + + MAGIC_FREE(it); +} + +static Eina_List * +eina_list_sort_rebuild_prev(Eina_List *list) +{ + Eina_List *prev = NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + for (; list; list = list->next) + { + list->prev = prev; + prev = list; + } + + return prev; +} + +static Eina_List * +eina_list_sort_merge(Eina_List *a, Eina_List *b, Eina_Compare_Cb func) +{ + Eina_List *first, *last; + + if (func(a->data, b->data) < 0) + a = (last = first = a)->next; + else + b = (last = first = b)->next; + + while (a && b) + if (func(a->data, b->data) < 0) + a = (last = last->next = a)->next; + else + b = (last = last->next = b)->next; + + last->next = a ? a : b; + + return first; +} + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + +/** + * @internal + * @brief Initialize the list module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the list module of Eina. It is called by + * eina_init(). + * + * This function creates mempool to speed up list node and accounting + * management, using EINA_MEMPOOL environment variable if it is set to + * choose the memory pool type to use. + * + * @see eina_init() + */ +Eina_Bool +eina_list_init(void) +{ + const char *choice, *tmp; + + _eina_list_log_dom = eina_log_domain_register("eina_list", + EINA_LOG_COLOR_DEFAULT); + if (_eina_list_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_list"); + return EINA_FALSE; + } + +#ifdef EINA_DEFAULT_MEMPOOL + choice = "pass_through"; +#else + choice = "chained_mempool"; +#endif + tmp = getenv("EINA_MEMPOOL"); + if (tmp && tmp[0]) + choice = tmp; + + _eina_list_mp = eina_mempool_add + (choice, "list", NULL, sizeof(Eina_List), 320); + if (!_eina_list_mp) + { + ERR("ERROR: Mempool for list cannot be allocated in list init."); + goto on_init_fail; + } + + _eina_list_accounting_mp = eina_mempool_add + (choice, "list_accounting", NULL, sizeof(Eina_List_Accounting), 80); + if (!_eina_list_accounting_mp) + { + ERR( + "ERROR: Mempool for list accounting cannot be allocated in list init."); + eina_mempool_del(_eina_list_mp); + goto on_init_fail; + } + +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_LIST); + EMS(EINA_MAGIC_LIST_ITERATOR); + EMS(EINA_MAGIC_LIST_ACCESSOR); + EMS(EINA_MAGIC_LIST_ACCOUNTING); +#undef EMS + + return EINA_TRUE; + +on_init_fail: + eina_log_domain_unregister(_eina_list_log_dom); + _eina_list_log_dom = -1; + return EINA_FALSE; +} + +/** + * @internal + * @brief Shut down the list module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the list module set up by + * eina_list_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_list_shutdown(void) +{ + eina_mempool_del(_eina_list_accounting_mp); + eina_mempool_del(_eina_list_mp); + + eina_log_domain_unregister(_eina_list_log_dom); + _eina_list_log_dom = -1; + return EINA_TRUE; +} + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI Eina_List * +eina_list_append(Eina_List *list, const void *data) +{ + Eina_List *l, *new_l; + + eina_error_set(0); + new_l = _eina_list_mempool_list_new(list); + if (!new_l) + return list; + + new_l->next = NULL; + new_l->data = (void *)data; + if (!list) + { + new_l->prev = NULL; + return _eina_list_setup_accounting(new_l); + } + + EINA_MAGIC_CHECK_LIST(list, NULL); + + l = list->accounting->last; + list->accounting->last = new_l; + + l->next = new_l; + new_l->prev = l; + + _eina_list_update_accounting(list, new_l); + return list; +} + +EAPI Eina_List * +eina_list_prepend(Eina_List *list, const void *data) +{ + Eina_List *new_l; + + eina_error_set(0); + new_l = _eina_list_mempool_list_new(list); + if (!new_l) + return list; + + new_l->prev = NULL; + new_l->next = list; + new_l->data = (void *)data; + + if (!list) + return _eina_list_setup_accounting(new_l); + + EINA_MAGIC_CHECK_LIST(list, NULL); + + list->prev = new_l; + + _eina_list_update_accounting(list, new_l); + + return new_l; +} + +EAPI Eina_List * +eina_list_append_relative(Eina_List *list, + const void *data, + const void *relative) +{ + Eina_List *l; + void *list_data; + + if (list) + EINA_MAGIC_CHECK_LIST(list, NULL); + + EINA_LIST_FOREACH(list, l, list_data) + { + if (list_data == relative) + return eina_list_append_relative_list(list, data, l); + } + + return eina_list_append(list, data); +} + +EAPI Eina_List * +eina_list_append_relative_list(Eina_List *list, + const void *data, + Eina_List *relative) +{ + Eina_List *new_l; + + if ((!list) || (!relative)) + return eina_list_append(list, data); + + eina_error_set(0); + new_l = _eina_list_mempool_list_new(list); + if (!new_l) + return list; + + EINA_MAGIC_CHECK_LIST(relative, NULL); + new_l->next = relative->next; + new_l->data = (void *)data; + + if (relative->next) + relative->next->prev = new_l; + + relative->next = new_l; + new_l->prev = relative; + + _eina_list_update_accounting(list, new_l); + + if (!new_l->next) + new_l->accounting->last = new_l; + + return list; +} + +EAPI Eina_List * +eina_list_prepend_relative(Eina_List *list, + const void *data, + const void *relative) +{ + Eina_List *l; + void *list_data; + + if (list) + EINA_MAGIC_CHECK_LIST(list, NULL); + + EINA_LIST_FOREACH(list, l, list_data) + { + if (list_data == relative) + return eina_list_prepend_relative_list(list, data, l); + } + return eina_list_prepend(list, data); +} + +EAPI Eina_List * +eina_list_prepend_relative_list(Eina_List *list, + const void *data, + Eina_List *relative) +{ + Eina_List *new_l; + + if ((!list) || (!relative)) + return eina_list_prepend(list, data); + + eina_error_set(0); + new_l = _eina_list_mempool_list_new(list); + if (!new_l) + return list; + + EINA_MAGIC_CHECK_LIST(relative, NULL); + + new_l->prev = relative->prev; + new_l->next = relative; + new_l->data = (void *)data; + + if (relative->prev) + relative->prev->next = new_l; + + relative->prev = new_l; + + _eina_list_update_accounting(list, new_l); + + if (new_l->prev) + return list; + + return new_l; +} + +EAPI Eina_List * +eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data) +{ + Eina_List *lnear; + int cmp; + + if (!list) + return eina_list_append(NULL, data); + + lnear = eina_list_search_sorted_near_list(list, func, data, &cmp); + if (cmp < 0) + return eina_list_append_relative_list(list, data, lnear); + else + return eina_list_prepend_relative_list(list, data, lnear); +} + +EAPI Eina_List * +eina_list_remove(Eina_List *list, const void *data) +{ + Eina_List *l; + + if (list) + EINA_MAGIC_CHECK_LIST(list, NULL); + + l = eina_list_data_find_list(list, data); + return eina_list_remove_list(list, l); +} + +EAPI Eina_List * +eina_list_remove_list(Eina_List *list, Eina_List *remove_list) +{ + Eina_List *return_l; + + if (!list) + return NULL; + + if (!remove_list) + return list; + + EINA_MAGIC_CHECK_LIST(remove_list, NULL); + + if (remove_list->next) + remove_list->next->prev = remove_list->prev; + + if (remove_list->prev) + { + remove_list->prev->next = remove_list->next; + return_l = list; + } + else + return_l = remove_list->next; + + if (remove_list == remove_list->accounting->last) + { + EINA_MAGIC_CHECK_LIST(list, NULL); + list->accounting->last = remove_list->prev; + } + + _eina_list_mempool_list_free(remove_list); + return return_l; +} + +EAPI Eina_List * +eina_list_free(Eina_List *list) +{ + Eina_List *l, *free_l; + + if (!list) + return NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + for (l = list; l; ) + { + free_l = l; + l = l->next; + + _eina_list_mempool_list_free(free_l); + } + + return NULL; +} + +EAPI Eina_List * +eina_list_promote_list(Eina_List *list, Eina_List *move_list) +{ + if (!list) + return NULL; + + if (!move_list) + { + return list; /* Promoting head to be head. */ + + } + + if (move_list == list) + return list; + + if (move_list->next == list) + return move_list; + + EINA_MAGIC_CHECK_LIST(list, NULL); + EINA_MAGIC_CHECK_LIST(move_list, NULL); + + /* Remove the promoted item from the list. */ + if (!move_list->prev) + move_list->next->prev = NULL; + else + { + move_list->prev->next = move_list->next; + if (move_list == list->accounting->last) + list->accounting->last = move_list->prev; + else + move_list->next->prev = move_list->prev; + } + + /* Add the promoted item in the list. */ + move_list->next = list; + move_list->prev = list->prev; + list->prev = move_list; + if (move_list->prev) + move_list->prev->next = move_list; + + return move_list; +} + +EAPI Eina_List * +eina_list_demote_list(Eina_List *list, Eina_List *move_list) +{ + if (!list) + return NULL; + + if (!move_list) + { + return list; /* Demoting tail to be tail. */ + + } + + if (move_list == list->accounting->last) + return list; + + EINA_MAGIC_CHECK_LIST(list, NULL); + EINA_MAGIC_CHECK_LIST(move_list, NULL); + + /* Update pointer list if necessary. */ + if (list == move_list) + { + list = move_list->next; /* Remove the demoted item from the list. */ + + } + + if (move_list->prev) + move_list->prev->next = move_list->next; + + move_list->next->prev = move_list->prev; + /* Add the demoted item in the list. */ + move_list->prev = list->accounting->last; + move_list->prev->next = move_list; + move_list->next = NULL; + list->accounting->last = move_list; + + return list; +} + +EAPI void * +eina_list_data_find(const Eina_List *list, const void *data) +{ + if (eina_list_data_find_list(list, data)) + return (void *)data; + + return NULL; +} + +EAPI Eina_Bool +eina_list_move(Eina_List **to, Eina_List **from, void *data) +{ + Eina_List *l; + + EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + + if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE); + EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE); + + l = eina_list_data_find_list(*from, data); + EINA_SAFETY_ON_NULL_RETURN_VAL(l, EINA_FALSE); + + *to = eina_list_append(*to, data); + *from = eina_list_remove_list(*from, l); + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE); + + if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE); + EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE); + EINA_MAGIC_CHECK_LIST(data, EINA_FALSE); + + *to = eina_list_append(*to, data->data); + *from = eina_list_remove_list(*from, data); + return EINA_TRUE; +} + +EAPI Eina_List * +eina_list_data_find_list(const Eina_List *list, const void *data) +{ + const Eina_List *l; + void *list_data; + + if (list) + EINA_MAGIC_CHECK_LIST(list, NULL); + + EINA_LIST_FOREACH(list, l, list_data) + { + if (list_data == data) + return (Eina_List *)l; + } + + return NULL; +} + +EAPI void * +eina_list_nth(const Eina_List *list, unsigned int n) +{ + Eina_List *l; + + l = eina_list_nth_list(list, n); + return l ? l->data : NULL; +} + +EAPI Eina_List * +eina_list_nth_list(const Eina_List *list, unsigned int n) +{ + const Eina_List *l; + unsigned int i; + + if (list) + EINA_MAGIC_CHECK_LIST(list, NULL); + + /* check for non-existing nodes */ + if ((!list) || (n > (list->accounting->count - 1))) + return NULL; + + /* if the node is in the 2nd half of the list, search from the end + * else, search from the beginning. + */ + if (n > (list->accounting->count / 2)) + for (i = list->accounting->count - 1, + l = list->accounting->last; + l; + l = l->prev, i--) + { + if (i == n) + return (Eina_List *)l; + } + else + for (i = 0, l = list; l; l = l->next, i++) + { + if (i == n) + return (Eina_List *)l; + } + + abort(); +} + +EAPI Eina_List * +eina_list_reverse(Eina_List *list) +{ + Eina_List *l1, *l2; + + if (!list) + return NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + l1 = list; + l2 = list->accounting->last; + while (l1 != l2) + { + void *data; + + data = l1->data; + l1->data = l2->data; + l2->data = data; + l1 = l1->next; + if (l1 == l2) + break; + + l2 = l2->prev; + } + + return list; +} + +EAPI Eina_List * +eina_list_reverse_clone(const Eina_List *list) +{ + const Eina_List *l; + Eina_List *lclone; + void *data; + + if (!list) + return NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + lclone = NULL; + EINA_LIST_FOREACH(list, l, data) + lclone = eina_list_prepend(lclone, data); + + return lclone; +} + +EAPI Eina_List * +eina_list_clone(const Eina_List *list) +{ + const Eina_List *l; + Eina_List *lclone; + void *data; + + if (!list) + return NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + lclone = NULL; + EINA_LIST_FOREACH(list, l, data) + lclone = eina_list_append(lclone, data); + + return lclone; +} + +EAPI Eina_List * +eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) +{ + unsigned int i = 0; + unsigned int n = 0; + Eina_List *tail = list; + Eina_List *unsort = NULL; + Eina_List *stack[EINA_LIST_SORT_STACK_SIZE]; + + EINA_SAFETY_ON_NULL_RETURN_VAL(func, list); + if (!list) + return NULL; + + EINA_MAGIC_CHECK_LIST(list, NULL); + + /* if the caller specified an invalid size, sort the whole list */ + if ((size == 0) || + (size > list->accounting->count)) + size = list->accounting->count; + + if (size != list->accounting->count) + { + unsort = eina_list_nth_list(list, size); + if (unsort) + unsort->prev->next = NULL; + } + + while (tail) + { + unsigned int idx, tmp; + + Eina_List *a = tail; + Eina_List *b = tail->next; + + if (!b) + { + stack[i++] = a; + break; + } + + tail = b->next; + + if (func(a->data, b->data) < 0) + ((stack[i++] = a)->next = b)->next = 0; + else + ((stack[i++] = b)->next = a)->next = 0; + + tmp = n++; + for (idx = n ^ tmp; idx &= idx - 1; i--) + stack[i - 2] = eina_list_sort_merge(stack[i - 2], stack[i - 1], func); + } + + while (i-- > 1) + stack[i - 1] = eina_list_sort_merge(stack[i - 1], stack[i], func); + + list = stack[0]; + tail = eina_list_sort_rebuild_prev(list); + + if (unsort) + { + tail->next = unsort; + unsort->prev = tail; + } + else + list->accounting->last = tail; + + return list; +} + +EAPI Eina_List * +eina_list_merge(Eina_List *left, Eina_List *right) +{ + unsigned int n_left, n_right; + + if (!left) + return right; + + if (!right) + return left; + + left->accounting->last->next = right; + right->prev = left->accounting->last; + + n_left = left->accounting->count; + n_right = right->accounting->count; + + if (n_left >= n_right) + { + Eina_List *itr = right; + left->accounting->last = right->accounting->last; + left->accounting->count += n_right; + + _eina_list_mempool_accounting_free(right->accounting); + + do + { + itr->accounting = left->accounting; + itr = itr->next; + } + while (itr); + } + else + { + Eina_List *itr = left->accounting->last; + right->accounting->count += n_left; + + _eina_list_mempool_accounting_free(left->accounting); + + do + { + itr->accounting = right->accounting; + itr = itr->prev; + } + while (itr); + } + + return left; +} + + +EAPI Eina_List * +eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) +{ + Eina_List *next; + Eina_List *itr; + + if(!right) + return list; + + *right = NULL; + + if (!list) + return NULL; + + if (!relative) + { + *right = list; + return NULL; + } + + if (relative == eina_list_last(list)) + return list; + + next = eina_list_next(relative); + next->prev = NULL; + next->accounting = _eina_list_mempool_accounting_new(next); + next->accounting->last = list->accounting->last; + *right = next; + + itr = next; + do + { + itr->accounting = next->accounting; + next->accounting->count++; + itr = itr->next; + } + while (itr); + + relative->next = NULL; + list->accounting->last = relative; + list->accounting->count = list->accounting->count - next->accounting->count; + + return list; +} + +EAPI Eina_List * +eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) +{ + Eina_List *ret; + Eina_List *current; + + EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL); + + if (!left) + return right; + + if (!right) + return left; + + if (func(left->data, right->data) < 0) + { + ret = left; + current = left; + left = left->next; + ret->accounting->count += right->accounting->count; + + _eina_list_mempool_accounting_free(right->accounting); + } + else + { + ret = right; + current = right; + right = right->next; + ret->accounting->count += left->accounting->count; + + _eina_list_mempool_accounting_free(left->accounting); + } + + while (left && right) + { + if (func(left->data, right->data) < 0) + { + current->next = left; + left->prev = current; + left = left->next; + } + else + { + current->next = right; + right->prev = current; + right = right->next; + } + + current = current->next; + current->accounting = ret->accounting; + } + + if (left) + { + current->next = left; + left->prev = current; + current->accounting = ret->accounting; + } + + if (right) + { + current->next = right; + right->prev = current; + current->accounting = ret->accounting; + } + + while (current->next) + { + current = current->next; + current->accounting = ret->accounting; + } + + ret->accounting->last = current; + + return ret; +} + +EAPI Eina_List * +eina_list_search_sorted_near_list(const Eina_List *list, + Eina_Compare_Cb func, + const void *data, + int *result_cmp) +{ + const Eina_List *ct; + unsigned int inf, sup, cur; + int cmp; + + if (!list) + { + if (result_cmp) + *result_cmp = 0; + + return NULL; + } + + if (list->accounting->count == 1) + { + if (result_cmp) + *result_cmp = func(list->data, data); + + return (Eina_List *)list; + } + + /* list walk is expensive, do quick check: tail */ + ct = list->accounting->last; + cmp = func(ct->data, data); + if (cmp <= 0) + goto end; + + /* list walk is expensive, do quick check: head */ + ct = list; + cmp = func(ct->data, data); + if (cmp >= 0) + goto end; + + /* inclusive bounds */ + inf = 1; + sup = list->accounting->count - 2; + cur = 1; + ct = list->next; + + /* no loop, just compare if comparison value is important to caller */ + if (inf > sup) + { + if (result_cmp) + cmp = func(ct->data, data); + + goto end; + } + + while (inf <= sup) + { + unsigned int tmp = cur; + cur = inf + ((sup - inf) >> 1); + if (tmp < cur) + for (; tmp != cur; tmp++, ct = ct->next) ; + else if (tmp > cur) + for (; tmp != cur; tmp--, ct = ct->prev) ; + + cmp = func(ct->data, data); + if (cmp == 0) + break; + else if (cmp < 0) + inf = cur + 1; + else if (cmp > 0) + { + if (cur > 0) + sup = cur - 1; + else + break; + } + else + break; + } + +end: + if (result_cmp) + *result_cmp = cmp; + + return (Eina_List *)ct; +} + +EAPI Eina_List * +eina_list_search_sorted_list(const Eina_List *list, + Eina_Compare_Cb func, + const void *data) +{ + Eina_List *lnear; + int cmp; + + lnear = eina_list_search_sorted_near_list(list, func, data, &cmp); + if (!lnear) + return NULL; + + if (cmp == 0) + return lnear; + + return NULL; +} + + +EAPI void * +eina_list_search_sorted(const Eina_List *list, + Eina_Compare_Cb func, + const void *data) +{ + return eina_list_data_get(eina_list_search_sorted_list(list, func, data)); +} + +EAPI Eina_List * +eina_list_search_unsorted_list(const Eina_List *list, + Eina_Compare_Cb func, + const void *data) +{ + const Eina_List *l; + void *d; + + EINA_LIST_FOREACH(list, l, d) + { + if (!func(d, data)) + return (Eina_List *)l; + } + return NULL; +} + +EAPI void * +eina_list_search_unsorted(const Eina_List *list, + Eina_Compare_Cb func, + const void *data) +{ + return eina_list_data_get(eina_list_search_unsorted_list(list, func, data)); +} + + +EAPI Eina_Iterator * +eina_list_iterator_new(const Eina_List *list) +{ + Eina_Iterator_List *it; + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_List)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->head = list; + it->current = list; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + eina_list_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free); + + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_list_iterator_reversed_new(const Eina_List *list) +{ + Eina_Iterator_List *it; + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_List)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->head = eina_list_last(list); + it->current = it->head; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_prev); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + eina_list_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free); + + return &it->iterator; +} + +EAPI Eina_Accessor * +eina_list_accessor_new(const Eina_List *list) +{ + Eina_Accessor_List *ac; + + eina_error_set(0); + ac = calloc(1, sizeof (Eina_Accessor_List)); + if (!ac) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(ac, EINA_MAGIC_LIST_ACCESSOR); + EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); + + ac->head = list; + ac->current = list; + ac->index = 0; + + ac->accessor.version = EINA_ACCESSOR_VERSION; + ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_list_accessor_get_at); + ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER( + eina_list_accessor_get_container); + ac->accessor.free = FUNC_ACCESSOR_FREE(eina_list_accessor_free); + + return &ac->accessor; +} diff --git a/libraries/eina/src/lib/eina_log.c b/libraries/eina/src/lib/eina_log.c new file mode 100644 index 0000000..dd772d2 --- /dev/null +++ b/libraries/eina/src/lib/eina_log.c @@ -0,0 +1,1852 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric Bail, Andre Dieb + * Martins + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef EFL_HAVE_POSIX_THREADS +# include +#endif + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_inlist.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_log.h" + +/* TODO + * + printing logs to stdout or stderr can be implemented + * using a queue, useful for multiple threads printing + * + add a wrapper for assert? + */ + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_LOG_ENV_ABORT "EINA_LOG_ABORT" +#define EINA_LOG_ENV_ABORT_LEVEL "EINA_LOG_ABORT_LEVEL" +#define EINA_LOG_ENV_LEVEL "EINA_LOG_LEVEL" +#define EINA_LOG_ENV_LEVELS "EINA_LOG_LEVELS" +#define EINA_LOG_ENV_LEVELS_GLOB "EINA_LOG_LEVELS_GLOB" +#define EINA_LOG_ENV_COLOR_DISABLE "EINA_LOG_COLOR_DISABLE" +#define EINA_LOG_ENV_FILE_DISABLE "EINA_LOG_FILE_DISABLE" +#define EINA_LOG_ENV_FUNCTION_DISABLE "EINA_LOG_FUNCTION_DISABLE" + + +// Structure for storing domain level settings passed from the command line +// that will be matched with application-defined domains. +typedef struct _Eina_Log_Domain_Level_Pending Eina_Log_Domain_Level_Pending; +struct _Eina_Log_Domain_Level_Pending +{ + EINA_INLIST; + unsigned int level; + size_t namelen; + char name[]; +}; + +/* + * List of levels for domains set by the user before the domains are registered, + * updates the domain levels on the first log and clears itself. + */ +static Eina_Inlist *_pending_list = NULL; +static Eina_Inlist *_glob_list = NULL; + +// Disable color flag (can be changed through the env var +// EINA_LOG_ENV_COLOR_DISABLE). +static Eina_Bool _disable_color = EINA_FALSE; +static Eina_Bool _disable_file = EINA_FALSE; +static Eina_Bool _disable_function = EINA_FALSE; +static Eina_Bool _abort_on_critical = EINA_FALSE; +static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL; + +#ifdef EFL_HAVE_THREADS + +static Eina_Bool _threads_enabled = EINA_FALSE; +static Eina_Bool _threads_inited = EINA_FALSE; + +# ifdef EFL_HAVE_POSIX_THREADS + +typedef pthread_t Thread; + +static pthread_t _main_thread; + +# define SELF() pthread_self() +# define IS_MAIN(t) pthread_equal(t, _main_thread) +# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t)) +# define CHECK_MAIN(...) \ + do { \ + if (!IS_MAIN(pthread_self())) { \ + fprintf(stderr, \ + "ERR: not main thread! current=%lu, main=%lu\n", \ + (unsigned long)pthread_self(), \ + (unsigned long)_main_thread); \ + return __VA_ARGS__; \ + } \ + } while (0) + +# ifdef EFL_HAVE_POSIX_THREADS_SPINLOCK + +static pthread_spinlock_t _log_lock; + +static Eina_Bool _eina_log_spinlock_init(void) +{ + if (pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE) == 0) + return EINA_TRUE; + + fprintf(stderr, + "ERROR: pthread_spin_init(%p, PTHREAD_PROCESS_PRIVATE): %s\n", + &_log_lock, strerror(errno)); + return EINA_FALSE; +} + +# define LOG_LOCK() \ + if (_threads_enabled) \ + do { \ + if (0) { \ + fprintf(stderr, "+++LOG LOG_LOCKED! [%s, %lu]\n", \ + __FUNCTION__, (unsigned long)pthread_self()); } \ + if (EINA_UNLIKELY(_threads_enabled)) { \ + pthread_spin_lock(&_log_lock); } \ + } while (0) +# define LOG_UNLOCK() \ + if (_threads_enabled) \ + do { \ + if (EINA_UNLIKELY(_threads_enabled)) { \ + pthread_spin_unlock(&_log_lock); } \ + if (0) { \ + fprintf(stderr, \ + "---LOG LOG_UNLOCKED! [%s, %lu]\n", \ + __FUNCTION__, (unsigned long)pthread_self()); } \ + } while (0) +# define INIT() _eina_log_spinlock_init() +# define SHUTDOWN() pthread_spin_destroy(&_log_lock) + +# else /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */ + +static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER; +# define LOG_LOCK() if(_threads_enabled) {pthread_mutex_lock(&_log_mutex); } +# define LOG_UNLOCK() if(_threads_enabled) {pthread_mutex_unlock(&_log_mutex); } +# define INIT() (1) +# define SHUTDOWN() do {} while (0) + +# endif /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */ + +# else /* EFL_HAVE_WIN32_THREADS */ + +typedef DWORD Thread; + +static DWORD _main_thread; + +# define SELF() GetCurrentThreadId() +# define IS_MAIN(t) (t == _main_thread) +# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t)) +# define CHECK_MAIN(...) \ + do { \ + if (!IS_MAIN(GetCurrentThreadId())) { \ + fprintf(stderr, \ + "ERR: not main thread! current=%lu, main=%lu\n", \ + GetCurrentThreadId(), _main_thread); \ + return __VA_ARGS__; \ + } \ + } while (0) + +static HANDLE _log_mutex = NULL; + +# define LOG_LOCK() if(_threads_enabled) WaitForSingleObject(_log_mutex, INFINITE) +# define LOG_UNLOCK() if(_threads_enabled) ReleaseMutex(_log_mutex) +# define INIT() ((_log_mutex = CreateMutex(NULL, FALSE, NULL)) ? 1 : 0) +# define SHUTDOWN() if (_log_mutex) CloseHandle(_log_mutex) + +# endif /* EFL_HAVE_WIN32_THREADS */ + +#else /* ! EFL_HAVE_THREADS */ + +# define LOG_LOCK() do {} while (0) +# define LOG_UNLOCK() do {} while (0) +# define IS_MAIN(t) (1) +# define IS_OTHER(t) (0) +# define CHECK_MAIN(...) do {} while (0) +# define INIT() (1) +# define SHUTDOWN() do {} while (0) + +#endif /* ! EFL_HAVE_THREADS */ + + +// List of domains registered +static Eina_Log_Domain *_log_domains = NULL; +static unsigned int _log_domains_count = 0; +static size_t _log_domains_allocated = 0; + +// Default function for printing on domains +static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stderr; +static void *_print_cb_data = NULL; + +#ifdef DEBUG +static Eina_Log_Level _log_level = EINA_LOG_LEVEL_DBG; +#elif DEBUG_CRITICAL +static Eina_Log_Level _log_level = EINA_LOG_LEVEL_CRITICAL; +#else +static Eina_Log_Level _log_level = EINA_LOG_LEVEL_ERR; +#endif + +/* NOTE: if you change this, also change: + * eina_log_print_level_name_get() + * eina_log_print_level_name_color_get() + */ +static const char *_names[] = { + "CRI", + "ERR", + "WRN", + "INF", + "DBG", +}; + +#ifdef _WIN32 +static int +eina_log_win32_color_get(const char *domain_str) +{ + char *str; + char *tmp; + char *tmp2; + int code = -1; + int lighted = 0; + int ret = 0; + + str = strdup(domain_str); + if (!str) + return 0; + + /* this should not append */ + if (str[0] != '\033') + { + free(str); + return 0; + } + + /* we skip the first char and the [ */ + tmp = tmp2 = str + 2; + while (*tmp != 'm') + { + if (*tmp == ';') + { + *tmp = '\0'; + code = atol(tmp2); + tmp++; + tmp2 = tmp; + } + + tmp++; + } + *tmp = '\0'; + if (code < 0) + code = atol(tmp2); + else + lighted = atol(tmp2); + + free(str); + + if (code < lighted) + { + int c; + + c = code; + code = lighted; + lighted = c; + } + + if (lighted) + ret = FOREGROUND_INTENSITY; + + if (code == 31) + ret |= FOREGROUND_RED; + else if (code == 32) + ret |= FOREGROUND_GREEN; + else if (code == 33) + ret |= FOREGROUND_RED | FOREGROUND_GREEN; + else if (code == 34) + ret |= FOREGROUND_BLUE; + else if (code == 36) + ret |= FOREGROUND_GREEN | FOREGROUND_BLUE; + else if (code == 37) + ret |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; + + return ret; +} +#endif + +static inline unsigned int +eina_log_pid_get(void) +{ + return (unsigned int)getpid(); +} + +static inline void +eina_log_print_level_name_get(int level, const char **p_name) +{ + static char buf[4]; + /* NOTE: if you change this, also change + * eina_log_print_level_name_color_get() + * eina_log_level_name_get() (at eina_inline_log.x) + */ + if (EINA_UNLIKELY(level < 0)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else + *p_name = _names[level]; +} + +#ifdef _WIN32 +static inline void +eina_log_print_level_name_color_get(int level, + const char **p_name, + int *p_color) +{ + static char buf[4]; + /* NOTE: if you change this, also change: + * eina_log_print_level_name_get() + */ + if (EINA_UNLIKELY(level < 0)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else + *p_name = _names[level]; + + *p_color = eina_log_win32_color_get(eina_log_level_color_get(level)); +} +#else +static inline void +eina_log_print_level_name_color_get(int level, + const char **p_name, + const char **p_color) +{ + static char buf[4]; + /* NOTE: if you change this, also change: + * eina_log_print_level_name_get() + */ + if (EINA_UNLIKELY(level < 0)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) + { + snprintf(buf, sizeof(buf), "%03d", level); + *p_name = buf; + } + else + *p_name = _names[level]; + + *p_color = eina_log_level_color_get(level); +} +#endif + +#define DECLARE_LEVEL_NAME(level) const char *name; \ + eina_log_print_level_name_get(level, &name) +#ifdef _WIN32 +# define DECLARE_LEVEL_NAME_COLOR(level) const char *name; int color; \ + eina_log_print_level_name_color_get(level, &name, &color) +#else +# define DECLARE_LEVEL_NAME_COLOR(level) const char *name, *color; \ + eina_log_print_level_name_color_get(level, &name, &color) +#endif + +/** No threads, No color */ +static void +eina_log_print_prefix_NOthreads_NOcolor_file_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line) +{ + DECLARE_LEVEL_NAME(level); + fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(), + d->domain_str, file, line, fnc); +} + +static void +eina_log_print_prefix_NOthreads_NOcolor_NOfile_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file __UNUSED__, + const char *fnc, + int line __UNUSED__) +{ + DECLARE_LEVEL_NAME(level); + fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str, + fnc); +} + +static void +eina_log_print_prefix_NOthreads_NOcolor_file_NOfunc(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc __UNUSED__, + int line) +{ + DECLARE_LEVEL_NAME(level); + fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str, + file, line); +} + +/* No threads, color */ +static void +eina_log_print_prefix_NOthreads_color_file_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line) +{ + DECLARE_LEVEL_NAME_COLOR(level); +#ifdef _WIN32_WCE + fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(), + d->domain_str, file, line, fnc); +#elif _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s", d->name); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, " %s:%d ", file, line); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_INTENSITY | FOREGROUND_RED | + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%s()", fnc); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, " "); +#else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get(), d->domain_str, file, line, fnc); +#endif +} + +static void +eina_log_print_prefix_NOthreads_color_NOfile_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file __UNUSED__, + const char *fnc, + int line __UNUSED__) +{ + DECLARE_LEVEL_NAME_COLOR(level); +#ifdef _WIN32_WCE + fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str, + fnc); +#elif _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s", d->name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_INTENSITY | FOREGROUND_RED | + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%s()", fnc); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, " "); +#else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get(), d->domain_str, fnc); +#endif +} + +static void +eina_log_print_prefix_NOthreads_color_file_NOfunc(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc __UNUSED__, + int line) +{ + DECLARE_LEVEL_NAME_COLOR(level); +#ifdef _WIN32_WCE + fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str, + file, line); +#elif _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s", d->name); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, " %s:%d ", file, line); +#else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d ", + color, name, eina_log_pid_get(), d->domain_str, file, line); +#endif +} + +/** threads, No color */ +#ifdef EFL_HAVE_THREADS +static void +eina_log_print_prefix_threads_NOcolor_file_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line) +{ + Thread cur; + + DECLARE_LEVEL_NAME(level); + cur = SELF(); + if (IS_OTHER(cur)) + { + fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d %s() ", + name, eina_log_pid_get(), d->domain_str, + (unsigned long)cur, file, line, fnc); + return; + } + fprintf(fp, "%s<%u>:%s %s:%d %s() ", + name, eina_log_pid_get(), d->domain_str, file, line, fnc); +} + +static void +eina_log_print_prefix_threads_NOcolor_NOfile_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file __UNUSED__, + const char *fnc, + int line __UNUSED__) +{ + Thread cur; + + DECLARE_LEVEL_NAME(level); + cur = SELF(); + if (IS_OTHER(cur)) + { + fprintf(fp, "%s<%u>:%s[T:%lu] %s() ", + name, eina_log_pid_get(), d->domain_str, + (unsigned long)cur, fnc); + return; + } + fprintf(fp, "%s<%u>:%s %s() ", + name, eina_log_pid_get(), d->domain_str, fnc); +} + +static void +eina_log_print_prefix_threads_NOcolor_file_NOfunc(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc __UNUSED__, + int line) +{ + Thread cur; + + DECLARE_LEVEL_NAME(level); + cur = SELF(); + if (IS_OTHER(cur)) + { + fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d ", + name, eina_log_pid_get(), d->domain_str, (unsigned long)cur, + file, line); + return; + } + + fprintf(fp, "%s<%u>:%s %s:%d ", + name, eina_log_pid_get(), d->domain_str, file, line); +} + +/* threads, color */ +static void +eina_log_print_prefix_threads_color_file_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line) +{ + Thread cur; + + DECLARE_LEVEL_NAME_COLOR(level); + cur = SELF(); + if (IS_OTHER(cur)) + { +# ifdef _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s[T:", d->name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, "[T:"); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%lu", (unsigned long)cur); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, "] %s:%d ", file, line); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_INTENSITY | FOREGROUND_RED | + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%s()", fnc); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, " "); +# else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:" + EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get() ,d->domain_str, + (unsigned long)cur, file, line, fnc); +# endif + return; + } + +# ifdef _WIN32 + eina_log_print_prefix_NOthreads_color_file_func(fp, + d, + level, + file, + fnc, + line); +# else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get(), d->domain_str, file, line, fnc); +# endif +} + +static void +eina_log_print_prefix_threads_color_NOfile_func(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file __UNUSED__, + const char *fnc, + int line __UNUSED__) +{ + Thread cur; + + DECLARE_LEVEL_NAME_COLOR(level); + cur = SELF(); + if (IS_OTHER(cur)) + { +# ifdef _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s[T:", d->name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, "[T:"); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%lu", (unsigned long)cur); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_INTENSITY | FOREGROUND_RED | + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%s()", fnc); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, " "); +# else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:" + EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get(), d->domain_str, + (unsigned long)cur, fnc); +# endif + return; + } + +# ifdef _WIN32 + eina_log_print_prefix_NOthreads_color_NOfile_func(fp, + d, + level, + file, + fnc, + line); +# else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s " + EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", + color, name, eina_log_pid_get(), d->domain_str, fnc); +# endif +} + +static void +eina_log_print_prefix_threads_color_file_NOfunc(FILE *fp, + const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc __UNUSED__, + int line) +{ + Thread cur; + + DECLARE_LEVEL_NAME_COLOR(level); + cur = SELF(); + if (IS_OTHER(cur)) + { +# ifdef _WIN32 + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + color); + fprintf(fp, "%s", name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, ":"); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + eina_log_win32_color_get(d->domain_str)); + fprintf(fp, "%s[T:", d->name); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, "[T:"); + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_GREEN | FOREGROUND_BLUE); + fprintf(fp, "%lu", (unsigned long)cur); + SetConsoleTextAttribute(GetStdHandle( + STD_OUTPUT_HANDLE), + FOREGROUND_RED | FOREGROUND_GREEN | + FOREGROUND_BLUE); + fprintf(fp, "] %s:%d ", file, line); +# else + fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:" + EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d ", + color, name, eina_log_pid_get(), d->domain_str, + (unsigned long)cur, file, line); +# endif + return; + } + +# ifdef _WIN32 + eina_log_print_prefix_NOthreads_color_file_NOfunc(fp, + d, + level, + file, + fnc, + line); +# else + fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d ", + color, name, d->domain_str, file, line); +# endif +} +#endif /* EFL_HAVE_THREADS */ + +static void (*_eina_log_print_prefix)(FILE *fp, const Eina_Log_Domain *d, + Eina_Log_Level level, const char *file, + const char *fnc, + int line) = + eina_log_print_prefix_NOthreads_color_file_func; + +static inline void +eina_log_print_prefix_update(void) +{ + if (_disable_file && _disable_function) + { + fprintf(stderr, "ERROR: cannot have " EINA_LOG_ENV_FILE_DISABLE " and " + EINA_LOG_ENV_FUNCTION_DISABLE " set at the same time, will " + "just disable function.\n"); + _disable_file = 0; + } + +#define S(NOthread, NOcolor, NOfile, NOfunc) \ + _eina_log_print_prefix = \ + eina_log_print_prefix_ ## NOthread ## threads_ ## NOcolor ## color_ ## \ + NOfile \ + ## file_ ## NOfunc ## func + +#ifdef EFL_HAVE_THREADS + if (_threads_enabled) + { + if (_disable_color) + { + if (_disable_file) + S(,NO,NO,); + else if (_disable_function) + S(,NO,,NO); + else + S(,NO,,); + } + else + { + if (_disable_file) + S(,,NO,); + else if (_disable_function) + S(,,,NO); + else + S(,,,); + } + + return; + } + +#endif + + if (_disable_color) + { + if (_disable_file) + S(NO,NO,NO,); + else if (_disable_function) + S(NO,NO,,NO); + else + S(NO,NO,,); + } + else + { + if (_disable_file) + S(NO,,NO,); + else if (_disable_function) + S(NO,,,NO); + else + S(NO,,,); + } + +#undef S +} + +/* + * Creates a colored domain name string. + */ +static const char * +eina_log_domain_str_get(const char *name, const char *color) +{ + const char *d; + + if (color) + { + size_t name_len; + size_t color_len; + + name_len = strlen(name); + color_len = strlen(color); + d = + malloc(sizeof(char) * + (color_len + name_len + strlen(EINA_COLOR_RESET) + 1)); + if (!d) + return NULL; + + memcpy((char *)d, color, color_len); + memcpy((char *)(d + color_len), name, name_len); + memcpy((char *)(d + color_len + name_len), EINA_COLOR_RESET, + strlen(EINA_COLOR_RESET)); + ((char *)d)[color_len + name_len + strlen(EINA_COLOR_RESET)] = '\0'; + } + else + d = strdup(name); + + return d; +} + +/* + * Setups a new logging domain to the name and color specified. Note that this + * constructor acts upon an pre-allocated object. + */ +static Eina_Log_Domain * +eina_log_domain_new(Eina_Log_Domain *d, const char *name, const char *color) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(d, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); + + d->level = EINA_LOG_LEVEL_UNKNOWN; + d->deleted = EINA_FALSE; + + if ((color) && (!_disable_color)) + d->domain_str = eina_log_domain_str_get(name, color); + else + d->domain_str = eina_log_domain_str_get(name, NULL); + + d->name = strdup(name); + d->namelen = strlen(name); + + return d; +} + +/* + * Frees internal strings of a log domain, keeping the log domain itself as a + * slot for next domain registers. + */ +static void +eina_log_domain_free(Eina_Log_Domain *d) +{ + EINA_SAFETY_ON_NULL_RETURN(d); + + if (d->domain_str) + free((char *)d->domain_str); + + if (d->name) + free((char *)d->name); +} + +/* + * Parses domain levels passed through the env var. + */ +static void +eina_log_domain_parse_pendings(void) +{ + const char *start; + + if (!(start = getenv(EINA_LOG_ENV_LEVELS))) + return; + + // name1:level1,name2:level2,name3:level3,... + while (1) + { + Eina_Log_Domain_Level_Pending *p; + char *end = NULL; + char *tmp = NULL; + long int level; + + end = strchr(start, ':'); + if (!end) + break; + + // Parse level, keep going if failed + level = strtol((char *)(end + 1), &tmp, 10); + if (tmp == (end + 1)) + goto parse_end; + + // Parse name + p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1); + if (!p) + break; + + p->namelen = end - start; + memcpy((char *)p->name, start, end - start); + ((char *)p->name)[end - start] = '\0'; + p->level = level; + + _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(p)); + +parse_end: + start = strchr(tmp, ','); + if (start) + start++; + else + break; + } +} + +static void +eina_log_domain_parse_pending_globs(void) +{ + const char *start; + + if (!(start = getenv(EINA_LOG_ENV_LEVELS_GLOB))) + return; + + // name1:level1,name2:level2,name3:level3,... + while (1) + { + Eina_Log_Domain_Level_Pending *p; + char *end = NULL; + char *tmp = NULL; + long int level; + + end = strchr(start, ':'); + if (!end) + break; + + // Parse level, keep going if failed + level = strtol((char *)(end + 1), &tmp, 10); + if (tmp == (end + 1)) + goto parse_end; + + // Parse name + p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1); + if (!p) + break; + + p->namelen = 0; /* not that useful */ + memcpy((char *)p->name, start, end - start); + ((char *)p->name)[end - start] = '\0'; + p->level = level; + + _glob_list = eina_inlist_append(_glob_list, EINA_INLIST_GET(p)); + +parse_end: + start = strchr(tmp, ','); + if (start) + start++; + else + break; + } +} + +static inline int +eina_log_domain_register_unlocked(const char *name, const char *color) +{ + Eina_Log_Domain_Level_Pending *pending = NULL; + size_t namelen; + unsigned int i; + + for (i = 0; i < _log_domains_count; i++) + { + if (_log_domains[i].deleted) + { + // Found a flagged slot, free domain_str and replace slot + eina_log_domain_new(&_log_domains[i], name, color); + goto finish_register; + } + } + + if (_log_domains_count >= _log_domains_allocated) + { + Eina_Log_Domain *tmp; + size_t size; + + if (!_log_domains) + // special case for init, eina itself will allocate a dozen of domains + size = 24; + else + // grow 8 buckets to minimize reallocs + size = _log_domains_allocated + 8; + + tmp = realloc(_log_domains, sizeof(Eina_Log_Domain) * size); + + if (tmp) + { + // Success! + _log_domains = tmp; + _log_domains_allocated = size; + } + else + return -1; + } + + // Use an allocated slot + eina_log_domain_new(&_log_domains[i], name, color); + _log_domains_count++; + +finish_register: + namelen = _log_domains[i].namelen; + + EINA_INLIST_FOREACH(_pending_list, pending) + { + if ((namelen == pending->namelen) && (strcmp(pending->name, name) == 0)) + { + _log_domains[i].level = pending->level; + _pending_list = + eina_inlist_remove(_pending_list, EINA_INLIST_GET(pending)); + free(pending); + break; + } + } + + if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN) + { + EINA_INLIST_FOREACH(_glob_list, pending) + { + if (!fnmatch(pending->name, name, 0)) + { + _log_domains[i].level = pending->level; + break; + } + } + } + + // Check if level is still UNKNOWN, set it to global + if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN) + _log_domains[i].level = _log_level; + + return i; +} + +static inline Eina_Bool +eina_log_term_color_supported(const char *term) +{ + const char *tail; + + if (!term) + return EINA_FALSE; + + tail = term + 1; + switch (term[0]) + { + /* list of known to support color terminals, + * take from gentoo's portage. + */ + + case 'x': /* xterm and xterm-color */ + return ((strncmp(tail, "term", sizeof("term") - 1) == 0) && + ((tail[sizeof("term") - 1] == '\0') || + (strcmp(tail + sizeof("term") - 1, "-color") == 0))); + + case 'E': /* Eterm */ + case 'a': /* aterm */ + case 'k': /* kterm */ + return (strcmp(tail, "term") == 0); + + case 'r': /* xrvt or rxvt-unicode */ + return ((strncmp(tail, "xvt", sizeof("xvt") - 1) == 0) && + ((tail[sizeof("xvt") - 1] == '\0') || + (strcmp(tail + sizeof("xvt") - 1, "-unicode") == 0))); + + case 's': /* screen */ + return (strcmp(tail, "creen") == 0); + + case 'g': /* gnome */ + return (strcmp(tail, "nome") == 0); + + case 'i': /* interix */ + return (strcmp(tail, "nterix") == 0); + + default: + return EINA_FALSE; + } +} + +static inline void +eina_log_domain_unregister_unlocked(int domain) +{ + Eina_Log_Domain *d; + + if ((unsigned int)domain >= _log_domains_count) + return; + + d = &_log_domains[domain]; + eina_log_domain_free(d); + d->deleted = 1; +} + +static inline void +eina_log_print_unlocked(int domain, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + va_list args) +{ + Eina_Log_Domain *d; + +#ifdef EINA_SAFETY_CHECKS + if (EINA_UNLIKELY((unsigned int)domain >= _log_domains_count) || + EINA_UNLIKELY(domain < 0)) + { + if (file && fnc && fmt) + fprintf( + stderr, + "CRI: %s:%d %s() eina_log_print() unknown domain %d, original message format '%s'\n", + file, + line, + fnc, + domain, + fmt); + else + fprintf( + stderr, + "CRI: eina_log_print() unknown domain %d, original message format '%s'\n", + domain, + fmt ? fmt : ""); + + if (_abort_on_critical) + abort(); + + return; + } + +#endif + d = _log_domains + domain; +#ifdef EINA_SAFETY_CHECKS + if (EINA_UNLIKELY(d->deleted)) + { + fprintf(stderr, + "ERR: eina_log_print() domain %d is deleted\n", + domain); + return; + } + +#endif + + if (level > d->level) + return; + +#ifdef _WIN32 + { + char *wfmt; + char *tmp; + + wfmt = strdup(fmt); + if (!wfmt) + { + fprintf(stderr, "ERR: %s: can not allocate memory\n", __FUNCTION__); + return; + } + + tmp = wfmt; + while (strchr(tmp, '%')) + { + tmp++; + if (*tmp == 'z') + *tmp = 'I'; + } + _print_cb(d, level, file, fnc, line, wfmt, _print_cb_data, args); + free(wfmt); + } +#else + _print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args); +#endif + + if (EINA_UNLIKELY(_abort_on_critical) && + EINA_UNLIKELY(level <= _abort_level_on_critical)) + abort(); +} + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the log module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the log module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + * + * @warning Not-MT: just call this function from main thread! The + * place where this function was called the first time is + * considered the main thread. + */ +Eina_Bool +eina_log_init(void) +{ + const char *level, *tmp; + int color_disable; + + assert((sizeof(_names) / sizeof(_names[0])) == EINA_LOG_LEVELS); + + if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE))) + color_disable = atoi(tmp); + else + color_disable = -1; + + /* Check if color is explicitly disabled */ + if (color_disable == 1) + _disable_color = EINA_TRUE; + +#ifndef _WIN32 + /* color was not explicitly disabled or enabled, guess it */ + else if (color_disable == -1) + { + if (!eina_log_term_color_supported(getenv("TERM"))) + _disable_color = EINA_TRUE; + else + { + /* if not a terminal, but redirected to a file, disable color */ + int fd; + + if (_print_cb == eina_log_print_cb_stderr) + fd = STDERR_FILENO; + else if (_print_cb == eina_log_print_cb_stdout) + fd = STDOUT_FILENO; + else + fd = -1; + + if ((fd >= 0) && (!isatty(fd))) + _disable_color = EINA_TRUE; + } + } +#endif + + if ((tmp = getenv(EINA_LOG_ENV_FILE_DISABLE)) && (atoi(tmp) == 1)) + _disable_file = EINA_TRUE; + + if ((tmp = getenv(EINA_LOG_ENV_FUNCTION_DISABLE)) && (atoi(tmp) == 1)) + _disable_function = EINA_TRUE; + + if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1)) + _abort_on_critical = EINA_TRUE; + + if ((tmp = getenv(EINA_LOG_ENV_ABORT_LEVEL))) + _abort_level_on_critical = atoi(tmp); + + eina_log_print_prefix_update(); + + // Global log level + if ((level = getenv(EINA_LOG_ENV_LEVEL))) + _log_level = atoi(level); + + // Register UNKNOWN domain, the default logger + EINA_LOG_DOMAIN_GLOBAL = eina_log_domain_register("", NULL); + + if (EINA_LOG_DOMAIN_GLOBAL < 0) + { + fprintf(stderr, "Failed to create global logging domain.\n"); + return EINA_FALSE; + } + + // Parse pending domains passed through EINA_LOG_LEVELS_GLOB + eina_log_domain_parse_pending_globs(); + + // Parse pending domains passed through EINA_LOG_LEVELS + eina_log_domain_parse_pendings(); + + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the log module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the log module set up by + * eina_log_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + * + * @warning Not-MT: just call this function from main thread! The + * place where eina_log_init() (eina_init()) was called the + * first time is considered the main thread. + */ +Eina_Bool +eina_log_shutdown(void) +{ + Eina_Inlist *tmp; + + while (_log_domains_count--) + { + if (_log_domains[_log_domains_count].deleted) + continue; + + eina_log_domain_free(&_log_domains[_log_domains_count]); + } + + free(_log_domains); + + _log_domains = NULL; + _log_domains_count = 0; + _log_domains_allocated = 0; + + while (_glob_list) + { + tmp = _glob_list; + _glob_list = _glob_list->next; + free(tmp); + } + + while (_pending_list) + { + tmp = _pending_list; + _pending_list = _pending_list->next; + free(tmp); + } + + return EINA_TRUE; +} + +#ifdef EFL_HAVE_THREADS + +/** + * @internal + * @brief Activate the log mutex. + * + * This function activate the mutex in the eina log module. It is called by + * eina_threads_init(). + * + * @see eina_threads_init() + */ +void +eina_log_threads_init(void) +{ + if (_threads_inited) return; + _main_thread = SELF(); + if (!INIT()) return; + _threads_inited = EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the log mutex. + * + * This function shuts down the mutex in the log module. + * It is called by eina_threads_shutdown(). + * + * @see eina_threads_shutdown() + */ +void +eina_log_threads_shutdown(void) +{ + if (!_threads_inited) return; + CHECK_MAIN(); + SHUTDOWN(); + _threads_enabled = EINA_FALSE; + _threads_inited = EINA_FALSE; +} + +#endif + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +EAPI int EINA_LOG_DOMAIN_GLOBAL = 0; + +/** + * @endcond + */ + +EAPI void +eina_log_threads_enable(void) +{ +#ifdef EFL_HAVE_THREADS + if (_threads_enabled) return; + if (!_threads_inited) eina_log_threads_init(); + _threads_enabled = EINA_TRUE; + eina_log_print_prefix_update(); +#endif +} + +EAPI void +eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) +{ + LOG_LOCK(); + _print_cb = cb; + _print_cb_data = data; + eina_log_print_prefix_update(); + LOG_UNLOCK(); +} + +EAPI void +eina_log_level_set(int level) +{ + _log_level = level; + if (EINA_LIKELY((EINA_LOG_DOMAIN_GLOBAL >= 0) && + ((unsigned int)EINA_LOG_DOMAIN_GLOBAL < _log_domains_count))) + _log_domains[EINA_LOG_DOMAIN_GLOBAL].level = level; +} + +EAPI int +eina_log_level_get(void) +{ + return _log_level; +} + +EAPI Eina_Bool +eina_log_main_thread_check(void) +{ +#ifdef EFL_HAVE_THREADS + return ((!_threads_enabled) || IS_MAIN(SELF())); +#else + return EINA_TRUE; +#endif +} + +EAPI void +eina_log_color_disable_set(Eina_Bool disabled) +{ + _disable_color = disabled; +} + +EAPI Eina_Bool +eina_log_color_disable_get(void) +{ + return _disable_color; +} + +EAPI void +eina_log_file_disable_set(Eina_Bool disabled) +{ + _disable_file = disabled; +} + +EAPI Eina_Bool +eina_log_file_disable_get(void) +{ + return _disable_file; +} + +EAPI void +eina_log_function_disable_set(Eina_Bool disabled) +{ + _disable_function = disabled; +} + +EAPI Eina_Bool +eina_log_function_disable_get(void) +{ + return _disable_function; +} + +EAPI void +eina_log_abort_on_critical_set(Eina_Bool abort_on_critical) +{ + _abort_on_critical = abort_on_critical; +} + +EAPI Eina_Bool +eina_log_abort_on_critical_get(void) +{ + return _abort_on_critical; +} + +EAPI void +eina_log_abort_on_critical_level_set(int critical_level) +{ + _abort_level_on_critical = critical_level; +} + +EAPI int +eina_log_abort_on_critical_level_get(void) +{ + return _abort_level_on_critical; +} + +EAPI int +eina_log_domain_register(const char *name, const char *color) +{ + int r; + + EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1); + + LOG_LOCK(); + r = eina_log_domain_register_unlocked(name, color); + LOG_UNLOCK(); + return r; +} + +EAPI void +eina_log_domain_unregister(int domain) +{ + EINA_SAFETY_ON_FALSE_RETURN(domain >= 0); + LOG_LOCK(); + eina_log_domain_unregister_unlocked(domain); + LOG_UNLOCK(); +} + +EAPI void +eina_log_domain_level_set(const char *domain_name, int level) +{ + Eina_Log_Domain_Level_Pending *pending; + size_t namelen; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN(domain_name); + + namelen = strlen(domain_name); + + for (i = 0; i < _log_domains_count; i++) + { + if (_log_domains[i].deleted) + continue; + + if ((namelen != _log_domains[i].namelen) || + (strcmp(_log_domains[i].name, domain_name) != 0)) + continue; + + _log_domains[i].level = level; + return; + } + + EINA_INLIST_FOREACH(_pending_list, pending) + { + if ((namelen == pending->namelen) && + (strcmp(pending->name, domain_name) == 0)) + { + pending->level = level; + return; + } + } + + pending = malloc(sizeof(Eina_Log_Domain_Level_Pending) + namelen + 1); + if (!pending) + return; + + pending->level = level; + pending->namelen = namelen; + memcpy(pending->name, domain_name, namelen + 1); + + _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(pending)); +} + +EAPI int +eina_log_domain_level_get(const char *domain_name) +{ + Eina_Log_Domain_Level_Pending *pending; + size_t namelen; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN_VAL(domain_name, EINA_LOG_LEVEL_UNKNOWN); + + namelen = strlen(domain_name); + + for (i = 0; i < _log_domains_count; i++) + { + if (_log_domains[i].deleted) + continue; + + if ((namelen != _log_domains[i].namelen) || + (strcmp(_log_domains[i].name, domain_name) != 0)) + continue; + + return _log_domains[i].level; + } + + EINA_INLIST_FOREACH(_pending_list, pending) + { + if ((namelen == pending->namelen) && + (strcmp(pending->name, domain_name) == 0)) + return pending->level; + } + + EINA_INLIST_FOREACH(_glob_list, pending) + { + if (!fnmatch(pending->name, domain_name, 0)) + return pending->level; + } + + return _log_level; +} + +EAPI int +eina_log_domain_registered_level_get(int domain) +{ + EINA_SAFETY_ON_FALSE_RETURN_VAL(domain >= 0, EINA_LOG_LEVEL_UNKNOWN); + EINA_SAFETY_ON_FALSE_RETURN_VAL((unsigned int)domain < _log_domains_count, + EINA_LOG_LEVEL_UNKNOWN); + EINA_SAFETY_ON_TRUE_RETURN_VAL(_log_domains[domain].deleted, + EINA_LOG_LEVEL_UNKNOWN); + return _log_domains[domain].level; +} + +EAPI void +eina_log_print_cb_stderr(const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + __UNUSED__ void *data, + va_list args) +{ + _eina_log_print_prefix(stderr, d, level, file, fnc, line); + vfprintf(stderr, fmt, args); + putc('\n', stderr); +} + +EAPI void +eina_log_print_cb_stdout(const Eina_Log_Domain *d, + Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + __UNUSED__ void *data, + va_list args) +{ + _eina_log_print_prefix(stdout, d, level, file, fnc, line); + vprintf(fmt, args); + putchar('\n'); +} + +EAPI void +eina_log_print_cb_file(const Eina_Log_Domain *d, + __UNUSED__ Eina_Log_Level level, + const char *file, + const char *fnc, + int line, + const char *fmt, + void *data, + va_list args) +{ + FILE *f = data; +#ifdef EFL_HAVE_THREADS + if (_threads_enabled) + { + Thread cur; + + cur = SELF(); + if (IS_OTHER(cur)) + { + fprintf(f, "%s[T:%lu] %s:%d %s() ", d->name, (unsigned long)cur, + file, line, fnc); + goto end; + } + } + +#endif + fprintf(f, "%s<%u> %s:%d %s() ", d->name, eina_log_pid_get(), + file, line, fnc); +#ifdef EFL_HAVE_THREADS +end: +#endif + vfprintf(f, fmt, args); + putc('\n', f); +} + +EAPI void +eina_log_print(int domain, Eina_Log_Level level, const char *file, + const char *fnc, int line, const char *fmt, ...) +{ + va_list args; + +#ifdef EINA_SAFETY_CHECKS + if (EINA_UNLIKELY(!file)) + { + fputs("ERR: eina_log_print() file == NULL\n", stderr); + return; + } + + if (EINA_UNLIKELY(!fnc)) + { + fputs("ERR: eina_log_print() fnc == NULL\n", stderr); + return; + } + + if (EINA_UNLIKELY(!fmt)) + { + fputs("ERR: eina_log_print() fmt == NULL\n", stderr); + return; + } + +#endif + va_start(args, fmt); + LOG_LOCK(); + eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); + LOG_UNLOCK(); + va_end(args); +} + +EAPI void +eina_log_vprint(int domain, Eina_Log_Level level, const char *file, + const char *fnc, int line, const char *fmt, va_list args) +{ +#ifdef EINA_SAFETY_CHECKS + if (EINA_UNLIKELY(!file)) + { + fputs("ERR: eina_log_print() file == NULL\n", stderr); + return; + } + + if (EINA_UNLIKELY(!fnc)) + { + fputs("ERR: eina_log_print() fnc == NULL\n", stderr); + return; + } + + if (EINA_UNLIKELY(!fmt)) + { + fputs("ERR: eina_log_print() fmt == NULL\n", stderr); + return; + } + +#endif + LOG_LOCK(); + eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); + LOG_UNLOCK(); +} diff --git a/libraries/eina/src/lib/eina_magic.c b/libraries/eina/src/lib/eina_magic.c new file mode 100644 index 0000000..1adde92 --- /dev/null +++ b/libraries/eina/src/lib/eina_magic.c @@ -0,0 +1,320 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_magic.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +typedef struct _Eina_Magic_String Eina_Magic_String; +struct _Eina_Magic_String +{ + Eina_Magic magic; + Eina_Bool string_allocated; + const char *string; +}; + +static int _eina_magic_string_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_magic_string_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_magic_string_log_dom, __VA_ARGS__) + +static Eina_Magic_String *_eina_magic_strings = NULL; +static size_t _eina_magic_strings_count = 0; +static size_t _eina_magic_strings_allocated = 0; +static Eina_Bool _eina_magic_strings_dirty = 0; + +static int +_eina_magic_strings_sort_cmp(const void *p1, const void *p2) +{ + const Eina_Magic_String *a = p1, *b = p2; + return a->magic - b->magic; +} + +static int +_eina_magic_strings_find_cmp(const void *p1, const void *p2) +{ + Eina_Magic a = (Eina_Magic)p1; + const Eina_Magic_String *b = p2; + return a - b->magic; +} + +static Eina_Magic_String * +_eina_magic_strings_alloc(void) +{ + size_t idx; + + if (_eina_magic_strings_count == _eina_magic_strings_allocated) + { + void *tmp; + size_t size; + + if (EINA_UNLIKELY(_eina_magic_strings_allocated == 0)) + size = 48; + else + size = _eina_magic_strings_allocated + 16; + + tmp = realloc(_eina_magic_strings, sizeof(Eina_Magic_String) * size); + if (!tmp) + { +#ifdef _WIN32 + ERR("could not realloc magic_strings from %Iu to %Iu buckets.", + _eina_magic_strings_allocated, size); +#else + ERR("could not realloc magic_strings from %zu to %zu buckets.", + _eina_magic_strings_allocated, size); +#endif + return NULL; + } + + _eina_magic_strings = tmp; + _eina_magic_strings_allocated = size; + } + + idx = _eina_magic_strings_count; + _eina_magic_strings_count++; + return _eina_magic_strings + idx; +} + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the magic string module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the magic string module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_magic_string_init(void) +{ + _eina_magic_string_log_dom = eina_log_domain_register + ("eina_magic_string", EINA_LOG_COLOR_DEFAULT); + if (_eina_magic_string_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_magic_string"); + return EINA_FALSE; + } + + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the magic string module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the magic string module set up by + * eina_magic string_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_magic_string_shutdown(void) +{ + Eina_Magic_String *ems, *ems_end; + + ems = _eina_magic_strings; + ems_end = ems + _eina_magic_strings_count; + + for (; ems < ems_end; ems++) + if (ems->string_allocated) + free((char *)ems->string); + + free(_eina_magic_strings); + _eina_magic_strings = NULL; + _eina_magic_strings_count = 0; + _eina_magic_strings_allocated = 0; + + eina_log_domain_unregister(_eina_magic_string_log_dom); + _eina_magic_string_log_dom = -1; + + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ +EAPI const char * +eina_magic_string_get(Eina_Magic magic) +{ + Eina_Magic_String *ems; + + if (!_eina_magic_strings) + return "(none)"; + + if (_eina_magic_strings_dirty) + { + qsort(_eina_magic_strings, _eina_magic_strings_count, + sizeof(Eina_Magic_String), _eina_magic_strings_sort_cmp); + _eina_magic_strings_dirty = 0; + } + + ems = bsearch((void *)magic, _eina_magic_strings, + _eina_magic_strings_count, sizeof(Eina_Magic_String), + _eina_magic_strings_find_cmp); + if (ems) + return ems->string ? ems->string : "(undefined)"; + + return "(unknown)"; +} + +EAPI Eina_Bool +eina_magic_string_set(Eina_Magic magic, const char *magic_name) +{ + Eina_Magic_String *ems; + + EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE); + + ems = _eina_magic_strings_alloc(); + if (!ems) + return EINA_FALSE; + + ems->magic = magic; + ems->string_allocated = EINA_TRUE; + ems->string = strdup(magic_name); + if (!ems->string) + { + ERR("could not allocate string '%s'", magic_name); + _eina_magic_strings_count--; + return EINA_FALSE; + } + + _eina_magic_strings_dirty = 1; + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_magic_string_static_set(Eina_Magic magic, const char *magic_name) +{ + Eina_Magic_String *ems; + + EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE); + + ems = _eina_magic_strings_alloc(); + if (!ems) + return EINA_FALSE; + + ems->magic = magic; + ems->string_allocated = EINA_FALSE; + ems->string = magic_name; + + _eina_magic_strings_dirty = 1; + return EINA_TRUE; +} + +#ifdef eina_magic_fail +# undef eina_magic_fail +#endif + +EAPI void +eina_magic_fail(void *d, + Eina_Magic m, + Eina_Magic req_m, + const char *file, + const char *fnc, + int line) +{ + if (!d) + eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL, + file, fnc, line, + "*** Eina Magic Check Failed !!!\n" + " Input handle pointer is NULL !\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); + else + if (m == EINA_MAGIC_NONE) + eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL, + file, fnc, line, + "*** Eina Magic Check Failed !!!\n" + " Input handle has already been freed!\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); + else + if (m != req_m) + eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL, + file, fnc, line, + "*** Eina Magic Check Failed !!!\n" + " Input handle is wrong type\n" + " Expected: %08x - %s\n" + " Supplied: %08x - %s\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n", + req_m, eina_magic_string_get(req_m), + m, eina_magic_string_get(m)); + else + eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL, + file, fnc, line, + "*** Eina Magic Check Failed !!!\n" + " Why did you call me !\n" + "*** NAUGHTY PROGRAMMER!!!\n" + "*** SPANK SPANK SPANK!!!\n" + "*** Now go fix your code. Tut tut tut!\n" + "\n"); +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_main.c b/libraries/eina/src/lib/eina_main.c new file mode 100644 index 0000000..8727f83 --- /dev/null +++ b/libraries/eina/src/lib/eina_main.c @@ -0,0 +1,431 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#ifdef EFL_HAVE_WIN32_THREADS +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +#endif + +#ifdef EFL_HAVE_THREADS +# ifdef HAVE_SYS_TYPES_H +# include +# endif +# ifdef HAVE_UNISTD_H +# include +# endif +#endif + +#ifdef HAVE_MCHECK +# ifdef HAVE_MTRACE +# define MT 1 +# endif +#endif + +#ifdef MT +#include +#endif + +#include "eina_lock.h" +#include "eina_config.h" +#include "eina_private.h" +#include "eina_types.h" +#include "eina_main.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_hash.h" +#include "eina_binshare.h" +#include "eina_stringshare.h" +#include "eina_ustringshare.h" +#include "eina_list.h" +#include "eina_matrixsparse.h" +#include "eina_array.h" +#include "eina_counter.h" +#include "eina_benchmark.h" +#include "eina_magic.h" +#include "eina_rectangle.h" +#include "eina_safety_checks.h" +#include "eina_inlist.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static Eina_Version _version = { VMAJ, VMIN, VMIC, VREV }; + +static int _eina_main_count = 0; +#ifdef EFL_HAVE_THREADS +static int _eina_main_thread_count = 0; +#endif +static int _eina_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__) + +EAPI Eina_Bool _eina_threads_activated = EINA_FALSE; +EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0; + +static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed."; + +#ifdef EFL_HAVE_THREADS +# ifdef _WIN32 +EAPI DWORD _eina_main_loop; +# else +EAPI pthread_t _eina_main_loop; +# endif +static pid_t _eina_pid; +#endif + +#ifdef MT +static int _mt_enabled = 0; +#endif + +#ifdef EFL_HAVE_THREADS +EAPI int _eina_threads_debug = 0; +# if !defined(_WIN32_WCE) && !defined(_WIN32) +EAPI pthread_mutex_t _eina_tracking_lock; +EAPI Eina_Inlist *_eina_tracking = NULL; +# endif +#endif + +/* place module init/shutdown functions here to avoid other modules + * calling them by mistake. + */ +#define S(x) extern Eina_Bool eina_ ## x ## _init(void); \ + extern Eina_Bool eina_ ## x ## _shutdown(void) + S(log); + S(error); + S(safety_checks); + S(magic_string); + S(iterator); + S(accessor); + S(array); + S(module); + S(mempool); + S(list); + S(binshare); + S(stringshare); + S(ustringshare); + S(matrixsparse); + S(convert); + S(counter); + S(benchmark); + S(rectangle); + S(strbuf); + S(ustrbuf); + S(quadtree); + S(simple_xml); + S(file); + S(prefix); +#undef S + +struct eina_desc_setup +{ + const char *name; + Eina_Bool (*init)(void); + Eina_Bool (*shutdown)(void); +}; + +static const struct eina_desc_setup _eina_desc_setup[] = { +#define S(x) {# x, eina_ ## x ## _init, eina_ ## x ## _shutdown} + /* log is a special case as it needs printf */ + S(error), + S(safety_checks), + S(magic_string), + S(iterator), + S(accessor), + S(array), + S(module), + S(mempool), + S(list), + S(binshare), + S(stringshare), + S(ustringshare), + S(matrixsparse), + S(convert), + S(counter), + S(benchmark), + S(rectangle), + S(strbuf), + S(ustrbuf), + S(quadtree), + S(simple_xml), + S(file), + S(prefix) +#undef S +}; +static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / + sizeof(_eina_desc_setup[0]); + +static void +_eina_shutdown_from_desc(const struct eina_desc_setup *itr) +{ + for (itr--; itr >= _eina_desc_setup; itr--) + { + if (!itr->shutdown()) + ERR("Problems shutting down eina module '%s', ignored.", itr->name); + } + + eina_log_domain_unregister(_eina_log_dom); + _eina_log_dom = -1; + eina_log_shutdown(); +} + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @var eina_version + * @brief Eina version (defined at configuration time) + */ +EAPI Eina_Version *eina_version = &_version; + +EAPI int +eina_init(void) +{ + const struct eina_desc_setup *itr, *itr_end; + + if (EINA_LIKELY(_eina_main_count > 0)) + return ++_eina_main_count; + +#ifdef MT + if ((getenv("EINA_MTRACE")) && (getenv("MALLOC_TRACE"))) + { + _mt_enabled = 1; + mtrace(); + } +#endif + + if (!eina_log_init()) + { + fprintf(stderr, "Could not initialize eina logging system.\n"); + return 0; + } + + _eina_log_dom = eina_log_domain_register("eina", EINA_LOG_COLOR_DEFAULT); + if (_eina_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina"); + eina_log_shutdown(); + return 0; + } + + EINA_ERROR_NOT_MAIN_LOOP = eina_error_msg_static_register( + EINA_ERROR_NOT_MAIN_LOOP_STR); + +#ifdef EFL_HAVE_THREADS +# ifdef _WIN32 + _eina_main_loop = GetCurrentThreadId(); +# else + _eina_main_loop = pthread_self(); +# endif + _eina_pid = getpid(); +#endif + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_init(&_eina_tracking_lock, NULL); + + if (getenv("EINA_DEBUG_THREADS")) + _eina_threads_debug = atoi(getenv("EINA_DEBUG_THREADS")); +#endif + + itr = _eina_desc_setup; + itr_end = itr + _eina_desc_setup_len; + for (; itr < itr_end; itr++) + { + if (!itr->init()) + { + ERR("Could not initialize eina module '%s'.", itr->name); + _eina_shutdown_from_desc(itr); + return 0; + } + } + + _eina_main_count = 1; + return 1; +} + +EAPI int +eina_shutdown(void) +{ + _eina_main_count--; + if (EINA_UNLIKELY(_eina_main_count == 0)) + { + _eina_shutdown_from_desc(_eina_desc_setup + _eina_desc_setup_len); + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_destroy(&_eina_tracking_lock); +#endif +#ifdef MT + if (_mt_enabled) + { + muntrace(); + _mt_enabled = 0; + } +#endif + } + + return _eina_main_count; +} + + +EAPI int +eina_threads_init(void) +{ +#ifdef EFL_HAVE_THREADS + int ret; + +#ifdef EINA_HAVE_DEBUG_THREADS + assert(pthread_equal(_eina_main_loop, pthread_self())); +#endif + + ++_eina_main_thread_count; + ret = _eina_main_thread_count; + + if(_eina_main_thread_count > 1) + return ret; + + eina_share_common_threads_init(); + eina_log_threads_init(); + _eina_threads_activated = EINA_TRUE; + + return ret; +#else + return 0; +#endif +} + +EAPI int +eina_threads_shutdown(void) +{ +#ifdef EFL_HAVE_THREADS + int ret; + +#ifdef EINA_HAVE_DEBUG_THREADS + const Eina_Lock *lk; + + assert(pthread_equal(_eina_main_loop, pthread_self())); + assert(_eina_main_thread_count > 0); +#endif + + ret = --_eina_main_thread_count; + if(_eina_main_thread_count > 0) + return ret; + +#ifdef EINA_HAVE_DEBUG_THREADS + pthread_mutex_lock(&_eina_tracking_lock); + if (_eina_tracking) + { + fprintf(stderr, "*************************\n"); + fprintf(stderr, "* The IMPOSSIBLE HAPPEN *\n"); + fprintf(stderr, "* LOCK STILL TAKEN : *\n"); + fprintf(stderr, "*************************\n"); + EINA_INLIST_FOREACH(_eina_tracking, lk) + eina_lock_debug(lk); + fprintf(stderr, "*************************\n"); + abort(); + } + pthread_mutex_unlock(&_eina_tracking_lock); +#endif + + eina_share_common_threads_shutdown(); + eina_log_threads_shutdown(); + + _eina_threads_activated = EINA_FALSE; + + return ret; +#else + return 0; +#endif +} + +EAPI Eina_Bool +eina_main_loop_is(void) +{ +#ifdef EFL_HAVE_THREADS + pid_t pid = getpid(); + +# ifdef _WIN32 + if (pid != _eina_pid) + { + _eina_pid = pid; + _eina_main_loop = GetCurrentThreadId(); + return EINA_TRUE; + } + if (_eina_main_loop == GetCurrentThreadId()) + return EINA_TRUE; +# else + if (pid != _eina_pid) + { + /* This is in case of a fork, but don't like the solution */ + _eina_pid = pid; + _eina_main_loop = pthread_self(); + return EINA_TRUE; + } + + if (pthread_equal(_eina_main_loop, pthread_self())) + return EINA_TRUE; +# endif +#endif + return EINA_FALSE; +} + +/** The purpose of this API should not be documented, it is used only by the one who know what they are doing. */ +EAPI void +eina_main_loop_define(void) +{ +#ifdef EFL_HAVE_THREADS + _eina_pid = getpid(); +# ifdef _WIN32 + _eina_main_loop = GetCurrentThreadId(); +# else + _eina_main_loop = pthread_self(); +# endif +#endif +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_matrixsparse.c b/libraries/eina/src/lib/eina_matrixsparse.c new file mode 100644 index 0000000..3ac0439 --- /dev/null +++ b/libraries/eina/src/lib/eina_matrixsparse.c @@ -0,0 +1,1421 @@ +/* EINA - EFL data type library + * Copyright (C) 2009 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + + +/** + * @page tutorial_matrixsparse_page Sparse Matrix Tutorial + * + * to be written... + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_magic.h" +#include "eina_mempool.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_matrixsparse.h" + + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_MAGIC_MATRIXSPARSE_STR[] = "Eina Matrixsparse"; +static const char EINA_MAGIC_MATRIXSPARSE_ROW_STR[] = "Eina Matrixsparse Row"; +static const char EINA_MAGIC_MATRIXSPARSE_CELL_STR[] = "Eina Matrixsparse Cell"; +static const char EINA_MAGIC_MATRIXSPARSE_ITERATOR_STR[] = + "Eina Matrixsparse Iterator"; +static const char EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR_STR[] = + "Eina Matrixsparse Row Accessor"; +static const char EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR_STR[] = + "Eina Matrixsparse Row Iterator"; +static const char EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR_STR[] = + "Eina Matrixsparse Cell Accessor"; +static const char EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR_STR[] = + "Eina Matrixsparse Cell Iterator"; + + +#define EINA_MAGIC_CHECK_MATRIXSPARSE(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ROW)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ROW); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_CELL)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_CELL); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR); \ + return __VA_ARGS__; \ + } \ + } while(0) + +struct _Eina_Matrixsparse_Cell +{ + Eina_Matrixsparse_Cell *next; + Eina_Matrixsparse_Cell *prev; + + void *data; + unsigned long col; + + Eina_Matrixsparse_Row *parent; + + EINA_MAGIC +}; + +struct _Eina_Matrixsparse_Row +{ + Eina_Matrixsparse_Row *next; + Eina_Matrixsparse_Row *prev; + + Eina_Matrixsparse_Cell *cols; + Eina_Matrixsparse_Cell *last_col; + Eina_Matrixsparse_Cell *last_used; /* fast sequential access */ + unsigned long row; + + Eina_Matrixsparse *parent; + + EINA_MAGIC +}; + +struct _Eina_Matrixsparse +{ + Eina_Matrixsparse_Row *rows; + Eina_Matrixsparse_Row *last_row; + Eina_Matrixsparse_Row *last_used; /* fast sequential access */ + + struct + { + unsigned long rows; + unsigned long cols; + } size; + + struct + { + void (*func)(void *user_data, void *cell_data); + void *user_data; + } free; + + EINA_MAGIC +}; + +typedef struct _Eina_Matrixsparse_Iterator Eina_Matrixsparse_Iterator; +typedef struct _Eina_Matrixsparse_Iterator_Complete +Eina_Matrixsparse_Iterator_Complete; + +struct _Eina_Matrixsparse_Iterator +{ + Eina_Iterator iterator; + + const Eina_Matrixsparse *m; + struct + { + const Eina_Matrixsparse_Row *row; + const Eina_Matrixsparse_Cell *col; + } ref; + + EINA_MAGIC +}; + +struct _Eina_Matrixsparse_Iterator_Complete +{ + Eina_Iterator iterator; + + const Eina_Matrixsparse *m; + struct + { + const Eina_Matrixsparse_Row *row; + const Eina_Matrixsparse_Cell *col; + } ref; + + struct + { + unsigned long row, col; + } idx; + + struct + { + Eina_Matrixsparse_Row row; + Eina_Matrixsparse_Cell col; + } dummy; + + EINA_MAGIC +}; + +/** + * @todo Eina_Matrixsparse_Row_Iterator: iterator over rows in matrix + * @todo Eina_Matrixsparse_Row_Accessor: accessor over rows in matrix + * @todo Eina_Matrixsparse_Cell_Iterator: iterator over cells in row + * @todo Eina_Matrixsparse_Cell_Accessor: accessor over cells in row + */ + +static int _eina_matrixsparse_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_matrixsparse_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_matrixsparse_log_dom, __VA_ARGS__) + +static Eina_Mempool *_eina_matrixsparse_cell_mp = NULL; +static Eina_Mempool *_eina_matrixsparse_row_mp = NULL; + +static inline void +_eina_matrixsparse_cell_free(Eina_Matrixsparse_Cell *c, void (*free_func)( + void *, + void *), void *user_data) +{ + if (free_func) + free_func(user_data, c->data); + + EINA_MAGIC_SET(c, EINA_MAGIC_NONE); + eina_mempool_free(_eina_matrixsparse_cell_mp, c); +} + +static inline void +_eina_matrixsparse_cell_unlink(Eina_Matrixsparse_Cell *c) +{ + Eina_Matrixsparse_Row *r = c->parent; + + if (r->last_used == c) + { + if (c->next) + r->last_used = c->next; + else + r->last_used = c->prev; + } + + if (r->last_col == c) + r->last_col = c->prev; + + if (r->cols == c) + r->cols = c->next; + + if (c->next && c->prev) + { + c->next->prev = c->prev; + c->prev->next = c->next; + } + else if (c->next) + c->next->prev = NULL; + else if (c->prev) + c->prev->next = NULL; +} + +static inline void +_eina_matrixsparse_row_cells_free(Eina_Matrixsparse_Row *r, void (*free_func)( + void *, + void *), void *user_data) +{ + Eina_Matrixsparse_Cell *c = r->cols; + while (c) + { + Eina_Matrixsparse_Cell *c_aux = c; + c = c->next; + _eina_matrixsparse_cell_free(c_aux, free_func, user_data); + } +} + +static inline void +_eina_matrixsparse_row_free(Eina_Matrixsparse_Row *r, void (*free_func)(void *, + void *), + void *user_data) +{ + _eina_matrixsparse_row_cells_free(r, free_func, user_data); + EINA_MAGIC_SET(r, EINA_MAGIC_NONE); + eina_mempool_free(_eina_matrixsparse_row_mp, r); +} + +static inline void +_eina_matrixsparse_row_unlink(Eina_Matrixsparse_Row *r) +{ + Eina_Matrixsparse *m = r->parent; + + if (m->last_used == r) + { + if (r->next) + m->last_used = r->next; + else + m->last_used = r->prev; + } + + if (m->last_row == r) + m->last_row = r->prev; + + if (m->rows == r) + m->rows = r->next; + + if (r->next && r->prev) + { + r->next->prev = r->prev; + r->prev->next = r->next; + } + else if (r->next) + r->next->prev = NULL; + else if (r->prev) + r->prev->next = NULL; +} + +static inline void +_eina_matrixsparse_row_find_parms_get(const Eina_Matrixsparse *m, + unsigned long row, + Eina_Matrixsparse_Row **p_r, + int *p_dir) +{ + Eina_Matrixsparse_Row *r; + unsigned long dist; + int dir; + + dist = row - m->rows->row; + r = m->rows; + dir = 1; + if (dist > m->last_row->row - row) + { + dist = m->last_row->row - row; + r = m->last_row; + dir = -1; + } + + if (m->last_used) + { + if (m->last_used->row < row) + { + if (dist > row - m->last_used->row) + { +/* dist = row = m->last_used->row; */ + r = m->last_used; + dir = 1; + } + } + else if (dist > m->last_used->row - row) + { +/* dist = m->last_used->row - row; */ + r = m->last_used; + dir = -1; + } + } + + *p_r = r; + *p_dir = dir; +} + +static inline void +_eina_matrixsparse_row_cell_find_parms_get(const Eina_Matrixsparse_Row *r, + unsigned long col, + Eina_Matrixsparse_Cell **p_c, + int *p_dir) +{ + Eina_Matrixsparse_Cell *c; + unsigned long dist; + int dir; + + dist = col - r->cols->col; + c = r->cols; + dir = 1; + if (dist > r->last_col->col - col) + { + dist = r->last_col->col - col; + c = r->last_col; + dir = -1; + } + + if (r->last_used) + { + if (r->last_used->col < col) + { + if (dist > col - r->last_used->col) + { +/* dist = col = r->last_used->col; */ + c = r->last_used; + dir = 1; + } + } + else if (dist > r->last_used->col - col) + { +/* dist = r->last_used->col - col; */ + c = r->last_used; + dir = -1; + } + } + + *p_c = c; + *p_dir = dir; +} + +static inline Eina_Matrixsparse_Row * +_eina_matrixsparse_row_idx_get(const Eina_Matrixsparse *m, unsigned long row) +{ + Eina_Matrixsparse_Row *r; + int dir; + + if (!m->rows) + return NULL; + + if (m->rows->row == row) + return m->rows; + else if (m->rows->row > row) + return NULL; + + if (m->last_row->row == row) + return m->last_row; + else if (m->last_row->row < row) + return NULL; + + if ((m->last_used) && (m->last_used->row == row)) + return m->last_used; + + _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir); + assert(dir != 0); + if (dir > 0) + { + for (; r; r = r->next) + if (r->row == row) + { + ((Eina_Matrixsparse *)m)->last_used = r; + return r; + } + else if (r->row > row) + return NULL; + + } + else if (dir < 0) + { + for (; r; r = r->prev) + if (r->row == row) + { + ((Eina_Matrixsparse *)m)->last_used = r; + return r; + } + else if (r->row < row) + return NULL; + } + + return NULL; +} + +static inline Eina_Matrixsparse_Cell * +_eina_matrixsparse_row_cell_idx_get(const Eina_Matrixsparse_Row *r, + unsigned long col) +{ + Eina_Matrixsparse_Cell *c; + int dir; + + if (!r->cols) + return NULL; + + if (r->cols->col == col) + return r->cols; + else if (r->cols->col > col) + return NULL; + + if (r->last_col->col == col) + return r->last_col; + else if (r->last_col->col < col) + return NULL; + + if ((r->last_used) && (r->last_used->col == col)) + return r->last_used; + + _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir); + assert(dir != 0); + if (dir > 0) + { + for (; r; c = c->next) + if (c->col == col) + { + ((Eina_Matrixsparse_Row *)r)->last_used = c; + return c; + } + else if (c->col > col) + return NULL; + + } + else if (dir < 0) + { + for (; r; c = c->prev) + if (c->col == col) + { + ((Eina_Matrixsparse_Row *)r)->last_used = c; + return c; + } + else if (c->col < col) + return NULL; + } + + return NULL; +} + +static inline Eina_Matrixsparse_Cell * +_eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, + unsigned long row, + unsigned long col) +{ + Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row); + if (!r) + return NULL; + + return _eina_matrixsparse_row_cell_idx_get(r, col); +} + +static inline void +_eina_matrixsparse_row_idx_siblings_find(const Eina_Matrixsparse *m, + unsigned long row, + Eina_Matrixsparse_Row **p_prev, + Eina_Matrixsparse_Row **p_next) +{ + Eina_Matrixsparse_Row *r; + int dir; + + _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir); + assert(dir != 0); + if (dir > 0) + { + for (; r; r = r->next) + if (r->row > row) + break; + + assert(r != NULL); + *p_prev = r->prev; + *p_next = r; + } + else if (dir < 0) + { + for (; r; r = r->prev) + if (r->row < row) + break; + + assert(r != NULL); + *p_prev = r; + *p_next = r->next; + } +} + +static inline void +_eina_matrixsparse_row_cell_idx_siblings_find(const Eina_Matrixsparse_Row *r, + unsigned long col, + Eina_Matrixsparse_Cell **p_prev, + Eina_Matrixsparse_Cell **p_next) +{ + Eina_Matrixsparse_Cell *c; + int dir; + + _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir); + assert(dir != 0); + if (dir > 0) + { + for (; c; c = c->next) + if (c->col > col) + break; + + assert(c != NULL); + *p_prev = c->prev; + *p_next = c; + } + else if (dir < 0) + { + for (; c; c = c->prev) + if (c->col < col) + break; + + assert(c != NULL); + *p_prev = c; + *p_next = c->next; + } +} + +static inline Eina_Matrixsparse_Row * +_eina_matrixsparse_row_idx_add(Eina_Matrixsparse *m, unsigned long row) +{ + Eina_Matrixsparse_Row *r = eina_mempool_malloc + (_eina_matrixsparse_row_mp, sizeof(Eina_Matrixsparse_Row)); + if (!r) + return NULL; + + if (!m->rows) + { + r->prev = NULL; + r->next = NULL; + m->rows = r; + m->last_row = r; + } + else if (row < m->rows->row) + { + r->prev = NULL; + r->next = m->rows; + m->rows->prev = r; + m->rows = r; + } + else if (row > m->last_row->row) + { + r->prev = m->last_row; + m->last_row->next = r; + r->next = NULL; + m->last_row = r; + } + else + { + Eina_Matrixsparse_Row *prev = NULL, *next = NULL; + _eina_matrixsparse_row_idx_siblings_find(m, row, &prev, &next); + assert(prev != NULL); + assert(next != NULL); + r->prev = prev; + r->next = next; + prev->next = r; + next->prev = r; + } + + r->cols = NULL; + r->last_col = NULL; + r->last_used = NULL; + r->row = row; + r->parent = m; + EINA_MAGIC_SET(r, EINA_MAGIC_MATRIXSPARSE_ROW); + m->last_used = r; + return r; +} + +static inline Eina_Matrixsparse_Cell * +_eina_matrixsparse_row_cell_idx_add(Eina_Matrixsparse_Row *r, + unsigned long col, + const void *data) +{ + Eina_Matrixsparse_Cell *c = eina_mempool_malloc + (_eina_matrixsparse_cell_mp, sizeof(Eina_Matrixsparse_Cell)); + if (!c) + return NULL; + + if (!r->cols) + { + c->prev = NULL; + c->next = NULL; + r->cols = c; + r->last_col = c; + } + else if (col < r->cols->col) + { + c->prev = NULL; + c->next = r->cols; + r->cols->prev = c; + r->cols = c; + } + else if (col > r->last_col->col) + { + c->prev = r->last_col; + r->last_col->next = c; + c->next = NULL; + r->last_col = c; + } + else + { + Eina_Matrixsparse_Cell *prev = NULL, *next = NULL; + _eina_matrixsparse_row_cell_idx_siblings_find(r, col, &prev, &next); + assert(prev != NULL); + assert(next != NULL); + c->prev = prev; + c->next = next; + prev->next = c; + next->prev = c; + } + + c->data = (void *)data; + c->col = col; + c->parent = r; + EINA_MAGIC_SET(c, EINA_MAGIC_MATRIXSPARSE_CELL); + r->last_used = c; + return c; +} + +static inline Eina_Bool +_eina_matrixsparse_cell_idx_add(Eina_Matrixsparse *m, + unsigned long row, + unsigned long col, + const void *data) +{ + Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row); + if (!r) + r = _eina_matrixsparse_row_idx_add(m, row); + + if (!r) + return 0; + + if (_eina_matrixsparse_row_cell_idx_add(r, col, data)) + return 1; + + if (r->cols) + return 0; + + _eina_matrixsparse_row_unlink(r); + _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data); + return 0; +} + +/*============================================================================* +* Iterators * +*============================================================================*/ +static Eina_Bool +_eina_matrixsparse_iterator_next(Eina_Matrixsparse_Iterator *it, void **data) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE); + + /* do not touch it->idx */ + + if (!it->ref.col) + return 0; + + *data = (Eina_Matrixsparse_Cell *)it->ref.col; + + it->ref.col = it->ref.col->next; + if (!it->ref.col) + { + it->ref.row = it->ref.row->next; + if (it->ref.row) + it->ref.col = it->ref.row->cols; + } + + return 1; +} + +static Eina_Matrixsparse * +_eina_matrixsparse_iterator_get_container(Eina_Matrixsparse_Iterator *it) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL); + return (Eina_Matrixsparse *)it->m; +} + +static void +_eina_matrixsparse_iterator_free(Eina_Matrixsparse_Iterator *it) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it); + EINA_MAGIC_SET(it, EINA_MAGIC_NONE); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); + free(it); +} + +static Eina_Bool +_eina_matrixsparse_iterator_complete_next( + Eina_Matrixsparse_Iterator_Complete *it, + void **data) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE); + + if (it->idx.row >= it->m->size.rows) + return 0; + + if (it->dummy.col.data) + ERR("Last iterator call changed dummy cell!"); + + if ((it->ref.col) && + (it->ref.col->col == it->idx.col) && + (it->ref.row->row == it->idx.row)) + { + *data = (Eina_Matrixsparse_Cell *)it->ref.col; + it->ref.col = it->ref.col->next; + if (!it->ref.col) + { + it->ref.row = it->ref.row->next; + if (it->ref.row) + it->ref.col = it->ref.row->cols; + } + } + else + { + it->dummy.col.data = NULL; + it->dummy.col.col = it->idx.col; + it->dummy.row.row = it->idx.row; + *data = &it->dummy.col; + } + + it->idx.col++; + if (it->idx.col == it->m->size.cols) + { + it->idx.col = 0; + it->idx.row++; + } + + return 1; +} + +static Eina_Matrixsparse * +_eina_matrixsparse_iterator_complete_get_container( + Eina_Matrixsparse_Iterator_Complete *it) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL); + return (Eina_Matrixsparse *)it->m; +} + +static void +_eina_matrixsparse_iterator_complete_free( + Eina_Matrixsparse_Iterator_Complete *it) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it); + + if (it->dummy.col.data) + ERR("Last iterator call changed dummy cell!"); + + EINA_MAGIC_SET(it, EINA_MAGIC_NONE); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); + free(it); +} + + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the matrixsparse module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the matrixsparse module of Eina. It is called by + * eina_init(). + * + * This function creates mempool to speed up matrix rows and cells + * management, using EINA_MEMPOOL environment variable if it is set to + * choose the memory pool type to use. + * + * @see eina_init() + */ +Eina_Bool +eina_matrixsparse_init(void) +{ + const char *choice, *tmp; + + _eina_matrixsparse_log_dom = eina_log_domain_register("eina_matrixsparse", + EINA_LOG_COLOR_DEFAULT); + if (_eina_matrixsparse_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_matrixsparse"); + return EINA_FALSE; + } + +#ifdef EINA_DEFAULT_MEMPOOL + choice = "pass_through"; +#else + choice = "chained_mempool"; +#endif + tmp = getenv("EINA_MEMPOOL"); + if (tmp && tmp[0]) + choice = tmp; + + _eina_matrixsparse_cell_mp = eina_mempool_add + (choice, + "matrixsparse_cell", + NULL, + sizeof (Eina_Matrixsparse_Cell), + 120); + if (!_eina_matrixsparse_cell_mp) + { + ERR( + "Mempool for matrixsparse_cell cannot be allocated in matrixsparse init."); + goto on_init_fail; + } + + _eina_matrixsparse_row_mp = eina_mempool_add + (choice, "matrixsparse_row", NULL, sizeof (Eina_Matrixsparse_Row), 120); + if (!_eina_matrixsparse_row_mp) + { + ERR( + "Mempool for matrixsparse_row cannot be allocated in matrixsparse init."); + goto on_init_fail; + } + +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_MATRIXSPARSE); + EMS(EINA_MAGIC_MATRIXSPARSE_ROW); + EMS(EINA_MAGIC_MATRIXSPARSE_CELL); + EMS(EINA_MAGIC_MATRIXSPARSE_ITERATOR); + EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR); + EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR); + EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR); + EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR); +#undef EMS + + return EINA_TRUE; + +on_init_fail: + eina_log_domain_unregister(_eina_matrixsparse_log_dom); + _eina_matrixsparse_log_dom = -1; + return EINA_FALSE; +} + +/** + * @internal + * @brief Shut down the matrixsparse module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the matrixsparse module set up by + * eina_matrixsparse_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_matrixsparse_shutdown(void) +{ + eina_mempool_del(_eina_matrixsparse_row_mp); + eina_mempool_del(_eina_matrixsparse_cell_mp); + + eina_log_domain_unregister(_eina_matrixsparse_log_dom); + _eina_matrixsparse_log_dom = -1; + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Matrixsparse * +eina_matrixsparse_new(unsigned long rows, unsigned long cols, void (*free_func)( + void *user_data, + void *cell_data), const void *user_data) +{ + Eina_Matrixsparse *m; + + EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, NULL); + EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, NULL); + + m = malloc(sizeof(Eina_Matrixsparse)); + if (!m) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(m, EINA_MAGIC_MATRIXSPARSE); + + m->rows = NULL; + m->last_row = NULL; + m->last_used = NULL; + + m->size.rows = rows; + m->size.cols = cols; + m->free.func = free_func; + m->free.user_data = (void *)user_data; + + eina_error_set(0); + return m; +} + +EAPI void +eina_matrixsparse_free(Eina_Matrixsparse *m) +{ + void (*free_func)(void *, void *); + void *user_data; + + Eina_Matrixsparse_Row *r; + EINA_MAGIC_CHECK_MATRIXSPARSE(m); + + free_func = m->free.func; + user_data = m->free.user_data; + + r = m->rows; + while (r) + { + Eina_Matrixsparse_Row *r_aux = r; + r = r->next; + _eina_matrixsparse_row_free(r_aux, free_func, user_data); + } + + EINA_MAGIC_SET(m, EINA_MAGIC_NONE); + free(m); +} + +EAPI void +eina_matrixsparse_size_get(const Eina_Matrixsparse *m, + unsigned long *rows, + unsigned long *cols) +{ + if (rows) + *rows = 0; + + if (cols) + *cols = 0; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m); + if (rows) + *rows = m->size.rows; + + if (cols) + *cols = m->size.cols; +} + +EAPI Eina_Bool +eina_matrixsparse_size_set(Eina_Matrixsparse *m, + unsigned long rows, + unsigned long cols) +{ + Eina_Bool update_last_used_row; + Eina_Matrixsparse_Row *r; + void (*free_func)(void *, void *); + void *user_data; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, 0); + + if ((rows == m->size.rows) && (cols == m->size.cols)) + return 1; + + update_last_used_row = ((m->last_used) && (m->last_used->row >= rows)); + free_func = m->free.func; + user_data = m->free.user_data; + + r = m->last_row; + while (r && r->row >= rows) + { + Eina_Matrixsparse_Row *r_aux = r; + r = r->prev; + _eina_matrixsparse_row_free(r_aux, free_func, user_data); + } + if (!r) + { + m->last_row = NULL; + m->rows = NULL; + } + else if (r != m->last_row) + { + r->next = NULL; + m->last_row = r; + } + + if (update_last_used_row) + m->last_used = m->last_row; + + r = m->rows; + while (r) + { + Eina_Matrixsparse_Cell *c = r->last_col; + Eina_Bool update_last_used_col; + update_last_used_col = ((r->last_used) && (r->last_used->col >= cols)); + while (c && c->col >= cols) + { + Eina_Matrixsparse_Cell *c_aux = c; + c = c->prev; + _eina_matrixsparse_cell_free(c_aux, free_func, user_data); + } + if (!c) + { + Eina_Matrixsparse_Row *r_aux = r; + r->cols = NULL; + r->last_col = NULL; + if (r->next) + r->next->prev = r->prev; + else + m->last_row = r->prev; + + if (r->prev) + r->prev->next = r->next; + else + m->rows = r->next; + + r = r->next; + _eina_matrixsparse_row_free(r_aux, free_func, user_data); + } + else + { + if (c != r->last_col) + { + c->next = NULL; + r->last_col = c; + } + + if (update_last_used_col) + r->last_used = r->last_col; + + r = r->next; + } + } + + update_last_used_row = 0; + if (m->last_used) + { + if (m->last_row) + update_last_used_row = m->last_used->row > m->last_row->row; + else + update_last_used_row = 1; + } + + if (update_last_used_row) + m->last_used = m->last_row; + + m->size.rows = rows; + m->size.cols = cols; + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, + unsigned long row, + unsigned long col, + Eina_Matrixsparse_Cell **cell) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0); + *cell = NULL; + EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); + *cell = _eina_matrixsparse_cell_idx_get(m, row, col); + return 1; +} + +EAPI void * +eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell) +{ + EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, NULL); + return cell->data; +} + +EAPI void * +eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, + unsigned long row, + unsigned long col) +{ + Eina_Matrixsparse_Cell *c; + EINA_MAGIC_CHECK_MATRIXSPARSE(m, NULL); + c = _eina_matrixsparse_cell_idx_get(m, row, col); + if (c) + return c->data; + else + return NULL; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell, + unsigned long *row, + unsigned long *col) +{ + if (row) + *row = 0; + + if (col) + *col = 0; + + EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); + EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); + if (row) + *row = cell->parent->row; + + if (col) + *col = cell->col; + + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell, + const void *data, + void **p_old) +{ + if (p_old) + *p_old = NULL; + + EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); + + if (p_old) + *p_old = cell->data; + + cell->data = (void *)data; + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data) +{ + Eina_Matrixsparse *m; + + EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); + EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); + EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0); + + m = cell->parent->parent; + + if (m->free.func) + m->free.func(m->free.user_data, cell->data); + + cell->data = (void *)data; + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, + unsigned long row, + unsigned long col, + const void *data, + void **p_old) +{ + Eina_Matrixsparse_Cell *cell; + + if (p_old) + *p_old = NULL; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); + + cell = _eina_matrixsparse_cell_idx_get(m, row, col); + if (cell) + { + if (p_old) + *p_old = cell->data; + + cell->data = (void *)data; + return 1; + } + + return _eina_matrixsparse_cell_idx_add(m, row, col, data); +} + +EAPI Eina_Bool +eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, + unsigned long row, + unsigned long col, + const void *data) +{ + Eina_Matrixsparse_Cell *cell; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); + + cell = _eina_matrixsparse_cell_idx_get(m, row, col); + if (cell) + { + if (m->free.func) + m->free.func(m->free.user_data, cell->data); + + cell->data = (void *)data; + return 1; + } + + return _eina_matrixsparse_cell_idx_add(m, row, col, data); +} + +EAPI Eina_Bool +eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row) +{ + Eina_Matrixsparse_Row *r; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); + + r = _eina_matrixsparse_row_idx_get(m, row); + if (!r) + return 1; + + _eina_matrixsparse_row_unlink(r); + _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data); + + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col) +{ + Eina_Matrixsparse_Row *r; + void (*free_func)(void *, void *); + void *user_data; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); + + free_func = m->free.func; + user_data = m->free.user_data; + + for (r = m->rows; r; ) + { + Eina_Matrixsparse_Row *r_aux = r; + Eina_Matrixsparse_Cell *c; + + c = _eina_matrixsparse_row_cell_idx_get(r, col); + r = r->next; + + if (!c) + continue; + + if ((r_aux->cols != c) || (r_aux->last_col != c)) + { + _eina_matrixsparse_cell_unlink(c); + _eina_matrixsparse_cell_free(c, free_func, user_data); + } + else + { + _eina_matrixsparse_row_unlink(r_aux); + _eina_matrixsparse_row_free(r_aux, free_func, user_data); + } + } + + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, + unsigned long row, + unsigned long col) +{ + Eina_Matrixsparse_Cell *c; + + EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); + EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); + + c = _eina_matrixsparse_cell_idx_get(m, row, col); + if (!c) + return 1; + + _eina_matrixsparse_cell_unlink(c); + _eina_matrixsparse_cell_free(c, m->free.func, m->free.user_data); + + return 1; +} + +EAPI Eina_Bool +eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell) +{ + Eina_Matrixsparse *m; + + EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); + EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); + EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0); + + m = cell->parent->parent; + + _eina_matrixsparse_cell_unlink(cell); + _eina_matrixsparse_cell_free(cell, m->free.func, m->free.user_data); + return 1; +} + +EAPI Eina_Iterator * +eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m) +{ + Eina_Matrixsparse_Iterator *it; + + it = calloc(1, sizeof(*it)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->m = m; + it->ref.row = m->rows; + it->ref.col = m->rows ? m->rows->cols : NULL; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_matrixsparse_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_matrixsparse_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_matrixsparse_iterator_free); + return &it->iterator; +} + +EAPI Eina_Iterator * +eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m) +{ + Eina_Matrixsparse_Iterator_Complete *it; + + it = calloc(1, sizeof(*it)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR); + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->m = m; + it->idx.row = 0; + it->idx.col = 0; + it->ref.row = m->rows; + it->ref.col = m->rows ? m->rows->cols : NULL; + + it->dummy.row.next = it->dummy.row.prev = NULL; + it->dummy.row.cols = it->dummy.row.last_col = it->dummy.row.last_used = NULL; + it->dummy.row.parent = (Eina_Matrixsparse *)m; + EINA_MAGIC_SET(&it->dummy.row, EINA_MAGIC_MATRIXSPARSE_ROW); + + it->dummy.col.next = it->dummy.col.prev = NULL; + it->dummy.col.data = NULL; + it->dummy.col.parent = &it->dummy.row; + EINA_MAGIC_SET(&it->dummy.col, EINA_MAGIC_MATRIXSPARSE_CELL); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT( + _eina_matrixsparse_iterator_complete_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_matrixsparse_iterator_complete_get_container); + it->iterator.free = FUNC_ITERATOR_FREE( + _eina_matrixsparse_iterator_complete_free); + return &it->iterator; +} diff --git a/libraries/eina/src/lib/eina_mempool.c b/libraries/eina/src/lib/eina_mempool.c new file mode 100644 index 0000000..065532e --- /dev/null +++ b/libraries/eina/src/lib/eina_mempool.c @@ -0,0 +1,387 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_hash.h" +#include "eina_module.h" +#include "eina_log.h" +#include "eina_main.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_mempool.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static Eina_Hash *_backends; +static Eina_Array *_modules; +static int _eina_mempool_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_mempool_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_mempool_log_dom, __VA_ARGS__) + + +static Eina_Mempool * +_new_va(const char *name, + const char *context, + const char *options, + va_list args) +{ + Eina_Mempool_Backend *be; + Eina_Mempool *mp; + + Eina_Error err = EINA_ERROR_NOT_MEMPOOL_MODULE; + + eina_error_set(0); + be = eina_hash_find(_backends, name); + if ((!be) || (!be->init)) + goto on_error; + + err = EINA_ERROR_OUT_OF_MEMORY; + mp = calloc(1, sizeof(Eina_Mempool)); + if (!mp) + goto on_error; + + /* Work around ABI incompability introduced in Eina 1.1 */ +#define SBP(Property) mp->backend.Property = be->Property; + SBP(name); + SBP(init); + SBP(free); + SBP(alloc); + SBP(realloc); + SBP(garbage_collect); + SBP(statistics); + SBP(shutdown); +#undef SBP + + if (be->repack) + { + mp->backend2 = calloc(1, sizeof (Eina_Mempool_Backend_ABI2)); + if (mp->backend2) + mp->backend2->repack = be->repack; + } + + mp->backend_data = mp->backend.init(context, options, args); + + return mp; + +on_error: + eina_error_set(err); + return NULL; +} + +/* Built-in backend's prototypes */ + +#ifdef EINA_STATIC_BUILD_BUDDY +Eina_Bool buddy_init(void); +void buddy_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_CHAINED_POOL +Eina_Bool chained_init(void); +void chained_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED +Eina_Bool ememoa_fixed_init(void); +void ememoa_fixed_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN +Eina_Bool ememoa_unknown_init(void); +void ememoa_unknown_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_FIXED_BITMAP +Eina_Bool fixed_bitmap_init(void); +void fixed_bitmap_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_ONE_BIG +Eina_Bool one_big_init(void); +void one_big_shutdown(void); +#endif + +#ifdef EINA_STATIC_BUILD_PASS_THROUGH +Eina_Bool pass_through_init(void); +void pass_through_shutdown(void); +#endif + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +EAPI Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE = 0; + +static const char EINA_ERROR_NOT_MEMPOOL_MODULE_STR[] = + "Not a memory pool module."; + +/** + * @endcond + */ + +EAPI Eina_Bool +eina_mempool_register(Eina_Mempool_Backend *be) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(be, 0); + DBG("be=%p, name=%p", be, be->name); + return eina_hash_add(_backends, be->name, be); +} + +EAPI void +eina_mempool_unregister(Eina_Mempool_Backend *be) +{ + EINA_SAFETY_ON_NULL_RETURN(be); + DBG("be=%p, name=%p", be, be->name); + eina_hash_del(_backends, be->name, be); +} + +Eina_Bool +eina_mempool_init(void) +{ + char *path; + + _eina_mempool_log_dom = eina_log_domain_register("eina_mempool", + EINA_LOG_COLOR_DEFAULT); + if (_eina_mempool_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_mempool"); + return 0; + } + + EINA_ERROR_NOT_MEMPOOL_MODULE = eina_error_msg_static_register( + EINA_ERROR_NOT_MEMPOOL_MODULE_STR); + _backends = eina_hash_string_superfast_new(NULL); + + /* dynamic backends */ + _modules = eina_module_arch_list_get(NULL, + PACKAGE_LIB_DIR "/eina/modules/mp", + MODULE_ARCH); + + path = eina_module_environment_path_get("HOME", "/.eina/mp/modules/mp"); + _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); + if (path) + free(path); + + path = eina_module_environment_path_get("EINA_MODULES_MEMPOOL_DIR", + "/eina/modules/mp"); + _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); + if (path) + free(path); + + path = eina_module_symbol_path_get((const void *)eina_init, + "/eina/modules/mp"); + _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); + if (path) + free(path); + + if (!_modules) + { + ERR("no mempool modules able to be loaded."); + eina_hash_free(_backends); + goto mempool_init_error; + } + + eina_module_list_load(_modules); + + /* builtin backends */ +#ifdef EINA_STATIC_BUILD_BUDDY + buddy_init(); +#endif +#ifdef EINA_STATIC_BUILD_CHAINED_POOL + chained_init(); +#endif +#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED + ememoa_fixed_init(); +#endif +#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN + ememoa_unknown_init(); +#endif +#ifdef EINA_STATIC_BUILD_FIXED_BITMAP + fixed_bitmap_init(); +#endif +#ifdef EINA_STATIC_BUILD_ONE_BIG + one_big_init(); +#endif +#ifdef EINA_STATIC_BUILD_PASS_THROUGH + pass_through_init(); +#endif + + return EINA_TRUE; + +mempool_init_error: + eina_log_domain_unregister(_eina_mempool_log_dom); + _eina_mempool_log_dom = -1; + + return EINA_FALSE; +} + +Eina_Bool +eina_mempool_shutdown(void) +{ + /* builtin backends */ +#ifdef EINA_STATIC_BUILD_BUDDY + buddy_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_CHAINED_POOL + chained_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED + ememoa_fixed_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN + ememoa_unknown_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_FIXED_BITMAP + fixed_bitmap_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_ONE_BIG + one_big_shutdown(); +#endif +#ifdef EINA_STATIC_BUILD_PASS_THROUGH + pass_through_shutdown(); +#endif + /* dynamic backends */ + eina_module_list_free(_modules); + if (_modules) + eina_array_free(_modules); + + if (_backends) + eina_hash_free(_backends); + + eina_log_domain_unregister(_eina_mempool_log_dom); + _eina_mempool_log_dom = -1; + + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Mempool * +eina_mempool_add(const char *name, + const char *context, + const char *options, + ...) +{ + Eina_Mempool *mp; + va_list args; + + EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); + DBG("name=%s, context=%s, options=%s", + name, context ? context : "", options ? options : ""); + + va_start(args, options); + mp = _new_va(name, context, options, args); + va_end(args); + + DBG("name=%s, context=%s, options=%s, mp=%p", + name, context ? context : "", options ? options : "", mp); + + return mp; +} + +EAPI void eina_mempool_del(Eina_Mempool *mp) +{ + EINA_SAFETY_ON_NULL_RETURN(mp); + EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown); + DBG("mp=%p", mp); + mp->backend.shutdown(mp->backend_data); + free(mp->backend2); + free(mp); +} + +EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) +{ + EINA_SAFETY_ON_NULL_RETURN(mp); + EINA_SAFETY_ON_NULL_RETURN(mp->backend2); + EINA_SAFETY_ON_NULL_RETURN(mp->backend2->repack); + DBG("mp=%p", mp); + mp->backend2->repack(mp->backend_data, cb, data); +} + +EAPI void eina_mempool_gc(Eina_Mempool *mp) +{ + EINA_SAFETY_ON_NULL_RETURN(mp); + EINA_SAFETY_ON_NULL_RETURN(mp->backend.garbage_collect); + DBG("mp=%p", mp); + mp->backend.garbage_collect(mp->backend_data); +} + +EAPI void eina_mempool_statistics(Eina_Mempool *mp) +{ + EINA_SAFETY_ON_NULL_RETURN(mp); + EINA_SAFETY_ON_NULL_RETURN(mp->backend.statistics); + DBG("mp=%p", mp); + mp->backend.statistics(mp->backend_data); +} + +EAPI unsigned int +eina_mempool_alignof(unsigned int size) +{ + int align; + + if (size <= 2) + align = 2; + else if (size < 8) + align = 4; + else +#if __WORDSIZE == 32 + align = 8; + +#else + if (size < 16) + align = 8; + else + align = 16; +#endif + + return ((size / align) + 1) * align; +} diff --git a/libraries/eina/src/lib/eina_mmap.c b/libraries/eina/src/lib/eina_mmap.c new file mode 100644 index 0000000..fb27bd7 --- /dev/null +++ b/libraries/eina/src/lib/eina_mmap.c @@ -0,0 +1,185 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Carsten Haitzler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_SIGINFO_T + +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if HAVE_SIGINFO_H +# include +#endif + +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_log.h" +#include "eina_mmap.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +static Eina_Bool mmap_safe = EINA_FALSE; +#ifdef HAVE_SIGINFO_T + +static int _eina_mmap_log_dom = -1; +static int _eina_mmap_zero_fd = -1; +static long _eina_mmap_pagesize = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_mmap_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_mmap_log_dom, __VA_ARGS__) + +static void +_eina_mmap_safe_sigbus(int sig __UNUSED__, + siginfo_t *siginfo, + void *ptr __UNUSED__) +{ + unsigned char *addr = (unsigned char *)(siginfo->si_addr); + int perrno; + + /* save previous errno */ + perrno = errno; + /* if problems was an unaligned access - complain accordingly and abort */ + if (siginfo->si_code == BUS_ADRALN) + { + ERR("Unaligned memory access. SIGBUS!!!"); + errno = perrno; + abort(); + } + /* send this to stderr - not eina_log. Specifically want this on stderr */ + fprintf(stderr, + "EINA: Data at address 0x%lx is invalid. Replacing with zero page.\n", + (unsigned long)addr); + /* align address to the lower page boundary */ + addr = (unsigned char *)((long)addr & (~(_eina_mmap_pagesize - 1))); + /* mmap a pzge of zero's from /dev/zero in there */ + if (mmap(addr, _eina_mmap_pagesize, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_FIXED, + _eina_mmap_zero_fd, 0) == MAP_FAILED) + { + /* mmap of /dev/zero failed :( */ + perror("mmap"); + ERR("Failed to mmap() /dev/zero in place of page. SIGBUS!!!"); + errno = perrno; + abort(); + } + /* restore previous errno */ + errno = perrno; +} +#endif + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI Eina_Bool +eina_mmap_safety_enabled_set(Eina_Bool enabled) +{ +#ifndef HAVE_SIGINFO_T + (void) enabled; + return EINA_FALSE; +#else + if (_eina_mmap_log_dom < 0) + { + _eina_mmap_log_dom = eina_log_domain_register("eina_mmap", + EINA_LOG_COLOR_DEFAULT); + if (_eina_mmap_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_mmap"); + return EINA_FALSE; + } + } + + enabled = !!enabled; + + if (mmap_safe == enabled) return mmap_safe; + if (enabled) + { + struct sigaction sa; + + /* find out system page size the cleanest way we can */ +#ifdef _SC_PAGESIZE + _eina_mmap_pagesize = sysconf(_SC_PAGESIZE); + if (_eina_mmap_pagesize <= 0) return EINA_FALSE; +#else + _eina_mmap_pagesize = 4096; +#endif + /* no zero page device - open it */ + if (_eina_mmap_zero_fd < 0) + { + _eina_mmap_zero_fd = open("/dev/zero", O_RDWR); + /* if we don;'t have one - fail to set up mmap safety */ + if (_eina_mmap_zero_fd < 0) return EINA_FALSE; + } + /* set up signal handler for SIGBUS */ + sa.sa_sigaction = _eina_mmap_safe_sigbus; + sa.sa_flags = SA_RESTART | SA_SIGINFO; + sigemptyset(&sa.sa_mask); + if (sigaction(SIGBUS, &sa, NULL) == 0) return EINA_FALSE; + /* setup of SIGBUS handler failed, lets close zero page dev and fail */ + close(_eina_mmap_zero_fd); + _eina_mmap_zero_fd = -1; + return EINA_FALSE; + } + else + { + /* reset signal handler to default for SIGBUS */ + signal(SIGBUS, SIG_DFL); + } + mmap_safe = enabled; + return mmap_safe; +#endif +} + +EAPI Eina_Bool +eina_mmap_safety_enabled_get(void) +{ + return mmap_safe; +} diff --git a/libraries/eina/src/lib/eina_module.c b/libraries/eina/src/lib/eina_module.c new file mode 100644 index 0000000..0dd19a6 --- /dev/null +++ b/libraries/eina/src/lib/eina_module.c @@ -0,0 +1,599 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#include +#include +#include + +#ifdef HAVE_LIBGEN_H +# include +#endif + +#ifdef HAVE_DLOPEN +# include +#endif + +#ifdef HAVE_EVIL +# include +#endif + +#ifdef HAVE_ESCAPE +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_file.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_module.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static int EINA_MODULE_LOG_DOM = -1; +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(EINA_MODULE_LOG_DOM, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(EINA_MODULE_LOG_DOM, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(EINA_MODULE_LOG_DOM, __VA_ARGS__) + +#ifdef _WIN32 +# define SEP_C '\\' +# define SEP_S "\\" +#else +# define SEP_C '/' +# define SEP_S "/" +#endif + +#define EINA_MODULE_SYMBOL_INIT "__eina_module_init" +#define EINA_MODULE_SYMBOL_SHUTDOWN "__eina_module_shutdown" + +struct _Eina_Module +{ + void *handle; + int ref; + const char file[]; +}; + +typedef struct _Dir_List_Get_Cb_Data +{ + Eina_Module_Cb cb; + void *data; + Eina_Array *array; +} Dir_List_Get_Cb_Data; + +typedef struct _Dir_List_Cb_Data +{ + Eina_Module_Cb cb; + void *data; +} Dir_List_Cb_Data; + +static Eina_Bool _dir_list_get_cb(Eina_Module *m, void *data) +{ + Dir_List_Get_Cb_Data *cb_data = data; + Eina_Bool ret = EINA_TRUE; + + if (cb_data->cb) + ret = cb_data->cb(m, cb_data->data); + + if (ret) + eina_array_push(cb_data->array, m); + + return ret; +} + +static void _dir_list_cb(const char *name, const char *path, void *data) +{ + Dir_List_Cb_Data *cb_data = data; + size_t length; + + length = strlen(name); + if (length < sizeof(SHARED_LIB_SUFFIX)) /* x.so */ + return; + + if (!strcmp(name + length - sizeof(SHARED_LIB_SUFFIX) + 1, + SHARED_LIB_SUFFIX)) + { + char *file; + Eina_Module *m; + + length = strlen(path) + strlen(name) + 2; + + file = alloca(sizeof (char) * length); + + snprintf(file, length, "%s" SEP_S "%s", path, name); + m = eina_module_new(file); + if (!m) + { + return; /* call the user provided cb on this module */ + + } + + if (!cb_data->cb(m, cb_data->data)) + eina_module_free(m); + } +} + +static void _dir_arch_list_cb(const char *name, const char *path, void *data) +{ + Dir_List_Get_Cb_Data *cb_data = data; + Eina_Module *m; + char *file = NULL; + size_t length; + + length = strlen(path) + 1 + strlen(name) + 1 + + strlen((char *)(cb_data->data)) + 1 + sizeof("module") + + sizeof(SHARED_LIB_SUFFIX) + 1; + + file = alloca(length); + snprintf(file, length, "%s" SEP_S "%s" SEP_S "%s" SEP_S "module" SHARED_LIB_SUFFIX, + path, name, (char *)(cb_data->data)); + m = eina_module_new(file); + if (!m) + return; + + eina_array_push(cb_data->array, m); +} + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +static const char EINA_ERROR_WRONG_MODULE_STR[] = + "Wrong file format or no file module found"; +static const char EINA_ERROR_MODULE_INIT_FAILED_STR[] = + "Module initialisation function failed"; + +EAPI Eina_Error EINA_ERROR_WRONG_MODULE = 0; +EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0; + +/** + * @endcond + */ + +/** + * @internal + * @brief Initialize the module loader module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the module loader module of Eina. It is + * called by eina_init(). + * + * This function sets up the module module of Eina. It also registers + * the errors #EINA_ERROR_WRONG_MODULE and + * #EINA_ERROR_MODULE_INIT_FAILED. + * + * @see eina_init() + */ +Eina_Bool +eina_module_init(void) +{ + EINA_MODULE_LOG_DOM = eina_log_domain_register + ("eina_module", EINA_LOG_COLOR_DEFAULT); + if (EINA_MODULE_LOG_DOM < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_module"); + return EINA_FALSE; + } + +#define EEMR(n) n = eina_error_msg_static_register(n ## _STR) + EEMR(EINA_ERROR_WRONG_MODULE); + EEMR(EINA_ERROR_MODULE_INIT_FAILED); +#undef EEMR + + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the module loader module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the module loader module set up by + * eina_module_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_module_shutdown(void) +{ + /* TODO should we store every module when "new" is called and + * delete the list of modules here + */ + + eina_log_domain_unregister(EINA_MODULE_LOG_DOM); + EINA_MODULE_LOG_DOM = -1; + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Module *eina_module_new(const char *file) +{ + Eina_Module *m; + size_t len; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + /* TODO check that the file exists. Update doc too */ + + len = strlen(file); + EINA_SAFETY_ON_FALSE_RETURN_VAL(len > 0, NULL); + + m = malloc(sizeof(Eina_Module) + len + 1); + if (!m) + { + ERR("could not malloc(%lu)", + (unsigned long)(sizeof(Eina_Module) + len + 1)); + return NULL; + } + + memcpy((char *)m->file, file, len + 1); + m->ref = 0; + m->handle = NULL; + DBG("m=%p, file=%s", m, file); + + return m; +} + +EAPI Eina_Bool eina_module_free(Eina_Module *m) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); + + DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref); + + if (m->handle) + if (eina_module_unload(m) == EINA_FALSE) + return EINA_FALSE; + + free(m); + return EINA_TRUE; +} + +EAPI Eina_Bool eina_module_load(Eina_Module *m) +{ +#ifdef HAVE_DLOPEN + void *dl_handle; + Eina_Module_Init *initcall; + + EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); + + DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref); + + if (m->handle) + goto loaded; + + dl_handle = dlopen(m->file, RTLD_NOW); + if (!dl_handle) + { + WRN("could not dlopen(\"%s\", RTLD_NOW): %s", m->file, dlerror()); + eina_error_set(EINA_ERROR_WRONG_MODULE); + return EINA_FALSE; + } + + initcall = dlsym(dl_handle, EINA_MODULE_SYMBOL_INIT); + if ((!initcall) || (!(*initcall))) + goto ok; + + if ((*initcall)() == EINA_TRUE) + goto ok; + + WRN("could not find eina's entry symbol %s inside module %s", + EINA_MODULE_SYMBOL_INIT, m->file); + eina_error_set(EINA_ERROR_MODULE_INIT_FAILED); + dlclose(dl_handle); + return EINA_FALSE; +ok: + DBG("successfully loaded %s", m->file); + m->handle = dl_handle; +loaded: + m->ref++; + DBG("ref %d", m->ref); + + eina_error_set(0); + return EINA_TRUE; +#else + (void) m; + return EINA_FALSE; +#endif +} + +EAPI Eina_Bool eina_module_unload(Eina_Module *m) +{ +#ifdef HAVE_DLOPEN + Eina_Module_Shutdown *shut; + EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); + + DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref); + + m->ref--; + if (!m->ref) + { + shut = dlsym(m->handle, EINA_MODULE_SYMBOL_SHUTDOWN); + if ((shut) && (*shut)) + (*shut)(); + + dlclose(m->handle); + m->handle = NULL; + DBG("unloaded module %s", m->file); + return EINA_TRUE; + } + + return EINA_FALSE; +#else + (void) m; + return EINA_FALSE; +#endif +} + +EAPI void *eina_module_symbol_get(const Eina_Module *m, const char *symbol) +{ +#ifdef HAVE_DLOPEN + EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(m->handle, NULL); + return dlsym(m->handle, symbol); +#else + (void) m; + (void) symbol; + return NULL; +#endif +} + +EAPI const char *eina_module_file_get(const Eina_Module *m) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL); + return m->file; +} + +EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir) +{ +#ifdef HAVE_DLADDR + Dl_info eina_dl; + + EINA_SAFETY_ON_NULL_RETURN_VAL(symbol, NULL); + + if (dladdr(symbol, &eina_dl)) + { + char *pos = strrchr(eina_dl.dli_fname, SEP_C); + if (pos) + { + char *path; + int l0; + int l1; + int l2 = 0; + + l0 = strlen(eina_dl.dli_fname); + l1 = strlen(pos); + if (sub_dir && (*sub_dir != '\0')) + l2 = strlen(sub_dir); + + path = malloc(l0 - l1 + l2 + 1); + if (path) + { + memcpy(path, eina_dl.dli_fname, l0 - l1); + if (sub_dir && (*sub_dir != '\0')) + memcpy(path + l0 - l1, sub_dir, l2); + + path[l0 - l1 + l2] = '\0'; + return path; + } + } + } +#else + (void) symbol; + (void) sub_dir; +#endif /* ! HAVE_DLADDR */ + + return NULL; +} + +EAPI char *eina_module_environment_path_get(const char *env, + const char *sub_dir) +{ + const char *env_dir; + + EINA_SAFETY_ON_NULL_RETURN_VAL(env, NULL); + + env_dir = getenv(env); + if (env_dir) + { + char *path; + size_t l1; + size_t l2 = 0; + + l1 = strlen(env_dir); + if (sub_dir && (*sub_dir != '\0')) + l2 = strlen(sub_dir); + + path = (char *)malloc(l1 + l2 + 1); + if (path) + { + memcpy(path, env_dir, l1); + if (sub_dir && (*sub_dir != '\0')) + memcpy(path + l1, sub_dir, l2); + + path[l1 + l2] = '\0'; + + return path; + } + } + + return NULL; +} + +EAPI Eina_Array *eina_module_arch_list_get(Eina_Array *array, + const char *path, + const char *arch) +{ + Dir_List_Get_Cb_Data list_get_cb_data; + + if ((!path) || (!arch)) + return array; + + list_get_cb_data.array = array ? array : eina_array_new(4); + list_get_cb_data.cb = NULL; + list_get_cb_data.data = (void *)arch; + + eina_file_dir_list(path, 0, &_dir_arch_list_cb, &list_get_cb_data); + + return list_get_cb_data.array; +} + +EAPI Eina_Array *eina_module_list_get(Eina_Array *array, + const char *path, + Eina_Bool recursive, + Eina_Module_Cb cb, + void *data) +{ + Dir_List_Get_Cb_Data list_get_cb_data; + Dir_List_Cb_Data list_cb_data; + + if (!path) + return array; + + list_get_cb_data.array = array ? array : eina_array_new(4); + list_get_cb_data.cb = cb; + list_get_cb_data.data = data; + + list_cb_data.cb = &_dir_list_get_cb; + list_cb_data.data = &list_get_cb_data; + + eina_file_dir_list(path, recursive, &_dir_list_cb, &list_cb_data); + + return list_get_cb_data.array; +} + +EAPI Eina_Module * +eina_module_find(const Eina_Array *array, const char *module) +{ + unsigned int i; + Eina_Array_Iterator iterator; + Eina_Module *m; + + EINA_ARRAY_ITER_NEXT(array, i, m, iterator) + { + char *file_m; + char *tmp; + ssize_t len; + + /* basename() can modify its argument, so we first get a copie */ + /* do not use strdupa, as opensolaris does not have it */ + len = strlen(eina_module_file_get(m)); + tmp = alloca(len + 1); + memcpy(tmp, eina_module_file_get(m), len + 1); + file_m = basename(tmp); + len = strlen(file_m); + len -= sizeof(SHARED_LIB_SUFFIX) - 1; + if (len <= 0) + continue; + + if (!strncmp(module, file_m, len)) + return m;; + } + + return NULL; +} + +EAPI void eina_module_list_load(Eina_Array *array) +{ + Eina_Array_Iterator iterator; + Eina_Module *m; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN(array); + DBG("array %p, count %u", array, array->count); + EINA_ARRAY_ITER_NEXT(array, i, m, iterator) + eina_module_load(m); +} + +EAPI void eina_module_list_unload(Eina_Array *array) +{ + Eina_Array_Iterator iterator; + Eina_Module *m; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN(array); + DBG("array %p, count %u", array, array->count); + EINA_ARRAY_ITER_NEXT(array, i, m, iterator) + eina_module_unload(m); +} + +EAPI void eina_module_list_free(Eina_Array *array) +{ + Eina_Array_Iterator iterator; + Eina_Module *m; + unsigned int i; + + EINA_SAFETY_ON_NULL_RETURN(array); + DBG("array %p, count %u", array, array->count); + EINA_ARRAY_ITER_NEXT(array, i, m, iterator) + eina_module_free(m); + + eina_array_flush(array); +} diff --git a/libraries/eina/src/lib/eina_prefix.c b/libraries/eina/src/lib/eina_prefix.c new file mode 100644 index 0000000..9445222 --- /dev/null +++ b/libraries/eina/src/lib/eina_prefix.c @@ -0,0 +1,727 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Carsten Haitzler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# ifndef HAVE_ALLOCA +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef HAVE_DLADDR +# include +#endif + +#ifdef HAVE_EVIL +# include +#endif + +#ifdef HAVE_ESCAPE +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_log.h" +#include "eina_prefix.h" + +#ifdef _WIN32 +# define PSEP_C ';' +# define DSEP_C '\\' +# define DSEP_S "\\" +#else +# define PSEP_C ':' +# define DSEP_C '/' +# define DSEP_S "/" +#endif /* _WIN32 */ + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +struct _Eina_Prefix +{ + char *exe_path; + + char *prefix_path; + char *prefix_path_bin; + char *prefix_path_data; + char *prefix_path_lib; + char *prefix_path_locale; + + unsigned char fallback : 1; + unsigned char no_common_prefix : 1; + unsigned char env_used : 1; +}; + +#define STRDUP_REP(x, y) do { if (x) free(x); x = strdup(y); } while (0) +#define IF_FREE_NULL(p) do { if (p) { free(p); p = NULL; } } while (0) + +#ifndef EINA_LOG_COLOR_DEFAULT +#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN +#endif + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_prefix_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_prefix_log_dom, __VA_ARGS__) + +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_eina_prefix_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_prefix_log_dom, __VA_ARGS__) + +static int _eina_prefix_log_dom = -1; + +static int +_fallback(Eina_Prefix *pfx, const char *pkg_bin, const char *pkg_lib, + const char *pkg_data, const char *pkg_locale, const char *envprefix) +{ + char *p; + + STRDUP_REP(pfx->prefix_path, pkg_bin); + if (!pfx->prefix_path) return 0; + p = strrchr(pfx->prefix_path, DSEP_C); + if (p) *p = 0; + STRDUP_REP(pfx->prefix_path_bin, pkg_bin); + STRDUP_REP(pfx->prefix_path_lib, pkg_lib); + STRDUP_REP(pfx->prefix_path_data, pkg_data); + STRDUP_REP(pfx->prefix_path_locale, pkg_locale); + fprintf(stderr, + "WARNING: Could not determine its installed prefix for '%s'\n" + " so am falling back on the compiled in default:\n" + " %s\n" + " implied by the following:\n" + " bindir = %s\n" + " libdir = %s\n" + " datadir = %s\n" + " localedir = %s\n" + " Try setting the following environment variables:\n" + " %s_PREFIX - points to the base prefix of install\n" + " or the next 4 variables\n" + " %s_BIN_DIR - provide a specific binary directory\n" + " %s_LIB_DIR - provide a specific library directory\n" + " %s_DATA_DIR - provide a specific data directory\n" + " %s_LOCALE_DIR - provide a specific locale directory\n" + , envprefix, + pfx->prefix_path, pkg_bin, pkg_lib, pkg_data, pkg_locale, + envprefix, envprefix, envprefix, envprefix, envprefix); + pfx->fallback = 1; + return 1; +} + +#ifndef _WIN32 +static int +_try_proc(Eina_Prefix *pfx, void *symbol) +{ + FILE *f; + char buf[4096]; + + DBG("Try /proc/self/maps"); + f = fopen("/proc/self/maps", "rb"); + if (!f) return 0; + DBG("Exists /proc/self/maps"); + while (fgets(buf, sizeof(buf), f)) + { + int len; + char *p, mode[5] = ""; + unsigned long ptr1 = 0, ptr2 = 0; + + len = strlen(buf); + if (buf[len - 1] == '\n') + { + buf[len - 1] = 0; + len--; + } + if (sscanf(buf, "%lx-%lx %4s", &ptr1, &ptr2, mode) == 3) + { + if (!strcmp(mode, "r-xp")) + { + if (((void *)ptr1 <= symbol) && (symbol < (void *)ptr2)) + { + DBG("Found in /proc/self/maps: %s", buf); + p = strchr(buf, '/'); + if (p) + { + DBG("Found in /proc/self/maps: found last /"); + if (len > 10) + { + if (!strcmp(buf + len - 10, " (deleted)")) + buf[len - 10] = 0; + } + STRDUP_REP(pfx->exe_path, p); + INF("Found in /proc/self/maps: guess exe path is %s", pfx->exe_path); + fclose(f); + return 1; + } + else break; + } + } + } + } + fclose(f); + WRN("Failed in /proc/self/maps"); + return 0; +} +#endif + +static int +_try_argv(Eina_Prefix *pfx, const char *argv0) +{ + char *path, *p, *cp, *s; + int len, lenexe; + char buf[PATH_MAX], buf2[PATH_MAX], buf3[PATH_MAX]; + + DBG("Try argv0 = %s", argv0); + /* 1. is argv0 abs path? */ +#ifdef _WIN32 + if (argv0[0] && (argv0[1] == ':')) +#else + if (argv0[0] == DSEP_C) +#endif + { + DBG("Match arvg0 is full path: %s", argv0); + STRDUP_REP(pfx->exe_path, argv0); + if (access(pfx->exe_path, X_OK) == 0) + { + INF("Executable argv0 = %s", argv0); + return 1; + } + IF_FREE_NULL(pfx->exe_path); + DBG("Non existent argv0: %s", argv0); + return 0; + } + /* 2. relative path */ + if (strchr(argv0, DSEP_C)) + { + DBG("Relative path argv0: %s", argv0); + if (getcwd(buf3, sizeof(buf3))) + { + snprintf(buf2, sizeof(buf2), "%s" DSEP_S "%s", buf3, argv0); + DBG("Relative to CWD: %s", buf2); + if (realpath(buf2, buf)) + { + DBG("Realpath is: %s", buf); + STRDUP_REP(pfx->exe_path, buf); + if (access(pfx->exe_path, X_OK) == 0) + { + INF("Path %s is executable", pfx->exe_path); + return 1; + } + DBG("Fail check for executable: %s", pfx->exe_path); + IF_FREE_NULL(pfx->exe_path); + } + } + } + /* 3. argv0 no path - look in PATH */ + DBG("Look for argv0=%s in $PATH", argv0); + path = getenv("PATH"); + if (!path) return 0; + p = path; + cp = p; + lenexe = strlen(argv0); + while ((p = strchr(cp, PSEP_C))) + { + len = p - cp; + s = malloc(len + 1 + lenexe + 1); + if (s) + { + strncpy(s, cp, len); + s[len] = DSEP_C; + strcpy(s + len + 1, argv0); + DBG("Try path: %s", s); + if (realpath(s, buf)) + { + DBG("Realpath is: %s", buf); + if (access(buf, X_OK) == 0) + { + STRDUP_REP(pfx->exe_path, buf); + INF("Path %s is executable", pfx->exe_path); + free(s); + return 1; + } + } + free(s); + } + cp = p + 1; + } + /* 4. big problems. arg[0] != executable - weird execution */ + return 0; +} + +static int +_get_env_var(char **var, const char *env, const char *prefix, const char *dir) +{ + char buf[PATH_MAX]; + const char *s = getenv(env); + + DBG("Try env var %s", env); + if (s) + { + INF("Have env %s = %s", env, s); + STRDUP_REP(*var, s); + return 1; + } + else if (prefix) + { + snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", prefix, dir); + INF("Have prefix %s = %s", prefix, buf); + STRDUP_REP(*var, buf); + return 1; + } + return 0; +} + +static int +_get_env_vars(Eina_Prefix *pfx, + const char *envprefix, + const char *bindir, + const char *libdir, + const char *datadir, + const char *localedir) +{ + char env[1024]; + const char *s; + int ret = 0; + + snprintf(env, sizeof(env), "%s_PREFIX", envprefix); + if ((s = getenv(env))) STRDUP_REP(pfx->prefix_path, s); + snprintf(env, sizeof(env), "%s_BIN_DIR", envprefix); + ret += _get_env_var(&pfx->prefix_path_bin, env, s, bindir); + snprintf(env, sizeof(env), "%s_LIB_DIR", envprefix); + ret += _get_env_var(&pfx->prefix_path_lib, env, s, libdir); + snprintf(env, sizeof(env), "%s_DATA_DIR", envprefix); + ret += _get_env_var(&pfx->prefix_path_data, env, s, datadir); + snprintf(env, sizeof(env), "%s_LOCALE_DIR", envprefix); + ret += _get_env_var(&pfx->prefix_path_locale, env, s, localedir); + return ret; +} + +/** + * @endcond + */ + + +/*============================================================================* + * Global * + *============================================================================*/ + + +/*============================================================================* + * API * + *============================================================================*/ + + +EAPI Eina_Prefix * +eina_prefix_new(const char *argv0, void *symbol, const char *envprefix, + const char *sharedir, const char *magicsharefile, + const char *pkg_bin, const char *pkg_lib, + const char *pkg_data, const char *pkg_locale) +{ + Eina_Prefix *pfx; + char *p, buf[4096], *tmp, *magic = NULL; + struct stat st; + const char *p1, *p2; + const char *pkg_bin_p = NULL; + const char *pkg_lib_p = NULL; + const char *pkg_data_p = NULL; + const char *pkg_locale_p = NULL; + const char *bindir = "bin"; + const char *libdir = "lib"; + const char *datadir = "share"; + const char *localedir = "share"; + + DBG("EINA PREFIX: argv0=%s, symbol=%p, magicsharefile=%s, envprefix=%s", + argv0, symbol, magicsharefile, envprefix); + pfx = calloc(1, sizeof(Eina_Prefix)); + if (!pfx) return NULL; + + /* if provided with a share dir use datadir/sharedir as the share dir */ + if (sharedir) + { + int len; + + len = snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", datadir, sharedir); + if (len > 0) + { +#ifdef _WIN32 + /* on win32 convert / to \ for path here */ + for (p = buf + strlen(datadir) + strlen(DSEP_S); *p; p++) + { + if (*p == '/') *p = DSEP_C; + } +#endif + tmp = alloca(len + 1); + strcpy(tmp, buf); + datadir = tmp; + } + } + if (magicsharefile) + { + magic = alloca(strlen(magicsharefile)); + strcpy(magic, magicsharefile); +#ifdef _WIN32 + /* on win32 convert / to \ for path here */ + for (p = magic; *p; p++) + { + if (*p == '/') *p = DSEP_C; + } +#endif + } + + /* look at compile-time package bin/lib/datadir etc. and figure out the + * bin, lib and data dirs from these, if possible. i.e. + * bin = /usr/local/bin + * lib = /usr/local/lib + * data = /usr/local/share/enlightenment + * thus they all have a common prefix string of /usr/local/ and + * bindir = bin + * libdir = lib + * datadir = share/enlightenment + * this addresses things like libdir is lib64 or lib32 or other such + * junk distributions like to do so then: + * bin = /usr/local/bin + * lib = /usr/local/lib64 + * data = /usr/local/share/enlightenment + * then + * bindir = bin + * libdir = lib64 + * datadir = share/enlightennment + * in theory this should also work with debians new multiarch style like + * bindir = bin + * libdir = lib/i386-linux-gnu + * or + * libdir = lib/x86_64-linux-gnu + * all with a common prefix that can be relocated + */ + /* 1. check last common char in bin and lib strings */ + for (p1 = pkg_bin, p2 = pkg_lib; *p1 && *p2; p1++, p2++) + { + if (*p1 != *p2) + { + pkg_bin_p = p1; + pkg_lib_p = p2; + break; + } + } + /* 1. check last common char in bin and data strings */ + for (p1 = pkg_bin, p2 = pkg_data; *p1 && *p2; p1++, p2++) + { + if (*p1 != *p2) + { + pkg_data_p = p2; + break; + } + } + /* 1. check last common char in bin and locale strings */ + for (p1 = pkg_bin, p2 = pkg_locale; *p1 && *p2; p1++, p2++) + { + if (*p1 != *p2) + { + pkg_locale_p = p2; + break; + } + } + /* 2. if all the common string offsets match we compiled with a common prefix */ + if (((pkg_bin_p - pkg_bin) == (pkg_lib_p - pkg_lib)) + && ((pkg_bin_p - pkg_bin) == (pkg_data_p - pkg_data)) + && ((pkg_bin_p - pkg_bin) == (pkg_locale_p - pkg_locale)) + ) + { + bindir = pkg_bin_p; + libdir = pkg_lib_p; + datadir = pkg_data_p; + localedir = pkg_locale_p; + DBG("Prefix relative bindir = %s", bindir); + DBG("Prefix relative libdir = %s", libdir); + DBG("Prefix relative datadir = %s", datadir); + DBG("Prefix relative localedir = %s", localedir); + } + /* 3. some galoot thought it awesome not to give us a common prefix at compile time + * so fall back to the compile time directories. we are no longer relocatable */ + else + { + STRDUP_REP(pfx->prefix_path_bin, pkg_bin); + STRDUP_REP(pfx->prefix_path_lib, pkg_lib); + STRDUP_REP(pfx->prefix_path_data, pkg_data); + STRDUP_REP(pfx->prefix_path_locale, pkg_locale); + pfx->no_common_prefix = 1; + DBG("Can't work out a common prefix - compiled in fallback"); + } + + /* if user provides env vars - then use that or also more specific sub + * dirs for bin, lib, data and locale */ + if ((envprefix) && + (_get_env_vars(pfx, envprefix, bindir, libdir, datadir, localedir) > 0)) + { + pfx->env_used = 1; + return pfx; + } + +#ifdef HAVE_DLADDR + DBG("Try dladdr on %p", symbol); + if (symbol) + { + Dl_info info_dl; + + if (dladdr(symbol, &info_dl)) + { + DBG("Dlinfo worked"); + if (info_dl.dli_fname) + { + DBG("Dlinfo dli_fname = %s", info_dl.dli_fname); +# ifdef _WIN32 + if (info_dl.dli_fname[0] && (info_dl.dli_fname[1] == ':')) +# else + if (info_dl.dli_fname[0] == DSEP_C) +# endif + { + INF("Dlsym gave full path = %s", info_dl.dli_fname); + STRDUP_REP(pfx->exe_path, info_dl.dli_fname); + } + } + } + } +#endif + /* no env var - examine process and possible argv0 */ + if ((argv0) && (!pfx->exe_path) && (symbol)) + { +#ifndef _WIN32 + if (!_try_proc(pfx, symbol)) + { +#endif + if (!_try_argv(pfx, argv0)) + { + _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, + envprefix); + return pfx; + } +#ifndef _WIN32 + } +#endif + } + if (!pfx->exe_path) + { + WRN("Fallback - nothing found"); + _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix); + return pfx; + } + /* _exe_path is now a full absolute path TO this exe - figure out rest */ + /* if + * exe = /blah/whatever/bin/exe + * or + * exe = /blah/whatever/lib/libexe.so + * then + * prefix = /blah/whatever + * bin_dir = /blah/whatever/bin + * data_dir = /blah/whatever/share/enlightenment + * lib_dir = /blah/whatever/lib + */ + DBG("From exe %s figure out the rest", pfx->exe_path); + p = strrchr(pfx->exe_path, DSEP_C); + if (p) + { + p--; + while (p >= pfx->exe_path) + { + if (*p == DSEP_C) + { + pfx->prefix_path = malloc(p - pfx->exe_path + 1); + if (pfx->prefix_path) + { + strncpy(pfx->prefix_path, pfx->exe_path, + p - pfx->exe_path); + pfx->prefix_path[p - pfx->exe_path] = 0; + DBG("Have prefix = %s", pfx->prefix_path); + + /* bin */ + snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", + pfx->prefix_path, bindir); + STRDUP_REP(pfx->prefix_path_bin, buf); + DBG("Have bin = %s", pfx->prefix_path_bin); + /* lib */ + snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", + pfx->prefix_path, libdir); + STRDUP_REP(pfx->prefix_path_lib, buf); + DBG("Have lib = %s", pfx->prefix_path_lib); + /* locale */ + snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", + pfx->prefix_path, localedir); + STRDUP_REP(pfx->prefix_path_locale, buf); + DBG("Have locale = %s", pfx->prefix_path_locale); + /* check if magic file is there - then our guess is right */ + if (magic) + { + DBG("Magic = %s", magic); + snprintf(buf, sizeof(buf), + "%s" DSEP_S "%s" DSEP_S "%s", + pfx->prefix_path, datadir, magic); + DBG("Check in %s", buf); + } + if ((!magic) || (stat(buf, &st) == 0)) + { + if (buf[0]) + DBG("Magic path %s stat passed", buf); + else + DBG("No magic file"); + snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", + pfx->prefix_path, datadir); + STRDUP_REP(pfx->prefix_path_data, buf); + } + /* magic file not there. time to start hunting! */ + else + { + WRN("Magic failed"); + _fallback(pfx, pkg_bin, pkg_lib, pkg_data, + pkg_locale, envprefix); + } + } + else + { + WRN("No Prefix path (alloc fail)"); + _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, + envprefix); + } + return pfx; + } + p--; + } + } + WRN("Final fallback"); + _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix); + return pfx; +} + +EAPI void +eina_prefix_free(Eina_Prefix *pfx) +{ + if (!pfx) return; + + IF_FREE_NULL(pfx->exe_path); + IF_FREE_NULL(pfx->prefix_path); + IF_FREE_NULL(pfx->prefix_path_bin); + IF_FREE_NULL(pfx->prefix_path_data); + IF_FREE_NULL(pfx->prefix_path_lib); + IF_FREE_NULL(pfx->prefix_path_locale); + free(pfx); +} + +EAPI const char * +eina_prefix_get(Eina_Prefix *pfx) +{ + if (!pfx) return ""; + return pfx->prefix_path; +} + +EAPI const char * +eina_prefix_bin_get(Eina_Prefix *pfx) +{ + if (!pfx) return ""; + return pfx->prefix_path_bin; +} + +EAPI const char * +eina_prefix_lib_get(Eina_Prefix *pfx) +{ + if (!pfx) return ""; + return pfx->prefix_path_lib; +} + +EAPI const char * +eina_prefix_data_get(Eina_Prefix *pfx) +{ + if (!pfx) return ""; + return pfx->prefix_path_data; +} + +EAPI const char * +eina_prefix_locale_get(Eina_Prefix *pfx) +{ + if (!pfx) return ""; + return pfx->prefix_path_locale; +} + +Eina_Bool +eina_prefix_init(void) +{ + _eina_prefix_log_dom = eina_log_domain_register("eina_prefix", + EINA_LOG_COLOR_DEFAULT); + if (_eina_prefix_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_prefix"); + return EINA_FALSE; + } + + return EINA_TRUE; +} + +Eina_Bool +eina_prefix_shutdown(void) +{ + eina_log_domain_unregister(_eina_prefix_log_dom); + _eina_prefix_log_dom = -1; + return EINA_TRUE; +} diff --git a/libraries/eina/src/lib/eina_private.h b/libraries/eina/src/lib/eina_private.h new file mode 100644 index 0000000..d390397 --- /dev/null +++ b/libraries/eina/src/lib/eina_private.h @@ -0,0 +1,140 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_PRIVATE_H_ +#define EINA_PRIVATE_H_ + +#include + +#include "eina_magic.h" +#include "eina_iterator.h" +#include "eina_accessor.h" + +#ifndef MIN +# define MIN(x, y) (((x) > (y)) ? (y) : (x)) +#endif + +#ifndef MAX +# define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#endif + +#ifndef ABS +# define ABS(x) ((x) < 0 ? -(x) : (x)) +#endif + +#ifndef CLAMP +# define CLAMP(x, min, \ + max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x))) +#endif + +#define EINA_INLIST_JUMP_SIZE 256 + +#define READBUFSIZ 65536 + +#define EINA_LOG_COLOR_DEFAULT "\033[36m" + +/* eina magic types */ +#define EINA_MAGIC_SHARE 0x98761234 +#define EINA_MAGIC_SHARE_HEAD 0x98761235 +#define EINA_MAGIC_STRINGSHARE_NODE 0x98761254 +#define EINA_MAGIC_USTRINGSHARE_NODE 0x98761255 +#define EINA_MAGIC_BINSHARE_NODE 0x98761256 + +#define EINA_MAGIC_LIST 0x98761237 +#define EINA_MAGIC_LIST_ITERATOR 0x98761238 +#define EINA_MAGIC_LIST_ACCESSOR 0x98761239 +#define EINA_MAGIC_LIST_ACCOUNTING 0x9876123a + +#define EINA_MAGIC_ARRAY 0x9876123b +#define EINA_MAGIC_ARRAY_ITERATOR 0x9876123c +#define EINA_MAGIC_ARRAY_ACCESSOR 0x9876123d + +#define EINA_MAGIC_HASH 0x9876123e +#define EINA_MAGIC_HASH_ITERATOR 0x9876123f + +#define EINA_MAGIC_TILER 0x98761240 +#define EINA_MAGIC_TILER_ITERATOR 0x98761241 + +#define EINA_MAGIC_MATRIXSPARSE 0x98761242 +#define EINA_MAGIC_MATRIXSPARSE_ROW 0x98761243 +#define EINA_MAGIC_MATRIXSPARSE_CELL 0x98761244 +#define EINA_MAGIC_MATRIXSPARSE_ITERATOR 0x98761245 +#define EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR 0x98761246 +#define EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR 0x98761247 +#define EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR 0x98761248 +#define EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR 0x98761249 + +#define EINA_MAGIC_STRBUF 0x98761250 +#define EINA_MAGIC_USTRBUF 0x98761257 +#define EINA_MAGIC_BINBUF 0x98761258 + +#define EINA_MAGIC_QUADTREE 0x98761251 +#define EINA_MAGIC_QUADTREE_ROOT 0x98761252 +#define EINA_MAGIC_QUADTREE_ITEM 0x98761253 + +#define EINA_MAGIC_SIMPLE_XML_TAG 0x98761260 +#define EINA_MAGIC_SIMPLE_XML_DATA 0x98761261 +#define EINA_MAGIC_SIMPLE_XML_ATTRIBUTE 0x98761262 + +#define EINA_MAGIC_CLASS 0x9877CB30 + +/* undef the following, we want out version */ +#undef FREE +#define FREE(ptr) \ + do { \ + free(ptr); \ + ptr = NULL; \ + } while(0); + +#undef IF_FREE +#define IF_FREE(ptr) \ + do { \ + if (ptr) { \ + free(ptr); \ + ptr = NULL; \ + } \ + } while(0); + +#undef IF_FN_DEL +#define IF_FN_DEL(_fn, ptr) \ + do { \ + if (ptr) { \ + _fn(ptr); \ + ptr = NULL; \ + } \ + } while(0); + +#define MAGIC_FREE(ptr) \ + do { \ + if (ptr) { \ + EINA_MAGIC_SET(ptr, EINA_MAGIC_NONE); \ + FREE(ptr); \ + } \ + } while(0); + +#ifdef EFL_HAVE_THREADS +extern Eina_Bool _threads_activated; + +void eina_share_common_threads_init(void); +void eina_share_common_threads_shutdown(void); +void eina_log_threads_init(void); +void eina_log_threads_shutdown(void); +#endif + +#endif /* EINA_PRIVATE_H_ */ + diff --git a/libraries/eina/src/lib/eina_quadtree.c b/libraries/eina/src/lib/eina_quadtree.c new file mode 100644 index 0000000..daf03d0 --- /dev/null +++ b/libraries/eina/src/lib/eina_quadtree.c @@ -0,0 +1,935 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +/** + * @page tutorial_quadtree_page QuadTree Tutorial + * + * to be written... + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_quadtree.h" +#include "eina_magic.h" +#include "eina_mempool.h" +#include "eina_list.h" +#include "eina_inlist.h" +#include "eina_trash.h" +#include "eina_log.h" +#include "eina_rectangle.h" + +#include "eina_private.h" + +typedef struct _Eina_QuadTree_Root Eina_QuadTree_Root; + +static const char EINA_MAGIC_QUADTREE_STR[] = "Eina QuadTree"; +static const char EINA_MAGIC_QUADTREE_ROOT_STR[] = "Eina QuadTree Root"; +static const char EINA_MAGIC_QUADTREE_ITEM_STR[] = "Eina QuadTree Item"; + +#define EINA_MAGIC_CHECK_QUADTREE(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE); \ + return __VA_ARGS__; \ + } \ + } while(0); + +#define EINA_MAGIC_CHECK_QUADTREE_ROOT(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ROOT)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ROOT); \ + return __VA_ARGS__; \ + } \ + } while(0); + +#define EINA_MAGIC_CHECK_QUADTREE_ITEM(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ITEM)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ITEM); \ + return __VA_ARGS__; \ + } \ + } while(0); + +struct _Eina_QuadTree +{ + Eina_QuadTree_Root *root; + + Eina_List *hidden; + + size_t root_count; + size_t items_count; + + Eina_Trash *items_trash; + Eina_Trash *root_trash; + + Eina_Inlist *change; + Eina_Inlist *cached; + Eina_Rectangle target; + + size_t index; + + struct + { + Eina_Quad_Callback v; + Eina_Quad_Callback h; + } func; + + struct + { + size_t w; + size_t h; + } geom; + + Eina_Bool resize : 1; + Eina_Bool lost : 1; + + EINA_MAGIC +}; + +struct _Eina_QuadTree_Root +{ + Eina_QuadTree_Root *parent; + Eina_QuadTree_Root *left; + Eina_QuadTree_Root *right; + + Eina_List *both; + + Eina_Bool sorted : 1; + + EINA_MAGIC +}; + +struct _Eina_QuadTree_Item +{ + EINA_INLIST; + + Eina_QuadTree *quad; + Eina_QuadTree_Root *root; + + const void *object; + + size_t index; + + Eina_Bool change : 1; + Eina_Bool delete_me : 1; + Eina_Bool visible : 1; + Eina_Bool hidden : 1; + + EINA_MAGIC +}; + +static int _eina_quadtree_log_dom = -1; +static Eina_Mempool *eina_quadtree_root_mp = NULL; +static Eina_Mempool *_eina_quadtree_items_mp = NULL; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_quadtree_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_quadtree_log_dom, __VA_ARGS__) + + +static int +_eina_quadtree_item_cmp(const void *a, const void *b) +{ + const Eina_QuadTree_Item *i = a; + const Eina_QuadTree_Item *j = b; + + return i->index - j->index; +} + +static Eina_QuadTree_Root * +eina_quadtree_root_free(Eina_QuadTree *q, Eina_QuadTree_Root *root) +{ + Eina_QuadTree_Item *item; + + if (!root) + return NULL; + + EINA_MAGIC_CHECK_QUADTREE_ROOT(root, NULL); + + EINA_LIST_FREE(root->both, item) + eina_mempool_free(_eina_quadtree_items_mp, item); + + root->left = eina_quadtree_root_free(q, root->left); + root->right = eina_quadtree_root_free(q, root->right); + + EINA_MAGIC_SET(root, 0); + eina_mempool_free(eina_quadtree_root_mp, root); + + return NULL; +} + +static Eina_QuadTree_Root * +eina_quadtree_root_rebuild_pre(Eina_QuadTree *q, + Eina_Inlist **change, + Eina_QuadTree_Root *root) +{ + Eina_QuadTree_Item *item; + + if (!root) + return NULL; + + EINA_LIST_FREE(root->both, item) + { + if (item->visible) + *change = eina_inlist_append(*change, EINA_INLIST_GET(item)); + else if (!item->hidden) + { + q->hidden = eina_list_append(q->hidden, item); + item->hidden = EINA_TRUE; + item->root = NULL; + } + } + + root->left = eina_quadtree_root_rebuild_pre(q, change, root->left); + root->right = eina_quadtree_root_rebuild_pre(q, change, root->right); + + EINA_MAGIC_SET(root, 0); + if (q->root_count > 50) + eina_mempool_free(eina_quadtree_root_mp, root); + else + { + eina_trash_push(&q->root_trash, root); + q->root_count++; + } + + return NULL; +} + +static size_t +_eina_quadtree_split(Eina_Inlist *objects, + Eina_QuadTree_Root *root, + Eina_Inlist **left, + Eina_Inlist **right, + Eina_Quad_Callback func, + int border, + int middle) +{ + Eina_QuadTree_Item *object; + + middle /= 2; + + if (middle <= 4) + while (objects) + { + object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item); + objects = objects->next; + + object->change = EINA_FALSE; + if (!object->visible) + { + if (!object->hidden) + { + object->hidden = EINA_TRUE; + object->quad->hidden = eina_list_append( + object->quad->hidden, + object); + } + + continue; + } + + if (object->hidden) + { + object->hidden = EINA_FALSE; + object->quad->hidden = eina_list_remove(object->quad->hidden, + object); + } + + if (!object->delete_me) + { + if (root->sorted) + root->both = eina_list_sorted_insert(root->both, + _eina_quadtree_item_cmp, + object); + else + root->both = eina_list_append(root->both, object); + + object->root = root; + } + else + eina_quadtree_del(object); + } + else + while (objects) + { + object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item); + objects = objects->next; + + object->change = EINA_FALSE; + if (!object->visible) + { + if (!object->hidden) + { + object->hidden = EINA_TRUE; + object->quad->hidden = eina_list_append( + object->quad->hidden, + object); + } + + continue; + } + + if (object->hidden) + { + object->hidden = EINA_FALSE; + object->quad->hidden = eina_list_remove(object->quad->hidden, + object); + } + + if (!object->delete_me) + { + switch (func(object->object, border + middle)) + { + case EINA_QUAD_LEFT: + *left = eina_inlist_append(*left, EINA_INLIST_GET(object)); + break; + + case EINA_QUAD_RIGHT: + *right = + eina_inlist_append(*right, EINA_INLIST_GET(object)); + break; + + case EINA_QUAD_BOTH: + root->both = eina_list_append(root->both, object); + object->root = root; + break; + + default: + abort(); + } + } + else + eina_quadtree_del(object); + } + + return middle; +} + + +static Eina_QuadTree_Root * +_eina_quadtree_update(Eina_QuadTree *q, Eina_QuadTree_Root *parent, + Eina_QuadTree_Root *root, Eina_Inlist *objects, + Eina_Bool direction, Eina_Rectangle *size) +{ + Eina_Inlist *right = NULL; + Eina_Inlist *left = NULL; + size_t w2; + size_t h2; + + if (!objects) + return root; + + if (!root) + { + root = eina_trash_pop(&q->root_trash); + if (!root) + root = eina_mempool_malloc(eina_quadtree_root_mp, sizeof (Eina_QuadTree_Root)); + else + q->root_count--; + + if (!root) + /* FIXME: NOT GOOD TIMING, WE ARE GOING TO LEAK MORE MEMORY */ + return NULL; + + root->parent = parent; + root->both = NULL; + root->left = NULL; + root->right = NULL; + root->sorted = EINA_TRUE; + + EINA_MAGIC_SET(root, EINA_MAGIC_QUADTREE_ROOT); + } + + w2 = 0; + h2 = 0; + + if (direction) + w2 = _eina_quadtree_split(objects, root, + &left, &right, + q->func.h, size->x, size->w); + else + h2 = _eina_quadtree_split(objects, root, + &left, &right, + q->func.v, size->y, size->h); + + size->w -= w2; size->h -= h2; + root->left = _eina_quadtree_update(q, root, + root->left, left, + !direction, size); + size->x += w2; size->y += h2; + root->right = _eina_quadtree_update(q, root, + root->right, right, + !direction, size); + size->x -= w2; size->y -= h2; + size->w += w2; size->h += h2; + + return root; +} + +static Eina_Inlist * +_eina_quadtree_merge(Eina_Inlist *result, + Eina_List *both) +{ + Eina_QuadTree_Item *item; + Eina_QuadTree_Item *b; + Eina_Inlist *moving; + + if (!both) + return result; + + if (!result) + { + Eina_List *l; + + EINA_LIST_FOREACH(both, l, item) + if (item->visible) + result = eina_inlist_append(result, EINA_INLIST_GET(item)); + + return result; + } + + moving = result; + + item = EINA_INLIST_CONTAINER_GET(moving, Eina_QuadTree_Item); + b = eina_list_data_get(both); + + while (both && moving) + { + if (!b->visible) + { + both = eina_list_next(both); + b = eina_list_data_get(both); + continue; + } + + if (_eina_quadtree_item_cmp(item, b) < 0) + { + /* moving is still lower than item, so we can continue to the next one. */ + moving = moving->next; + item = EINA_INLIST_CONTAINER_GET(moving, Eina_QuadTree_Item); + } + else + { + /* we just get above the limit of both, so insert it */ + result = eina_inlist_prepend_relative(result, + EINA_INLIST_GET(b), + moving); + both = eina_list_next(both); + b = eina_list_data_get(both); + } + } + + item = EINA_INLIST_CONTAINER_GET(result->last, Eina_QuadTree_Item); + + while (both) + { + b = eina_list_data_get(both); + if (b->visible) + { + if (_eina_quadtree_item_cmp(item, b) < 0) + break; + + result = eina_inlist_prepend_relative(result, + EINA_INLIST_GET(b), + result->last); + } + + both = eina_list_next(both); + } + + while (both) + { + b = eina_list_data_get(both); + if (b->visible) + result = eina_inlist_append(result, EINA_INLIST_GET(b)); + + both = eina_list_next(both); + } + + return result; +} + +static Eina_Inlist * +_eina_quadtree_collide(Eina_Inlist *result, + Eina_QuadTree_Root *root, + Eina_Bool direction, Eina_Rectangle *size, + Eina_Rectangle *target) +{ + if (!root) + return result; + + if (!root->sorted) + { + root->both = eina_list_sort(root->both, -1, _eina_quadtree_item_cmp); + root->sorted = EINA_TRUE; + } + + result = _eina_quadtree_merge(result, root->both); + DBG("%p: %i in both for (%i, %i - %i, %i)", + root, eina_list_count(root->both), + size->x, size->y, size->w, size->h); + + if (direction) + { + int middle = size->w / 2; + + size->w -= middle; + if (eina_spans_intersect(size->x, size->w, target->x, target->w)) + result = _eina_quadtree_collide(result, root->left, + !direction, size, + target); + + size->x += middle; + if (eina_spans_intersect(size->x, size->w, target->x, target->w)) + result = _eina_quadtree_collide(result, root->right, + !direction, size, + target); + + size->x -= middle; + size->w += middle; + } + else + { + int middle = size->h / 2; + + size->h -= middle; + if (eina_spans_intersect(size->y, size->h, target->y, target->h)) + result = _eina_quadtree_collide(result, root->left, + !direction, size, + target); + + size->y += middle; + if (eina_spans_intersect(size->y, size->h, target->y, target->h)) + result = _eina_quadtree_collide(result, root->right, + !direction, size, + target); + + size->y -= middle; + size->h += middle; + } + + return result; +} + +static void +_eina_quadtree_remove(Eina_QuadTree_Item *object) +{ + if (!object->root) + return; + + object->root->both = eina_list_remove(object->root->both, object); + if (object->root->both) + goto end; + + if (object->root->left) + goto end; + + if (object->root->right) + goto end; + + /* The root is not useful anymore... */ + if (object->root->parent) + { + if (object->root->parent->left == object->root) + object->root->parent->left = NULL; + else + object->root->parent->right = NULL; + + object->root->parent = NULL; + } + else + object->quad->root = NULL; + + if (object->quad->root_count > 50) + eina_mempool_free(eina_quadtree_root_mp, object->root); + else + { + eina_trash_push(&object->quad->root_trash, object->root); + object->quad->root_count++; + } + +end: + object->root = NULL; +} + +EAPI Eina_QuadTree * +eina_quadtree_new(size_t w, size_t h, + Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal) +{ + Eina_QuadTree *result; + + if (!vertical || !horizontal || h == 0 || w == 0) + return NULL; + + result = calloc(1, sizeof (Eina_QuadTree)); + if (!result) + return NULL; + + result->func.v = vertical; + result->func.h = horizontal; + + result->geom.w = w; + result->geom.h = h; + + result->change = NULL; + + result->lost = EINA_TRUE; + + EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE); + + return result; +} + +EAPI void +eina_quadtree_free(Eina_QuadTree *q) +{ + Eina_QuadTree_Item *item; + + if (!q) + return; + + EINA_MAGIC_CHECK_QUADTREE(q); + + while (q->change) + { + item = EINA_INLIST_CONTAINER_GET(q->change, Eina_QuadTree_Item); + q->change = q->change->next; + if (!item->hidden) + eina_mempool_free(_eina_quadtree_items_mp, item); + } + + EINA_LIST_FREE(q->hidden, item) + eina_mempool_free(_eina_quadtree_items_mp, item); + + eina_quadtree_root_free(q, q->root); + + while (q->items_trash) + { + item = eina_trash_pop(&q->items_trash); + eina_mempool_free(_eina_quadtree_items_mp, item); + } + + while (q->root_trash) + { + Eina_QuadTree_Root *root; + + root = eina_trash_pop(&q->root_trash); + eina_mempool_free(eina_quadtree_root_mp, root); + } + + EINA_MAGIC_SET(q, 0); + free(q); +} + +EAPI Eina_QuadTree_Item * +eina_quadtree_add(Eina_QuadTree *q, const void *object) +{ + Eina_QuadTree_Item *result; + + EINA_MAGIC_CHECK_QUADTREE(q, NULL); + + if (!object) + return NULL; + + result = eina_trash_pop(&q->items_trash); + if (!result) + result = eina_mempool_malloc(_eina_quadtree_items_mp, sizeof (Eina_QuadTree_Item)); + else + q->items_count--; + + if (!result) + return NULL; + + result->quad = q; + result->root = NULL; + result->object = object; + + result->index = q->index++; + + result->change = EINA_TRUE; + result->delete_me = EINA_FALSE; + result->visible = EINA_TRUE; + result->hidden = EINA_FALSE; + + EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE_ITEM); + + /* Insertion is delayed until we really need to use it */ + q->change = eina_inlist_append(q->change, EINA_INLIST_GET(result)); + + return result; +} + +EAPI Eina_Bool +eina_quadtree_del(Eina_QuadTree_Item *object) +{ + if (!object) + return EINA_FALSE; + + EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); + + _eina_quadtree_remove(object); + + if (object->change) + { + /* This object is still in the update array, delaying it's removal !*/ + object->delete_me = EINA_TRUE; + object->visible = EINA_TRUE; + return EINA_TRUE; + } + + if (object->hidden) + { + object->quad->hidden = eina_list_remove(object->quad->hidden, object); + object->hidden = EINA_TRUE; + } + + /* This object is not anymore inside the tree, we can remove it now !*/ + EINA_MAGIC_SET(object, 0); + if (object->quad->items_count > 256) + eina_mempool_free(_eina_quadtree_items_mp, object); + else + { + object->quad->items_count++; + eina_trash_push(&object->quad->items_trash, object); + } + + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_quadtree_change(Eina_QuadTree_Item *object) +{ + EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); + + if (object->delete_me || !object->visible) + return EINA_FALSE; + + if (object->quad->resize) + return EINA_TRUE; + + /* Delaying change until needed */ + if (!object->change) + object->quad->change = eina_inlist_append(object->quad->change, + EINA_INLIST_GET(object)); + + object->change = EINA_TRUE; + + _eina_quadtree_remove(object); + + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_quadtree_hide(Eina_QuadTree_Item *object) +{ + EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); + + object->visible = EINA_FALSE; + + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_quadtree_show(Eina_QuadTree_Item *object) +{ + EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); + + object->quad->lost = EINA_TRUE; + + if (object->visible) + return EINA_TRUE; + + object->visible = EINA_TRUE; + if (!object->change) + return eina_quadtree_change(object); + + return EINA_TRUE; +} + +EAPI Eina_Inlist * +eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h) +{ + Eina_Rectangle canvas; + + EINA_MAGIC_CHECK_QUADTREE(q, NULL); + + /* Now we need the tree to be up to date, so it's time */ + if (q->resize) /* Full rebuild needed ! */ + { + DBG("resizing quadtree"); + q->root = eina_quadtree_root_rebuild_pre(q, &q->change, q->root); + q->resize = EINA_FALSE; + } + + EINA_RECTANGLE_SET(&canvas, 0, 0, q->geom.w, q->geom.h); + + if (q->change) + { + DBG("updating quadtree content"); + q->root = _eina_quadtree_update(q, NULL, q->root, q->change, + EINA_FALSE, &canvas); + q->change = NULL; + q->lost = EINA_TRUE; + } + + if (q->target.x != x + || q->target.y != y + || q->target.w != w + || q->target.h != h) + { + DBG("new target"); + EINA_RECTANGLE_SET(&q->target, x, y, w, h); + q->lost = EINA_TRUE; + } + + if (q->lost) + { + DBG("computing collide"); + q->cached = _eina_quadtree_collide(NULL, q->root, + EINA_FALSE, &canvas, + &q->target); + q->lost = EINA_FALSE; + } + + return q->cached; +} + +EAPI void * +eina_quadtree_object(Eina_Inlist *item) +{ + Eina_QuadTree_Item *qi; + + if (!item) + return NULL; + + qi = EINA_INLIST_CONTAINER_GET(item, Eina_QuadTree_Item); + if (!qi) + return NULL; + + EINA_MAGIC_CHECK_QUADTREE_ITEM(qi, NULL); + + if (!qi->visible) + return NULL; + + return (void *)qi->object; +} + +EAPI void +eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h) +{ + EINA_MAGIC_CHECK_QUADTREE(q); + + if (q->geom.w == w + && q->geom.h == h) + return; + + q->resize = EINA_TRUE; + q->geom.w = w; + q->geom.h = h; +} + +EAPI void +eina_quadtree_cycle(Eina_QuadTree *q) +{ + EINA_MAGIC_CHECK_QUADTREE(q); + + q->index = 0; +} + +EAPI void +eina_quadtree_increase(Eina_QuadTree_Item *object) +{ + size_t tmp; + + tmp = object->quad->index++; + if (object->index == tmp) + return; + + object->index = tmp; + if (object->root) + object->root->sorted = EINA_FALSE; +} + +Eina_Bool +eina_quadtree_init(void) +{ + const char *choice, *tmp; + + _eina_quadtree_log_dom = eina_log_domain_register("eina_quadtree", + EINA_LOG_COLOR_DEFAULT); + if (_eina_quadtree_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_quadtree"); + return EINA_FALSE; + } + +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_QUADTREE); + EMS(EINA_MAGIC_QUADTREE_ROOT); + EMS(EINA_MAGIC_QUADTREE_ITEM); +#undef EMS + +#ifdef EINA_DEFAULT_MEMPOOL + choice = "pass_through"; +#else + choice = "chained_mempool"; +#endif + tmp = getenv("EINA_MEMPOOL"); + if (tmp && tmp[0]) + choice = tmp; + + _eina_quadtree_items_mp = eina_mempool_add(choice, "QuadTree Item", NULL, + sizeof (Eina_QuadTree_Item), 320); + eina_quadtree_root_mp = eina_mempool_add(choice, "QuadTree Root", NULL, + sizeof (Eina_QuadTree_Root), 32); + + return EINA_TRUE; +} + +Eina_Bool +eina_quadtree_shutdown(void) +{ + eina_mempool_del(eina_quadtree_root_mp); + eina_mempool_del(_eina_quadtree_items_mp); + + eina_log_domain_unregister(_eina_quadtree_log_dom); + _eina_quadtree_log_dom = -1; + return EINA_TRUE; +} + + + diff --git a/libraries/eina/src/lib/eina_rbtree.c b/libraries/eina/src/lib/eina_rbtree.c new file mode 100644 index 0000000..c0c9f9e --- /dev/null +++ b/libraries/eina/src/lib/eina_rbtree.c @@ -0,0 +1,518 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_array.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_rbtree.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +#define EINA_RBTREE_ITERATOR_PREFIX_MASK 0x1 +#define EINA_RBTREE_ITERATOR_INFIX_MASK 0x2 +#define EINA_RBTREE_ITERATOR_POSTFIX_MASK 0x4 + +typedef struct _Eina_Iterator_Rbtree Eina_Iterator_Rbtree; +typedef struct _Eina_Iterator_Rbtree_List Eina_Iterator_Rbtree_List; + +struct _Eina_Iterator_Rbtree +{ + Eina_Iterator iterator; + + Eina_Array *stack; + + unsigned char mask; +}; + +struct _Eina_Iterator_Rbtree_List +{ + Eina_Rbtree *tree; + + Eina_Rbtree_Direction dir : 1; + Eina_Bool up : 1; +}; + +static Eina_Iterator_Rbtree_List * +_eina_rbtree_iterator_list_new(const Eina_Rbtree *tree) +{ + Eina_Iterator_Rbtree_List *new; + + eina_error_set(0); + new = malloc(sizeof (Eina_Iterator_Rbtree_List)); + if (!new) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + new->tree = (Eina_Rbtree *)tree; + new->dir = EINA_RBTREE_RIGHT; + new->up = EINA_FALSE; + + return new; +} + +static Eina_Rbtree * +_eina_rbtree_iterator_get_content(Eina_Iterator_Rbtree *it) +{ + if (eina_array_count_get(it->stack) <= 0) + return NULL; + + return eina_array_data_get(it->stack, 0); +} + +static void +_eina_rbtree_iterator_free(Eina_Iterator_Rbtree *it) +{ + Eina_Iterator_Rbtree_List *item; + Eina_Array_Iterator et; + unsigned int i; + + EINA_ARRAY_ITER_NEXT(it->stack, i, item, et) + free(item); + + eina_array_free(it->stack); + free(it); +} + +static Eina_Bool +_eina_rbtree_iterator_next(Eina_Iterator_Rbtree *it, void **data) +{ + Eina_Iterator_Rbtree_List *last; + Eina_Iterator_Rbtree_List *new; + Eina_Rbtree *tree; + + if (eina_array_count_get(it->stack) <= 0) + return EINA_FALSE; + + last = eina_array_data_get(it->stack, eina_array_count_get(it->stack) - 1); + tree = last->tree; + + if (!last->tree || last->up == EINA_TRUE) + { + last = eina_array_pop(it->stack); + while (last->dir == EINA_RBTREE_LEFT + || !last->tree) + { + if (tree) + if ((it->mask & EINA_RBTREE_ITERATOR_POSTFIX_MASK) == + EINA_RBTREE_ITERATOR_POSTFIX_MASK) + { + free(last); + + if (eina_array_count_get(it->stack) > 0) + { + last = eina_array_data_get(it->stack, + eina_array_count_get( + it-> + stack) + - 1); + last->up = EINA_TRUE; + } + + goto onfix; + } + + free(last); + + last = eina_array_pop(it->stack); + if (!last) + return EINA_FALSE; + + tree = last->tree; + } + + last->dir = EINA_RBTREE_LEFT; + last->up = EINA_FALSE; + + eina_array_push(it->stack, last); + + if ((it->mask & EINA_RBTREE_ITERATOR_INFIX_MASK) == + EINA_RBTREE_ITERATOR_INFIX_MASK) + goto onfix; + } + + new = _eina_rbtree_iterator_list_new(last->tree->son[last->dir]); + if (!new) + return EINA_FALSE; + + eina_array_push(it->stack, new); + + if (last->dir == EINA_RBTREE_RIGHT) + if ((it->mask & EINA_RBTREE_ITERATOR_PREFIX_MASK) == + EINA_RBTREE_ITERATOR_PREFIX_MASK) + goto onfix; + + return _eina_rbtree_iterator_next(it, data); + +onfix: + *data = tree; + return EINA_TRUE; +} + +static Eina_Iterator * +_eina_rbtree_iterator_build(const Eina_Rbtree *root, unsigned char mask) +{ + Eina_Iterator_Rbtree_List *first; + Eina_Iterator_Rbtree *it; + + eina_error_set(0); + it = calloc(1, sizeof (Eina_Iterator_Rbtree)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + it->stack = eina_array_new(8); + if (!it->stack) + goto on_error2; + + first = _eina_rbtree_iterator_list_new(root); + if (!first) + goto on_error; + + eina_array_push(it->stack, first); + + it->mask = mask; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_rbtree_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _eina_rbtree_iterator_get_content); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_rbtree_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + return &it->iterator; + +on_error: + eina_array_free(it->stack); +on_error2: + free(it); + + return NULL; +} + +static void +_eina_rbtree_node_init(Eina_Rbtree *node) +{ + if (!node) + return; + + node->son[0] = NULL; + node->son[1] = NULL; + + node->color = EINA_RBTREE_RED; +} + +static inline Eina_Bool +_eina_rbtree_is_red(Eina_Rbtree *node) +{ + return !!node && node->color == EINA_RBTREE_RED; +} + +static inline Eina_Rbtree * +_eina_rbtree_inline_single_rotation(Eina_Rbtree *node, + Eina_Rbtree_Direction dir) +{ + Eina_Rbtree *save = node->son[!dir]; + + node->son[!dir] = save->son[dir]; + save->son[dir] = node; + + node->color = EINA_RBTREE_RED; + save->color = EINA_RBTREE_BLACK; + + return save; +} + +static inline Eina_Rbtree * +_eina_rbtree_inline_double_rotation(Eina_Rbtree *node, + Eina_Rbtree_Direction dir) +{ + node->son[!dir] = _eina_rbtree_inline_single_rotation(node->son[!dir], !dir); + return _eina_rbtree_inline_single_rotation(node, dir); +} + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Rbtree * +eina_rbtree_inline_insert(Eina_Rbtree *root, + Eina_Rbtree *node, + Eina_Rbtree_Cmp_Node_Cb cmp, + const void *data) +{ + Eina_Rbtree head; + Eina_Rbtree *g, *t; /* Grandparent & parent */ + Eina_Rbtree *p, *q; /* Iterator & parent */ + /* WARNING: + Compiler is not able to understand the underlying algorithm and don't know that + first top node is always black, so it will never use last before running the loop + one time. + */ + Eina_Rbtree_Direction dir, last; + + EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); + EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); + + if (!node) + return root; + + _eina_rbtree_node_init(node); + + if (!root) + { + root = node; + goto end_add; + } + + memset(&head, 0, sizeof (Eina_Rbtree)); + last = dir = EINA_RBTREE_LEFT; + + /* Set up helpers */ + t = &head; + g = p = NULL; + q = t->son[1] = root; + + /* Search down the tree */ + for (;; ) + { + if (!q) + /* Insert new node at the bottom */ + p->son[dir] = q = node; + else if (_eina_rbtree_is_red(q->son[0]) + && _eina_rbtree_is_red(q->son[1])) + { + /* Color flip */ + q->color = EINA_RBTREE_RED; + q->son[0]->color = EINA_RBTREE_BLACK; + q->son[1]->color = EINA_RBTREE_BLACK; + } + + /* Fix red violation */ + if (_eina_rbtree_is_red(q) && _eina_rbtree_is_red(p)) + { + Eina_Rbtree_Direction dir2; + + dir2 = (t->son[1] == g) ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT; + + if (q == p->son[last]) + t->son[dir2] = _eina_rbtree_inline_single_rotation(g, !last); + else + t->son[dir2] = _eina_rbtree_inline_double_rotation(g, !last); + } + + /* Stop if found */ + if (q == node) + break; + + last = dir; + dir = cmp(q, node, (void *)data); + + /* Update helpers */ + if ( g ) + t = g; + + g = p, p = q; + q = q->son[dir]; + } + + root = head.son[1]; + +end_add: + /* Make root black */ + root->color = EINA_RBTREE_BLACK; + + return root; +} + +EAPI Eina_Rbtree * +eina_rbtree_inline_remove(Eina_Rbtree *root, + Eina_Rbtree *node, + Eina_Rbtree_Cmp_Node_Cb cmp, + const void *data) +{ + Eina_Rbtree head; + Eina_Rbtree *q, *p; + Eina_Rbtree *f = NULL; + Eina_Rbtree_Direction dir; + + EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); + EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root); + + if (!root || !node) + return root; + + memset(&head, 0, sizeof(Eina_Rbtree)); + + dir = EINA_RBTREE_RIGHT; + q = &head; + p = NULL; + q->son[EINA_RBTREE_RIGHT] = root; + + /* Search and push a red down */ + while (q->son[dir]) + { + Eina_Rbtree_Direction last = dir; + Eina_Rbtree *g; + + /* Update helpers */ + g = p; p = q; + q = q->son[dir]; + dir = cmp(q, node, (void *)data); + + /* Save parent node found */ + if (q == node) + f = p; + + /* Push the red node down */ + if (!_eina_rbtree_is_red(q) + && !_eina_rbtree_is_red(q->son[dir])) + { + if (_eina_rbtree_is_red(q->son[!dir])) + q = p->son[last] = _eina_rbtree_inline_single_rotation(q, dir); + else if (!_eina_rbtree_is_red(q->son[!dir])) + { + Eina_Rbtree *s = p->son[!last]; + + if (s) + { + if (!_eina_rbtree_is_red(s->son[EINA_RBTREE_LEFT]) + && !_eina_rbtree_is_red(s->son[EINA_RBTREE_RIGHT])) + { +/* Color flip */ + p->color = EINA_RBTREE_BLACK; + p->son[EINA_RBTREE_LEFT]->color = EINA_RBTREE_RED; + p->son[EINA_RBTREE_RIGHT]->color = EINA_RBTREE_RED; + } + else + { + Eina_Rbtree_Direction dir2; + + dir2 = g->son[1] == + p ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT; + + if (_eina_rbtree_is_red(s->son[last])) + { + g->son[dir2] = + _eina_rbtree_inline_double_rotation(p, last); + if (f == g) + { + p = g->son[dir2]->son[last]; + f = g->son[dir2]; + } + } + else if (_eina_rbtree_is_red(s->son[!last])) + { + g->son[dir2] = + _eina_rbtree_inline_single_rotation(p, last); + if (f == g) + { + p = g->son[dir2]->son[last]; + f = g->son[dir2]; + } + } + +/* Ensure correct coloring */ + q->color = g->son[dir2]->color = EINA_RBTREE_RED; + g->son[dir2]->son[EINA_RBTREE_LEFT]->color = + EINA_RBTREE_BLACK; + g->son[dir2]->son[EINA_RBTREE_RIGHT]->color = + EINA_RBTREE_BLACK; + } + } + } + } + } + + /* Replace and remove if found */ + if (f) + { + /* 'q' should take the place of 'node' parent */ + f->son[f->son[1] == node] = q; + + /* Switch the link from the parent to q's son */ + p->son[p->son[1] == q] = q->son[!q->son[0]]; + + /* Put q at the place of node */ + q->son[0] = node->son[0]; + q->son[1] = node->son[1]; + q->color = node->color; + + /* Reset node link */ + node->son[0] = NULL; + node->son[1] = NULL; + } + + root = head.son[1]; + if (root) + root->color = EINA_RBTREE_BLACK; + + return root; +} + +EAPI Eina_Iterator * +eina_rbtree_iterator_prefix(const Eina_Rbtree *root) +{ + return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_PREFIX_MASK); +} + +EAPI Eina_Iterator * +eina_rbtree_iterator_infix(const Eina_Rbtree *root) +{ + return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_INFIX_MASK); +} + +EAPI Eina_Iterator * +eina_rbtree_iterator_postfix(const Eina_Rbtree *root) +{ + return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_POSTFIX_MASK); +} + +EAPI void +eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data) +{ + if (!root) + return; + + EINA_SAFETY_ON_NULL_RETURN(func); + + eina_rbtree_delete(root->son[0], func, data); + eina_rbtree_delete(root->son[1], func, data); + func(root, data); +} diff --git a/libraries/eina/src/lib/eina_rectangle.c b/libraries/eina/src/lib/eina_rectangle.c new file mode 100644 index 0000000..7f0a619 --- /dev/null +++ b/libraries/eina/src/lib/eina_rectangle.c @@ -0,0 +1,568 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Cedric BAIL, Carsten Haitzler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_magic.h" +#include "eina_inlist.h" +#include "eina_mempool.h" +#include "eina_list.h" +#include "eina_trash.h" +#include "eina_log.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_rectangle.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_RECTANGLE_POOL_MAGIC 0x1578FCB0 +#define EINA_RECTANGLE_ALLOC_MAGIC 0x1578FCB1 + +#define BUCKET_THRESHOLD 110 + +typedef struct _Eina_Rectangle_Alloc Eina_Rectangle_Alloc; + +struct _Eina_Rectangle_Pool +{ + Eina_Inlist *head; + Eina_List *empty; + void *data; + + Eina_Trash *bucket; + unsigned int bucket_count; + + unsigned int references; + int w; + int h; + + Eina_Bool sorted; + EINA_MAGIC +}; + +struct _Eina_Rectangle_Alloc +{ + EINA_INLIST; + Eina_Rectangle_Pool *pool; + EINA_MAGIC +}; + +#define EINA_MAGIC_CHECK_RECTANGLE_POOL(d) \ + do { \ + if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_POOL_MAGIC)) { \ + EINA_MAGIC_FAIL((d), EINA_RECTANGLE_POOL_MAGIC); } \ + } while (0) + +#define EINA_MAGIC_CHECK_RECTANGLE_ALLOC(d) \ + do { \ + if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_ALLOC_MAGIC)) { \ + EINA_MAGIC_FAIL((d), EINA_RECTANGLE_ALLOC_MAGIC); } \ + } while (0) + +static Eina_Mempool *_eina_rectangle_alloc_mp = NULL; +static Eina_Mempool *_eina_rectangle_mp = NULL; + +static Eina_Trash *_eina_rectangles = NULL; +static unsigned int _eina_rectangles_count = 0; +static int _eina_rectangle_log_dom = -1; + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_rectangle_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_rectangle_log_dom, __VA_ARGS__) + +static int +_eina_rectangle_cmp(const Eina_Rectangle *r1, const Eina_Rectangle *r2) +{ + return (r2->w * r2->h) - (r1->w * r1->h); +} + +static Eina_List * +_eina_rectangle_merge_list(Eina_List *empty, Eina_Rectangle *r) +{ + Eina_Rectangle *match; + Eina_List *l; + int xw; + int yh; + + if (r->w == 0 || r->h == 0) + { + eina_rectangle_free(r); + return empty; + } + +start_again: + xw = r->x + r->w; + yh = r->y + r->h; + + EINA_LIST_FOREACH(empty, l, match) + { + if (match->x == r->x && match->w == r->w + && (match->y == yh || r->y == match->y + match->h)) + { + if (match->y > r->y) + match->y = r->y; + + match->h += r->h; + + eina_rectangle_free(r); + + empty = eina_list_remove_list(empty, l); + + r = match; + + goto start_again; + } + else if (match->y == r->y && match->h == r->h + && (match->x == xw || r->x == match->x + match->w)) + { + if (match->x > r->x) + match->x = r->x; + + match->w += r->w; + + eina_rectangle_free(r); + + empty = eina_list_remove_list(empty, l); + + r = match; + + goto start_again; + } + } + + return eina_list_append(empty, r); +} + +static Eina_List * +_eina_rectangle_empty_space_find(Eina_List *empty, int w, int h, int *x, int *y) +{ + Eina_Rectangle *r; + Eina_List *l; + + EINA_LIST_FOREACH(empty, l, r) + { + if (r->w >= w && r->h >= h) + { + /* Remove l from empty */ + empty = eina_list_remove_list(empty, l); + /* Remember x and y */ + *x = r->x; + *y = r->y; + /* Split r in 2 rectangle if needed (only the empty one) and insert them */ + if (r->w == w) + { + r->y += h; + r->h -= h; + } + else if (r->h == h) + { + r->x += w; + r->w -= w; + } + else + { + int rx1, ry1, rw1, rh1; + int x2, y2, w2, h2; + + rx1 = r->x + w; + ry1 = r->y; + rw1 = r->w - w; + /* h1 could be h or r->h */ + x2 = r->x; + y2 = r->y + h; + /* w2 could be w or r->w */ + h2 = r->h - h; + + if (rw1 * r->h > h2 * r->w) + { + rh1 = r->h; + w2 = w; + } + else + { + rh1 = h; + w2 = r->w; + } + + EINA_RECTANGLE_SET(r, rx1, ry1, rw1, rh1); + empty = _eina_rectangle_merge_list(empty, r); + + r = eina_rectangle_new(x2, y2, w2, h2); + } + + if (r) + { + empty = _eina_rectangle_merge_list(empty, r); /* Return empty */ + + } + + return empty; + } + } + + *x = -1; + *y = -1; + return empty; +} + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +Eina_Bool +eina_rectangle_init(void) +{ + const char *choice, *tmp; + + _eina_rectangle_log_dom = eina_log_domain_register("eina_rectangle", + EINA_LOG_COLOR_DEFAULT); + if (_eina_rectangle_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_rectangle"); + return EINA_FALSE; + } + +#ifdef EINA_DEFAULT_MEMPOOL + choice = "pass_through"; +#else + choice = "chained_mempool"; +#endif + tmp = getenv("EINA_MEMPOOL"); + if (tmp && tmp[0]) + choice = tmp; + + _eina_rectangle_alloc_mp = eina_mempool_add + (choice, "rectangle-alloc", NULL, + sizeof(Eina_Rectangle_Alloc) + sizeof(Eina_Rectangle), 1024); + if (!_eina_rectangle_alloc_mp) + { + ERR("Mempool for rectangle cannot be allocated in rectangle init."); + goto init_error; + } + + _eina_rectangle_mp = eina_mempool_add + (choice, "rectangle", NULL, sizeof(Eina_Rectangle), 256); + if (!_eina_rectangle_mp) + { + ERR("Mempool for rectangle cannot be allocated in rectangle init."); + goto init_error; + } + + return EINA_TRUE; + +init_error: + eina_log_domain_unregister(_eina_rectangle_log_dom); + _eina_rectangle_log_dom = -1; + + return EINA_FALSE; +} + +Eina_Bool +eina_rectangle_shutdown(void) +{ + Eina_Rectangle *del; + + while ((del = eina_trash_pop(&_eina_rectangles))) + eina_mempool_free(_eina_rectangle_mp, del); + _eina_rectangles_count = 0; + + eina_mempool_del(_eina_rectangle_alloc_mp); + eina_mempool_del(_eina_rectangle_mp); + + eina_log_domain_unregister(_eina_rectangle_log_dom); + _eina_rectangle_log_dom = -1; + + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Rectangle * +eina_rectangle_new(int x, int y, int w, int h) +{ + Eina_Rectangle *rect; + + if (_eina_rectangles) + { + rect = eina_trash_pop(&_eina_rectangles); + _eina_rectangles_count--; + } + else + rect = eina_mempool_malloc(_eina_rectangle_mp, sizeof (Eina_Rectangle)); + + if (!rect) + return NULL; + + EINA_RECTANGLE_SET(rect, x, y, w, h); + + return rect; +} + +EAPI void +eina_rectangle_free(Eina_Rectangle *rect) +{ + EINA_SAFETY_ON_NULL_RETURN(rect); + + if (_eina_rectangles_count > BUCKET_THRESHOLD) + eina_mempool_free(_eina_rectangle_mp, rect); + else + { + eina_trash_push(&_eina_rectangles, rect); + _eina_rectangles_count++; + } +} + +EAPI Eina_Rectangle_Pool * +eina_rectangle_pool_new(int w, int h) +{ + Eina_Rectangle_Pool *new; + + new = malloc(sizeof (Eina_Rectangle_Pool)); + if (!new) + return NULL; + + new->head = NULL; + new->empty = eina_list_append(NULL, eina_rectangle_new(0, 0, w, h)); + new->references = 0; + new->sorted = EINA_FALSE; + new->w = w; + new->h = h; + new->bucket = NULL; + new->bucket_count = 0; + + EINA_MAGIC_SET(new, EINA_RECTANGLE_POOL_MAGIC); + DBG("pool=%p, size=(%d, %d)", new, w, h); + + return new; +} + +EAPI void +eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) +{ + Eina_Rectangle_Alloc *del; + + EINA_SAFETY_ON_NULL_RETURN(pool); + DBG("pool=%p, size=(%d, %d), references=%u", + pool, pool->w, pool->h, pool->references); + while (pool->head) + { + del = (Eina_Rectangle_Alloc *)pool->head; + + pool->head = (EINA_INLIST_GET(del))->next; + + EINA_MAGIC_SET(del, EINA_MAGIC_NONE); + eina_mempool_free(_eina_rectangle_alloc_mp, del); + } + + while (pool->bucket) + { + del = eina_trash_pop(&pool->bucket); + eina_mempool_free(_eina_rectangle_alloc_mp, del); + } + + MAGIC_FREE(pool); +} + +EAPI int +eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(pool, 0); + return pool->references; +} + +EAPI Eina_Rectangle * +eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h) +{ + Eina_Rectangle_Alloc *new; + Eina_Rectangle *rect; + int x; + int y; + + EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL); + + DBG("pool=%p, size=(%d, %d), references=%u", + pool, pool->w, pool->h, pool->references); + + if (w <= 0 || h <= 0) + return NULL; + + if (w > pool->w || h > pool->h) + return NULL; + + /* Sort empty if dirty */ + if (pool->sorted) + { + pool->empty = + eina_list_sort(pool->empty, 0, EINA_COMPARE_CB(_eina_rectangle_cmp)); + pool->sorted = EINA_TRUE; + } + + pool->empty = _eina_rectangle_empty_space_find(pool->empty, w, h, &x, &y); + if (x == -1) + return NULL; + + pool->sorted = EINA_FALSE; + + if (pool->bucket_count > 0) + { + new = eina_trash_pop(&pool->bucket); + pool->bucket_count--; + } + else + new = eina_mempool_malloc(_eina_rectangle_alloc_mp, + sizeof (Eina_Rectangle_Alloc) + + sizeof (Eina_Rectangle)); + + if (!new) + return NULL; + + rect = (Eina_Rectangle *)(new + 1); + eina_rectangle_coords_from(rect, x, y, w, h); + + pool->head = eina_inlist_prepend(pool->head, EINA_INLIST_GET(new)); + pool->references++; + + new->pool = pool; + + EINA_MAGIC_SET(new, EINA_RECTANGLE_ALLOC_MAGIC); + DBG("rect=%p pool=%p, size=(%d, %d), references=%u", + rect, pool, pool->w, pool->h, pool->references); + + return rect; +} + +EAPI void +eina_rectangle_pool_release(Eina_Rectangle *rect) +{ + Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1; + Eina_Rectangle *r; + + EINA_SAFETY_ON_NULL_RETURN(rect); + + EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era); + EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool); + + DBG("rect=%p pool=%p, size=(%d, %d), references=%u", + rect, era->pool, era->pool->w, era->pool->h, era->pool->references); + + era->pool->references--; + era->pool->head = eina_inlist_remove(era->pool->head, EINA_INLIST_GET(era)); + + r = eina_rectangle_new(rect->x, rect->y, rect->w, rect->h); + if (r) + { + era->pool->empty = _eina_rectangle_merge_list(era->pool->empty, r); + era->pool->sorted = EINA_FALSE; + } + + if (era->pool->bucket_count < BUCKET_THRESHOLD) + { + Eina_Rectangle_Pool *pool; + + pool = era->pool; + + pool->bucket_count++; + eina_trash_push(&pool->bucket, era); + } + else + { + EINA_MAGIC_SET(era, EINA_MAGIC_NONE); + eina_mempool_free(_eina_rectangle_alloc_mp, era); + } +} + +EAPI Eina_Rectangle_Pool * +eina_rectangle_pool_get(Eina_Rectangle *rect) +{ + Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1; + + EINA_SAFETY_ON_NULL_RETURN_VAL(rect, NULL); + + EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era); + EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool); + + return era->pool; +} + +EAPI void +eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data) +{ + EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); + EINA_SAFETY_ON_NULL_RETURN(pool); + + DBG("data=%p pool=%p, size=(%d, %d), references=%u", + data, pool, pool->w, pool->h, pool->references); + + pool->data = (void *)data; +} + +EAPI void * +eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool) +{ + EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); + EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL); + + return pool->data; +} + +EAPI Eina_Bool +eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h) +{ + if (!pool) + return EINA_FALSE; + + EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); + EINA_SAFETY_ON_NULL_RETURN_VAL(pool, EINA_FALSE); + + if (w) + *w = pool->w; + + if (h) + *h = pool->h; + + return EINA_TRUE; +} diff --git a/libraries/eina/src/lib/eina_safety_checks.c b/libraries/eina/src/lib/eina_safety_checks.c new file mode 100644 index 0000000..eed7c59 --- /dev/null +++ b/libraries/eina/src/lib/eina_safety_checks.c @@ -0,0 +1,90 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_safety_checks.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Shut down the safety checks module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the error module set up by + * eina_safety_checks_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_safety_checks_shutdown(void) +{ + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +EAPI Eina_Error EINA_ERROR_SAFETY_FAILED = 0; + +static const char EINA_ERROR_SAFETY_FAILED_STR[] = "Safety check failed."; + +/** + * @endcond + */ + +/** + * @internal + * @brief Initialize the safety checks module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the safety checks module of Eina. It is + * called by eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_safety_checks_init(void) +{ + EINA_ERROR_SAFETY_FAILED = eina_error_msg_static_register( + EINA_ERROR_SAFETY_FAILED_STR); + return EINA_TRUE; +} + +/** + * @} + */ diff --git a/libraries/eina/src/lib/eina_sched.c b/libraries/eina/src/lib/eina_sched.c new file mode 100644 index 0000000..8c7f7fe --- /dev/null +++ b/libraries/eina/src/lib/eina_sched.c @@ -0,0 +1,94 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 ProFUSION embedded systems + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef EFL_HAVE_POSIX_THREADS +# include +# ifdef __linux__ +# include +# include +# include +# include +# endif +#endif + +#ifdef EFL_HAVE_WIN32_THREADS +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# undef WIN32_LEAN_AND_MEAN +#endif + +#include "eina_sched.h" +#include "eina_log.h" + +#define RTNICENESS 5 +#define NICENESS 5 + +EAPI void +eina_sched_prio_drop(void) +{ +#ifdef EFL_HAVE_POSIX_THREADS + struct sched_param param; + int pol, prio, ret; + pthread_t pthread_id; + + pthread_id = pthread_self(); + ret = pthread_getschedparam(pthread_id, &pol, ¶m); + if (ret) + { + EINA_LOG_ERR("Unable to query sched parameters"); + return; + } + + if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) + { + prio = sched_get_priority_max(pol); + param.sched_priority += RTNICENESS; + if (prio > 0 && param.sched_priority > prio) + param.sched_priority = prio; + + pthread_setschedparam(pthread_id, pol, ¶m); + } +# ifdef __linux__ + else + { + errno = 0; + prio = getpriority(PRIO_PROCESS, 0); + if (errno == 0) + { + prio += NICENESS; + if (prio > 19) + prio = 19; + + setpriority(PRIO_PROCESS, 0, prio); + } + } +# endif +#elif defined EFL_HAVE_WIN32_THREADS + if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL)) + EINA_LOG_ERR("Can not set thread priority"); +#else + EINA_LOG_ERR("Eina does not have support for threads enabled" + "or it doesn't support setting scheduler priorities"); +#endif +} diff --git a/libraries/eina/src/lib/eina_share_common.c b/libraries/eina/src/lib/eina_share_common.c new file mode 100644 index 0000000..90e1868 --- /dev/null +++ b/libraries/eina/src/lib/eina_share_common.c @@ -0,0 +1,977 @@ +/* EINA - EFL data type library + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010 + * Carsten Haitzler, + * Jorge Luis Zapata Muga, + * Cedric Bail, + * Gustavo Sverzut Barbieri + * Tom Hacohen + * Brett Nash + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2008 Peter Wehrfritz + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef EFL_HAVE_POSIX_THREADS +# include +#endif + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_hash.h" +#include "eina_rbtree.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_lock.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_share_common.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_SHARE_COMMON_BUCKETS 256 +#define EINA_SHARE_COMMON_MASK 0xFF + +static const char EINA_MAGIC_SHARE_STR[] = "Eina Share"; +static const char EINA_MAGIC_SHARE_HEAD_STR[] = "Eina Share Head"; + +static int _eina_share_common_count = 0; + +#define EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(d, unlock, ...) \ + do { \ + if (!EINA_MAGIC_CHECK((d), EINA_MAGIC_SHARE_HEAD)) \ + { \ + EINA_MAGIC_FAIL((d), EINA_MAGIC_SHARE_HEAD); \ + unlock; \ + return __VA_ARGS__; \ + } \ + } while (0) + +#define EINA_MAGIC_CHECK_SHARE_COMMON_NODE(d, _node_magic, unlock) \ + do { \ + if (!EINA_MAGIC_CHECK((d), _node_magic)) \ + { \ + EINA_MAGIC_FAIL((d), _node_magic); \ + unlock; \ + } \ + } while (0) + +#ifdef EINA_SHARE_USAGE +typedef struct _Eina_Share_Common_Population Eina_Share_Common_Population; +#endif + +typedef struct _Eina_Share_Common Eina_Share_Common; +typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node; +typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; + +int _eina_share_common_log_dom = -1; + +struct _Eina_Share +{ + Eina_Share_Common *share; + Eina_Magic node_magic; +#ifdef EINA_SHARE_COMMON_USAGE + Eina_Share_Common_Population population; + int max_node_population; +#endif +}; + +struct _Eina_Share_Common +{ + Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS]; + + EINA_MAGIC +}; + +struct _Eina_Share_Common_Node +{ + Eina_Share_Common_Node *next; + + EINA_MAGIC + + unsigned int length; + unsigned int references; + char str[]; +}; + +struct _Eina_Share_Common_Head +{ + EINA_RBTREE; + EINA_MAGIC + + int hash; + +#ifdef EINA_SHARE_COMMON_USAGE + int population; +#endif + + Eina_Share_Common_Node *head; + Eina_Share_Common_Node builtin_node; +}; + +Eina_Bool _share_common_threads_activated = EINA_FALSE; + +static Eina_Lock _mutex_big; + +#ifdef EINA_SHARE_COMMON_USAGE +struct _Eina_Share_Common_Population +{ + int count; + int max; +}; + +static Eina_Share_Common_Population population = { 0, 0 }; + +static Eina_Share_Common_Population population_group[4] = +{ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 } +}; + +static void +_eina_share_common_population_init(Eina_Share *share) +{ + unsigned int i; + + for (i = 0; + i < sizeof (share->population_group) / + sizeof (share->population_group[0]); + ++i) + { + share->population_group[i].count = 0; + share->population_group[i].max = 0; + } +} + +static void +_eina_share_common_population_shutdown(Eina_Share *share) +{ + unsigned int i; + + share->max_node_population = 0; + share->population.count = 0; + share->population.max = 0; + + for (i = 0; + i < sizeof (share->population_group) / + sizeof (share->population_group[0]); + ++i) + { + share->population_group[i].count = 0; + share->population_group[i].max = 0; + } +} + +static void +_eina_share_common_population_stats(Eina_Share *share) +{ + unsigned int i; + + fprintf(stderr, "eina share_common statistic:\n"); + fprintf(stderr, + " * maximum shared strings : %i\n", + share->population.max); + fprintf(stderr, + " * maximum shared strings per node : %i\n", + share->max_node_population); + + for (i = 0; + i < sizeof (share->population_group) / + sizeof (share->population_group[0]); + ++i) + fprintf(stderr, + "DDD: %i strings of length %i, max strings: %i\n", + share->population_group[i].count, + i, + share->population_group[i].max); +} + +void +eina_share_common_population_add(Eina_Share *share, int slen) +{ + eina_lock_take(&_mutex_big); + + share->population.count++; + if (share->population.count > share->population.max) + share->population.max = share->population.count; + + if (slen < 4) + { + share->population_group[slen].count++; + if (share->population_group[slen].count > + share->population_group[slen].max) + share->population_group[slen].max = + share->population_group[slen].count; + } + + eina_lock_release(&_mutex_big); +} + +void +eina_share_common_population_del(Eina_Share *share, int slen) +{ + eina_lock_take(&_mutex_big); + + share->population.count--; + if (slen < 4) + share->population_group[slen].count--; + + eina_lock_release(&_mutex_big); +} + +static void +_eina_share_common_population_head_init(Eina_Share *share, + Eina_Share_Common_Head *head) +{ + head->population = 1; +} + +static void +_eina_share_common_population_head_add(Eina_Share *share, + Eina_Share_Common_Head *head) +{ + head->population++; + if (head->population > share->max_node_population) + share->max_node_population = head->population; +} + +static void +_eina_share_common_population_head_del(Eina_Share *share, + Eina_Share_Common_Head *head) +{ + head->population--; +} + +#else /* EINA_SHARE_COMMON_USAGE undefined */ + +static void _eina_share_common_population_init(__UNUSED__ Eina_Share *share) { +} +static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share *share) +{ +} +static void _eina_share_common_population_stats(__UNUSED__ Eina_Share *share) { +} +void eina_share_common_population_add(__UNUSED__ Eina_Share *share, + __UNUSED__ int slen) { +} +void eina_share_common_population_del(__UNUSED__ Eina_Share *share, + __UNUSED__ int slen) { +} +static void _eina_share_common_population_head_init( + __UNUSED__ Eina_Share *share, + __UNUSED__ Eina_Share_Common_Head *head) { +} +static void _eina_share_common_population_head_add( + __UNUSED__ Eina_Share *share, + __UNUSED__ + Eina_Share_Common_Head *head) { +} +static void _eina_share_common_population_head_del( + __UNUSED__ Eina_Share *share, + __UNUSED__ + Eina_Share_Common_Head *head) { +} +#endif + +static int +_eina_share_common_cmp(const Eina_Share_Common_Head *ed, + const int *hash, + __UNUSED__ int length, + __UNUSED__ void *data) +{ + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, , 0); + + return ed->hash - *hash; +} + +static Eina_Rbtree_Direction +_eina_share_common_node(const Eina_Share_Common_Head *left, + const Eina_Share_Common_Head *right, + __UNUSED__ void *data) +{ + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left, , 0); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right, , 0); + + if (left->hash - right->hash < 0) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static void +_eina_share_common_head_free(Eina_Share_Common_Head *ed, __UNUSED__ void *data) +{ + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, ); + + while (ed->head) + { + Eina_Share_Common_Node *el = ed->head; + + ed->head = ed->head->next; + if (el != &ed->builtin_node) + MAGIC_FREE(el); + } + MAGIC_FREE(ed); +} + +static void +_eina_share_common_node_init(Eina_Share_Common_Node *node, + const char *str, + int slen, + unsigned int null_size, + Eina_Magic node_magic) +{ + EINA_MAGIC_SET(node, node_magic); + node->references = 1; + node->length = slen; + memcpy(node->str, str, slen); + memset(node->str + slen, 0, null_size); /* Nullify the null */ + + (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ +} + +static Eina_Share_Common_Head * +_eina_share_common_head_alloc(int slen) +{ + Eina_Share_Common_Head *head; + const size_t head_size = offsetof(Eina_Share_Common_Head, builtin_node.str); + + head = malloc(head_size + slen); + if (!head) + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + + return head; +} + +static const char * +_eina_share_common_add_head(Eina_Share *share, + Eina_Share_Common_Head **p_bucket, + int hash, + const char *str, + unsigned int slen, + unsigned int null_size) +{ + Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket; + Eina_Share_Common_Head *head; + + head = _eina_share_common_head_alloc(slen + null_size); + if (!head) + return NULL; + + EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD); + head->hash = hash; + head->head = &head->builtin_node; + _eina_share_common_node_init(head->head, + str, + slen, + null_size, + share->node_magic); + head->head->next = NULL; + + _eina_share_common_population_head_init(share, head); + + *p_tree = eina_rbtree_inline_insert + (*p_tree, EINA_RBTREE_GET(head), + EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); + + return head->head->str; +} + +static void +_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket, + Eina_Share_Common_Head *head) +{ + Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket; + + *p_tree = eina_rbtree_inline_remove + (*p_tree, EINA_RBTREE_GET(head), + EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); + + MAGIC_FREE(head); +} + + +static inline Eina_Bool +_eina_share_common_node_eq(const Eina_Share_Common_Node *node, + const char *str, + unsigned int slen) +{ + return ((node->length == slen) && + (memcmp(node->str, str, slen) == 0)); +} + +static Eina_Share_Common_Node * +_eina_share_common_head_find(Eina_Share_Common_Head *head, + const char *str, + unsigned int slen) +{ + Eina_Share_Common_Node *node, *prev; + + node = head->head; + if (_eina_share_common_node_eq(node, str, slen)) + return node; + + prev = node; + node = node->next; + for (; node; prev = node, node = node->next) + if (_eina_share_common_node_eq(node, str, slen)) + { + /* promote node, make hot items be at the beginning */ + prev->next = node->next; + node->next = head->head; + head->head = node; + return node; + } + + return NULL; +} + +static Eina_Bool +_eina_share_common_head_remove_node(Eina_Share_Common_Head *head, + const Eina_Share_Common_Node *node) +{ + Eina_Share_Common_Node *cur, *prev; + + if (head->head == node) + { + head->head = node->next; + return 1; + } + + prev = head->head; + cur = head->head->next; + for (; cur; prev = cur, cur = cur->next) + if (cur == node) + { + prev->next = cur->next; + return 1; + } + + return 0; +} + +static Eina_Share_Common_Head * +_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash) +{ + return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup + (EINA_RBTREE_GET(bucket), &hash, 0, + EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL); +} + +static Eina_Share_Common_Node * +_eina_share_common_node_alloc(unsigned int slen, unsigned int null_size) +{ + Eina_Share_Common_Node *node; + const size_t node_size = offsetof(Eina_Share_Common_Node, str); + + node = malloc(node_size + slen + null_size); + if (!node) + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + + return node; +} + +static Eina_Share_Common_Node * +_eina_share_common_node_from_str(const char *str, Eina_Magic node_magic) +{ + Eina_Share_Common_Node *node; + const size_t offset = offsetof(Eina_Share_Common_Node, str); + + node = (Eina_Share_Common_Node *)(str - offset); + EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic, node = NULL); + return node; + + (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ +} + +static Eina_Bool +eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__, + Eina_Share_Common_Head *head, + struct dumpinfo *fdata) +{ + Eina_Share_Common_Node *node; + + fdata->used += sizeof(Eina_Share_Common_Head); + for (node = head->head; node; node = node->next) + { + printf("DDD: %5i %5i ", node->length, node->references); + printf("'%.*s'\n", node->length, ((char *)node) + sizeof(Eina_Share_Common_Node)); + fdata->used += sizeof(Eina_Share_Common_Node); + fdata->used += node->length; + fdata->saved += (node->references - 1) * node->length; + fdata->dups += node->references - 1; + fdata->unique++; + } + + return EINA_TRUE; +} + +/** + * @endcond + */ + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the share_common module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_share_common_init(Eina_Share **_share, + Eina_Magic node_magic, + const char *node_magic_STR) +{ + Eina_Share *share; + + share = *_share = calloc(sizeof(Eina_Share), 1); + if (!share) goto on_error; + + if (_eina_share_common_log_dom < 0) /*Only register if not already */ + _eina_share_common_log_dom = eina_log_domain_register( + "eina_share", + EINA_LOG_COLOR_DEFAULT); + + if (_eina_share_common_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_share_common"); + goto on_error; + } + + share->share = calloc(1, sizeof(Eina_Share_Common)); + if (!share->share) + { + if (_eina_share_common_log_dom > 0) + { + eina_log_domain_unregister(_eina_share_common_log_dom); + _eina_share_common_log_dom = -1; + } + + goto on_error; + } + + share->node_magic = node_magic; +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_SHARE); + EMS(EINA_MAGIC_SHARE_HEAD); + EMS(node_magic); +#undef EMS + EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE); + + _eina_share_common_population_init(share); + + /* below is the common part among other all eina_share_common user */ + if (_eina_share_common_count++ != 0) + return EINA_TRUE; + + eina_lock_new(&_mutex_big); + return EINA_TRUE; + + on_error: + _eina_share_common_count--; + return EINA_FALSE; +} + +/** + * @internal + * @brief Shut down the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the share_common module set up by + * eina_share_common_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_share_common_shutdown(Eina_Share **_share) +{ + unsigned int i; + Eina_Share *share = *_share; + + eina_lock_take(&_mutex_big); + + _eina_share_common_population_stats(share); + + /* remove any string still in the table */ + for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) + { + eina_rbtree_delete(EINA_RBTREE_GET( + share->share->buckets[i]), + EINA_RBTREE_FREE_CB( + _eina_share_common_head_free), NULL); + share->share->buckets[i] = NULL; + } + MAGIC_FREE(share->share); + + _eina_share_common_population_shutdown(share); + if (_eina_share_common_log_dom > 0) /* Only free if necessary */ + { + eina_log_domain_unregister(_eina_share_common_log_dom); + _eina_share_common_log_dom = -1; + } + + eina_lock_release(&_mutex_big); + + free(*_share); + *_share = NULL; + + /* below is the common part among other all eina_share_common user */ + if (--_eina_share_common_count != 0) + return EINA_TRUE; + + eina_lock_free(&_mutex_big); + + return EINA_TRUE; +} + +#ifdef EFL_HAVE_THREADS + +/** + * @internal + * @brief Activate the share_common mutexes. + * + * This function activate the mutexes in the eina share_common module. It is called by + * eina_threads_init(). + * + * @see eina_threads_init() + */ +void +eina_share_common_threads_init(void) +{ + _share_common_threads_activated = EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the share_common mutexes. + * + * This function shuts down the mutexes in the share_common module. + * It is called by eina_threads_shutdown(). + * + * @see eina_threads_shutdown() + */ +void +eina_share_common_threads_shutdown(void) +{ + _share_common_threads_activated = EINA_FALSE; +} + +#endif + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +const char * +eina_share_common_add_length(Eina_Share *share, + const char *str, + unsigned int slen, + unsigned int null_size) +{ + Eina_Share_Common_Head **p_bucket, *ed; + Eina_Share_Common_Node *el; + int hash_num, hash; + + if (!str) + return NULL; + + eina_share_common_population_add(share, slen); + + if (slen <= 0) + return NULL; + + hash = eina_hash_superfast(str, slen); + hash_num = hash & 0xFF; + hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; + + eina_lock_take(&_mutex_big); + p_bucket = share->share->buckets + hash_num; + + ed = _eina_share_common_find_hash(*p_bucket, hash); + if (!ed) + { + const char *s = _eina_share_common_add_head(share, + p_bucket, + hash, + str, + slen, + null_size); + eina_lock_release(&_mutex_big); + return s; + } + + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), NULL); + + el = _eina_share_common_head_find(ed, str, slen); + if (el) + { + EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el, + share->node_magic, + eina_lock_release(&_mutex_big)); + el->references++; + eina_lock_release(&_mutex_big); + return el->str; + } + + el = _eina_share_common_node_alloc(slen, null_size); + if (!el) + { + eina_lock_release(&_mutex_big); + return NULL; + } + + _eina_share_common_node_init(el, str, slen, null_size, share->node_magic); + el->next = ed->head; + ed->head = el; + _eina_share_common_population_head_add(share, ed); + + eina_lock_release(&_mutex_big); + + return el->str; +} + +const char * +eina_share_common_ref(Eina_Share *share, const char *str) +{ + Eina_Share_Common_Node *node; + + if (!str) + return NULL; + + eina_lock_take(&_mutex_big); + node = _eina_share_common_node_from_str(str, share->node_magic); + if (!node) + { + eina_lock_release(&_mutex_big); + return str; + } + node->references++; + + eina_lock_release(&_mutex_big); + + eina_share_common_population_add(share, node->length); + + return str; +} + + +void +eina_share_common_del(Eina_Share *share, const char *str) +{ + unsigned int slen; + Eina_Share_Common_Head *ed; + Eina_Share_Common_Head **p_bucket; + Eina_Share_Common_Node *node; + int hash_num, hash; + + if (!str) + return; + + eina_lock_take(&_mutex_big); + + node = _eina_share_common_node_from_str(str, share->node_magic); + if (!node) + goto on_error; + + slen = node->length; + eina_share_common_population_del(share, slen); + if (node->references > 1) + { + node->references--; + eina_lock_release(&_mutex_big); + return; + } + + node->references = 0; + + hash = eina_hash_superfast(str, slen); + hash_num = hash & 0xFF; + hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; + + p_bucket = share->share->buckets + hash_num; + ed = _eina_share_common_find_hash(*p_bucket, hash); + if (!ed) + goto on_error; + + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big)); + + if (!_eina_share_common_head_remove_node(ed, node)) + goto on_error; + + if (node != &ed->builtin_node) + MAGIC_FREE(node); + + if (!ed->head) + _eina_share_common_del_head(p_bucket, ed); + else + _eina_share_common_population_head_del(share, ed); + + eina_lock_release(&_mutex_big); + + return; + +on_error: + eina_lock_release(&_mutex_big); + /* possible segfault happened before here, but... */ + CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str); +} + +int +eina_share_common_length(__UNUSED__ Eina_Share *share, const char *str) +{ + const Eina_Share_Common_Node *node; + + if (!str) + return -1; + + node = _eina_share_common_node_from_str(str, share->node_magic); + if (!node) return 0; + return node->length; +} + +void +eina_share_common_dump(Eina_Share *share, void (*additional_dump)( + struct dumpinfo *), int used) +{ + Eina_Iterator *it; + unsigned int i; + struct dumpinfo di; + + if (!share) + return; + + di.used = used; + di.saved = 0; + di.dups = 0; + di.unique = 0; + printf("DDD: len ref string\n"); + printf("DDD:-------------------\n"); + + eina_lock_take(&_mutex_big); + for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) + { + if (!share->share->buckets[i]) + { + continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i, + + } + +// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node)); + it = eina_rbtree_iterator_prefix( + (Eina_Rbtree *)share->share->buckets[i]); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &di); + eina_iterator_free(it); + } + if (additional_dump) + additional_dump(&di); + +#ifdef EINA_SHARE_COMMON_USAGE + /* One character strings are not counted in the hash. */ + di.saved += share->population_group[0].count * sizeof(char); + di.saved += share->population_group[1].count * sizeof(char) * 2; +#endif + printf("DDD:-------------------\n"); + printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n", + di.used, di.saved, di.used ? (di.saved * 100.0 / di.used) : 0.0); + printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n", + di.unique, di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0); + +#ifdef EINA_SHARE_COMMON_USAGE + printf("DDD: Allocated strings: %i\n", share->population.count); + printf("DDD: Max allocated strings: %i\n", share->population.max); + + for (i = 0; + i < sizeof (share->population_group) / + sizeof (share->population_group[0]); + ++i) + fprintf(stderr, + "DDD: %i strings of length %i, max strings: %i\n", + share->population_group[i].count, + i, + share->population_group[i].max); +#endif + + eina_lock_release(&_mutex_big); +} + +/** + * @endcond + */ diff --git a/libraries/eina/src/lib/eina_share_common.h b/libraries/eina/src/lib/eina_share_common.h new file mode 100644 index 0000000..002c652 --- /dev/null +++ b/libraries/eina/src/lib/eina_share_common.h @@ -0,0 +1,103 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright (C) 2008 Peter Wehrfritz + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies of the Software and its Copyright notices. In addition publicly + * documented acknowledgment must be given that this software has been used if no + * source code of this software is made available publicly. This includes + * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing + * documents or any documentation provided with any product containing this + * software. This License does not apply to any software that links to the + * libraries provided by this software (statically or dynamically), but only to + * the software provided. + * + * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice + * and it's intent. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef EINA_SHARE_COMMON_H_ +#define EINA_SHARE_COMMON_H_ + +#include "eina_types.h" +#include "eina_magic.h" + +typedef struct _Eina_Share Eina_Share; + +struct dumpinfo +{ + int used, saved, dups, unique; +}; + +Eina_Bool eina_share_common_init(Eina_Share **share, + Eina_Magic node_magic, + const char *node_magic_STR); +Eina_Bool eina_share_common_shutdown(Eina_Share **share); +const char *eina_share_common_add_length(Eina_Share *share, + const char *str, + unsigned int slen, + unsigned int null_size) +EINA_WARN_UNUSED_RESULT; +const char *eina_share_common_ref(Eina_Share *share, const char *str); +void eina_share_common_del(Eina_Share *share, const char *str); +int eina_share_common_length(Eina_Share *share, + const char *str) EINA_CONST +EINA_WARN_UNUSED_RESULT; +void eina_share_common_dump(Eina_Share *share, void (*additional_dump)( + struct dumpinfo *), int used); + + +/* Population functions */ +void eina_share_common_population_add(Eina_Share *share, int slen); +void eina_share_common_population_del(Eina_Share *share, int slen); + +/* Share logging */ +#ifdef CRITICAL +#undef CRITICAL +#endif +#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_common_log_dom, __VA_ARGS__) + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_common_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_common_log_dom, __VA_ARGS__) +extern int _eina_share_common_log_dom; + +#endif /* EINA_STRINGSHARE_H_ */ diff --git a/libraries/eina/src/lib/eina_simple_xml_parser.c b/libraries/eina/src/lib/eina_simple_xml_parser.c new file mode 100644 index 0000000..08a8259 --- /dev/null +++ b/libraries/eina/src/lib/eina_simple_xml_parser.c @@ -0,0 +1,1070 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Gustavo Sverzut Barbieri + * Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_private.h" +#include "eina_log.h" +#include "eina_mempool.h" +#include "eina_stringshare.h" +#include "eina_strbuf.h" +#include "eina_simple_xml_parser.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +static Eina_Mempool *_eina_simple_xml_tag_mp = NULL; +static Eina_Mempool *_eina_simple_xml_attribute_mp = NULL; +static int _eina_simple_xml_log_dom = -1; + +static const char EINA_MAGIC_SIMPLE_XML_TAG_STR[] = "Eina Simple XML Tag"; +static const char EINA_MAGIC_SIMPLE_XML_DATA_STR[] = "Eina Simple XML Data"; +static const char EINA_MAGIC_SIMPLE_XML_ATTRIBUTE_STR[] = "Eina Simple XML Attribute"; + +#define EINA_MAGIC_CHECK_TAG(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_TAG)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_TAG); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_DATA(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_DATA)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_DATA); \ + return __VA_ARGS__; \ + } \ + } while(0) + +#define EINA_MAGIC_CHECK_ATTRIBUTE(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); \ + return __VA_ARGS__; \ + } \ + } while(0) + + +#ifndef EINA_LOG_COLOR_DEFAULT +#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN +#endif + +#ifdef ERR +#undef ERR +#endif +#define ERR(...) EINA_LOG_DOM_ERR(_eina_simple_xml_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_simple_xml_log_dom, __VA_ARGS__) + +#ifdef DBG +#undef DBG +#endif +#define DBG(...) EINA_LOG_DOM_DBG(_eina_simple_xml_log_dom, __VA_ARGS__) + + +static inline const char * +_eina_simple_xml_whitespace_find(const char *itr, const char *itr_end) +{ + for (; itr < itr_end; itr++) + if (isspace(*itr)) break; + return itr; +} + +static inline const char * +_eina_simple_xml_whitespace_skip(const char *itr, const char *itr_end) +{ + for (; itr < itr_end; itr++) + if (!isspace(*itr)) break; + return itr; +} + +static inline const char * +_eina_simple_xml_whitespace_unskip(const char *itr, const char *itr_start) +{ + for (itr--; itr > itr_start; itr--) + if (!isspace(*itr)) break; + return itr + 1; +} + +static inline const char * +_eina_simple_xml_tag_start_find(const char *itr, const char *itr_end) +{ + return memchr(itr, '<', itr_end - itr); +} + +static inline const char * +_eina_simple_xml_tag_end_find(const char *itr, const char *itr_end) +{ + for (; itr < itr_end; itr++) + if ((*itr == '>') || (*itr == '<')) /* consider < also ends a tag */ + return itr; + return NULL; +} + +/** + * @endcond + */ + +/*============================================================================* + * Global * + *============================================================================*/ + + +/** + * @internal + * @brief Initialize the simple xml parser module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the simple xml parser module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_simple_xml_init(void) +{ + const char *choice, *tmp; + + _eina_simple_xml_log_dom = eina_log_domain_register("eina_simple_xml", + EINA_LOG_COLOR_DEFAULT); + if (_eina_simple_xml_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_simple_xml"); + return EINA_FALSE; + } + +#ifdef EINA_DEFAULT_MEMPOOL + choice = "pass_through"; +#else + choice = "chained_mempool"; +#endif + tmp = getenv("EINA_MEMPOOL"); + if (tmp && tmp[0]) + choice = tmp; + + _eina_simple_xml_tag_mp = eina_mempool_add + (choice, "simple_xml_tag", NULL, + sizeof(Eina_Simple_XML_Node_Tag), 320); + if (!_eina_simple_xml_tag_mp) + { + ERR("Mempool for simple_xml_tag cannot be allocated in init."); + goto on_init_fail; + } + + _eina_simple_xml_attribute_mp = eina_mempool_add + (choice, "simple_xml_attribute", NULL, + sizeof(Eina_Simple_XML_Attribute), 80); + if (!_eina_simple_xml_attribute_mp) + { + ERR("Mempool for simple_xml_attribute cannot be allocated in init."); + eina_mempool_del(_eina_simple_xml_tag_mp); + goto on_init_fail; + } + +#define EMS(n) eina_magic_string_static_set(n, n ## _STR) + EMS(EINA_MAGIC_SIMPLE_XML_TAG); + EMS(EINA_MAGIC_SIMPLE_XML_DATA); + EMS(EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); +#undef EMS + + return EINA_TRUE; + +on_init_fail: + eina_log_domain_unregister(_eina_simple_xml_log_dom); + _eina_simple_xml_log_dom = -1; + return EINA_FALSE; +} + +/** + * @internal + * @brief Shut down the simple xml parser module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the simple xml parser module set + * up by eina_simple_xml_init(). It is called by + * eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_simple_xml_shutdown(void) +{ + eina_mempool_del(_eina_simple_xml_attribute_mp); + eina_mempool_del(_eina_simple_xml_tag_mp); + + eina_log_domain_unregister(_eina_simple_xml_log_dom); + _eina_simple_xml_log_dom = -1; + return EINA_TRUE; +} + + +/*============================================================================* + * API * + *============================================================================*/ + + +EAPI Eina_Bool +eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Simple_XML_Cb func, const void *data) +{ + const char *itr = buf, *itr_end = buf + buflen; + + if (!buf) return EINA_FALSE; + if (!func) return EINA_FALSE; + +#define CB(type, start, end) \ + do \ + { \ + size_t _sz = end - start; \ + Eina_Bool _ret; \ + _ret = func((void*)data, type, start, start - buf, _sz); \ + if (!_ret) return EINA_FALSE; \ + } \ + while (0) + + while (itr < itr_end) + { + if (itr[0] == '<') + { + if (itr + 1 >= itr_end) + { + CB(EINA_SIMPLE_XML_ERROR, itr, itr_end); + return EINA_FALSE; + } + else + { + Eina_Simple_XML_Type type; + size_t toff; + const char *p; + + if (itr[1] == '/') + { + type = EINA_SIMPLE_XML_CLOSE; + toff = 1; + } + else if (itr[1] == '?') + { + type = EINA_SIMPLE_XML_PROCESSING; + toff = 1; + } + else if (itr[1] == '!') + { + if ((itr + sizeof("") - 1 < itr_end) && + (!memcmp(itr + 2, "DOCTYPE", + sizeof("DOCTYPE") - 1)) && + ((itr[2 + sizeof("DOCTYPE") - 1] == '>') || + (isspace(itr[2 + sizeof("DOCTYPE") - 1])))) + { + type = EINA_SIMPLE_XML_DOCTYPE; + toff = sizeof("!DOCTYPE") - 1; + } + else if ((itr + sizeof("") - 1 < itr_end) && + (!memcmp(itr + 2, "--", sizeof("--") - 1))) + { + type = EINA_SIMPLE_XML_COMMENT; + toff = sizeof("!--") - 1; + } + else if ((itr + sizeof("") - 1 < itr_end) && + (!memcmp(itr + 2, "[CDATA[", + sizeof("[CDATA[") - 1))) + { + type = EINA_SIMPLE_XML_CDATA; + toff = sizeof("![CDATA[") - 1; + } + else + { + type = EINA_SIMPLE_XML_OPEN; + toff = 0; + } + } + else + { + type = EINA_SIMPLE_XML_OPEN; + toff = 0; + } + + p = _eina_simple_xml_tag_end_find(itr + 1 + toff, itr_end); + if (p) + { + if (type == EINA_SIMPLE_XML_CDATA) + { + /* must end with ]]> */ + while ((p) && (memcmp(p - 2, "]]>", 3))) + p = _eina_simple_xml_tag_end_find(p + 1, itr_end); + } + + if ((p) && (*p == '<')) + { + type = EINA_SIMPLE_XML_ERROR; + toff = 0; + } + } + + if (p) + { + const char *start, *end; + + start = itr + 1 + toff; + end = p; + + switch (type) + { + case EINA_SIMPLE_XML_OPEN: + if (p[-1] == '/') + { + type = EINA_SIMPLE_XML_OPEN_EMPTY; + end--; + } + break; + case EINA_SIMPLE_XML_CDATA: + if (!memcmp(p - 2, "]]", 2)) end -= 2; + break; + case EINA_SIMPLE_XML_PROCESSING: + if (p[-1] == '?') end--; + break; + case EINA_SIMPLE_XML_COMMENT: + if (!memcmp(p - 2, "--", 2)) end -= 2; + break; + case EINA_SIMPLE_XML_OPEN_EMPTY: + case EINA_SIMPLE_XML_CLOSE: + case EINA_SIMPLE_XML_DATA: + case EINA_SIMPLE_XML_ERROR: + case EINA_SIMPLE_XML_DOCTYPE: + case EINA_SIMPLE_XML_IGNORED: + break; + } + + if ((strip) && (type != EINA_SIMPLE_XML_ERROR)) + { + start = _eina_simple_xml_whitespace_skip + (start, end); + end = _eina_simple_xml_whitespace_unskip + (end, start + 1); + } + + CB(type, start, end); + + if (type != EINA_SIMPLE_XML_ERROR) + itr = p + 1; + else + itr = p; + } + else + { + CB(EINA_SIMPLE_XML_ERROR, itr, itr_end); + return EINA_FALSE; + } + } + } + else + { + const char *p, *end; + + if (strip) + { + p = _eina_simple_xml_whitespace_skip(itr, itr_end); + if (p) + { + CB(EINA_SIMPLE_XML_IGNORED, itr, p); + itr = p; + } + } + + p = _eina_simple_xml_tag_start_find(itr, itr_end); + if (!p) p = itr_end; + + end = p; + if (strip) + end = _eina_simple_xml_whitespace_unskip(end, itr); + + if (itr != end) + CB(EINA_SIMPLE_XML_DATA, itr, end); + + if ((strip) && (end < p)) + CB(EINA_SIMPLE_XML_IGNORED, end, p); + + itr = p; + } + } + +#undef CB + + return EINA_TRUE; +} + +EAPI const char * +eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen) +{ + const char *itr = buf, *itr_end = buf + buflen; + + for (; itr < itr_end; itr++) + { + if (!isspace(*itr)) + { + /* user skip tagname and already gave it the attributes */ + if (*itr == '=') + return buf; + } + else + { + itr = _eina_simple_xml_whitespace_skip(itr + 1, itr_end); + if (itr == itr_end) + return NULL; + return itr; + } + } + + return NULL; +} + +EAPI Eina_Bool +eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, Eina_Simple_XML_Attribute_Cb func, const void *data) +{ + const char *itr = buf, *itr_end = buf + buflen; + char *tmpbuf = alloca(buflen + 1); + + if (!buf) return EINA_FALSE; + if (!func) return EINA_FALSE; + + while (itr < itr_end) + { + const char *p = _eina_simple_xml_whitespace_skip(itr, itr_end); + const char *key, *key_end, *value, *value_end; + char *tval; + + if (p == itr_end) return EINA_TRUE; + + key = p; + for (key_end = key; key_end < itr_end; key_end++) + if ((*key_end == '=') || (isspace(*key_end))) break; + if (key_end == itr_end) return EINA_FALSE; + if (key_end == key) continue; + + if (*key_end == '=') value = key_end + 1; + else + { + value = memchr(key_end, '=', itr_end - key_end); + if (!value) return EINA_FALSE; + value++; + } + for (; value < itr_end; value++) + if (!isspace(*value)) break; + if (value == itr_end) return EINA_FALSE; + + if ((*value == '"') || (*value == '\'')) + { + value_end = memchr(value + 1, *value, itr_end - value); + if (!value_end) return EINA_FALSE; + value++; + } + else + { + value_end = _eina_simple_xml_whitespace_find(value, itr_end); + } + + memcpy(tmpbuf, key, key_end - key); + tmpbuf[key_end - key] = '\0'; + + tval = tmpbuf + (key_end - key) + 1; + memcpy(tval, value, value_end - value); + tval[value_end - value] = '\0'; + + if (!func((void*)data, tmpbuf, tval)) + return EINA_FALSE; + + itr = value_end + 1; + } + return EINA_TRUE; +} + +/* Node loader *************************************************************/ + +EAPI Eina_Simple_XML_Attribute * +eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value) +{ + Eina_Simple_XML_Attribute *attr; + + if (!key) return NULL; + + attr = eina_mempool_malloc(_eina_simple_xml_attribute_mp, sizeof(*attr)); + if (!attr) + { + ERR("could not allocate memory for attribute from mempool"); + return NULL; + } + + EINA_MAGIC_SET(attr, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); + attr->parent = parent; + attr->key = eina_stringshare_add(key); + attr->value = eina_stringshare_add(value ? value : ""); + + if (parent) + parent->attributes = eina_inlist_append + (parent->attributes, EINA_INLIST_GET(attr)); + + return attr; +} + +EAPI void +eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr) +{ + EINA_MAGIC_CHECK_ATTRIBUTE(attr); + + if (attr->parent) + attr->parent->attributes = eina_inlist_remove + (attr->parent->attributes, EINA_INLIST_GET(attr)); + + eina_stringshare_del(attr->key); + eina_stringshare_del(attr->value); + EINA_MAGIC_SET(attr, EINA_MAGIC_NONE); + eina_mempool_free(_eina_simple_xml_attribute_mp, attr); +} + +static void +_eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node) +{ + if (node->base.parent) + node->base.parent->children = eina_inlist_remove + (node->base.parent->children, EINA_INLIST_GET(&node->base)); + + EINA_MAGIC_SET(&node->base, EINA_MAGIC_NONE); + free(node); +} + +EAPI Eina_Simple_XML_Node_Tag * +eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name) +{ + Eina_Simple_XML_Node_Tag *n; + + if (!name) return NULL; + + n = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*n)); + if (!n) + { + ERR("could not allocate memory for node from mempool"); + return NULL; + } + + memset(n, 0, sizeof(*n)); + + EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_TAG); + + n->base.type = EINA_SIMPLE_XML_NODE_TAG; + n->base.parent = parent; + n->name = eina_stringshare_add(name); + + if (parent) + parent->children = eina_inlist_append + (parent->children, EINA_INLIST_GET(&n->base)); + + return n; +} + +void +_eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag) +{ + while (tag->children) + { + Eina_Simple_XML_Node *n = EINA_INLIST_CONTAINER_GET + (tag->children, Eina_Simple_XML_Node); + if (n->type == EINA_SIMPLE_XML_NODE_TAG) + _eina_simple_xml_node_tag_free((Eina_Simple_XML_Node_Tag *)n); + else + _eina_simple_xml_node_data_free((Eina_Simple_XML_Node_Data *)n); + } + + while (tag->attributes) + { + Eina_Simple_XML_Attribute *a = EINA_INLIST_CONTAINER_GET + (tag->attributes, Eina_Simple_XML_Attribute); + eina_simple_xml_attribute_free(a); + } + + if (tag->base.parent) + tag->base.parent->children = eina_inlist_remove + (tag->base.parent->children, EINA_INLIST_GET(&tag->base)); + + eina_stringshare_del(tag->name); + EINA_MAGIC_SET(&tag->base, EINA_MAGIC_NONE); + eina_mempool_free(_eina_simple_xml_tag_mp, tag); +} + +EAPI void +eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag) +{ + EINA_MAGIC_CHECK_TAG(&tag->base); + if (tag->base.type != EINA_SIMPLE_XML_NODE_TAG) + { + ERR("expected tag node!"); + return; + } + _eina_simple_xml_node_tag_free(tag); +} + +static Eina_Simple_XML_Node_Data * +_eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, Eina_Simple_XML_Node_Type type, const char *content, unsigned length) +{ + Eina_Simple_XML_Node_Data *n = malloc(sizeof(*n) + length + 1); + + if (!content) return NULL; + + if (!n) + { + ERR("could not allocate memory for node"); + return NULL; + } + + EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_DATA); + n->base.type = type; + n->base.parent = parent; + + n->length = length; + memcpy(n->data, content, length); + n->data[length] = '\0'; + + if (parent) + parent->children = eina_inlist_append + (parent->children, EINA_INLIST_GET(&n->base)); + + return n; +} + +EAPI Eina_Simple_XML_Node_Data * +eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length) +{ + return _eina_simple_xml_node_data_new + (parent, EINA_SIMPLE_XML_NODE_DATA, contents, length); +} + +EAPI void +eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node) +{ + EINA_MAGIC_CHECK_DATA(&node->base); + if (node->base.type != EINA_SIMPLE_XML_NODE_DATA) + { + ERR("expected node of type: data!"); + return; + } + _eina_simple_xml_node_data_free(node); +} + +EAPI Eina_Simple_XML_Node_CData * +eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length) +{ + return _eina_simple_xml_node_data_new + (parent, EINA_SIMPLE_XML_NODE_CDATA, contents, length); +} + +EAPI void +eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node) +{ + EINA_MAGIC_CHECK_DATA(&node->base); + if (node->base.type != EINA_SIMPLE_XML_NODE_CDATA) + { + ERR("expected node of type: cdata!"); + return; + } + _eina_simple_xml_node_data_free(node); +} + +EAPI Eina_Simple_XML_Node_Processing * +eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length) +{ + return _eina_simple_xml_node_data_new + (parent, EINA_SIMPLE_XML_NODE_PROCESSING, contents, length); +} + +EAPI void +eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node) +{ + EINA_MAGIC_CHECK_DATA(&node->base); + if (node->base.type != EINA_SIMPLE_XML_NODE_PROCESSING) + { + ERR("expected node of type: processing!"); + return; + } + _eina_simple_xml_node_data_free(node); +} + +EAPI Eina_Simple_XML_Node_Doctype * +eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length) +{ + return _eina_simple_xml_node_data_new + (parent, EINA_SIMPLE_XML_NODE_DOCTYPE, contents, length); +} + +EAPI void +eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node) +{ + EINA_MAGIC_CHECK_DATA(&node->base); + if (node->base.type != EINA_SIMPLE_XML_NODE_DOCTYPE) + { + ERR("expected node of type: doctype!"); + return; + } + _eina_simple_xml_node_data_free(node); +} + +EAPI Eina_Simple_XML_Node_Comment * +eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length) +{ + return _eina_simple_xml_node_data_new + (parent, EINA_SIMPLE_XML_NODE_COMMENT, contents, length); +} + +EAPI void +eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node) +{ + EINA_MAGIC_CHECK_DATA(&node->base); + if (node->base.type != EINA_SIMPLE_XML_NODE_COMMENT) + { + ERR("expected node of type: comment!"); + return; + } + _eina_simple_xml_node_data_free(node); +} + +struct eina_simple_xml_node_load_ctxt +{ + Eina_Simple_XML_Node_Root *root; + Eina_Simple_XML_Node_Tag *current; +}; + +static Eina_Bool +_eina_simple_xml_attrs_parse(void *data, const char *key, const char *value) +{ + Eina_Simple_XML_Node_Tag *n = data; + Eina_Simple_XML_Attribute *attr; + + attr = eina_simple_xml_attribute_new(n, key, value); + return !!attr; +} + +static Eina_Bool +_eina_simple_xml_node_parse(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset, unsigned length) +{ + struct eina_simple_xml_node_load_ctxt *ctx = data; + + switch (type) + { + case EINA_SIMPLE_XML_OPEN: + case EINA_SIMPLE_XML_OPEN_EMPTY: + { + Eina_Simple_XML_Node_Tag *n; + const char *name, *name_end, *attrs; + + attrs = eina_simple_xml_tag_attributes_find(content, length); + if (!attrs) + name_end = content + length; + else + name_end = attrs; + + name_end = _eina_simple_xml_whitespace_unskip(name_end, content); + + name = eina_stringshare_add_length(content, name_end - content); + n = eina_simple_xml_node_tag_new(ctx->current, name); + eina_stringshare_del(name); + if (!n) return EINA_FALSE; + + if (attrs) + eina_simple_xml_attributes_parse + (attrs, length - (attrs - content), + _eina_simple_xml_attrs_parse, n); + + if (type == EINA_SIMPLE_XML_OPEN) + ctx->current = n; + } + break; + + case EINA_SIMPLE_XML_CLOSE: + if (ctx->current->base.parent) + { + const char *end = _eina_simple_xml_whitespace_unskip + (content + length, content); + int len; + len = end - content; + if ((len == 0) /* closes the tag for us. */ || + ((eina_stringshare_strlen(ctx->current->name) == len) && + (memcmp(ctx->current->name, content, len) == 0))) + ctx->current = ctx->current->base.parent; + else + WRN("closed incorrect tag: '%.*s', '%s' was expected!", + len, content, ctx->current->name); + } + else + WRN("closed tag '%.*s' but already at document root!", + length, content); + break; + + case EINA_SIMPLE_XML_DATA: + return !!eina_simple_xml_node_data_new + (ctx->current, content, length); + case EINA_SIMPLE_XML_CDATA: + return !!eina_simple_xml_node_cdata_new + (ctx->current, content, length); + case EINA_SIMPLE_XML_PROCESSING: + return !!eina_simple_xml_node_processing_new + (ctx->current, content, length); + case EINA_SIMPLE_XML_DOCTYPE: + return !!eina_simple_xml_node_doctype_new + (ctx->current, content, length); + case EINA_SIMPLE_XML_COMMENT: + return !!eina_simple_xml_node_comment_new + (ctx->current, content, length); + + case EINA_SIMPLE_XML_ERROR: + ERR("parser error at offset %u-%u: %.*s", + offset, length, length, content); + break; + case EINA_SIMPLE_XML_IGNORED: + DBG("ignored contents at offset %u-%u: %.*s", + offset, length, length, content); + break; + } + + return EINA_TRUE; +} + +EAPI Eina_Simple_XML_Node_Root * +eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip) +{ + Eina_Simple_XML_Node_Root *root; + struct eina_simple_xml_node_load_ctxt ctx; + + if (!buf) return NULL; + + root = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*root)); + if (!root) return NULL; + + memset(root, 0, sizeof(*root)); + EINA_MAGIC_SET(&root->base, EINA_MAGIC_SIMPLE_XML_TAG); + root->base.type = EINA_SIMPLE_XML_NODE_ROOT; + + ctx.root = root; + ctx.current = root; + eina_simple_xml_parse(buf, buflen, strip, _eina_simple_xml_node_parse, &ctx); + + return root; +} + +EAPI void +eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root) +{ + if (!root) return; + EINA_MAGIC_CHECK_TAG(&root->base); + if (root->base.type != EINA_SIMPLE_XML_NODE_ROOT) + { + ERR("expected root node!"); + return; + } + _eina_simple_xml_node_tag_free(root); +} + +static inline void +_eina_simple_xml_node_dump_indent(Eina_Strbuf *buf, const char *indent, unsigned level) +{ + unsigned i, indent_len = strlen(indent); + for (i = 0; i < level; i++) + eina_strbuf_append_length(buf, indent, indent_len); +} + +static void +_eina_simple_xml_node_tag_attributes_append(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag) +{ + Eina_Simple_XML_Attribute *a; + + EINA_INLIST_FOREACH(tag->attributes, a) + eina_strbuf_append_printf(buf, " %s=\"%s\"", a->key, a->value); +} + +static void _eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level); + +static void +_eina_simple_xml_node_children_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag, const char *indent, unsigned level) +{ + Eina_Simple_XML_Node *node; + + EINA_INLIST_FOREACH(tag->children, node) + _eina_simple_xml_node_dump(buf, node, indent, level); +} + +static void +_eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level) +{ + switch (node->type) + { + case EINA_SIMPLE_XML_NODE_ROOT: + _eina_simple_xml_node_children_dump + (buf, (Eina_Simple_XML_Node_Tag *)node, indent, level); + break; + + case EINA_SIMPLE_XML_NODE_TAG: + { + Eina_Simple_XML_Node_Tag *n = (Eina_Simple_XML_Node_Tag *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + + eina_strbuf_append_char(buf, '<'); + eina_strbuf_append_length + (buf, n->name, eina_stringshare_strlen(n->name)); + + if (n->attributes) + _eina_simple_xml_node_tag_attributes_append(buf, n); + + if (n->children) + eina_strbuf_append_char(buf, '>'); + else + eina_strbuf_append_length(buf, "/>", sizeof("/>") - 1); + + if (indent) eina_strbuf_append_char(buf, '\n'); + + if (n->children) + { + _eina_simple_xml_node_children_dump(buf, n, indent, level + 1); + + if (indent) + _eina_simple_xml_node_dump_indent(buf, indent, level); + + eina_strbuf_append_length(buf, "name, eina_stringshare_strlen(n->name)); + eina_strbuf_append_char(buf, '>'); + + if (indent) eina_strbuf_append_char(buf, '\n'); + } + } + break; + case EINA_SIMPLE_XML_NODE_DATA: + { + Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + eina_strbuf_append_length(buf, n->data, n->length); + if (indent) eina_strbuf_append_char(buf, '\n'); + } + break; + + case EINA_SIMPLE_XML_NODE_CDATA: + { + Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + eina_strbuf_append_length(buf, "data, n->length); + eina_strbuf_append_length(buf, "]]>", sizeof("]]>") - 1); + if (indent) eina_strbuf_append_char(buf, '\n'); + } + break; + + case EINA_SIMPLE_XML_NODE_PROCESSING: + { + Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + eina_strbuf_append_length(buf, "data, n->length); + eina_strbuf_append_length(buf, " ?>", sizeof(" ?>") - 1); + if (indent) eina_strbuf_append_char(buf, '\n'); + } + break; + + case EINA_SIMPLE_XML_NODE_DOCTYPE: + { + Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + eina_strbuf_append_length + (buf, "data, n->length); + eina_strbuf_append_char(buf, '>'); + if (indent) eina_strbuf_append_char(buf, '\n'); + } + break; + + case EINA_SIMPLE_XML_NODE_COMMENT: + { + Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node; + + if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level); + eina_strbuf_append_length(buf, "", sizeof(" -->") - 1); + if (indent) eina_strbuf_append_char(buf, '\n'); + } + break; + } +} + +EAPI char * +eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent) +{ + Eina_Strbuf *buf; + char *ret; + + if (!node) return NULL; + + buf = eina_strbuf_new(); + if (!buf) return NULL; + + _eina_simple_xml_node_dump(buf, node, indent, 0); + + ret = eina_strbuf_string_steal(buf); + eina_strbuf_free(buf); + return ret; +} diff --git a/libraries/eina/src/lib/eina_str.c b/libraries/eina/src/lib/eina_str.c new file mode 100644 index 0000000..8d27c65 --- /dev/null +++ b/libraries/eina/src/lib/eina_str.c @@ -0,0 +1,462 @@ +/* Leave the OpenBSD version below so we can track upstream fixes */ +/* $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include + +#ifdef HAVE_ICONV +# include +# include +#endif + +#include "eina_private.h" +#include "eina_str.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +/* + * Internal helper function used by eina_str_has_suffix() and + * eina_str_has_extension() + */ +static inline Eina_Bool +eina_str_has_suffix_helper(const char *str, + const char *suffix, + int (*cmp)(const char *, const char *)) +{ + size_t str_len; + size_t suffix_len; + + if ((!str) || (!suffix)) return EINA_FALSE; + str_len = strlen(str); + suffix_len = eina_strlen_bounded(suffix, str_len); + if (suffix_len == (size_t)-1) + return EINA_FALSE; + + return cmp(str + str_len - suffix_len, suffix) == 0; +} + +static inline char ** +eina_str_split_full_helper(const char *str, + const char *delim, + int max_tokens, + unsigned int *elements) +{ + char *s, **str_array; + const char *src; + size_t len, dlen; + unsigned int tokens; + + dlen = strlen(delim); + if (dlen == 0) + { + if (elements) + *elements = 0; + + return NULL; + } + + tokens = 0; + src = str; + /* count tokens and check strlen(str) */ + while (*src != '\0') + { + const char *d = delim, *d_end = d + dlen; + const char *tmp = src; + for (; (d < d_end) && (*tmp != '\0'); d++, tmp++) + { + if (EINA_LIKELY(*d != *tmp)) + break; + } + if (EINA_UNLIKELY(d == d_end)) + { + src = tmp; + tokens++; + } + else + src++; + } + len = src - str; + + if ((max_tokens > 0) && (tokens > (unsigned int)max_tokens)) + tokens = max_tokens; + + str_array = malloc(sizeof(char *) * (tokens + 2)); + if (!str_array) + { + if (elements) + *elements = 0; + + return NULL; + } + + s = malloc(len + 1); + if (!s) + { + free(str_array); + if (elements) + *elements = 0; + + return NULL; + } + + /* copy tokens and string */ + tokens = 0; + str_array[0] = s; + src = str; + while (*src != '\0') + { + const char *d = delim, *d_end = d + dlen; + const char *tmp = src; + for (; (d < d_end) && (*tmp != '\0'); d++, tmp++) + { + if (EINA_LIKELY(*d != *tmp)) + break; + } + if (EINA_UNLIKELY(d == d_end)) + { + src = tmp; + *s = '\0'; + s += dlen; + tokens++; + str_array[tokens] = s; + } + else + { + *s = *src; + s++; + src++; + } + } + *s = '\0'; + str_array[tokens + 1] = NULL; + if (elements) + *elements = (tokens + 1); + + return str_array; +} + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI size_t +eina_strlcpy(char *dst, const char *src, size_t siz) +{ +#ifdef HAVE_STRLCPY + return strlcpy(dst, src, siz); +#else + char *d = dst; + const char *s = src; + size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0) + while (--n != 0) + { + if ((*d++ = *s++) == '\0') + break; + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) + { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +#endif +} + +EAPI size_t +eina_strlcat(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + + while (*s != '\0') { + if (n != 1) + { + *d++ = *s; + n--; + } + + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} + +EAPI Eina_Bool +eina_str_has_prefix(const char *str, const char *prefix) +{ + size_t str_len; + size_t prefix_len; + + str_len = strlen(str); + prefix_len = eina_strlen_bounded(prefix, str_len); + if (prefix_len == (size_t)-1) + return EINA_FALSE; + + return (strncmp(str, prefix, prefix_len) == 0); +} + +EAPI Eina_Bool +eina_str_has_suffix(const char *str, const char *suffix) +{ + return eina_str_has_suffix_helper(str, suffix, strcmp); +} + +EAPI Eina_Bool +eina_str_has_extension(const char *str, const char *ext) +{ + return eina_str_has_suffix_helper(str, ext, strcasecmp); +} + +EAPI char ** +eina_str_split_full(const char *str, + const char *delim, + int max_tokens, + unsigned int *elements) +{ + return eina_str_split_full_helper(str, delim, max_tokens, elements); +} + + +EAPI char ** +eina_str_split(const char *str, const char *delim, int max_tokens) +{ + return eina_str_split_full_helper(str, delim, max_tokens, NULL); +} + +EAPI 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) +{ + size_t ret = a_len + b_len + 1; + size_t off; + + if (size < 1) + return ret; + + if (size <= a_len) + { + memcpy(dst, a, size - 1); + dst[size - 1] = '\0'; + return ret; + } + + memcpy(dst, a, a_len); + off = a_len; + + if (size <= off + 1) + { + dst[size - 1] = '\0'; + return ret; + } + + dst[off] = sep; + off++; + + if (size <= off + b_len + 1) + { + memcpy(dst + off, b, size - off - 1); + dst[size - 1] = '\0'; + return ret; + } + + memcpy(dst + off, b, b_len); + dst[off + b_len] = '\0'; + return ret; +} + +#ifdef HAVE_ICONV +EAPI char * +eina_str_convert(const char *enc_from, const char *enc_to, const char *text) +{ + iconv_t ic; + char *new_txt, *inp, *outp; + size_t inb, outb, outlen, tob, outalloc; + + if (!text) + return NULL; + + ic = iconv_open(enc_to, enc_from); + if (ic == (iconv_t)(-1)) + return NULL; + + new_txt = malloc(64); + inb = strlen(text); + outb = 64; + inp = (char *)text; + outp = new_txt; + outalloc = 64; + outlen = 0; + + for (;; ) + { + size_t count; + + tob = outb; + count = iconv(ic, &inp, &inb, &outp, &outb); + outlen += tob - outb; + if (count == (size_t)(-1)) + { + if (errno == E2BIG) + { + new_txt = realloc(new_txt, outalloc + 64); + outp = new_txt + outlen; + outalloc += 64; + outb += 64; + } + else if (errno == EILSEQ) + { + if (new_txt) + free(new_txt); + + new_txt = NULL; + break; + } + else if (errno == EINVAL) + { + if (new_txt) + free(new_txt); + + new_txt = NULL; + break; + } + else + { + if (new_txt) + free(new_txt); + + new_txt = NULL; + break; + } + } + + if (inb == 0) + { + if (outalloc == outlen) + new_txt = realloc(new_txt, outalloc + 1); + + new_txt[outlen] = 0; + break; + } + } + iconv_close(ic); + return new_txt; +} +#else +EAPI char * +eina_str_convert(const char *enc_from __UNUSED__, + const char *enc_to __UNUSED__, + const char *text __UNUSED__) +{ + return NULL; +} +#endif + +EAPI char * +eina_str_escape(const char *str) +{ + char *s2, *d; + const char *s; + + s2 = malloc((strlen(str) * 2) + 1); + if (!s2) + return NULL; + + for (s = str, d = s2; *s != 0; s++, d++) + { + if ((*s == ' ') || (*s == '\\') || (*s == '\'')) + { + *d = '\\'; + d++; + } + + *d = *s; + } + *d = 0; + return s2; +} + +EAPI void +eina_str_tolower(char **str) +{ + char *p; + if ((!str) || (!(*str))) + return; + + for (p = *str; (*p); p++) + *p = tolower((unsigned char )(*p)); +} + +EAPI void +eina_str_toupper(char **str) +{ + char *p; + if ((!str) || (!(*str))) + return; + + for (p = *str; (*p); p++) + *p = toupper((unsigned char)(*p)); +} diff --git a/libraries/eina/src/lib/eina_strbuf.c b/libraries/eina/src/lib/eina_strbuf.c new file mode 100644 index 0000000..74b1eb9 --- /dev/null +++ b/libraries/eina/src/lib/eina_strbuf.c @@ -0,0 +1,202 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_private.h" +#include "eina_str.h" +#include "eina_strbuf_common.h" +#include "eina_unicode.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifdef _STRBUF_DATA_TYPE +# undef _STRBUF_DATA_TYPE +#endif + +#ifdef _STRBUF_CSIZE +# undef _STRBUF_CSIZE +#endif + +#ifdef _STRBUF_STRUCT_NAME +# undef _STRBUF_STRUCT_NAME +#endif + +#ifdef _STRBUF_STRLEN_FUNC +# undef _STRBUF_STRLEN_FUNC +#endif + +#ifdef _STRBUF_STRESCAPE_FUNC +# undef _STRBUF_STRESCAPE_FUNC +#endif + +#ifdef _STRBUF_MAGIC +# undef _STRBUF_MAGIC +#endif + +#ifdef _STRBUF_MAGIC_STR +# undef _STRBUF_MAGIC_STR +#endif + +#ifdef _FUNC_EXPAND +# undef _FUNC_EXPAND +#endif + + +#define _STRBUF_DATA_TYPE char +#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE) +#define _STRBUF_STRUCT_NAME Eina_Strbuf +#define _STRBUF_STRLEN_FUNC(x) strlen(x) +#define _STRBUF_STRESCAPE_FUNC(x) eina_str_escape(x) +#define _STRBUF_MAGIC EINA_MAGIC_STRBUF +#define _STRBUF_MAGIC_STR __STRBUF_MAGIC_STR +static const char __STRBUF_MAGIC_STR[] = "Eina Strbuf"; + +#define _FUNC_EXPAND(y) eina_strbuf_ ## y + +/** + * @endcond + */ + + +/*============================================================================* + * Global * + *============================================================================*/ + + +/*============================================================================* + * API * + *============================================================================*/ + + +EAPI Eina_Bool +eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) +{ + va_list args; + char *str; + size_t len; + Eina_Bool ret; + + va_start(args, fmt); + len = vasprintf(&str, fmt, args); + va_end(args); + + if (len <= 0 || !str) + return EINA_FALSE; + + ret = eina_strbuf_append_length(buf, str, len); + free(str); + return ret; +} + +EAPI Eina_Bool +eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) +{ + char *str; + size_t len; + Eina_Bool ret; + + len = vasprintf(&str, fmt, args); + + if (len <= 0 || !str) + return EINA_FALSE; + + ret = eina_strbuf_append_length(buf, str, len); + free(str); + return ret; +} + +EAPI Eina_Bool +eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) +{ + va_list args; + char *str; + size_t len; + Eina_Bool ret; + + va_start(args, pos); + len = vasprintf(&str, fmt, args); + va_end(args); + + if (len <= 0 || !str) + return EINA_FALSE; + + ret = eina_strbuf_insert(buf, str, pos); + free(str); + return ret; +} + +EAPI Eina_Bool +eina_strbuf_insert_vprintf(Eina_Strbuf *buf, + const char *fmt, + size_t pos, + va_list args) +{ + char *str; + size_t len; + Eina_Bool ret; + + len = vasprintf(&str, fmt, args); + + if (len <= 0 || !str) + return EINA_FALSE; + + ret = eina_strbuf_insert(buf, str, pos); + free(str); + return ret; +} + +EAPI void +eina_strbuf_trim(Eina_Strbuf *buf) +{ + char *c = buf->buf; + + while (buf->len > 0 && isspace(((unsigned char*)(buf->buf))[buf->len - 1])) + buf->len--; + while (buf->len > 0 && isspace(*c)) + { + c++; + buf->len--; + } + memmove(buf->buf, c, buf->len); + ((unsigned char *)buf->buf)[buf->len] = '\0'; +} + +EAPI void +eina_strbuf_ltrim(Eina_Strbuf *buf) +{ + char *c = buf->buf; + + while (buf->len > 0 && isspace(*c)) + { + c++; + buf->len--; + } + memmove(buf->buf, c, buf->len); + ((unsigned char *)buf->buf)[buf->len] = '\0'; +} + +EAPI void +eina_strbuf_rtrim(Eina_Strbuf *buf) +{ + while (buf->len > 0 && isspace(((unsigned char*)(buf->buf))[buf->len - 1])) + buf->len--; + ((unsigned char *)buf->buf)[buf->len] = '\0'; +} + +/* Unicode */ + +#include "eina_strbuf_template_c.x" diff --git a/libraries/eina/src/lib/eina_strbuf_common.c b/libraries/eina/src/lib/eina_strbuf_common.c new file mode 100644 index 0000000..46067cd --- /dev/null +++ b/libraries/eina/src/lib/eina_strbuf_common.c @@ -0,0 +1,874 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef _WIN32 +# include +#endif + +#include "eina_private.h" +#include "eina_str.h" +#include "eina_magic.h" +#include "eina_error.h" +#include "eina_safety_checks.h" +#include "eina_strbuf.h" +#include "eina_strbuf_common.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/** + * @cond LOCAL + */ + +#define EINA_STRBUF_INIT_SIZE 32 +#define EINA_STRBUF_INIT_STEP 32 +#define EINA_STRBUF_MAX_STEP 4096 + +/** + * @endcond + */ + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the strbuf module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the strbuf module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_strbuf_common_init(void) +{ + return EINA_TRUE; +} + +/** + * @internal + * @brief Shut down the strbuf module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the strbuf module set up by + * eina_strbuf_common_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_strbuf_common_shutdown(void) +{ + return EINA_TRUE; +} + +/** + * @internal + * + * init the buffer + * @param csize the character size + * @param buf the buffer to init + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + */ +static Eina_Bool +_eina_strbuf_common_init(size_t csize, Eina_Strbuf *buf) +{ + buf->len = 0; + buf->size = EINA_STRBUF_INIT_SIZE; + buf->step = EINA_STRBUF_INIT_STEP; + + eina_error_set(0); + buf->buf = calloc(csize, buf->size); + if (EINA_UNLIKELY(!buf->buf)) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return EINA_FALSE; + } + + return EINA_TRUE; +} + +/** + * @internal + * + * init the buffer without allocating the actual string (for managed) + * @param csize the character size + * @param buf the buffer to init + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + */ +static Eina_Bool +_eina_strbuf_common_manage_init(size_t csize __UNUSED__, + Eina_Strbuf *buf, + void *str, + size_t len) +{ + buf->len = len; + buf->size = len + 1; + buf->step = EINA_STRBUF_INIT_STEP; + buf->buf = str; + + return EINA_TRUE; +} + + +/** + * @internal + * + * resize the buffer + * @param csize the character size + * @param buf the buffer to resize + * @param size the minimum size of the buffer + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + */ +static inline Eina_Bool +_eina_strbuf_common_resize(size_t csize, Eina_Strbuf *buf, size_t size) +{ + size_t new_size, new_step, delta; + void *buffer; + + size += 1; // Add extra space for '\0' + + /* nothing to do */ + if (size == buf->size) return EINA_TRUE; + else if (size > buf->size) delta = size - buf->size; + else delta = buf->size - size; + + /* check if should keep the same step (just used while growing) */ + if ((delta <= buf->step) && (size > buf->size)) new_step = buf->step; + else + { + new_step = (((delta / EINA_STRBUF_INIT_STEP) + 1) + * EINA_STRBUF_INIT_STEP); + if (new_step > EINA_STRBUF_MAX_STEP) new_step = EINA_STRBUF_MAX_STEP; + } + + new_size = (((size / new_step) + 1) * new_step); + + /* reallocate the buffer to the new size */ + buffer = realloc(buf->buf, new_size * csize); + if (EINA_UNLIKELY(!buffer)) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return EINA_FALSE; + } + + buf->buf = buffer; + buf->size = new_size; + buf->step = new_step; + eina_error_set(0); + return EINA_TRUE; +} + +/** + * @internal + * + * If required, enlarge the buffer to fit the new size. + * + * @param csize the character size + * @param buf the buffer to resize + * @param size the minimum size of the buffer + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + */ +Eina_Bool +_eina_strbuf_common_grow(size_t csize, Eina_Strbuf *buf, size_t size) +{ + if ((size + 1) < buf->size) return EINA_TRUE; + return _eina_strbuf_common_resize(csize, buf, size); +} + +/** + * @internal + * + * insert string of known length at random within existing strbuf limits. + * + * @param csize the character size + * @param buf the buffer to resize, must be valid. + * @param str the string to copy, must be valid (!NULL and smaller than @a len) + * @param len the amount of bytes in @a str to copy, must be valid. + * @param pos the position inside buffer to insert, must be valid (smaller + * than eina_strbuf_common_length_get()) + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + */ +static inline Eina_Bool +_eina_strbuf_common_insert_length(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t pos) +{ + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len))) + return EINA_FALSE; + + /* move the existing text */ + memmove(((unsigned char *)(buf->buf)) + ((len + pos) * csize), + ((unsigned char *)(buf->buf)) + (pos * csize), + (buf->len - pos) * csize); + + /* and now insert the given string */ + memcpy((unsigned char *)buf->buf + (pos * csize), str, len * csize); + + buf->len += len; + memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize); + return EINA_TRUE; +} + +/*============================================================================* +* API * +*============================================================================*/ + +/** + * @internal + * @brief Create a new string buffer. + * + * @param csize the character size + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_strbuf_common_free(). + * + * @see eina_strbuf_common_free() + * @see eina_strbuf_common_append() + * @see eina_strbuf_common_string_get() + */ +Eina_Strbuf * +eina_strbuf_common_new(size_t csize) +{ + Eina_Strbuf *buf; + + eina_error_set(0); + buf = malloc(sizeof(Eina_Strbuf)); + if (EINA_UNLIKELY(!buf)) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + if (EINA_UNLIKELY(!_eina_strbuf_common_init(csize, buf))) + { + eina_strbuf_common_free(buf); + return NULL; + } + return buf; +} + +/** + * @internal + * @brief Create a new string buffer managing str. + * + * @param csize the character size + * @param str the string to manage + * @param len the length of the string to manage + * @return Newly allocated string buffer instance. + * + * This function creates a new string buffer. On error, @c NULL is + * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To + * free the resources, use eina_strbuf_common_free(). + * + * @see eina_strbuf_common_free() + * @see eina_strbuf_common_append() + * @see eina_strbuf_common_string_get() + * @since 1.1.0 + */ +Eina_Strbuf * +eina_strbuf_common_manage_new(size_t csize, + void *str, + size_t len) +{ + Eina_Strbuf *buf; + + eina_error_set(0); + buf = malloc(sizeof(Eina_Strbuf)); + if (EINA_UNLIKELY(!buf)) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + if (EINA_UNLIKELY(!_eina_strbuf_common_manage_init(csize, buf, str, len))) + { + eina_strbuf_common_free(buf); + return NULL; + } + return buf; +} + +/** + * @internal + * @brief Free a string buffer. + * + * @param buf The string buffer to free. + * + * This function frees the memory of @p buf. @p buf must have been + * created by eina_strbuf_common_new(). + */ +void +eina_strbuf_common_free(Eina_Strbuf *buf) +{ + free(buf->buf); + free(buf); +} + +/** + * @internal + * @brief Reset a string buffer. + * + * @param csize the character size + * @param buf The string buffer to reset. + * + * This function reset @p buf: the buffer len is set to 0, and the + * string is set to '\\0'. No memory is free'd. + */ +void +eina_strbuf_common_reset(size_t csize, Eina_Strbuf *buf) +{ + buf->len = 0; + buf->step = EINA_STRBUF_INIT_STEP; + memset(buf->buf, 0, csize); +} + +/** + * @internal + * @brief Append a string to a buffer, reallocating as necessary. + * + * @param csize the character size + * @param buf The string buffer to append to. + * @param str The string to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. It computes the length of + * @p str, so is slightly slower than eina_strbuf_common_append_length(). If + * the length is known beforehand, consider using that variant. If + * @p buf can't append it, #EINA_FALSE is returned, otherwise + * #EINA_TRUE is returned. + * + * @see eina_strbuf_common_append() + * @see eina_strbuf_common_append_length() + */ +Eina_Bool +eina_strbuf_common_append(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len))) + return EINA_FALSE; + memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str, + (len + 1) * csize); + buf->len += len; + return EINA_TRUE; +} + +/** + * @internal + * @brief Append a string to a buffer, reallocating as necessary, + * limited by the given length. + * + * @param csize the character size + * @param buf The string buffer to append to. + * @param str The string to append. + * @param maxlen The maximum number of characters to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends at most @p maxlen characters of @p str to + * @p buf. It can't appends more than the length of @p str. It + * computes the length of @p str, so is slightly slower than + * eina_strbuf_common_append_length(). If the length is known beforehand, + * consider using that variant (@p maxlen should then be checked so + * that it is greater than the size of @p str). If @p str can not be + * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is + * returned. + * + * @see eina_strbuf_common_append() + * @see eina_strbuf_common_append_length() + */ +Eina_Bool +eina_strbuf_common_append_n(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t maxlen) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (len > maxlen) len = maxlen; + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len))) + return EINA_FALSE; + memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str, + len * csize); + buf->len += len; + memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize); + return EINA_TRUE; +} + +/** + * @internal + * @brief Append a string of exact length to a buffer, reallocating as necessary. + * + * @param csize the character size + * @param buf The string buffer to append to. + * @param str The string to append. + * @param length The exact length to use. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function appends @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_strbuf_common_append() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_strbuf_common_append() + * @see eina_strbuf_common_append_n() + */ +Eina_Bool +eina_strbuf_common_append_length(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t length) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + length))) + return EINA_FALSE; + memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str, + length * csize); + buf->len += length; + memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize); + return EINA_TRUE; +} + +/** + * @internal + * @brief Insert a string to a buffer, reallocating as necessary. + * + * @param csize the character size + * @param buf The string buffer to insert. + * @param str The string to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf at position @p pos. It + * computes the length of @p str, so is slightly slower than + * eina_strbuf_common_insert_length(). If the length is known beforehand, + * consider using that variant. If @p buf can't insert it, #EINA_FALSE + * is returned, otherwise #EINA_TRUE is returned. + */ +Eina_Bool +eina_strbuf_common_insert(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t pos) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (pos >= buf->len) return eina_strbuf_common_append(csize, buf, str, len); + return _eina_strbuf_common_insert_length(csize, buf, str, len, pos); +} + +/** + * @internal + * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. + * + * @param csize the character size + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param maxlen The maximum number of chars to insert. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str ot @p buf at position @p pos, with at + * most @p maxlen bytes. The number of inserted characters can not be + * greater than the length of @p str. It computes the length of + * @p str, so is slightly slower than eina_strbuf_common_insert_length(). If the + * length is known beforehand, consider using that variant (@p maxlen + * should then be checked so that it is greater than the size of + * @p str). If @p str can not be inserted, #EINA_FALSE is returned, + * otherwise, #EINA_TRUE is returned. + */ +Eina_Bool +eina_strbuf_common_insert_n(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t maxlen, + size_t pos) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (pos >= buf->len) + return eina_strbuf_common_append_n(csize, buf, str, len, maxlen); + if (len > maxlen) len = maxlen; + return _eina_strbuf_common_insert_length(csize, buf, str, len, pos); +} + +/** + * @internal + * @brief Insert a string of exact length to a buffer, reallocating as necessary. + * + * @param csize the character size + * @param buf The string buffer to insert to. + * @param str The string to insert. + * @param length The exact length to use. + * @param pos The position to insert the string. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p str to @p buf. @p str must be of size at + * most @p length. It is slightly faster than eina_strbuf_common_insert() as + * it does not compute the size of @p str. It is useful when dealing + * with strings of known size, such as eina_strngshare. If @p buf + * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + * + * @see eina_stringshare_length() + * @see eina_strbuf_common_insert() + * @see eina_strbuf_common_insert_n() + */ +Eina_Bool +eina_strbuf_common_insert_length(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t length, + size_t pos) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); + + if (pos >= buf->len) + return eina_strbuf_common_append_length(csize, buf, str, length); + return _eina_strbuf_common_insert_length(csize, buf, str, length, pos); +} + +/** + * @internal + * @brief Append a character to a string buffer, reallocating as + * necessary. + * + * @param csize the character size + * @param buf The string buffer to append to. + * @param c The char to append. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf. If it can not insert it, + * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. + */ +Eina_Bool +eina_strbuf_common_append_char(size_t csize, Eina_Strbuf *buf, const void *c) +{ + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + 1))) + return EINA_FALSE; + + memcpy(((unsigned char *)(buf->buf)) + ((buf->len)++ *csize), c, csize); + memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize); + return EINA_TRUE; +} + +/** + * @internal + * @brief Insert a character to a string buffer, reallocating as + * necessary. + * + * @param csize the character size + * @param buf The string buffer to insert to. + * @param c The char to insert. + * @param pos The position to insert the char. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function inserts @p c to @p buf at position @p pos. If @p buf + * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is + * returned. + */ +Eina_Bool +eina_strbuf_common_insert_char(size_t csize, + Eina_Strbuf *buf, + const void *c, + size_t pos) +{ + if (pos >= buf->len) + return eina_strbuf_common_append_char(csize, buf, c); + return _eina_strbuf_common_insert_length(csize, buf, c, 1, pos); +} + +/** + * @internal + * @brief Remove a slice of the given string buffer. + * + * @param csize the character size + * @param buf The string buffer to remove a slice. + * @param start The initial (inclusive) slice position to start + * removing, in bytes. + * @param end The final (non-inclusive) slice position to finish + * removing, in bytes. + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function removes a slice of @p buf, starting at @p start + * (inclusive) and ending at @p end (non-inclusive). Both values are + * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. + */ +Eina_Bool +eina_strbuf_common_remove(size_t csize, + Eina_Strbuf *buf, + size_t start, + size_t end) +{ + size_t remove_len, tail_len; + + if (end >= buf->len) end = buf->len; + if (end <= start) return EINA_TRUE; + + remove_len = end - start; + if (remove_len == buf->len) + { + free(buf->buf); + return _eina_strbuf_common_init(csize, buf); + } + + tail_len = buf->len - end + 1; /* includes '\0' */ + memmove(((unsigned char *)(buf->buf)) + (start * csize), + ((unsigned char *)(buf->buf)) + (end * csize), + tail_len * csize); + buf->len -= remove_len; + return _eina_strbuf_common_resize(csize, buf, buf->len); +} + +/** + * @internal + * @brief Retrieve a pointer to the contents of a string buffer + * + * @param buf The string buffer. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. The returned + * value must not be modified and will no longer be valid if @p buf is + * modified. In other words, any eina_strbuf_common_append() or similar will + * make that pointer invalid. + * + * @see eina_strbuf_common_string_steal() + */ +const void * +eina_strbuf_common_string_get(const Eina_Strbuf *buf) +{ + return buf->buf; +} + +/** + * @internal + * @brief Steal the contents of a string buffer. + * + * @param csize the character size + * @param buf The string buffer to steal. + * @return The current string in the string buffer. + * + * This function returns the string contained in @p buf. @p buf is + * then initialized and does not own the returned string anymore. The + * caller must release the memory of the returned string by calling + * free(). + * + * @see eina_strbuf_common_string_get() + */ +void * +eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf) +{ + void *ret; + + ret = buf->buf; + // TODO: Check return value and do something clever + _eina_strbuf_common_init(csize, buf); + return ret; +} + +/** + * @internal + * @brief Free the contents of a string buffer but not the buffer. + * + * @param csize the character size + * @param buf The string buffer to free the string of. + * + * This function frees the string contained in @p buf without freeing + * @p buf. + */ +void +eina_strbuf_common_string_free(size_t csize, Eina_Strbuf *buf) +{ + free(buf->buf); + _eina_strbuf_common_init(csize, buf); +} + +/** + * @internal + * @brief Retrieve the length of the string buffer content. + * + * @param buf The string buffer. + * @return The current length of the string, in bytes. + * + * This function returns the length of @p buf. + */ +size_t +eina_strbuf_common_length_get(const Eina_Strbuf *buf) +{ + return buf->len; +} + +/** + * @cond LOCAL + */ + +/*FIXME: Implementing them here is a hack! */ + +#ifdef _STRBUF_CSIZE +# undef _STRBUF_CSIZE +#endif + +#ifdef _STRBUF_MAGIC +# undef _STRBUF_MAGIC +#endif + +#ifdef _STRBUF_MAGIC_STR +# undef _STRBUF_MAGIC_STR +#endif + +#define _STRBUF_CSIZE 1 +#define _STRBUF_MAGIC EINA_MAGIC_STRBUF +#define _STRBUF_MAGIC_STR __STRBUF_STR_MAGIC_STR +static const char __STRBUF_STR_MAGIC_STR[] = "Eina Strbuf"; + + +/** + * @endcond + */ + + +EAPI Eina_Bool +eina_strbuf_replace(Eina_Strbuf *buf, + const char *str, + const char *with, + unsigned int n) +{ + size_t len1, len2; + char *spos; + size_t pos; + + EINA_SAFETY_ON_NULL_RETURN_VAL( str, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(with, EINA_FALSE); + EINA_MAGIC_CHECK_STRBUF(buf, 0); + if (n == 0) return EINA_FALSE; + + spos = buf->buf; + while (n--) + { + spos = strstr(spos, str); + if (!spos || *spos == '\0') return EINA_FALSE; + if (n) spos++; + } + + pos = spos - (const char *)buf->buf; + len1 = strlen(str); + len2 = strlen(with); + if (len1 != len2) + { + /* resize the buffer if necessary */ + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf, + buf->len - len1 + len2))) + return EINA_FALSE; /* move the existing text */ + memmove(((unsigned char *)(buf->buf)) + pos + len2, + ((unsigned char *)(buf->buf)) + pos + len1, + buf->len - pos - len1); + } + /* and now insert the given string */ + memcpy(((unsigned char *)(buf->buf)) + pos, with, len2); + buf->len += len2 - len1; + memset(((unsigned char *)(buf->buf)) + buf->len, 0, 1); + return EINA_TRUE; +} + +EAPI int +eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) +{ + size_t len1, len2, len; + char *tmp_buf = NULL; + char *spos; + size_t pos, start; + size_t pos_tmp, start_tmp; + int n = 0; + + EINA_SAFETY_ON_NULL_RETURN_VAL( str, 0); + EINA_SAFETY_ON_NULL_RETURN_VAL(with, 0); + EINA_MAGIC_CHECK_STRBUF(buf, 0); + + spos = strstr(buf->buf, str); + if (!spos || *spos == '\0') return 0; + len1 = strlen(str); + len2 = strlen(with); + /* if the size of the two string is equal, it is fairly easy to replace them + * we don't need to resize the buffer or doing other calculations */ + if (len1 == len2) + { + while (spos) + { + memcpy(spos, with, len2); + spos = strstr(spos + len2, str); + n++; + } + return n; + } + pos = pos_tmp = spos - (const char *)buf->buf; + tmp_buf = buf->buf; + buf->buf = malloc(buf->size); + if (EINA_UNLIKELY(!buf->buf)) + { + buf->buf = tmp_buf; + return 0; + } + start = start_tmp = 0; + len = buf->len; + while (spos) + { + n++; + len = (len + len2) - len1; + /* resize the buffer if necessary */ + if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf, len))) + { + /* we have to stop replacing here, because we haven't enough + * memory to go on */ + len = (len + len1) - len2; + break; + } + /* copy the untouched text */ + memcpy(((unsigned char *)(buf->buf)) + start, tmp_buf + start_tmp, + pos - start); + /* copy the new string */ + memcpy(((unsigned char *)(buf->buf)) + pos, with, len2); + /* calculate the next positions */ + start_tmp = pos_tmp + len1; + start = pos + len2; + spos = strstr(tmp_buf + start_tmp, str); + /* this calculations don't make sense if spos == NULL, but the + * calculated values won't be used, because the loop will stop + * then */ + pos_tmp = spos - tmp_buf; + pos = start + pos_tmp - start_tmp; + } + /* and now copy the rest of the text */ + memcpy(((unsigned char *)(buf->buf)) + start, tmp_buf + start_tmp, + len - start); + buf->len = len; + memset(((unsigned char *)(buf->buf)) + buf->len, 0, 1); + free(tmp_buf); + return n; +} diff --git a/libraries/eina/src/lib/eina_strbuf_common.h b/libraries/eina/src/lib/eina_strbuf_common.h new file mode 100644 index 0000000..06a1353 --- /dev/null +++ b/libraries/eina/src/lib/eina_strbuf_common.h @@ -0,0 +1,120 @@ +#ifndef EINA_STRBUF_COMMON_H +#define EINA_STRBUF_COMMON_H + +#include + +#include "eina_private.h" +#include "eina_magic.h" +#include "eina_strbuf.h" + +/** + * @struct _Eina_Strbuf + * String buffer to facilitate string operations. + */ +struct _Eina_Strbuf +{ + void *buf; + size_t len; + size_t size; + size_t step; + + EINA_MAGIC +}; + +#define EINA_MAGIC_CHECK_STRBUF(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK((d), _STRBUF_MAGIC)) \ + { \ + EINA_MAGIC_FAIL((d), _STRBUF_MAGIC); \ + return __VA_ARGS__; \ + } \ + } while (0) + +Eina_Bool +eina_strbuf_common_init(void); + +Eina_Bool +eina_strbuf_common_shutdown(void); +Eina_Strbuf * +eina_strbuf_common_new(size_t csize); +Eina_Strbuf * +eina_strbuf_common_manage_new(size_t csize, + void *str, + size_t len); +void +eina_strbuf_common_free(Eina_Strbuf *buf); +void +eina_strbuf_common_reset(size_t csize, Eina_Strbuf *buf); +Eina_Bool +eina_strbuf_common_append(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len); +Eina_Bool +eina_strbuf_common_append_escaped(size_t csize, + Eina_Strbuf *buf, + const void *str); +Eina_Bool +eina_strbuf_common_append_n(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t maxlen); +Eina_Bool +eina_strbuf_common_append_length(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t length); +Eina_Bool +eina_strbuf_common_insert(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t pos); +Eina_Bool +eina_strbuf_common_insert_escaped(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t pos); +Eina_Bool +eina_strbuf_common_insert_n(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t len, + size_t maxlen, + size_t pos); +Eina_Bool +eina_strbuf_common_insert_length(size_t csize, + Eina_Strbuf *buf, + const void *str, + size_t length, + size_t pos); +Eina_Bool +eina_strbuf_common_append_char(size_t csize, Eina_Strbuf *buf, const void *c); +Eina_Bool +eina_strbuf_common_insert_char(size_t csize, + Eina_Strbuf *buf, + const void *c, + size_t pos); +Eina_Bool +eina_strbuf_common_remove(size_t csize, + Eina_Strbuf *buf, + size_t start, + size_t end); +const void * +eina_strbuf_common_string_get(const Eina_Strbuf *buf); +void * +eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf); +void +eina_strbuf_common_string_free(size_t csize, Eina_Strbuf *buf); +size_t +eina_strbuf_common_length_get(const Eina_Strbuf *buf); + +Eina_Bool +_eina_strbuf_common_grow(size_t csize, Eina_Strbuf *buf, size_t size); +/** + * @} + */ + +#endif diff --git a/libraries/eina/src/lib/eina_strbuf_template_c.x b/libraries/eina/src/lib/eina_strbuf_template_c.x new file mode 100644 index 0000000..e8c3b61 --- /dev/null +++ b/libraries/eina/src/lib/eina_strbuf_template_c.x @@ -0,0 +1,97 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ + +/* This file should be included from files implementing strbuf. + The including file should define the following macros: + * _STRBUF_DATA_TYPE + * _STRBUF_CSIZE + * _STRBUF_STRUCT_NAME + * _STRBUF_STRLEN_FUNC(x) + * _STRBUF_STRESCAPE_FUNC(x) + * _STRBUF_STRSTR_FUNC(x, y) + * _STRBUF_MAGIC + * _STRBUF_MAGIC_STR + * See how it's done in eina_ustrbuf.c and eina_strbuf.c. This just makes things + * a lot easier since those are essentially the same just with different sizes. + */ + +#include "eina_binbuf_template_c.x" + +/*============================================================================* + * API * + *============================================================================*/ + +EAPI _STRBUF_STRUCT_NAME * +_FUNC_EXPAND(manage_new)(_STRBUF_DATA_TYPE *str) +{ + _STRBUF_STRUCT_NAME *buf = eina_strbuf_common_manage_new(_STRBUF_CSIZE, + (void *) str, _STRBUF_STRLEN_FUNC(str)); + EINA_MAGIC_SET(buf, _STRBUF_MAGIC); + return buf; +} + +EAPI Eina_Bool +_FUNC_EXPAND(append)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_append(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str)); +} + +EAPI Eina_Bool +_FUNC_EXPAND(append_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str) +{ + _STRBUF_DATA_TYPE *esc; + Eina_Bool ret; + + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + esc = _STRBUF_STRESCAPE_FUNC(str); + if (!esc) { + return _FUNC_EXPAND(append)(buf, str); + } + ret = _FUNC_EXPAND(append)(buf, esc); + if (esc) + free(esc); + + return ret; +} + +EAPI Eina_Bool +_FUNC_EXPAND(append_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_append_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen); +} + +EAPI Eina_Bool +_FUNC_EXPAND(insert)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_insert(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), pos); +} + +EAPI Eina_Bool +_FUNC_EXPAND(insert_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos) +{ + _STRBUF_DATA_TYPE *esc; + Eina_Bool ret; + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + + esc = _STRBUF_STRESCAPE_FUNC(str); + if (!esc) { + return _FUNC_EXPAND(insert)(buf, str, pos); + } + ret = _FUNC_EXPAND(insert)(buf, esc, pos); + if (esc) + free(esc); + + return ret; +} + +EAPI Eina_Bool +_FUNC_EXPAND(insert_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen, size_t pos) +{ + EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); + return eina_strbuf_common_insert_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen, pos); +} + diff --git a/libraries/eina/src/lib/eina_stringshare.c b/libraries/eina/src/lib/eina_stringshare.c new file mode 100644 index 0000000..478b300 --- /dev/null +++ b/libraries/eina/src/lib/eina_stringshare.c @@ -0,0 +1,751 @@ +/* EINA - EFL data type library + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010 + * Carsten Haitzler, + * Jorge Luis Zapata Muga, + * Cedric Bail, + * Gustavo Sverzut Barbieri + * Tom Hacohen + * Brett Nash + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_ALLOCA_H +# include +#elif defined __GNUC__ +# define alloca __builtin_alloca +#elif defined _AIX +# define alloca __alloca +#elif defined _MSC_VER +# include +# define alloca _alloca +#else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_error.h" +#include "eina_log.h" +#include "eina_stringshare.h" +#include "eina_lock.h" + +/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ +#include "eina_safety_checks.h" +#include "eina_share_common.h" + +/* The actual share */ +static Eina_Share *stringshare_share; +static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node"; + +extern Eina_Bool _share_common_threads_activated; +static Eina_Lock _mutex_small; + +/* Stringshare optimizations */ +static const unsigned char _eina_stringshare_single[512] = { + 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, + 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, + 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, + 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, + 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, + 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, + 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, + 105,0, + 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, + 0,119,0,120,0, + 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, + 0,134,0,135,0, + 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, + 0,149,0,150,0, + 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, + 0,164,0,165,0, + 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, + 0,179,0,180,0, + 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, + 0,194,0,195,0, + 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, + 0,209,0,210,0, + 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, + 0,224,0,225,0, + 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, + 0,239,0,240,0, + 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, + 0,254,0,255,0 +}; + +typedef struct _Eina_Stringshare_Small Eina_Stringshare_Small; +typedef struct _Eina_Stringshare_Small_Bucket Eina_Stringshare_Small_Bucket; + +struct _Eina_Stringshare_Small_Bucket +{ + /* separate arrays for faster lookups */ + const char **strings; + unsigned char *lengths; + unsigned short *references; + int count; + int size; +}; + +struct _Eina_Stringshare_Small +{ + Eina_Stringshare_Small_Bucket *buckets[256]; +}; + +#define EINA_STRINGSHARE_SMALL_BUCKET_STEP 8 +static Eina_Stringshare_Small _eina_small_share; + +static inline int +_eina_stringshare_small_cmp(const Eina_Stringshare_Small_Bucket *bucket, + int i, + const char *pstr, + unsigned char plength) +{ + /* pstr and plength are from second char and on, since the first is + * always the same. + * + * First string being always the same, size being between 2 and 3 + * characters (there is a check for special case length==1 and then + * small stringshare is applied to strings < 4), we just need to + * compare 2 characters of both strings. + */ + const unsigned char cur_plength = bucket->lengths[i] - 1; + const char *cur_pstr; + + if (cur_plength > plength) + return 1; + else if (cur_plength < plength) + return -1; + + cur_pstr = bucket->strings[i] + 1; + + if (cur_pstr[0] > pstr[0]) + return 1; + else if (cur_pstr[0] < pstr[0]) + return -1; + + if (plength == 1) + return 0; + + if (cur_pstr[1] > pstr[1]) + return 1; + else if (cur_pstr[1] < pstr[1]) + return -1; + + return 0; +} + +static const char * +_eina_stringshare_small_bucket_find(const Eina_Stringshare_Small_Bucket *bucket, + const char *str, + unsigned char length, + int *idx) +{ + const char *pstr = str + 1; /* skip first letter, it's always the same */ + unsigned char plength = length - 1; + int i, low, high; + + if (bucket->count == 0) + { + *idx = 0; + return NULL; + } + + low = 0; + high = bucket->count; + + while (low < high) + { + int r; + + i = (low + high - 1) / 2; + + r = _eina_stringshare_small_cmp(bucket, i, pstr, plength); + if (r > 0) + high = i; + else if (r < 0) + low = i + 1; + else + { + *idx = i; + return bucket->strings[i]; + } + } + + *idx = low; + return NULL; +} + +static Eina_Bool +_eina_stringshare_small_bucket_resize(Eina_Stringshare_Small_Bucket *bucket, + int size) +{ + void *tmp; + + tmp = realloc((void *)bucket->strings, size * sizeof(bucket->strings[0])); + if (!tmp) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return 0; + } + + bucket->strings = tmp; + + tmp = realloc(bucket->lengths, size * sizeof(bucket->lengths[0])); + if (!tmp) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return 0; + } + + bucket->lengths = tmp; + + tmp = realloc(bucket->references, size * sizeof(bucket->references[0])); + if (!tmp) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return 0; + } + + bucket->references = tmp; + + bucket->size = size; + return 1; +} + +static const char * +_eina_stringshare_small_bucket_insert_at( + Eina_Stringshare_Small_Bucket **p_bucket, + const char *str, + unsigned char length, + int idx) +{ + Eina_Stringshare_Small_Bucket *bucket = *p_bucket; + int todo, off; + char *snew; + + if (!bucket) + { + *p_bucket = bucket = calloc(1, sizeof(*bucket)); + if (!bucket) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + } + + if (bucket->count + 1 >= bucket->size) + { + int size = bucket->size + EINA_STRINGSHARE_SMALL_BUCKET_STEP; + if (!_eina_stringshare_small_bucket_resize(bucket, size)) + return NULL; + } + + snew = malloc(length + 1); + if (!snew) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + memcpy(snew, str, length); + snew[length] = '\0'; + + off = idx + 1; + todo = bucket->count - idx; + if (todo > 0) + { + memmove((void *)(bucket->strings + off), bucket->strings + idx, + todo * sizeof(bucket->strings[0])); + memmove(bucket->lengths + off, bucket->lengths + idx, + todo * sizeof(bucket->lengths[0])); + memmove(bucket->references + off, bucket->references + idx, + todo * sizeof(bucket->references[0])); + } + + bucket->strings[idx] = snew; + bucket->lengths[idx] = length; + bucket->references[idx] = 1; + bucket->count++; + + return snew; +} + +static void +_eina_stringshare_small_bucket_remove_at( + Eina_Stringshare_Small_Bucket **p_bucket, + int idx) +{ + Eina_Stringshare_Small_Bucket *bucket = *p_bucket; + int todo, off; + + if (bucket->references[idx] > 1) + { + bucket->references[idx]--; + return; + } + + free((char *)bucket->strings[idx]); + + if (bucket->count == 1) + { + free((void *)bucket->strings); + free(bucket->lengths); + free(bucket->references); + free(bucket); + *p_bucket = NULL; + return; + } + + bucket->count--; + if (idx == bucket->count) + goto end; + + off = idx + 1; + todo = bucket->count - idx; + + memmove((void *)(bucket->strings + idx), bucket->strings + off, + todo * sizeof(bucket->strings[0])); + memmove(bucket->lengths + idx, bucket->lengths + off, + todo * sizeof(bucket->lengths[0])); + memmove(bucket->references + idx, bucket->references + off, + todo * sizeof(bucket->references[0])); + +end: + if (bucket->count + EINA_STRINGSHARE_SMALL_BUCKET_STEP < bucket->size) + { + int size = bucket->size - EINA_STRINGSHARE_SMALL_BUCKET_STEP; + _eina_stringshare_small_bucket_resize(bucket, size); + } +} + +static const char * +_eina_stringshare_small_add(const char *str, unsigned char length) +{ + Eina_Stringshare_Small_Bucket **bucket; + int i; + + bucket = _eina_small_share.buckets + (unsigned char)str[0]; + if (!*bucket) + i = 0; + else + { + const char *ret; + ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i); + if (ret) + { + (*bucket)->references[i]++; + return ret; + } + } + + return _eina_stringshare_small_bucket_insert_at(bucket, str, length, i); +} + +static void +_eina_stringshare_small_del(const char *str, unsigned char length) +{ + Eina_Stringshare_Small_Bucket **bucket; + const char *ret; + int i; + + bucket = _eina_small_share.buckets + (unsigned char)str[0]; + if (!*bucket) + goto error; + + ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i); + if (!ret) + goto error; + + _eina_stringshare_small_bucket_remove_at(bucket, i); + return; + +error: + CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str); +} + +static void +_eina_stringshare_small_init(void) +{ + eina_lock_new(&_mutex_small); + memset(&_eina_small_share, 0, sizeof(_eina_small_share)); +} + +static void +_eina_stringshare_small_shutdown(void) +{ + Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end; + + p_bucket = _eina_small_share.buckets; + p_bucket_end = p_bucket + 256; + + for (; p_bucket < p_bucket_end; p_bucket++) + { + Eina_Stringshare_Small_Bucket *bucket = *p_bucket; + char **s, **s_end; + + if (!bucket) + continue; + + s = (char **)bucket->strings; + s_end = s + bucket->count; + for (; s < s_end; s++) + free(*s); + + free((void *)bucket->strings); + free(bucket->lengths); + free(bucket->references); + free(bucket); + *p_bucket = NULL; + } + + eina_lock_free(&_mutex_small); +} + +static void +_eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket *bucket, + struct dumpinfo *di) +{ + const char **s = bucket->strings; + unsigned char *l = bucket->lengths; + unsigned short *r = bucket->references; + int i; + + di->used += sizeof(*bucket); + di->used += bucket->count * sizeof(*s); + di->used += bucket->count * sizeof(*l); + di->used += bucket->count * sizeof(*r); + di->unique += bucket->count; + + for (i = 0; i < bucket->count; i++, s++, l++, r++) + { + int dups; +#ifdef _WIN32 + printf("DDD: %5hu %5hu '%s'\n", *l, *r, *s); +#else + printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s); +#endif + + dups = (*r - 1); + + di->used += *l; + di->saved += *l * dups; + di->dups += dups; + } +} + +static void +_eina_stringshare_small_dump(struct dumpinfo *di) +{ + Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end; + + p_bucket = _eina_small_share.buckets; + p_bucket_end = p_bucket + 256; + + for (; p_bucket < p_bucket_end; p_bucket++) + { + Eina_Stringshare_Small_Bucket *bucket = *p_bucket; + + if (!bucket) + continue; + + _eina_stringshare_small_bucket_dump(bucket, di); + } +} + + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the share_common module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_stringshare_init(void) +{ + Eina_Bool ret; + ret = eina_share_common_init(&stringshare_share, + EINA_MAGIC_STRINGSHARE_NODE, + EINA_MAGIC_STRINGSHARE_NODE_STR); + if (ret) + _eina_stringshare_small_init(); + + return ret; +} + +/** + * @internal + * @brief Shut down the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the share_common module set up by + * eina_share_common_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_stringshare_shutdown(void) +{ + Eina_Bool ret; + _eina_stringshare_small_shutdown(); + ret = eina_share_common_shutdown(&stringshare_share); + return ret; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI void +eina_stringshare_del(const char *str) +{ + int slen; + + if (!str) + return; + + /* special cases */ + if (str[0] == '\0') + slen = 0; + else if (str[1] == '\0') + slen = 1; + else if (str[2] == '\0') + slen = 2; + else if (str[3] == '\0') + slen = 3; + else + slen = 4; /* handled later */ + + if (slen < 2) + return; + else if (slen < 4) + { + eina_share_common_population_del(stringshare_share, slen); + eina_lock_take(&_mutex_small); + _eina_stringshare_small_del(str, slen); + eina_lock_release(&_mutex_small); + return; + } + + eina_share_common_del(stringshare_share, str); +} + +EAPI const char * +eina_stringshare_add_length(const char *str, unsigned int slen) +{ + if ((!str) || (slen <= 0)) + return ""; + else if (slen == 1) + return (const char *)_eina_stringshare_single + ((*str) << 1); + else if (slen < 4) + { + const char *s; + + eina_lock_take(&_mutex_small); + s = _eina_stringshare_small_add(str, slen); + eina_lock_release(&_mutex_small); + return s; + } + + return eina_share_common_add_length(stringshare_share, str, slen * + sizeof(char), sizeof(char)); +} + +EAPI const char * +eina_stringshare_add(const char *str) +{ + int slen; + if (!str) + return NULL; + + if (str[0] == '\0') + slen = 0; + else if (str[1] == '\0') + slen = 1; + else if (str[2] == '\0') + slen = 2; + else if (str[3] == '\0') + slen = 3; + else + slen = 3 + (int)strlen(str + 3); + + return eina_stringshare_add_length(str, slen); +} + +EAPI const char * +eina_stringshare_printf(const char *fmt, ...) +{ + va_list args; + char *tmp; + const char *ret; + int len; + + if (!fmt) + return NULL; + + va_start(args, fmt); + len = vasprintf(&tmp, fmt, args); + va_end(args); + + if (len < 1) + return NULL; + + ret = eina_stringshare_add_length(tmp, len); + free(tmp); + + return ret; +} + +EAPI const char * +eina_stringshare_vprintf(const char *fmt, va_list args) +{ + char *tmp; + const char *ret; + int len; + + if (!fmt) + return NULL; + + len = vasprintf(&tmp, fmt, args); + + if (len < 1) + return NULL; + + ret = eina_stringshare_add_length(tmp, len); + free(tmp); + + return ret; +} + +EAPI const char * +eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) +{ + va_list args; + char *tmp; + int size; + + if (!fmt) + return NULL; + + if (len < 1) + return NULL; + + tmp = alloca(sizeof(char) * len + 1); + + va_start(args, fmt); + size = vsnprintf(tmp, len, fmt, args); + va_end(args); + + if (size < 1) + return NULL; + + return eina_stringshare_add_length(tmp, len); +} + +EAPI const char * +eina_stringshare_ref(const char *str) +{ + int slen; + + if (!str) + return eina_share_common_ref(stringshare_share, str); + + /* special cases */ + if (str[0] == '\0') + slen = 0; + else if (str[1] == '\0') + slen = 1; + else if (str[2] == '\0') + slen = 2; + else if (str[3] == '\0') + slen = 3; + else + slen = 3 + (int)strlen(str + 3); + + if (slen < 2) + { + eina_share_common_population_add(stringshare_share, slen); + + return str; + } + else if (slen < 4) + { + const char *s; + eina_share_common_population_add(stringshare_share, slen); + + eina_lock_take(&_mutex_small); + s = _eina_stringshare_small_add(str, slen); + eina_lock_release(&_mutex_small); + + return s; + } + + return eina_share_common_ref(stringshare_share, str); +} + +EAPI int +eina_stringshare_strlen(const char *str) +{ + int len; + /* special cases */ + if (str[0] == '\0') + return 0; + + if (str[1] == '\0') + return 1; + + if (str[2] == '\0') + return 2; + + if (str[3] == '\0') + return 3; + + len = eina_share_common_length(stringshare_share, (const char *)str); + len = (len > 0) ? len / (int)sizeof(char) : -1; + return len; +} + +EAPI void +eina_stringshare_dump(void) +{ + eina_share_common_dump(stringshare_share, + _eina_stringshare_small_dump, + sizeof(_eina_stringshare_single)); +} diff --git a/libraries/eina/src/lib/eina_tiler.c b/libraries/eina/src/lib/eina_tiler.c new file mode 100644 index 0000000..69b944e --- /dev/null +++ b/libraries/eina/src/lib/eina_tiler.c @@ -0,0 +1,1276 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Gustavo Sverzut Barbieri, Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +/* TODO + * it is possible to have more than one tiler algorithm, but for now the + * version Gustavo did is hardcoded here + * http://blog.gustavobarbieri.com.br/2007/06/03/evas-now-using-rectangle-split-and-merge/ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_config.h" +#include "eina_private.h" +#include "eina_tiler.h" +#include "eina_error.h" + +/*============================================================================* +* Local * +*============================================================================*/ + +/* The splitter data types */ +typedef struct list_node list_node_t; +typedef struct list list_t; +typedef struct rect rect_t; +typedef struct rect_node rect_node_t; + +struct list_node +{ + struct list_node *next; +}; + +struct list +{ + struct list_node *head; + struct list_node *tail; +}; + +struct rect +{ + short right; + short bottom; + short left; + short top; + short width; + short height; + int area; +}; + +struct rect_node +{ + struct list_node _lst; + struct rect rect; +}; + +typedef struct splitter +{ + Eina_Bool need_merge; + list_t rects; +} splitter_t; + +typedef struct list_node_pool +{ + list_node_t *node; + int len; + int max; +} list_node_pool_t; + + +static const list_node_t list_node_zeroed = { NULL }; +static const list_t list_zeroed = { NULL, NULL }; +static list_node_pool_t list_node_pool = { NULL, 0, 1024 }; + + +typedef struct _Eina_Iterator_Tiler +{ + Eina_Iterator iterator; + const Eina_Tiler *tiler; + list_node_t *curr; + Eina_Rectangle r; + EINA_MAGIC +} Eina_Iterator_Tiler; + +struct _Eina_Tiler +{ + struct + { + int w, h; + } tile; + Eina_Rectangle area; + EINA_MAGIC + splitter_t splitter; +}; + +#define EINA_MAGIC_CHECK_TILER(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER); \ + return __VA_ARGS__; \ + } \ + } while(0) + + +#define EINA_MAGIC_CHECK_TILER_ITERATOR(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER_ITERATOR)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER_ITERATOR); \ + return __VA_ARGS__; \ + } \ + } while(0) + +/* The Splitter algorithm */ +static inline void rect_init(rect_t *r, int x, int y, int w, int h) +{ + r->area = w * h; + + r->left = x; + r->top = y; + + r->right = x + w; + r->bottom = y + h; + + r->width = w; + r->height = h; +} + +static inline list_node_t * +rect_list_node_pool_get(void) +{ + if (list_node_pool.node) + { + list_node_t *node; + + node = list_node_pool.node; + list_node_pool.node = node->next; + list_node_pool.len--; + + return node; + } + else + return malloc(sizeof(rect_node_t)); +} + + +static inline void rect_list_concat(list_t *rects, list_t *other) +{ + if (!other->head) + return; + + if (rects->tail) + { + rects->tail->next = other->head; + rects->tail = other->tail; + } + else + { + rects->head = other->head; + rects->tail = other->tail; + } + + *other = list_zeroed; +} + +static inline void rect_list_append_node(list_t *rects, list_node_t *node) +{ + if (rects->tail) + { + rects->tail->next = node; + rects->tail = node; + } + else + { + rects->head = node; + rects->tail = node; + } +} + +static inline void rect_list_append(list_t *rects, const rect_t r) +{ + rect_node_t *rect_node; + + rect_node = (rect_node_t *)rect_list_node_pool_get(); + rect_node->rect = r; + rect_node->_lst = list_node_zeroed; + + rect_list_append_node(rects, (list_node_t *)rect_node); +} + +static inline void rect_list_append_xywh(list_t *rects, + int x, + int y, + int w, + int h) +{ + rect_t r; + + rect_init(&r, x, y, w, h); + rect_list_append(rects, r); +} + +static inline void _calc_intra_rect_area(const rect_t a, const rect_t b, + int *width, int *height) +{ + int max_left, min_right, max_top, min_bottom; + + if (a.left < b.left) + max_left = b.left; + else + max_left = a.left; + + if (a.right < b.right) + min_right = a.right; + else + min_right = b.right; + + *width = min_right - max_left; + + if (a.top < b.top) + max_top = b.top; + else + max_top = a.top; + + if (a.bottom < b.bottom) + min_bottom = a.bottom; + else + min_bottom = b.bottom; + + *height = min_bottom - max_top; +} + +static inline void _split_strict(list_t *dirty, const rect_t current, rect_t r) +{ + int h_1, h_2, w_1, w_2; + + h_1 = current.top - r.top; + h_2 = r.bottom - current.bottom; + w_1 = current.left - r.left; + w_2 = r.right - current.right; + + if (h_1 > 0) + { + /* .--.r (b) .---.r2 + * | | | | + * .-------.cur (a) .---.r '---' + * | | | | -> | | + + * | `--' | `---' + * `-------' + */ + rect_list_append_xywh(dirty, r.left, r.top, r.width, h_1); + r.height -= h_1; + r.top = current.top; + } + + if (h_2 > 0) + { + /* .-------.cur (a) + * | .---. | .---.r + * | | | | -> | | + * `-------' `---' + .---.r2 + * | | | | + * `---'r (b) `---' + */ + rect_list_append_xywh(dirty, r.left, current.bottom, r.width, + h_2); + r.height -= h_2; + } + + if (w_1 > 0) + /* (b) r .----.cur (a) + * .--|-. | .--.r2 .-.r + * | | | | -> | | + | | + * `--|-' | `--' `-' + * `----' + */ + rect_list_append_xywh(dirty, r.left, r.top, w_1, r.height); /* not necessary to keep these, r (b) will be destroyed */ + + /* r.width -= w_1; */ + /* r.left = current.left; */ + + if (w_2 > 0) + /* .----.cur (a) + * | | + * | .-|--.r (b) .-.r .--.r2 + * | | | | -> | | + | | + * | `-|--' `-' `--' + * `----' + */ + rect_list_append_xywh(dirty, current.right, r.top, w_2, + r.height); /* not necessary to keep this, r (b) will be destroyed */ + + /* r.width -= w_2; */ +} + +static inline void _calc_intra_outer_rect_area(const rect_t a, const rect_t b, + rect_t *intra, rect_t *outer) +{ + int min_left, max_left, min_right, max_right; + int min_top, max_top, min_bottom, max_bottom; + + if (a.left < b.left) + { + max_left = b.left; + min_left = a.left; + } + else + { + max_left = a.left; + min_left = b.left; + } + + if (a.right < b.right) + { + min_right = a.right; + max_right = b.right; + } + else + { + min_right = b.right; + max_right = a.right; + } + + intra->left = max_left; + intra->right = min_right; + intra->width = min_right - max_left; + + outer->left = min_left; + outer->right = max_right; + outer->width = max_right - min_left; + + if (a.top < b.top) + { + max_top = b.top; + min_top = a.top; + } + else + { + max_top = a.top; + min_top = b.top; + } + + if (a.bottom < b.bottom) + { + min_bottom = a.bottom; + max_bottom = b.bottom; + } + else + { + min_bottom = b.bottom; + max_bottom = a.bottom; + } + + intra->top = max_top; + intra->bottom = min_bottom; + intra->height = min_bottom - max_top; + if ((intra->width > 0) && (intra->height > 0)) + intra->area = intra->width * intra->height; + else + intra->area = 0; + + outer->top = min_top; + outer->bottom = max_bottom; + outer->height = max_bottom - min_top; + outer->area = outer->width * outer->height; +} + +enum +{ + SPLIT_FUZZY_ACTION_NONE, + SPLIT_FUZZY_ACTION_SPLIT, + SPLIT_FUZZY_ACTION_MERGE +}; + +static inline int _split_fuzzy(list_t *dirty, const rect_t a, rect_t *b) +{ + int h_1, h_2, w_1, w_2, action; + + h_1 = a.top - b->top; + h_2 = b->bottom - a.bottom; + w_1 = a.left - b->left; + w_2 = b->right - a.right; + + action = SPLIT_FUZZY_ACTION_NONE; + + if (h_1 > 0) + { + /* .--.r (b) .---.r2 + * | | | | + * .-------.cur (a) .---.r '---' + * | | | | -> | | + + * | `--' | `---' + * `-------' + */ + rect_list_append_xywh(dirty, b->left, b->top, b->width, h_1); + b->height -= h_1; + b->top = a.top; + action = SPLIT_FUZZY_ACTION_SPLIT; + } + + if (h_2 > 0) + { + /* .-------.cur (a) + * | .---. | .---.r + * | | | | -> | | + * `-------' `---' + .---.r2 + * | | | | + * `---'r (b) `---' + */ + rect_list_append_xywh(dirty, b->left, a.bottom, b->width, h_2); + b->height -= h_2; + action = SPLIT_FUZZY_ACTION_SPLIT; + } + + if (((w_1 > 0) || (w_2 > 0)) && (a.height == b->height)) + return SPLIT_FUZZY_ACTION_MERGE; + + if (w_1 > 0) + { + /* (b) r .----.cur (a) + * .--|-. | .--.r2 .-.r + * | | | | -> | | + | | + * `--|-' | `--' `-' + * `----' + */ + rect_list_append_xywh(dirty, b->left, b->top, w_1, b->height); + /* not necessary to keep these, r (b) will be destroyed */ + /* b->width -= w_1; */ + /* b->left = a.left; */ + action = SPLIT_FUZZY_ACTION_SPLIT; + } + + if (w_2 > 0) + { + /* .----.cur (a) + * | | + * | .-|--.r (b) .-.r .--.r2 + * | | | | -> | | + | | + * | `-|--' `-' `--' + * `----' + */ + rect_list_append_xywh(dirty, a.right, b->top, w_2, b->height); + /* not necessary to keep these, r (b) will be destroyed */ + /* b->width -= w_2; */ + action = SPLIT_FUZZY_ACTION_SPLIT; + } + + return action; +} + +#if 0 +static void rect_list_node_pool_set_max(int max) +{ + int diff; + + diff = list_node_pool.len - max; + for (; diff > 0 && list_node_pool.node != NULL; diff--) + { + list_node_t *node; + + node = list_node_pool.node; + list_node_pool.node = node->next; + list_node_pool.len--; + + free(node); + } + + list_node_pool.max = max; +} +#endif + +static void rect_list_node_pool_flush(void) +{ + while (list_node_pool.node) + { + list_node_t *node; + + node = list_node_pool.node; + list_node_pool.node = node->next; + list_node_pool.len--; + + free(node); + } +} + + + +static inline void rect_list_node_pool_put(list_node_t *node) +{ + if (list_node_pool.len < list_node_pool.max) + { + node->next = list_node_pool.node; + list_node_pool.node = node; + list_node_pool.len++; + } + else + free(node); +} + +#if 0 +static void rect_print(const rect_t r) +{ + printf("", r.left, r.top, r.width, r.height); +} + +static void rect_list_print(const list_t rects) +{ + list_node_t *node; + int len; + + len = 0; + for (node = rects.head; node != NULL; node = node->next) + len++; + + printf("["); + for (node = rects.head; node != NULL; node = node->next) + { + rect_print(((rect_node_t *)node)->rect); + if (node->next) + { + putchar(','); + if (len < 4) + putchar(' '); + else + { + putchar('\n'); + putchar(' '); + } + } + } + printf("]\n"); +} +#endif + +static inline list_node_t * +rect_list_unlink_next(list_t *rects, list_node_t *parent_node) +{ + list_node_t *node; + + if (parent_node) + { + node = parent_node->next; + parent_node->next = node->next; + } + else + { + node = rects->head; + rects->head = node->next; + } + + if (rects->tail == node) + rects->tail = parent_node; + + *node = list_node_zeroed; + return node; +} + +static inline void rect_list_del_next(list_t *rects, list_node_t *parent_node) +{ + list_node_t *node; + + node = rect_list_unlink_next(rects, parent_node); + rect_list_node_pool_put(node); +} + +static void rect_list_clear(list_t *rects) +{ + list_node_t *node; + + node = rects->head; + while (node) + { + list_node_t *aux; + + aux = node->next; + rect_list_node_pool_put(node); + node = aux; + } + *rects = list_zeroed; +} + +static void rect_list_del_split_strict(list_t *rects, const rect_t del_r) +{ + list_t modified = list_zeroed; + list_node_t *cur_node, *prev_node; + + prev_node = NULL; + cur_node = rects->head; + while (cur_node) + { + int intra_width, intra_height; + rect_t current; + + current = ((rect_node_t *)cur_node)->rect; + + _calc_intra_rect_area(del_r, current, &intra_width, + &intra_height); + if ((intra_width <= 0) || (intra_height <= 0)) + { + /* .---.current .---.del_r + * | | | | + * `---+---.del_r `---+---.current + * | | | | + * `---' `---' + * no intersection, nothing to do + */ + prev_node = cur_node; + cur_node = cur_node->next; + } + else if ((intra_width == current.width) && (intra_height + == current.height)) + { + /* .-------.del_r + * | .---. | + * | | | | + * | `---'current + * `-------' + * current is contained, remove from rects + */ + cur_node = cur_node->next; + rect_list_del_next(rects, prev_node); + } + else + { + _split_strict(&modified, del_r, current); + cur_node = cur_node->next; + rect_list_del_next(rects, prev_node); + } + } + + rect_list_concat(rects, &modified); +} + +#if 0 +static void rect_list_add_split_strict(list_t *rects, list_node_t *node) +{ + list_t dirty = list_zeroed; + list_t new_dirty = list_zeroed; + list_node_t *cur_node; + + if (!rects->head) + { + rect_list_append_node(rects, node); + return; + } + + rect_list_append_node(&dirty, node); + + cur_node = rects->head; + while (dirty.head) + { + rect_t current; + + if (!cur_node) + { + rect_list_concat(rects, &dirty); + break; + } + + current = ((rect_node_t *)cur_node)->rect; + + while (dirty.head) + { + int intra_width, intra_height; + rect_t r; + + r = ((rect_node_t *)dirty.head)->rect; + _calc_intra_rect_area(r, current, &intra_width, + &intra_height); + if ((intra_width == r.width) && (intra_height + == r.height)) + /* .-------.cur + * | .---.r| + * | | | | + * | `---' | + * `-------' + */ + rect_list_del_next(&dirty, NULL); + else if ((intra_width <= 0) || (intra_height <= 0)) + { + /* .---.cur .---.r + * | | | | + * `---+---.r `---+---.cur + * | | | | + * `---' `---' + */ + list_node_t *tmp; + tmp = rect_list_unlink_next(&dirty, NULL); + rect_list_append_node(&new_dirty, tmp); + } + else + { + _split_strict(&new_dirty, current, r); + rect_list_del_next(&dirty, NULL); + } + } + dirty = new_dirty; + new_dirty = list_zeroed; + + cur_node = cur_node->next; + } +} +#endif + +static list_node_t * +rect_list_add_split_fuzzy(list_t *rects, list_node_t *node, int accepted_error) +{ + list_t dirty = list_zeroed; + list_node_t *old_last; + + old_last = rects->tail; + + if (!rects->head) + { + rect_list_append_node(rects, node); + return old_last; + } + + rect_list_append_node(&dirty, node); + while (dirty.head) + { + list_node_t *d_node, *cur_node, *prev_cur_node; + int keep_dirty; + rect_t r; + + d_node = rect_list_unlink_next(&dirty, NULL); + r = ((rect_node_t *)d_node)->rect; + + prev_cur_node = NULL; + cur_node = rects->head; + keep_dirty = 1; + while (cur_node) + { + int area, action; + rect_t current, intra, outer; + + current = ((rect_node_t *)cur_node)->rect; + + _calc_intra_outer_rect_area(r, current, &intra, &outer); + area = current.area + r.area - intra.area; + + if ((intra.width == r.width) && (intra.height + == r.height)) + { + /* .-------.cur + * | .---.r| + * | | | | + * | `---' | + * `-------' + */ + keep_dirty = 0; + break; + } + else if ((intra.width == current.width) + && (intra.height == current.height)) + { + /* .-------.r + * | .---.cur + * | | | | + * | `---' | + * `-------' + */ + if (old_last == cur_node) + old_last = prev_cur_node; + + cur_node = cur_node->next; + rect_list_del_next(rects, prev_cur_node); + } + else if ((outer.area - area) <= accepted_error) + { + /* .-----------. bounding box (outer) + * |.---. .---.| + * ||cur| |r || + * || | | || + * |`---' `---'| + * `-----------' + * merge them, remove both and add merged + */ + rect_node_t *n; + + if (old_last == cur_node) + old_last = prev_cur_node; + + n = (rect_node_t *)rect_list_unlink_next( + rects, prev_cur_node); + n->rect = outer; + rect_list_append_node(&dirty, (list_node_t *)n); + + keep_dirty = 0; + break; + } + else if (intra.area <= accepted_error) + { + /* .---.cur .---.r + * | | | | + * `---+---.r `---+---.cur + * | | | | + * `---' `---' + * no split, no merge + */ + prev_cur_node = cur_node; + cur_node = cur_node->next; + } + else + { + /* split is required */ + action = _split_fuzzy(&dirty, current, &r); + if (action == SPLIT_FUZZY_ACTION_MERGE) + { +/* horizontal merge is possible: remove both, add merged */ + rect_node_t *n; + + if (old_last == cur_node) + old_last = prev_cur_node; + + n + = (rect_node_t *)rect_list_unlink_next( + rects, + prev_cur_node); + + n->rect.left = outer.left; + n->rect.width = outer.width; + n->rect.right = outer.right; + n->rect.area = outer.width * r.height; + rect_list_append_node(&dirty, + (list_node_t *)n); + } + else if (action == SPLIT_FUZZY_ACTION_NONE) + { +/* + * this rect check was totally useless, + * should never happen + */ +/* prev_cur_node = cur_node; */ +/* cur_node = cur_node->next; */ + printf("Should not get here!\n"); + abort(); + } + + keep_dirty = 0; + break; + } + } + if (EINA_UNLIKELY(keep_dirty)) + rect_list_append_node(rects, d_node); + else + rect_list_node_pool_put(d_node); + } + + return old_last; +} + +static inline void _calc_outer_rect_area(const rect_t a, const rect_t b, + rect_t *outer) +{ + int min_left, max_right; + int min_top, max_bottom; + + if (a.left < b.left) + min_left = a.left; + else + min_left = b.left; + + if (a.right < b.right) + max_right = b.right; + else + max_right = a.right; + + outer->left = min_left; + outer->right = max_right; + outer->width = max_right - min_left; + + if (a.top < b.top) + min_top = a.top; + else + min_top = b.top; + + if (a.bottom < b.bottom) + max_bottom = b.bottom; + else + max_bottom = a.bottom; + + outer->top = min_top; + outer->bottom = max_bottom; + outer->height = max_bottom - min_top; + + outer->area = outer->width * outer->height; +} + +static void rect_list_merge_rects(list_t *rects, + list_t *to_merge, + int accepted_error) +{ + while (to_merge->head) + { + list_node_t *node, *parent_node; + rect_t r1; + int merged; + + r1 = ((rect_node_t *)to_merge->head)->rect; + + merged = 0; + parent_node = NULL; + node = rects->head; + while (node) + { + rect_t r2, outer; + int area; + + r2 = ((rect_node_t *)node)->rect; + + _calc_outer_rect_area(r1, r2, &outer); + area = r1.area + r2.area; /* intra area is taken as 0 */ + if (outer.area - area <= accepted_error) + { + /* + * remove both r1 and r2, create r3 + * actually r3 uses r2 instance, saves memory + */ + rect_node_t *n; + + n = (rect_node_t *)rect_list_unlink_next( + rects, parent_node); + n->rect = outer; + rect_list_append_node(to_merge, + (list_node_t *)n); + merged = 1; + break; + } + + parent_node = node; + node = node->next; + } + + if (!merged) + { + list_node_t *n; + n = rect_list_unlink_next(to_merge, NULL); + rect_list_append_node(rects, n); + } + else + rect_list_del_next(to_merge, NULL); + } +} + +static void rect_list_add_split_fuzzy_and_merge(list_t *rects, + list_node_t *node, + int split_accepted_error, + int merge_accepted_error) +{ + list_node_t *n; + + n = rect_list_add_split_fuzzy(rects, node, split_accepted_error); + if (n && n->next) + { + list_t to_merge; + + /* split list into 2 segments, already merged and to merge */ + to_merge.head = n->next; + to_merge.tail = rects->tail; + rects->tail = n; + n->next = NULL; + + rect_list_merge_rects(rects, &to_merge, merge_accepted_error); + } +} + +static inline void _splitter_new(Eina_Tiler *t) +{ + t->splitter.rects = list_zeroed; + t->splitter.need_merge = EINA_FALSE; +} + +static inline void _splitter_del(Eina_Tiler *t) +{ + rect_list_clear(&t->splitter.rects); + rect_list_node_pool_flush(); +} + +static inline void _splitter_tile_size_set(Eina_Tiler *t, + int w __UNUSED__, + int h __UNUSED__) +{ + /* TODO are w and h used for something? */ + t->splitter.rects = list_zeroed; +} + +static inline Eina_Bool _splitter_rect_add(Eina_Tiler *t, Eina_Rectangle *rect) +{ + rect_node_t *rn; + + //printf("ACCOUNTING[1]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); + rect->x >>= 1; + rect->y >>= 1; + rect->w += 2; + rect->w >>= 1; + rect->h += 2; + rect->h >>= 1; + + rn = (rect_node_t *)rect_list_node_pool_get(); + rn->_lst = list_node_zeroed; + rect_init(&rn->rect, rect->x, rect->y, rect->w, rect->h); + //printf("ACCOUNTING[2]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); + //testing on my core2 duo desktop - fuzz of 32 or 48 is best. +#define FUZZ 32 + rect_list_add_split_fuzzy_and_merge(&t->splitter.rects, + (list_node_t *)rn, + FUZZ * FUZZ, + FUZZ * FUZZ); + return EINA_TRUE; +} + +static inline void _splitter_rect_del(Eina_Tiler *t, Eina_Rectangle *rect) +{ + rect_t r; + + if (!t->splitter.rects.head) + return; + + rect->x += 1; + rect->y += 1; + rect->x >>= 1; + rect->y >>= 1; + rect->w -= 1; + rect->w >>= 1; + rect->h -= 1; + rect->h >>= 1; + + if ((rect->w <= 0) || (rect->h <= 0)) + return; + + rect_init(&r, rect->x, rect->y, rect->w, rect->h); + //fprintf(stderr, "ACCOUNTING: del_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); + + rect_list_del_split_strict(&t->splitter.rects, r); + t->splitter.need_merge = EINA_TRUE; + return; +} + +static inline void _splitter_clear(Eina_Tiler *t) +{ + rect_list_clear(&t->splitter.rects); + t->splitter.need_merge = EINA_FALSE; +} +/* end of splitter algorithm */ + +static Eina_Bool _iterator_next(Eina_Iterator_Tiler *it, void **data) +{ + list_node_t *n; + + for (n = it->curr; n; n = n->next) + { + rect_t cur; + + cur = ((rect_node_t *)n)->rect; + + it->r.x = cur.left << 1; + it->r.y = cur.top << 1; + it->r.w = cur.width << 1; + it->r.h = cur.height << 1; + + if (eina_rectangle_intersection(&it->r, &it->tiler->area) == EINA_FALSE) + continue; + + if ((it->r.w <= 0) || (it->r.h <= 0)) + continue; + + it->curr = n->next; + *(Eina_Rectangle **)data = &it->r; + return EINA_TRUE; + } + return EINA_FALSE; +} + +static void *_iterator_get_container(Eina_Iterator_Tiler *it) +{ + EINA_MAGIC_CHECK_TILER_ITERATOR(it, NULL); + return (void *)it->tiler; +} + +static void _iterator_free(Eina_Iterator_Tiler *it) +{ + EINA_MAGIC_CHECK_TILER_ITERATOR(it); + free(it); +} + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI Eina_Tiler *eina_tiler_new(int w, int h) +{ + Eina_Tiler *t; + + t = calloc(1, sizeof(Eina_Tiler)); + t->area.w = w; + t->area.h = h; + t->tile.w = w; + t->tile.h = h; + EINA_MAGIC_SET(t, EINA_MAGIC_TILER); + _splitter_new(t); + return t; +} + +EAPI void eina_tiler_free(Eina_Tiler *t) +{ + EINA_MAGIC_CHECK_TILER(t); + _splitter_del(t); + free(t); +} + +EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h) +{ + EINA_MAGIC_CHECK_TILER(t); + if ((w <= 0) || (h <= 0)) + return; + + t->tile.w = w; + t->tile.h = h; + _splitter_tile_size_set(t, w, h); +} + +EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r) +{ + Eina_Rectangle tmp; + + EINA_MAGIC_CHECK_TILER(t, EINA_FALSE); + if ((r->w <= 0) || (r->h <= 0)) + return EINA_FALSE; + + tmp = *r; + if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE) + return EINA_FALSE; + + if ((tmp.w <= 0) || (tmp.h <= 0)) + return EINA_FALSE; + + return _splitter_rect_add(t, &tmp); +} + +EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r) +{ + Eina_Rectangle tmp; + + EINA_MAGIC_CHECK_TILER(t); + if ((r->w <= 0) || (r->h <= 0)) + return; + + tmp = *r; + if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE) + return; + + if ((tmp.w <= 0) || (tmp.h <= 0)) + return; + + _splitter_rect_del(t, &tmp); +} + +EAPI void eina_tiler_clear(Eina_Tiler *t) +{ + EINA_MAGIC_CHECK_TILER(t); + _splitter_clear(t); +} + + +EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t) +{ + Eina_Iterator_Tiler *it; + + EINA_MAGIC_CHECK_TILER(t, NULL); + + it = calloc(1, sizeof (Eina_Iterator_Tiler)); + if (!it) + return NULL; + + it->tiler = t; + + if (t->splitter.need_merge == EINA_TRUE) + { + list_t to_merge; + splitter_t *sp; + + sp = (splitter_t *)&(t->splitter); + to_merge = t->splitter.rects; + sp->rects = list_zeroed; + rect_list_merge_rects(&sp->rects, &to_merge, FUZZ * FUZZ); + sp->need_merge = 0; + } + + it->curr = it->tiler->splitter.rects.head; + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER( + _iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_iterator_free); + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + EINA_MAGIC_SET(it, EINA_MAGIC_TILER_ITERATOR); + + return &it->iterator; +} + +struct _Eina_Tile_Grid_Slicer_Iterator +{ + Eina_Iterator iterator; + Eina_Tile_Grid_Slicer priv; +}; + +typedef struct _Eina_Tile_Grid_Slicer_Iterator Eina_Tile_Grid_Slicer_Iterator; + +static void +eina_tile_grid_slicer_iterator_free(Eina_Tile_Grid_Slicer_Iterator *it) +{ + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); + free(it); +} + +static Eina_Bool +eina_tile_grid_slicer_iterator_next(Eina_Tile_Grid_Slicer_Iterator *it, + void **data) +{ + return eina_tile_grid_slicer_next + (&it->priv, (const Eina_Tile_Grid_Info **)data); +} + +EAPI Eina_Iterator * +eina_tile_grid_slicer_iterator_new(int x, + int y, + int w, + int h, + int tile_w, + int tile_h) +{ + Eina_Tile_Grid_Slicer_Iterator *it; + + it = calloc(1, sizeof(*it)); + if (!it) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(eina_tile_grid_slicer_iterator_next); + it->iterator.free = FUNC_ITERATOR_FREE(eina_tile_grid_slicer_iterator_free); + + eina_tile_grid_slicer_setup(&it->priv, x, y, w, h, tile_w, tile_h); + + return &it->iterator; +} diff --git a/libraries/eina/src/lib/eina_unicode.c b/libraries/eina/src/lib/eina_unicode.c new file mode 100644 index 0000000..342e3cb --- /dev/null +++ b/libraries/eina/src/lib/eina_unicode.c @@ -0,0 +1,405 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Tom Hacohen, + * Brett Nash + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + + */ + +#include +#include "eina_unicode.h" + +/* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so, + * probably better to use the standard functions */ + +/* Maybe I'm too tired, but this is the only thing that actually worked. */ +const Eina_Unicode _EINA_UNICODE_EMPTY_STRING[1] = {0}; +EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING; +EAPI int +eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) +{ + for (; *a && *a == *b; a++, b++) + ; + if (*a == *b) + return 0; + else if (*a < *b) + return -1; + else + return 1; +} + +EAPI Eina_Unicode * +eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) +{ + Eina_Unicode *ret = dest; + + while (*source) + *dest++ = *source++; + *dest = 0; + return ret; +} + +EAPI Eina_Unicode * +eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) +{ + Eina_Unicode *ret = dest; + + for ( ; n && *source ; n--) + *dest++ = *source++; + for (; n; n--) + *dest++ = 0; + return ret; +} + +EAPI size_t +eina_unicode_strlen(const Eina_Unicode *ustr) +{ + const Eina_Unicode *end; + for (end = ustr; *end; end++) + ; + return end - ustr; +} + +EAPI size_t +eina_unicode_strnlen(const Eina_Unicode *ustr, int n) +{ + const Eina_Unicode *end; + const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */ + for (end = ustr; end < last && *end; end++) + ; + return end - ustr; +} + + + + +EAPI Eina_Unicode * +eina_unicode_strndup(const Eina_Unicode *text, size_t n) +{ + Eina_Unicode *ustr; + + ustr = (Eina_Unicode *) malloc((n + 1) * sizeof(Eina_Unicode)); + memcpy(ustr, text, n * sizeof(Eina_Unicode)); + ustr[n] = 0; + return ustr; +} + +EAPI Eina_Unicode * +eina_unicode_strdup(const Eina_Unicode *text) +{ + size_t len; + + len = eina_unicode_strlen(text); + return eina_unicode_strndup(text, len); +} + +EAPI Eina_Unicode * +eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) +{ + const Eina_Unicode *i, *j; + + for (i = haystack; *i; i++) + { + haystack = i; /* set this location as the base position */ + for (j = needle; *j && *i && *j == *i; j++, i++) + ; + + if (!*j) /*if we got to the end of j this means we got a full match */ + { + return (Eina_Unicode *)haystack; /* return the new base position */ + } + } + + return NULL; +} + +EAPI Eina_Unicode * +eina_unicode_escape(const Eina_Unicode *str) +{ + Eina_Unicode *s2, *d; + const Eina_Unicode *s; + + s2 = malloc((eina_unicode_strlen(str) * 2) + 1); + if (!s2) + return NULL; + + for (s = str, d = s2; *s != 0; s++, d++) + { + if ((*s == ' ') || (*s == '\\') || (*s == '\'')) + { + *d = '\\'; + d++; + } + + *d = *s; + } + *d = 0; + return s2; +} + +/* UTF-8 Handling */ + +#define EINA_UNICODE_UTF8_BYTES_PER_CHAR 6 +/* The replacement range that will be used for bad utf8 chars. */ +#define ERROR_REPLACEMENT_BASE 0xDC80 +#define ERROR_REPLACEMENT_END 0xDCFF +#define IS_INVALID_BYTE(x) ((x == 192) || (x == 193) || (x >= 245)) +#define IS_CONTINUATION_BYTE(x) ((x & 0xC0) == 0x80) + +EAPI Eina_Unicode +eina_unicode_utf8_get_next(const char *buf, int *iindex) +{ + int ind = *iindex; + Eina_Unicode r; + unsigned char d; + + /* if this char is the null terminator, exit */ + if ((d = buf[ind++]) == 0) return 0; + + if ((d & 0x80) == 0) + { // 1 byte (7bit) - 0xxxxxxx + *iindex = ind; + return d; + } + if ((d & 0xe0) == 0xc0) + { // 2 byte (11bit) - 110xxxxx 10xxxxxx + r = (d & 0x1f) << 6; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f); + if (r <= 0x7F) goto error; + *iindex = ind; + return r; + } + if ((d & 0xf0) == 0xe0) + { // 3 byte (16bit) - 1110xxxx 10xxxxxx 10xxxxxx + r = (d & 0x0f) << 12; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 6; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f); + if (r <= 0x7FF) goto error; + *iindex = ind; + return r; + } + if ((d & 0xf8) == 0xf0) + { // 4 byte (21bit) - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + r = (d & 0x07) << 18; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 12; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 6; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f); + if (r <= 0xFFFF) goto error; + *iindex = ind; + return r; + } + if ((d & 0xfc) == 0xf8) + { // 5 byte (26bit) - 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + r = (d & 0x03) << 24; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 18; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 12; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 6; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f); + if (r <= 0x1FFFFF) goto error; + *iindex = ind; + return r; + } + if ((d & 0xfe) == 0xfc) + { // 6 byte (31bit) - 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + r = (d & 0x01) << 30; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 24; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 18; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 12; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f) << 6; + if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) || + !IS_CONTINUATION_BYTE(d)) goto error; + r |= (d & 0x3f); + if (r <= 0x3FFFFFF) goto error; + *iindex = ind; + return r; + } + +/* Gets here where there was an error and we want to replace the char + * we just use the invalid unicode codepoints 8 lower bits represent + * the original char */ +error: + d = buf[*iindex]; + (*iindex)++; + return ERROR_REPLACEMENT_BASE | d; +} + +EAPI Eina_Unicode +eina_unicode_utf8_get_prev(const char *buf, int *iindex) +{ + int r; + int ind = *iindex; + /* First obtain the codepoint at iindex */ + r = eina_unicode_utf8_get_next(buf, &ind); + + /* although when ind == 0 there's no previous char, we still want to get + * the current char */ + if (*iindex <= 0) + return r; + + /* Next advance iindex to previous codepoint */ + ind = *iindex; + ind--; + while ((ind > 0) && ((buf[ind] & 0xc0) == 0x80)) + ind--; + + *iindex = ind; + return r; +} + +EAPI int +eina_unicode_utf8_get_len(const char *buf) +{ + /* returns the number of utf8 characters (not bytes) in the string */ + int i = 0, len = 0; + + while (eina_unicode_utf8_get_next(buf, &i)) + len++; + + return len; +} + +EAPI Eina_Unicode * +eina_unicode_utf8_to_unicode(const char *utf, int *_len) +{ + /* FIXME: Should optimize! */ + int len, i; + int ind; + Eina_Unicode *buf, *uind; + + len = eina_unicode_utf8_get_len(utf); + if (_len) + *_len = len; + buf = (Eina_Unicode *) calloc(sizeof(Eina_Unicode), (len + 1)); + if (!buf) return buf; + + for (i = 0, ind = 0, uind = buf ; i < len ; i++, uind++) + { + *uind = eina_unicode_utf8_get_next(utf, &ind); + } + + return buf; +} + +EAPI char * +eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) +{ + char *buf; + const Eina_Unicode *uind; + char *ind; + int ulen, len; + + ulen = eina_unicode_strlen(uni); + buf = (char *) calloc(ulen + 1, EINA_UNICODE_UTF8_BYTES_PER_CHAR); + + len = 0; + for (uind = uni, ind = buf ; *uind ; uind++) + { + if (*uind <= 0x7F) /* 1 byte char */ + { + *ind++ = *uind; + len += 1; + } + else if (*uind <= 0x7FF) /* 2 byte char */ + { + *ind++ = 0xC0 | (unsigned char) (*uind >> 6); + *ind++ = 0x80 | (unsigned char) (*uind & 0x3F); + len += 2; + } + else if (*uind <= 0xFFFF) /* 3 byte char */ + { + /* If it's a special replacement codepoint */ + if (*uind >= ERROR_REPLACEMENT_BASE && + *uind <= ERROR_REPLACEMENT_END) + { + *ind++ = *uind & 0xFF; + len += 1; + } + else + { + *ind++ = 0xE0 | (unsigned char) (*uind >> 12); + *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F); + *ind++ = 0x80 | (unsigned char) (*uind & 0x3F); + len += 3; + } + } + else if (*uind <= 0x1FFFFF) /* 4 byte char */ + { + *ind++ = 0xF0 | (unsigned char) ((*uind >> 18) & 0x07); + *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F); + *ind++ = 0x80 | (unsigned char) (*uind & 0x3F); + len += 4; + } + else if (*uind <= 0x3FFFFFF) /* 5 byte char */ + { + *ind++ = 0xF8 | (unsigned char) ((*uind >> 24) & 0x03); + *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F); + *ind++ = 0x80 | (unsigned char) (*uind & 0x3F); + len += 5; + } + else if (*uind <= 0x7FFFFFFF) /* 6 byte char */ + { + *ind++ = 0xFC | (unsigned char) ((*uind >> 30) & 0x01); + *ind++ = 0x80 | (unsigned char) ((*uind >> 24) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F); + *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F); + *ind++ = 0x80 | (unsigned char) (*uind & 0x3F); + len += 6; + } + else /* error */ + { + /* Do something */ + } + } + buf = realloc(buf, len + 1); + buf[len] = '\0'; + if (_len) + *_len = len; + return buf; +} + + + diff --git a/libraries/eina/src/lib/eina_ustrbuf.c b/libraries/eina/src/lib/eina_ustrbuf.c new file mode 100644 index 0000000..7c1c2db --- /dev/null +++ b/libraries/eina/src/lib/eina_ustrbuf.c @@ -0,0 +1,74 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_strbuf_common.h" +#include "eina_unicode.h" +#include "eina_ustrbuf.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +#ifdef _STRBUF_DATA_TYPE +# undef _STRBUF_DATA_TYPE +#endif + +#ifdef _STRBUF_CSIZE +# undef _STRBUF_CSIZE +#endif + +#ifdef _STRBUF_STRUCT_NAME +# undef _STRBUF_STRUCT_NAME +#endif + +#ifdef _STRBUF_STRLEN_FUNC +# undef _STRBUF_STRLEN_FUNC +#endif + +#ifdef _STRBUF_STRESCAPE_FUNC +# undef _STRBUF_STRESCAPE_FUNC +#endif + +#ifdef _STRBUF_MAGIC +# undef _STRBUF_MAGIC +#endif + +#ifdef _STRBUF_MAGIC_STR +# undef _STRBUF_MAGIC_STR +#endif + +#ifdef _FUNC_EXPAND +# undef _FUNC_EXPAND +#endif + +#define _STRBUF_DATA_TYPE Eina_Unicode +#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE) +#define _STRBUF_STRUCT_NAME Eina_UStrbuf +#define _STRBUF_STRLEN_FUNC(x) eina_unicode_strlen(x) +#define _STRBUF_STRESCAPE_FUNC(x) eina_unicode_escape(x) +#define _STRBUF_MAGIC EINA_MAGIC_USTRBUF +#define _STRBUF_MAGIC_STR __USTRBUF_MAGIC_STR +static const char __USTRBUF_MAGIC_STR[] = "Eina UStrbuf"; + +#define _FUNC_EXPAND(y) eina_ustrbuf_ ## y + +/** + * @endcond + */ + + +/*============================================================================* + * Global * + *============================================================================*/ + + +/*============================================================================* + * API * + *============================================================================*/ + +#include "eina_strbuf_template_c.x" diff --git a/libraries/eina/src/lib/eina_ustringshare.c b/libraries/eina/src/lib/eina_ustringshare.c new file mode 100644 index 0000000..3992dc6 --- /dev/null +++ b/libraries/eina/src/lib/eina_ustringshare.c @@ -0,0 +1,132 @@ +/* EINA - EFL data type library + * Copyright (C) 2002-2008 Carsten Haitzler, + * Jorge Luis Zapata Muga, + * Cedric Bail, + * Gustavo Sverzut Barbieri + * Tom Hacohen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + + */ +/** + * @page tutorial_ustringshare_page UStringshare Tutorial + * + * to be written... + * + */ + +#include "eina_share_common.h" +#include "eina_unicode.h" +#include "eina_private.h" +#include "eina_ustringshare.h" + +/* The actual share */ +static Eina_Share *ustringshare_share; +static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; + +/*============================================================================* +* Global * +*============================================================================*/ + +/** + * @internal + * @brief Initialize the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function sets up the share_common module of Eina. It is called by + * eina_init(). + * + * @see eina_init() + */ +Eina_Bool +eina_ustringshare_init(void) +{ + return eina_share_common_init(&ustringshare_share, + EINA_MAGIC_USTRINGSHARE_NODE, + EINA_MAGIC_USTRINGSHARE_NODE_STR); +} + +/** + * @internal + * @brief Shut down the share_common module. + * + * @return #EINA_TRUE on success, #EINA_FALSE on failure. + * + * This function shuts down the share_common module set up by + * eina_share_common_init(). It is called by eina_shutdown(). + * + * @see eina_shutdown() + */ +Eina_Bool +eina_ustringshare_shutdown(void) +{ + Eina_Bool ret; + ret = eina_share_common_shutdown(&ustringshare_share); + return ret; +} + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI void +eina_ustringshare_del(const Eina_Unicode *str) +{ + if (!str) + return; + + eina_share_common_del(ustringshare_share,(const char *)str); +} + +EAPI const Eina_Unicode * +eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) +{ + return (const Eina_Unicode *)eina_share_common_add_length(ustringshare_share, + (const char *)str, + slen * + sizeof( + Eina_Unicode), + sizeof( + Eina_Unicode)); +} + +EAPI const Eina_Unicode * +eina_ustringshare_add(const Eina_Unicode *str) +{ + int slen = (str) ? (int)eina_unicode_strlen(str) : -1; + return eina_ustringshare_add_length(str, slen); +} + +EAPI const Eina_Unicode * +eina_ustringshare_ref(const Eina_Unicode *str) +{ + return (const Eina_Unicode *)eina_share_common_ref(ustringshare_share, + (const char *)str); +} + +EAPI int +eina_ustringshare_strlen(const Eina_Unicode *str) +{ + int len = eina_share_common_length(ustringshare_share, (const char *)str); + len = (len > 0) ? len / (int)sizeof(Eina_Unicode) : -1; + return len; +} + +EAPI void +eina_ustringshare_dump(void) +{ + eina_share_common_dump(ustringshare_share, NULL, 0); +} diff --git a/libraries/eina/src/lib/eina_value.c b/libraries/eina/src/lib/eina_value.c new file mode 100644 index 0000000..554f907 --- /dev/null +++ b/libraries/eina/src/lib/eina_value.c @@ -0,0 +1,47 @@ +/* eina_value.c + + Copyright (C) 2001 Christopher Rosendahl + Nathan Ingersoll + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies of the Software and its documentation and acknowledgment shall be + given in the documentation and software packages that this Software was + used. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_config.h" +#include "eina_private.h" + +/*============================================================================* +* Global * +*============================================================================*/ + +/*============================================================================* +* API * +*============================================================================*/ + +EAPI const unsigned int eina_prime_table[] = +{ + 17, 31, 61, 127, 257, 509, 1021, + 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573, + 2097143, 4194301, 8388617, 16777213 +}; diff --git a/libraries/eina/src/lib/eina_xattr.c b/libraries/eina/src/lib/eina_xattr.c new file mode 100644 index 0000000..bd5b98e --- /dev/null +++ b/libraries/eina/src/lib/eina_xattr.c @@ -0,0 +1,292 @@ +/* EINA - EFL data type library + * Copyright (C) 2011 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_XATTR +# include +#endif + +#include "eina_config.h" +#include "eina_private.h" + +#include "eina_safety_checks.h" +#include "eina_xattr.h" +#include "eina_convert.h" + +/*============================================================================* + * Local * + *============================================================================*/ + +/** + * @cond LOCAL + */ + +typedef struct _Eina_Xattr_Iterator Eina_Xattr_Iterator; + +struct _Eina_Xattr_Iterator +{ + Eina_Iterator iterator; + + ssize_t length; + ssize_t offset; + + char xattr[1]; +}; + +#ifdef HAVE_XATTR +static Eina_Bool +_eina_xattr_ls_iterator_next(Eina_Xattr_Iterator *it, void **data) +{ + if (it->offset >= it->length) + return EINA_FALSE; + + *data = it->xattr + it->offset; + it->offset += strlen(it->xattr + it->offset) + 1; + + return EINA_TRUE; +} + +static void * +_eina_xattr_ls_iterator_container(Eina_Xattr_Iterator *it __UNUSED__) +{ + return NULL; +} + +static void +_eina_xattr_ls_iterator_free(Eina_Xattr_Iterator *it) +{ + EINA_MAGIC_SET(&it->iterator, 0); + free(it); +} +#endif + +/** + * @endcond + */ + + +/*============================================================================* + * Global * + *============================================================================*/ + + +/*============================================================================* + * API * + *============================================================================*/ + + +EAPI Eina_Iterator * +eina_xattr_ls(const char *file) +{ +#ifdef HAVE_XATTR + Eina_Xattr_Iterator *it; + ssize_t length; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + + length = listxattr(file, NULL, 0); + if (length <= 0) return NULL; + + it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1); + if (!it) return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->length = listxattr(file, it->xattr, length); + if (it->length != length) + { + free(it); + return NULL; + } + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_ls_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container); + it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free); + + return &it->iterator; +#else + return NULL; + (void)file; +#endif +} + +EAPI void * +eina_xattr_get(const char *file, const char *attribute, ssize_t *size) +{ +#ifdef HAVE_XATTR + void *ret = NULL; + ssize_t tmp; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL); + + *size = getxattr(file, attribute, NULL, 0); + /* Size should be less than 2MB (already huge in my opinion) */ + if (!(*size > 0 && *size < 2 * 1024 * 1024)) + goto on_error; + + ret = malloc(*size); + if (!ret) return NULL; + + tmp = getxattr(file, attribute, ret, *size); + if (tmp != *size) + goto on_error; + + return ret; + + on_error: + free(ret); + *size = 0; + return NULL; +#else + EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL); + *size = 0; + return NULL; + (void)file; + (void)attribute; +#endif +} + +EAPI Eina_Bool +eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) +{ +#ifdef HAVE_XATTR + int iflags; + + EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + EINA_SAFETY_ON_TRUE_RETURN_VAL(!(length > 0 && length < 2 * 1024 * 1024), EINA_FALSE); + + switch (flags) + { + case EINA_XATTR_INSERT: iflags = 0; break; + case EINA_XATTR_REPLACE: iflags = XATTR_REPLACE; break; + case EINA_XATTR_CREATED: iflags = XATTR_CREATE; break; + default: + return EINA_FALSE; + } + + if (setxattr(file, attribute, data, length, iflags)) + return EINA_FALSE; + return EINA_TRUE; +#else + return EINA_FALSE; + (void)file; + (void)attribute; + (void)data; + (void)length; + (void)flags; +#endif +} + +EAPI Eina_Bool +eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); + + return eina_xattr_set(file, attribute, data, strlen(data) + 1, flags); +} + +EAPI char * +eina_xattr_string_get(const char *file, const char *attribute) +{ + char *tmp; + ssize_t size; + + tmp = eina_xattr_get(file, attribute, &size); + if (!tmp) return NULL; + + if (tmp[size - 1] != '\0') + { + free(tmp); + return NULL; + } + + return tmp; +} + +EAPI Eina_Bool +eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags) +{ + char buffer[128]; + + eina_convert_dtoa(value, buffer); + return eina_xattr_string_set(file, attribute, buffer, flags); +} + +EAPI Eina_Bool +eina_xattr_double_get(const char *file, const char *attribute, double *value) +{ + char *tmp; + long long int m = 0; + long int e = 0; + + EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE); + + tmp = eina_xattr_string_get(file, attribute); + if (!tmp) return EINA_FALSE; + + if (!eina_convert_atod(tmp, strlen(tmp), &m, &e)) + { + free(tmp); + return EINA_FALSE; + } + + *value = ldexp((double)m, e); + free(tmp); + + return EINA_TRUE; +} + +EAPI Eina_Bool +eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags) +{ + char buffer[10]; + + eina_convert_itoa(value, buffer); + return eina_xattr_string_set(file, attribute, buffer, flags); +} + +EAPI Eina_Bool +eina_xattr_int_get(const char *file, const char *attribute, int *value) +{ + char *tmp; + char *eos; + Eina_Bool result; + + EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE); + + tmp = eina_xattr_string_get(file, attribute); + if (!tmp) return EINA_FALSE; + + *value = (int) strtol(tmp, &eos, 10); + result = (*eos == '\0'); + free(tmp); + + return result; +} diff --git a/libraries/eina/src/modules/Makefile.am b/libraries/eina/src/modules/Makefile.am new file mode 100644 index 0000000..53e28b7 --- /dev/null +++ b/libraries/eina/src/modules/Makefile.am @@ -0,0 +1,4 @@ +SUBDIRS = mp + +MAINTAINERCLEANFILES = \ +Makefile.in \ No newline at end of file diff --git a/libraries/eina/src/modules/Makefile.in b/libraries/eina/src/modules/Makefile.in new file mode 100644 index 0000000..f3385f1 --- /dev/null +++ b/libraries/eina/src/modules/Makefile.in @@ -0,0 +1,631 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +SUBDIRS = mp +MAINTAINERCLEANFILES = \ +Makefile.in + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/Makefile.am b/libraries/eina/src/modules/mp/Makefile.am new file mode 100644 index 0000000..435d57a --- /dev/null +++ b/libraries/eina/src/modules/mp/Makefile.am @@ -0,0 +1,45 @@ +MAINTAINERCLEANFILES = Makefile.in + +SUBDIRS = + +if EINA_BUILD_BUDDY +if !EINA_STATIC_BUILD_BUDDY +SUBDIRS += buddy +endif +endif + +if EINA_BUILD_CHAINED_POOL +if !EINA_STATIC_BUILD_CHAINED_POOL +SUBDIRS += chained_pool +endif +endif + +if EINA_BUILD_EMEMOA_FIXED +if !EINA_STATIC_BUILD_EMEMOA_FIXED +SUBDIRS += ememoa_fixed +endif +endif + +if EINA_BUILD_EMEMOA_UNKNOWN +if !EINA_STATIC_BUILD_EMEMOA_UNKNOWN +SUBDIRS += ememoa_unknown +endif +endif + +if EINA_BUILD_FIXED_BITMAP +if !EINA_STATIC_BUILD_FIXED_BITMAP +SUBDIRS += fixed_bitmap +endif +endif + +if EINA_BUILD_ONE_BIG +if !EINA_STATIC_BUILD_ONE_BIG +SUBDIRS += one_big +endif +endif + +if EINA_BUILD_PASS_THROUGH +if !EINA_STATIC_BUILD_PASS_THROUGH +SUBDIRS += pass_through +endif +endif diff --git a/libraries/eina/src/modules/mp/Makefile.in b/libraries/eina/src/modules/mp/Makefile.in new file mode 100644 index 0000000..d7e67ad --- /dev/null +++ b/libraries/eina/src/modules/mp/Makefile.in @@ -0,0 +1,639 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@EINA_BUILD_BUDDY_TRUE@@EINA_STATIC_BUILD_BUDDY_FALSE@am__append_1 = buddy +@EINA_BUILD_CHAINED_POOL_TRUE@@EINA_STATIC_BUILD_CHAINED_POOL_FALSE@am__append_2 = chained_pool +@EINA_BUILD_EMEMOA_FIXED_TRUE@@EINA_STATIC_BUILD_EMEMOA_FIXED_FALSE@am__append_3 = ememoa_fixed +@EINA_BUILD_EMEMOA_UNKNOWN_TRUE@@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_FALSE@am__append_4 = ememoa_unknown +@EINA_BUILD_FIXED_BITMAP_TRUE@@EINA_STATIC_BUILD_FIXED_BITMAP_FALSE@am__append_5 = fixed_bitmap +@EINA_BUILD_ONE_BIG_TRUE@@EINA_STATIC_BUILD_ONE_BIG_FALSE@am__append_6 = one_big +@EINA_BUILD_PASS_THROUGH_TRUE@@EINA_STATIC_BUILD_PASS_THROUGH_FALSE@am__append_7 = pass_through +subdir = src/modules/mp +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = buddy chained_pool ememoa_fixed ememoa_unknown \ + fixed_bitmap one_big pass_through +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +SUBDIRS = $(am__append_1) $(am__append_2) $(am__append_3) \ + $(am__append_4) $(am__append_5) $(am__append_6) \ + $(am__append_7) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.am b/libraries/eina/src/modules/mp/buddy/Makefile.am new file mode 100644 index 0000000..c699c9d --- /dev/null +++ b/libraries/eina/src/modules/mp/buddy/Makefile.am @@ -0,0 +1,29 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_buddy.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.in b/libraries/eina/src/modules/mp/buddy/Makefile.in new file mode 100644 index 0000000..64d7fc7 --- /dev/null +++ b/libraries/eina/src/modules/mp/buddy/Makefile.in @@ -0,0 +1,643 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/buddy +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_buddy.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_buddy.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_buddy.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_buddy.lo: eina_buddy.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_buddy.Tpo $(DEPDIR)/module_la-eina_buddy.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_buddy.c' object='module_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/buddy/eina_buddy.c b/libraries/eina/src/modules/mp/buddy/eina_buddy.c new file mode 100644 index 0000000..f402c6f --- /dev/null +++ b/libraries/eina/src/modules/mp/buddy/eina_buddy.c @@ -0,0 +1,292 @@ +/* EINA - EFL data type library + * Copyright (C) 2009 Jorge Luis Zapata Muga + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +/* + * This is a naive 'buddy' allocator following Knuth's documentation. + * The main difference is that we dont store the block information + * on the block memory itself but on another malloc'd area. + * This is useful for managing memory which isn't as fast as the main + * memory like the video memory + * The algorithm uses an area to store the linked list of blocks. + * Each block size is equal to the minimum allocatable block size for + * the memory pool and the number of blocks is equal to the size of the + * memory pool divided by the block size. + */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_types.h" +#include "eina_inlist.h" +#include "eina_module.h" +#include "eina_mempool.h" +#include "eina_private.h" + +typedef struct _Block +{ + EINA_INLIST; + Eina_Bool available : 1; + unsigned short int order : 7; /* final order is order + min_order */ +} Block; + +typedef struct _Buddy +{ + void *heap; /* start address of the heap */ + size_t size; /* total size in bytes of the heap */ + unsigned int min_order; /* minimum size is 1 << min_order */ + unsigned int max_order; /* maximum size is 1 << max_order */ + unsigned int num_order; /* number of orders */ + Eina_Inlist **areas; /* one area per order */ + Block *blocks; /* the allocated block information */ +} Buddy; + +/* get the minimum order greater or equal to size */ +static inline unsigned int _get_order(Buddy *b, size_t size) +{ + unsigned int i; + size_t bytes; + + bytes = 1 << b->min_order; + for (i = 0; bytes < size && i < b->num_order; i++) + { + bytes += bytes; + } + //printf("order for size %d is %d\n", size, i + b->min_order); + return i; +} + +static inline void *_get_offset(Buddy *b, Block *block) +{ + void *ret; + + ret = (char *)b->heap + ((block - &b->blocks[0]) << b->min_order); + return ret; +} + +static void *_init(__UNUSED__ const char *context, + __UNUSED__ const char *options, + va_list args) +{ + Buddy *b; + int i; + size_t bytes; + size_t size; + size_t min_order; + void *heap; + + heap = va_arg(args, void *); + size = va_arg(args, size_t); + min_order = va_arg(args, int); + /* the minimum order we support is 15 (32K) */ + min_order = min_order < 15 ? 15 : min_order; + bytes = 1 << min_order; + for (i = 0; bytes <= size; i++) + { + bytes += bytes; + } + if (!i) + return NULL; + + b = malloc(sizeof(Buddy)); + b->heap = heap; + b->size = size; + b->min_order = min_order; + b->max_order = min_order + i - 1; + b->num_order = i; + b->areas = calloc(b->num_order, sizeof(Eina_Inlist *)); + b->blocks = calloc(1 << (b->num_order - 1), sizeof(Block)); + /* setup the initial free area */ + b->blocks[0].available = EINA_TRUE; + b->areas[b->num_order - 1] = EINA_INLIST_GET(&(b->blocks[0])); + + return b; +} + +static void _shutdown(void *data) +{ + Buddy *b = data; + + free(b->blocks); + free(b->areas); + free(b); +} + +static void _free(void *data, void *element) +{ + Buddy *b = data; + Block *block, *buddy; + size_t offset; + size_t index; + + offset = (unsigned char *)element - (unsigned char *)b->heap; + if (offset > b->size) + return; + + index = offset >> b->min_order; + block = &b->blocks[index]; + + //printf("free %x index = %d order = %d buddy = %d\n", offset, index, block->order, index ^ (1 << block->order)); + /* we should always work with the buddy at right */ + if (index & (1 << block->order)) + { + Block *left; + + index = index ^ (1 << block->order); + left = &b->blocks[index]; + if (!left->available) + goto end; + else + { + buddy = block; + block = left; + b->areas[block->order] = eina_inlist_remove(b->areas[block->order], + EINA_INLIST_GET(block)); + block->order++; + } + } + +check: + /* already on the last order */ + if (block->order + b->min_order == b->max_order) + { + goto end; /* get the buddy */ + + } + + buddy = &b->blocks[index ^ (1 << block->order)]; + if (!buddy->available) + { + goto end; /* merge two blocks */ + + } + + b->areas[block->order] = eina_inlist_remove(b->areas[block->order], + EINA_INLIST_GET(buddy)); + block->order++; + goto check; +end: + /* add the block to the free list */ + block->available = EINA_TRUE; + b->areas[block->order] = eina_inlist_append(b->areas[block->order], + EINA_INLIST_GET(block)); +} + +static void *_alloc(void *data, unsigned int size) +{ + Buddy *b = data; + Block *block, *buddy; + unsigned int k, j; + + k = j = _get_order(b, size); + /* get a free list of order k where k <= j <= max_order */ + while ((j < b->num_order) && !b->areas[j]) + j++; + /* check that the order is on our range */ + if (j + b->min_order > b->max_order) + return NULL; + + /* get a free element on this order, if not, go splitting until we find one */ + //printf("getting order %d (%d) for size %d\n", j, k, size); +found: + if (j == k) + { + void *ret; + + block = EINA_INLIST_CONTAINER_GET(b->areas[j], Block); + block->available = EINA_FALSE; + block->order = j; + /* remove the block from the list */ + b->areas[j] = eina_inlist_remove(b->areas[j], EINA_INLIST_GET(block)); + ret = _get_offset(b, block); + + return ret; + } + + block = EINA_INLIST_CONTAINER_GET(b->areas[j], Block); + /* split */ + b->areas[j] = eina_inlist_remove(b->areas[j], EINA_INLIST_GET(block)); + j--; + b->areas[j] = eina_inlist_append(b->areas[j], EINA_INLIST_GET(block)); + buddy = block + (1 << j); + buddy->order = j; + buddy->available = EINA_TRUE; + b->areas[j] = eina_inlist_append(b->areas[j], EINA_INLIST_GET(buddy)); + + goto found; +} + +static void _statistics(void *data) +{ + Buddy *b = data; + unsigned int i; + + printf("Information:\n"); + printf( + "size = %li, min_order = %d, max_order = %d, num_order = %d, num_blocks = %d (%luKB)\n", + b->size, + b->min_order, + b->max_order, + b->num_order, + 1 << b->num_order, + ((1 << (b->num_order)) * sizeof(Block)) / 1024); + printf("Area dumping:"); + /* iterate over the free lists and dump the maps */ + for (i = 0; i < b->num_order; i++) + { + Block *block; + + printf("\n2^%d:", b->min_order + i); + EINA_INLIST_FOREACH(b->areas[i], block) + { + printf(" %li", (block - &b->blocks[0])); + } + } + printf("\nBlocks dumping:\n"); +} + +static Eina_Mempool_Backend _backend = { + "buddy", + &_init, + &_free, + &_alloc, + NULL, /* realloc */ + NULL, /* garbage collect */ + &_statistics, + &_shutdown, + NULL /* repack */ +}; + +Eina_Bool buddy_init(void) +{ + return eina_mempool_register(&_backend); +} + +void buddy_shutdown(void) +{ + eina_mempool_unregister(&_backend); +} + + +#ifndef EINA_STATIC_BUILD_BUDDY + +EINA_MODULE_INIT(buddy_init); +EINA_MODULE_SHUTDOWN(buddy_shutdown); + +#endif /* ! EINA_STATIC_BUILD_BUDDY */ diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.am b/libraries/eina/src/modules/mp/chained_pool/Makefile.am new file mode 100644 index 0000000..815bab7 --- /dev/null +++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.am @@ -0,0 +1,30 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ \ +@VALGRIND_CFLAGS@ + +controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_chained_mempool.c + +module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@ +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.in b/libraries/eina/src/modules/mp/chained_pool/Makefile.in new file mode 100644 index 0000000..b728672 --- /dev/null +++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.in @@ -0,0 +1,644 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/chained_pool +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_chained_mempool.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ \ +@VALGRIND_CFLAGS@ + +controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_chained_mempool.c + +module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@ +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/chained_pool/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/chained_pool/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_chained_mempool.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_chained_mempool.lo: eina_chained_mempool.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_chained_mempool.Tpo $(DEPDIR)/module_la-eina_chained_mempool.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_chained_mempool.c' object='module_la-eina_chained_mempool.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c new file mode 100644 index 0000000..009b62b --- /dev/null +++ b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c @@ -0,0 +1,547 @@ +/* EINA - EFL data type library + * Copyright (C) 2008-2010 Cedric BAIL, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef EFL_HAVE_POSIX_THREADS +#include + +# ifdef EFL_DEBUG_THREADS +# include +# endif +#endif + +#ifdef EFL_HAVE_WIN32_THREADS +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +#endif + +#include "eina_inlist.h" +#include "eina_error.h" +#include "eina_module.h" +#include "eina_mempool.h" +#include "eina_trash.h" +#include "eina_rbtree.h" +#include "eina_lock.h" + +#include "eina_private.h" + +#ifndef NVALGRIND +# include +#endif + +#ifdef DEBUG +#include +#include "eina_log.h" + +static int _eina_chained_mp_log_dom = -1; + +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_eina_chained_mp_log_dom, __VA_ARGS__) +#endif + +typedef struct _Chained_Mempool Chained_Mempool; +struct _Chained_Mempool +{ + Eina_Inlist *first; + Eina_Rbtree *root; + const char *name; + int item_alloc; + int pool_size; + int alloc_size; + int group_size; + int usage; +#ifdef EFL_DEBUG_THREADS + pthread_t self; +#endif + Eina_Lock mutex; +}; + +typedef struct _Chained_Pool Chained_Pool; +struct _Chained_Pool +{ + EINA_INLIST; + EINA_RBTREE; + Eina_Trash *base; + int usage; + + unsigned char *last; + unsigned char *limit; +}; + +static inline Eina_Rbtree_Direction +_eina_chained_mp_pool_cmp(const Eina_Rbtree *left, const Eina_Rbtree *right, __UNUSED__ void *data) +{ + if (left < right) return EINA_RBTREE_LEFT; + return EINA_RBTREE_RIGHT; +} + +static inline int +_eina_chained_mp_pool_key_cmp(const Eina_Rbtree *node, const void *key, + __UNUSED__ int length, __UNUSED__ void *data) +{ + const Chained_Pool *r = EINA_RBTREE_CONTAINER_GET(node, const Chained_Pool); + + if (key > (void *) r->limit) return -1; + if (key < (void *) r) return 1; + return 0; +} + +static inline Chained_Pool * +_eina_chained_mp_pool_new(Chained_Mempool *pool) +{ + Chained_Pool *p; + unsigned char *ptr; + unsigned int alignof; + + eina_error_set(0); + p = malloc(pool->alloc_size); + if (!p) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + alignof = eina_mempool_alignof(sizeof(Chained_Pool)); + ptr = (unsigned char *)p + alignof; + p->usage = 0; + p->base = NULL; + + p->last = ptr; + p->limit = ptr + pool->item_alloc * pool->pool_size; + +#ifndef NVALGRIND + VALGRIND_MAKE_MEM_NOACCESS(ptr, pool->alloc_size - alignof); +#endif + + return p; +} + +static inline void +_eina_chained_mp_pool_free(Chained_Pool *p) +{ + free(p); +} + +static int +_eina_chained_mempool_usage_cmp(const Eina_Inlist *l1, const Eina_Inlist *l2) +{ + const Chained_Pool *p1; + const Chained_Pool *p2; + + p1 = EINA_INLIST_CONTAINER_GET(l1, const Chained_Pool); + p2 = EINA_INLIST_CONTAINER_GET(l2, const Chained_Pool); + + return p2->usage - p1->usage; +} + +static void * +_eina_chained_mempool_alloc_in(Chained_Mempool *pool, Chained_Pool *p) +{ + void *mem; + + if (p->last) + { + mem = p->last; + p->last += pool->item_alloc; + if (p->last >= p->limit) + p->last = NULL; + } + else + { +#ifndef NVALGRIND + VALGRIND_MAKE_MEM_DEFINED(p->base, pool->item_alloc); +#endif + // Request a free pointer + mem = eina_trash_pop(&p->base); + } + + // move to end - it just filled up + if (!p->base && !p->last) + pool->first = eina_inlist_demote(pool->first, EINA_INLIST_GET(p)); + + p->usage++; + pool->usage++; + +#ifndef NVALGRIND + VALGRIND_MEMPOOL_ALLOC(pool, mem, pool->item_alloc); +#endif + + return mem; +} + +static Eina_Bool +_eina_chained_mempool_free_in(Chained_Mempool *pool, Chained_Pool *p, void *ptr) +{ + void *pmem; + + // pool mem base + pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool)); + + // is it in pool mem? + if (ptr < pmem) + { +#ifdef DEBUG + 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); +#endif + return EINA_FALSE; + } + + // freed node points to prev free node + eina_trash_push(&p->base, ptr); + // next free node is now the one we freed + p->usage--; + pool->usage--; + if (p->usage == 0) + { + // free bucket + pool->first = eina_inlist_remove(pool->first, EINA_INLIST_GET(p)); + pool->root = eina_rbtree_inline_remove(pool->root, EINA_RBTREE_GET(p), + _eina_chained_mp_pool_cmp, NULL); + _eina_chained_mp_pool_free(p); + + return EINA_TRUE; + } + else + { + // move to front + pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p)); + } + + return EINA_FALSE; +} + +static void * +eina_chained_mempool_malloc(void *data, __UNUSED__ unsigned int size) +{ + Chained_Mempool *pool = data; + Chained_Pool *p = NULL; + void *mem; + + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + // Either we have some free space in the first one, or there is no free space. + if (pool->first) p = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool); + + // base is not NULL - has a free slot + if (p && !p->base && !p->last) + p = NULL; + +#ifdef DEBUG + if (p == NULL) + EINA_INLIST_FOREACH(pool->first, p) + assert(!p->base && !p->last); +#endif + + // we have reached the end of the list - no free pools + if (!p) + { + p = _eina_chained_mp_pool_new(pool); + if (!p) + { + eina_lock_release(&pool->mutex); + return NULL; + } + + pool->first = eina_inlist_prepend(pool->first, EINA_INLIST_GET(p)); + pool->root = eina_rbtree_inline_insert(pool->root, EINA_RBTREE_GET(p), + _eina_chained_mp_pool_cmp, NULL); + } + + mem = _eina_chained_mempool_alloc_in(pool, p); + + eina_lock_release(&pool->mutex); + + return mem; +} + +static void +eina_chained_mempool_free(void *data, void *ptr) +{ + Chained_Mempool *pool = data; + Eina_Rbtree *r; + Chained_Pool *p; + + // look 4 pool + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + // searching for the right mempool + r = eina_rbtree_inline_lookup(pool->root, ptr, 0, _eina_chained_mp_pool_key_cmp, NULL); + + // related mempool not found + if (!r) + { +#ifdef DEBUG + INF("%p is not the property of %p Chained_Mempool", ptr, pool); +#endif + goto on_error; + } + + p = EINA_RBTREE_CONTAINER_GET(r, Chained_Pool); + + _eina_chained_mempool_free_in(pool, p, ptr); + + on_error: +#ifndef NVALGRIND + if (ptr) + { + VALGRIND_MEMPOOL_FREE(pool, ptr); + } +#endif + + eina_lock_release(&pool->mutex); + return; +} + +static void +eina_chained_mempool_repack(void *data, + Eina_Mempool_Repack_Cb cb, + void *cb_data) +{ + Chained_Mempool *pool = data; + Chained_Pool *start; + Chained_Pool *tail; + + /* FIXME: Improvement - per Chained_Pool lock */ + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + pool->first = eina_inlist_sort(pool->first, + (Eina_Compare_Cb) _eina_chained_mempool_usage_cmp); + + /* + idea : remove the almost empty pool at the beginning of the list by + moving data in the last pool with empty slot + */ + tail = EINA_INLIST_CONTAINER_GET(pool->first->last, Chained_Pool); + while (tail && tail->usage == pool->pool_size) + tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev), Chained_Pool); + + while (tail) + { + unsigned char *src; + unsigned char *dst; + + start = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool); + + if (start == tail || start->usage == pool->pool_size) + break; + + for (src = start->limit - pool->group_size; + src != start->limit; + src += pool->item_alloc) + { + Eina_Bool is_free = EINA_FALSE; + Eina_Bool is_dead; + + /* Do we have something inside that piece of memory */ + if (start->last != NULL && src >= start->last) + { + is_free = EINA_TRUE; + } + else + { + Eina_Trash *over = start->base; + + while (over != NULL && (unsigned char*) over != src) + over = over->next; + + if (over == NULL) + is_free = EINA_TRUE; + } + + if (is_free) continue ; + + /* get a new memory pointer from the latest most occuped pool */ + dst = _eina_chained_mempool_alloc_in(pool, tail); + /* move data from one to another */ + memcpy(dst, src, pool->item_alloc); + /* notify caller */ + cb(dst, src, cb_data); + /* destroy old pointer */ + is_dead = _eina_chained_mempool_free_in(pool, start, src); + + /* search last tail with empty slot */ + while (tail && tail->usage == pool->pool_size) + tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev), + Chained_Pool); + /* no more free space */ + if (!tail || tail == start) break; + if (is_dead) break; + } + } + + /* FIXME: improvement - reorder pool so that the most used one get in front */ + eina_lock_release(&pool->mutex); +} + +static void * +eina_chained_mempool_realloc(__UNUSED__ void *data, + __UNUSED__ void *element, + __UNUSED__ unsigned int size) +{ + return NULL; +} + +static void * +eina_chained_mempool_init(const char *context, + __UNUSED__ const char *option, + va_list args) +{ + Chained_Mempool *mp; + int item_size; + size_t length; + + length = context ? strlen(context) + 1 : 0; + + mp = calloc(1, sizeof(Chained_Mempool) + length); + if (!mp) + return NULL; + + item_size = va_arg(args, int); + mp->pool_size = va_arg(args, int); + + if (length) + { + mp->name = (const char *)(mp + 1); + memcpy((char *)mp->name, context, length); + } + + mp->item_alloc = eina_mempool_alignof(item_size); + mp->group_size = mp->item_alloc * mp->pool_size; + mp->alloc_size = mp->group_size + eina_mempool_alignof(sizeof(Chained_Pool)); + +#ifndef NVALGRIND + VALGRIND_CREATE_MEMPOOL(mp, 0, 1); +#endif + +#ifdef EFL_DEBUG_THREADS + mp->self = pthread_self(); +#endif + + eina_lock_new(&mp->mutex); + + return mp; +} + +static void +eina_chained_mempool_shutdown(void *data) +{ + Chained_Mempool *mp; + + mp = (Chained_Mempool *)data; + + while (mp->first) + { + Chained_Pool *p = (Chained_Pool *)mp->first; + +#ifdef DEBUG + if (p->usage > 0) + INF("Bad news we are destroying not an empty mempool [%s]\n", + mp->name); + +#endif + + mp->first = eina_inlist_remove(mp->first, mp->first); + mp->root = eina_rbtree_inline_remove(mp->root, EINA_RBTREE_GET(p), + _eina_chained_mp_pool_cmp, NULL); + _eina_chained_mp_pool_free(p); + } + +#ifdef DEBUG + if (mp->root) + INF("Bad news, list of pool and rbtree are out of sync for %p !", mp); +#endif + +#ifndef NVALGRIND + VALGRIND_DESTROY_MEMPOOL(mp); +#endif + + eina_lock_free(&mp->mutex); + +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(mp->self, pthread_self())); +#endif + + free(mp); +} + +static Eina_Mempool_Backend _eina_chained_mp_backend = { + "chained_mempool", + &eina_chained_mempool_init, + &eina_chained_mempool_free, + &eina_chained_mempool_malloc, + &eina_chained_mempool_realloc, + NULL, + NULL, + &eina_chained_mempool_shutdown, + &eina_chained_mempool_repack +}; + +Eina_Bool chained_init(void) +{ +#ifdef DEBUG + _eina_chained_mp_log_dom = eina_log_domain_register("eina_mempool", + EINA_LOG_COLOR_DEFAULT); + if (_eina_chained_mp_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_mempool"); + return EINA_FALSE; + } + +#endif + return eina_mempool_register(&_eina_chained_mp_backend); +} + +void chained_shutdown(void) +{ + eina_mempool_unregister(&_eina_chained_mp_backend); +#ifdef DEBUG + eina_log_domain_unregister(_eina_chained_mp_log_dom); + _eina_chained_mp_log_dom = -1; +#endif +} + +#ifndef EINA_STATIC_BUILD_CHAINED_POOL + +EINA_MODULE_INIT(chained_init); +EINA_MODULE_SHUTDOWN(chained_shutdown); + +#endif /* ! EINA_STATIC_BUILD_CHAINED_POOL */ diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am new file mode 100644 index 0000000..4a27b3e --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am @@ -0,0 +1,30 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EMEMOA_CFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_ememoa_fixed.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in new file mode 100644 index 0000000..ec97bb1 --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in @@ -0,0 +1,644 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/ememoa_fixed +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_ememoa_fixed.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EMEMOA_CFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_ememoa_fixed.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/ememoa_fixed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/ememoa_fixed/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_fixed.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_ememoa_fixed.lo: eina_ememoa_fixed.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_fixed.Tpo $(DEPDIR)/module_la-eina_ememoa_fixed.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_fixed.c' object='module_la-eina_ememoa_fixed.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c new file mode 100644 index 0000000..0d02f80 --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c @@ -0,0 +1,176 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_inlist.h" +#include "eina_error.h" +#include "eina_module.h" +#include "eina_mempool.h" + +#include "eina_private.h" + +typedef struct _Eina_Ememoa_Fixed_Mempool Eina_Ememoa_Fixed_Mempool; +struct _Eina_Ememoa_Fixed_Mempool +{ + struct ememoa_mempool_desc_s *desc; + int pool; +}; + +static void * +eina_ememoa_fixed_malloc(void *data, __UNUSED__ unsigned int size) +{ + Eina_Ememoa_Fixed_Mempool *efm = data; + + return ememoa_mempool_fixed_pop_object(efm->pool); +} + +static void +eina_ememoa_fixed_free(void *data, void *ptr) +{ + Eina_Ememoa_Fixed_Mempool *efm = data; + + ememoa_mempool_fixed_push_object(efm->pool, ptr); +} + +static void * +eina_ememoa_fixed_realloc(__UNUSED__ void *data, + __UNUSED__ void *element, + __UNUSED__ unsigned int size) +{ + return NULL; +} + +static void +eina_ememoa_fixed_gc(void *data) +{ + Eina_Ememoa_Fixed_Mempool *efm = data; + + ememoa_mempool_fixed_garbage_collect(efm->pool); +} + +static void +eina_ememoa_fixed_statistics(void *data) +{ + Eina_Ememoa_Fixed_Mempool *efm = data; + + ememoa_mempool_fixed_display_statistic(efm->pool); + (void)efm; +} + +static void * +eina_ememoa_fixed_init(const char *context, + __UNUSED__ const char *option, + va_list args) +{ + struct ememoa_mempool_desc_s *desc = NULL; + Eina_Ememoa_Fixed_Mempool *efm = NULL; + Eina_Bool thread_protect; + int context_length; + int item_size; + int pool_size; + + if (context) + { + context_length = strlen(context) + 1; + + desc = calloc(1, sizeof (struct ememoa_mempool_desc_s) + context_length); + if (!desc) + goto on_error; + + desc->name = (char *)(desc + 1); + memcpy((char *)desc->name, context, context_length); + } + + item_size = va_arg(args, int); + pool_size = va_arg(args, int); + thread_protect = va_arg(args, int); + + efm = malloc(sizeof (Eina_Ememoa_Fixed_Mempool)); + if (!efm) + goto on_error; + + efm->desc = desc; + efm->pool = ememoa_mempool_fixed_init( + item_size, + pool_size, + thread_protect ? + EMEMOA_THREAD_PROTECTION : 0, + efm->desc); + if (efm->pool < 0) + goto on_error; + + return efm; + +on_error: + if (desc) + free(desc); + + if (efm) + free(efm); + + return NULL; +} + +static void +eina_ememoa_fixed_shutdown(void *data) +{ + Eina_Ememoa_Fixed_Mempool *efm = data; + + if (efm->desc) + free(efm->desc); + + ememoa_mempool_fixed_clean(efm->pool); + free(efm); +} + +static Eina_Mempool_Backend _eina_ememoa_mp_backend = { + .name = "ememoa_fixed", + .init = &eina_ememoa_fixed_init, + .shutdown = &eina_ememoa_fixed_shutdown, + .realloc = &eina_ememoa_fixed_realloc, + .alloc = &eina_ememoa_fixed_malloc, + .free = &eina_ememoa_fixed_free, + .garbage_collect = &eina_ememoa_fixed_gc, + .statistics = &eina_ememoa_fixed_statistics, + .repack = NULL +}; + +Eina_Bool ememoa_fixed_init(void) +{ + return eina_mempool_register(&_eina_ememoa_mp_backend); +} + +void ememoa_fixed_shutdown(void) +{ + eina_mempool_unregister(&_eina_ememoa_mp_backend); +} + + +#ifndef EINA_STATIC_BUILD_EMEMOA_FIXED + +EINA_MODULE_INIT(ememoa_fixed_init); +EINA_MODULE_SHUTDOWN(ememoa_fixed_shutdown); + +#endif /* ! EINA_STATIC_BUILD_EMEMOA_FIXED */ diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am new file mode 100644 index 0000000..2814e31 --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am @@ -0,0 +1,30 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EMEMOA_CFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_ememoa_unknown.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in new file mode 100644 index 0000000..b295c64 --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in @@ -0,0 +1,644 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/ememoa_unknown +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_ememoa_unknown.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EMEMOA_CFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_ememoa_unknown.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/ememoa_unknown/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/ememoa_unknown/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_unknown.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_ememoa_unknown.lo: eina_ememoa_unknown.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_unknown.Tpo $(DEPDIR)/module_la-eina_ememoa_unknown.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_unknown.c' object='module_la-eina_ememoa_unknown.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c b/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c new file mode 100644 index 0000000..56b99f6 --- /dev/null +++ b/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c @@ -0,0 +1,182 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_types.h" +#include "eina_module.h" +#include "eina_private.h" +#include "eina_mempool.h" + +typedef struct _Eina_Ememoa_Unknown_Size_Mempool +Eina_Ememoa_Unknown_Size_Mempool; +struct _Eina_Ememoa_Unknown_Size_Mempool +{ + struct ememoa_mempool_desc_s *desc; + int pool; +}; + +static void * +eina_ememoa_unknown_size_malloc(void *data, unsigned int size) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + return ememoa_mempool_unknown_size_pop_object(efm->pool, size); +} + +static void +eina_ememoa_unknown_size_free(void *data, void *ptr) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + ememoa_mempool_unknown_size_push_object(efm->pool, ptr); +} + +static void * +eina_ememoa_unknown_size_realloc(void *data, void *element, unsigned int size) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + return ememoa_mempool_unknown_size_resize_object(efm->pool, element, size); +} + +static void +eina_ememoa_unknown_size_gc(void *data) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + ememoa_mempool_unknown_size_garbage_collect(efm->pool); +} + +static void +eina_ememoa_unknown_size_statistics(void *data) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + ememoa_mempool_unknown_size_display_statistic(efm->pool); +} + +static void * +eina_ememoa_unknown_size_init(const char *context, + __UNUSED__ const char *option, + va_list args) +{ + struct ememoa_mempool_desc_s *desc = NULL; + Eina_Ememoa_Unknown_Size_Mempool *efm = NULL; + Eina_Bool thread_protect; + unsigned int *items_map = NULL; + unsigned int items_count; + unsigned int i; + int context_length; + + if (context) + { + context_length = strlen(context) + 1; + + desc = calloc(1, sizeof (struct ememoa_mempool_desc_s) + context_length); + if (!desc) + goto on_error; + + desc->name = (char *)(desc + 1); + memcpy((char *)desc->name, context, context_length); + } + + thread_protect = va_arg(args, int); + items_count = va_arg(args, unsigned int); + + items_map = malloc(sizeof (unsigned int) * 2 * items_count); + + for (i = 0; i < (items_count << 1); ++i) + items_map[i] = va_arg(args, unsigned int); + + efm = malloc(sizeof (Eina_Ememoa_Unknown_Size_Mempool)); + if (!efm) + goto on_error; + + efm->desc = desc; + efm->pool = ememoa_mempool_unknown_size_init( + items_count, + items_map, + thread_protect ? + EMEMOA_THREAD_PROTECTION : 0, + efm->desc); + if (efm->pool < 0) + goto on_error; + + return efm; + +on_error: + if (items_map) + free(items_map); + + if (desc) + free(desc); + + if (efm) + free(efm); + + return NULL; +} + +static void +eina_ememoa_unknown_size_shutdown(void *data) +{ + Eina_Ememoa_Unknown_Size_Mempool *efm = data; + + if (efm->desc) + free(efm->desc); + + ememoa_mempool_unknown_size_clean(efm->pool); + free(efm); +} + +static Eina_Mempool_Backend _eina_ememoa_unknown_mp_backend = { + .name = "ememoa_unknown", + .init = &eina_ememoa_unknown_size_init, + .shutdown = &eina_ememoa_unknown_size_shutdown, + .realloc = &eina_ememoa_unknown_size_realloc, + .alloc = &eina_ememoa_unknown_size_malloc, + .free = &eina_ememoa_unknown_size_free, + .garbage_collect = &eina_ememoa_unknown_size_gc, + .statistics = &eina_ememoa_unknown_size_statistics, + .repack = NULL +}; + +Eina_Bool ememoa_unknown_init(void) +{ + return eina_mempool_register(&_eina_ememoa_unknown_mp_backend); +} + +void ememoa_unknown_shutdown(void) +{ + eina_mempool_unregister(&_eina_ememoa_unknown_mp_backend); +} + +#ifndef EINA_STATIC_BUILD_EMEMOA_UNKNOWN + +EINA_MODULE_INIT(ememoa_unknown_init); +EINA_MODULE_SHUTDOWN(ememoa_unknown_shutdown); + +#endif /* ! EINA_STATIC_BUILD_EMEMOA_UNKNOWN */ diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am new file mode 100644 index 0000000..caf239e --- /dev/null +++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am @@ -0,0 +1,29 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_fixed_bitmap.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in new file mode 100644 index 0000000..c1541fc --- /dev/null +++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in @@ -0,0 +1,643 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/fixed_bitmap +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_fixed_bitmap.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_fixed_bitmap.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_fixed_bitmap.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_fixed_bitmap.lo: eina_fixed_bitmap.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_fixed_bitmap.Tpo $(DEPDIR)/module_la-eina_fixed_bitmap.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fixed_bitmap.c' object='module_la-eina_fixed_bitmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c b/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c new file mode 100644 index 0000000..e053e15 --- /dev/null +++ b/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c @@ -0,0 +1,270 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifndef _MSC_VER +# include +#endif +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_inlist.h" +#include "eina_rbtree.h" +#include "eina_error.h" + +#include "eina_mempool.h" + +#include "eina_private.h" + +typedef struct _Eina_Fixed_Bitmap Eina_Fixed_Bitmap; +typedef struct _Eina_Fixed_Bitmap_Pool Eina_Fixed_Bitmap_Pool; + +struct _Eina_Fixed_Bitmap +{ + Eina_Rbtree *lookup; + Eina_Inlist *head; + + int item_size; +}; + +struct _Eina_Fixed_Bitmap_Pool +{ + EINA_RBTREE; + EINA_INLIST; + + uint32_t bitmask; +}; + +static inline size_t +_eina_rbtree_inlist_delta(void) +{ + Eina_Fixed_Bitmap_Pool tmp; + void *a = &tmp.__rbtree; + void *b = &tmp.__in_list; + + return (char *)a - (char *)b; +} + +static Eina_Rbtree_Direction +_eina_fixed_cmp(const Eina_Rbtree *left, + const Eina_Rbtree *right, + __UNUSED__ void *data) +{ + if (left - right < 0) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static int +_eina_fixed_cmp_key(const Eina_Rbtree *node, + const void *key, + __UNUSED__ int length, + Eina_Fixed_Bitmap *mp) +{ + const void *a = node; + const void *b = key; + ssize_t delta; + ssize_t limit; + + limit = sizeof (Eina_Fixed_Bitmap_Pool) + mp->item_size * 32; + delta = (char *)a - (char *)b; + + if (delta > 0) + return 1; + + if (delta + limit < 0) + return -1; + + return 0; +} + +static void +_eina_fixed_bitmap_pool_free(Eina_Fixed_Bitmap_Pool *pool, + __UNUSED__ void *data) +{ + free(pool); +} + +static void * +eina_fixed_bitmap_malloc(void *data, __UNUSED__ unsigned int size) +{ + Eina_Fixed_Bitmap *mp = data; + Eina_Fixed_Bitmap_Pool *pool = NULL; + void *ptr; + int idx; + + if (mp->head) + { + pool = + (Eina_Fixed_Bitmap_Pool *)((unsigned char *)mp->head + + _eina_rbtree_inlist_delta()); + + if (pool->bitmask == 0) + pool = NULL; + } + + if (!pool) + { + eina_error_set(0); + pool = malloc(sizeof (Eina_Fixed_Bitmap_Pool) + mp->item_size * 32); + if (!pool) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + return NULL; + } + + pool->bitmask = 0xFFFFFFFF; + + mp->head = eina_inlist_prepend(mp->head, EINA_INLIST_GET(pool)); + mp->lookup = eina_rbtree_inline_insert(mp->lookup, EINA_RBTREE_GET( + pool), + EINA_RBTREE_CMP_NODE_CB( + _eina_fixed_cmp), NULL); + } + + idx = ffs(pool->bitmask) - 1; + pool->bitmask &= ~(1 << idx); + ptr = (unsigned char *)(pool + 1) + idx * mp->item_size; + + if (pool->bitmask == 0) + mp->head = eina_inlist_demote(mp->head, EINA_INLIST_GET(pool)); + + return ptr; +} + +static void +eina_fixed_bitmap_free(void *data, void *ptr) +{ + Eina_Fixed_Bitmap *mp = data; + Eina_Fixed_Bitmap_Pool *pool; + void *a; + Eina_Bool push_front = EINA_FALSE; + ssize_t delta; + + pool = (Eina_Fixed_Bitmap_Pool *)eina_rbtree_inline_lookup( + mp->lookup, + ptr, + 0, + EINA_RBTREE_CMP_KEY_CB( + _eina_fixed_cmp_key), + mp); + if (!pool) + return; + + if (pool->bitmask != 0xFFFFFFFF) + push_front = EINA_TRUE; + + a = pool; + delta = + ((char *)ptr - (char *)a - + sizeof (Eina_Fixed_Bitmap_Pool)) / mp->item_size; + + assert(delta >= 0 && delta < 32); + + pool->bitmask |= (1 << (delta & 0x1F)); + + if (pool->bitmask == 0xFFFFFFFF) + { + mp->head = eina_inlist_remove(mp->head, EINA_INLIST_GET(pool)); + mp->lookup = eina_rbtree_inline_remove(mp->lookup, EINA_RBTREE_GET( + pool), + EINA_RBTREE_CMP_NODE_CB( + _eina_fixed_cmp), NULL); + free(pool); + } + else if (push_front) + mp->head = eina_inlist_promote(mp->head, EINA_INLIST_GET(pool)); +} + +static void * +eina_fixed_bitmap_realloc(__UNUSED__ void *data, + __UNUSED__ void *element, + __UNUSED__ unsigned int size) +{ + return NULL; +} + +static void * +eina_fixed_bitmap_init(__UNUSED__ const char *context, + __UNUSED__ const char *option, + va_list args) +{ + Eina_Fixed_Bitmap *mp; + int item_size; + + mp = malloc(sizeof (Eina_Fixed_Bitmap)); + if (!mp) + return NULL; + + item_size = va_arg(args, int); + + mp->item_size = eina_mempool_alignof(item_size); + + mp->lookup = NULL; + mp->head = NULL; + + return mp; +} + +static void +eina_fixed_bitmap_shutdown(void *data) +{ + Eina_Fixed_Bitmap *mp = data; + + eina_rbtree_delete(mp->lookup, + EINA_RBTREE_FREE_CB(_eina_fixed_bitmap_pool_free), NULL); + free(mp); +} + +static Eina_Mempool_Backend _eina_fixed_bitmap_mp_backend = { + "fixed_bitmap", + &eina_fixed_bitmap_init, + &eina_fixed_bitmap_free, + &eina_fixed_bitmap_malloc, + &eina_fixed_bitmap_realloc, + NULL, + NULL, + &eina_fixed_bitmap_shutdown, + NULL +}; + +Eina_Bool fixed_bitmap_init(void) +{ + return eina_mempool_register(&_eina_fixed_bitmap_mp_backend); +} + +void fixed_bitmap_shutdown(void) +{ + eina_mempool_unregister(&_eina_fixed_bitmap_mp_backend); +} + +#ifndef EINA_STATIC_BUILD_FIXED_BITMAP + +EINA_MODULE_INIT(fixed_bitmap_init); +EINA_MODULE_SHUTDOWN(fixed_bitmap_shutdown); + +#endif /* ! EINA_STATIC_BUILD_FIXED_BITMAP */ + diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.am b/libraries/eina/src/modules/mp/one_big/Makefile.am new file mode 100644 index 0000000..8ca1a62 --- /dev/null +++ b/libraries/eina/src/modules/mp/one_big/Makefile.am @@ -0,0 +1,30 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ \ +@VALGRIND_CFLAGS@ + +controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_one_big.c + +module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@ +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.in b/libraries/eina/src/modules/mp/one_big/Makefile.in new file mode 100644 index 0000000..e999b78 --- /dev/null +++ b/libraries/eina/src/modules/mp/one_big/Makefile.in @@ -0,0 +1,644 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/one_big +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_one_big.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ \ +@VALGRIND_CFLAGS@ + +controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_one_big.c + +module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@ +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/one_big/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/one_big/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_one_big.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_one_big.lo: eina_one_big.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_one_big.Tpo $(DEPDIR)/module_la-eina_one_big.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_one_big.c' object='module_la-eina_one_big.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/one_big/eina_one_big.c b/libraries/eina/src/modules/mp/one_big/eina_one_big.c new file mode 100644 index 0000000..dadec65 --- /dev/null +++ b/libraries/eina/src/modules/mp/one_big/eina_one_big.c @@ -0,0 +1,336 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric BAIL, Vincent Torri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef EFL_HAVE_POSIX_THREADS +# include +#endif + +#include + +#ifdef EFL_HAVE_WIN32_THREADS +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +#endif + +#include "eina_mempool.h" +#include "eina_trash.h" +#include "eina_inlist.h" +#include "eina_log.h" +#include "eina_lock.h" + +#ifndef NVALGRIND +# include +#endif + +#include "eina_private.h" + +#ifdef INF +#undef INF +#endif +#define INF(...) EINA_LOG_DOM_INFO(_eina_mempool_log_dom, __VA_ARGS__) + +#ifdef WRN +#undef WRN +#endif +#define WRN(...) EINA_LOG_DOM_WARN(_eina_one_big_mp_log_dom, __VA_ARGS__) + +static int _eina_one_big_mp_log_dom = -1; + +typedef struct _One_Big One_Big; +struct _One_Big +{ + const char *name; + + int item_size; + + int usage; + int over; + + int served; + int max; + unsigned char *base; + + Eina_Trash *empty; + Eina_Inlist *over_list; + +#ifdef EFL_DEBUG_THREADS + pthread_t self; +#endif + Eina_Lock mutex; +}; + +static void * +eina_one_big_malloc(void *data, __UNUSED__ unsigned int size) +{ + One_Big *pool = data; + unsigned char *mem = NULL; + + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + if (pool->empty) + { +#ifndef NVALGRIND + VALGRIND_MAKE_MEM_DEFINED(pool->empty, pool->item_size); +#endif + mem = eina_trash_pop(&pool->empty); + pool->usage++; + goto on_exit; + } + + if (!pool->base) + { + pool->base = malloc(pool->item_size * pool->max); + if (!pool->base) + { + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + goto retry_smaller; + } +#ifndef NVALGRIND + VALGRIND_MAKE_MEM_NOACCESS(pool->base, pool->item_size * pool->max); +#endif + } + + if (pool->served < pool->max) + { + mem = pool->base + (pool->served++ *pool->item_size); + pool->usage++; + goto on_exit; + } + + retry_smaller: + eina_error_set(0); + mem = malloc(sizeof(Eina_Inlist) + pool->item_size); + if (!mem) + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + else + { + pool->over++; + memset(mem, 0, sizeof(Eina_Inlist)); + pool->over_list = eina_inlist_append(pool->over_list, + (Eina_Inlist *)mem); + mem = ((unsigned char *)mem) + sizeof(Eina_Inlist); + } +#ifndef NVALGRIND + VALGRIND_MAKE_MEM_NOACCESS(mem, pool->item_size); +#endif + +on_exit: + eina_lock_release(&pool->mutex); + +#ifndef NVALGRIND + VALGRIND_MEMPOOL_ALLOC(pool, mem, pool->item_size); +#endif + return mem; +} + +static void +eina_one_big_free(void *data, void *ptr) +{ + One_Big *pool = data; + + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + if ((void *)pool->base <= ptr + && ptr < (void *)(pool->base + (pool->max * pool->item_size))) + { + eina_trash_push(&pool->empty, ptr); + pool->usage--; + } + else + { +#ifndef NDEBUG + Eina_Inlist *it; +#endif + Eina_Inlist *il; + + il = (Eina_Inlist *)(((unsigned char *)ptr) - sizeof(Eina_Inlist)); + +#ifndef NDEBUG + for (it = pool->over_list; it != NULL; it = it->next) + if (it == il) break; + + assert(it != NULL); +#endif + + pool->over_list = eina_inlist_remove(pool->over_list, il); + free(il); + pool->over--; + } + +#ifndef NVALGRIND + VALGRIND_MEMPOOL_FREE(pool, ptr); +#endif + + eina_lock_release(&pool->mutex); +} + +static void * +eina_one_big_realloc(__UNUSED__ void *data, + __UNUSED__ void *element, + __UNUSED__ unsigned int size) +{ + return NULL; +} + +static void * +eina_one_big_init(const char *context, + __UNUSED__ const char *option, + va_list args) +{ + One_Big *pool; + int item_size; + size_t length; + + length = context ? strlen(context) + 1 : 0; + + pool = calloc(1, sizeof (One_Big) + length); + if (!pool) + return NULL; + + item_size = va_arg(args, int); + + pool->item_size = eina_mempool_alignof(item_size); + pool->max = va_arg(args, int); + + if (length) + { + pool->name = (const char *)(pool + 1); + memcpy((char *)pool->name, context, length); + } + +#ifdef EFL_DEBUG_THREADS + pool->self = pthread_self(); +#endif + eina_lock_new(&pool->mutex); + +#ifndef NVALGRIND + VALGRIND_CREATE_MEMPOOL(pool, 0, 1); +#endif + + return pool; +} + +static void +eina_one_big_shutdown(void *data) +{ + One_Big *pool = data; + + if (!pool) return; + if (!eina_lock_take(&pool->mutex)) + { +#ifdef EFL_DEBUG_THREADS + assert(pthread_equal(pool->self, pthread_self())); +#endif + } + + if (pool->over > 0) + { +// FIXME: should we warn here? one_big mempool exceeded its alloc and now +// mempool is cleaning up the mess created. be quiet for now as we were before +// but edje seems to be a big offender at the moment! bad cedric! :) +// WRN( +// "Pool [%s] over by %i. cleaning up for you", +// pool->name, pool->over); + while (pool->over_list) + { + Eina_Inlist *il = pool->over_list; + pool->over_list = eina_inlist_remove(pool->over_list, il); + free(il); + pool->over--; + } + } + if (pool->over > 0) + { + WRN( + "Pool [%s] still over by %i\n", + pool->name, pool->over); + } + +#ifndef NVALGRIND + VALGRIND_DESTROY_MEMPOOL(pool); +#endif + + if (pool->base) free(pool->base); + + eina_lock_release(&pool->mutex); + eina_lock_free(&pool->mutex); + free(pool); +} + + +static Eina_Mempool_Backend _eina_one_big_mp_backend = { + "one_big", + &eina_one_big_init, + &eina_one_big_free, + &eina_one_big_malloc, + &eina_one_big_realloc, + NULL, + NULL, + &eina_one_big_shutdown, + NULL +}; + +Eina_Bool one_big_init(void) +{ +#ifdef DEBUG + _eina_one_big_mp_log_dom = eina_log_domain_register("eina_one_big_mempool", + EINA_LOG_COLOR_DEFAULT); + if (_eina_one_big_mp_log_dom < 0) + { + EINA_LOG_ERR("Could not register log domain: eina_one_big_mempool"); + return EINA_FALSE; + } + +#endif + return eina_mempool_register(&_eina_one_big_mp_backend); +} + +void one_big_shutdown(void) +{ + eina_mempool_unregister(&_eina_one_big_mp_backend); +#ifdef DEBUG + eina_log_domain_unregister(_eina_one_big_mp_log_dom); + _eina_one_big_mp_log_dom = -1; +#endif +} + +#ifndef EINA_STATIC_BUILD_ONE_BIG + +EINA_MODULE_INIT(one_big_init); +EINA_MODULE_SHUTDOWN(one_big_shutdown); + +#endif /* ! EINA_STATIC_BUILD_ONE_BIG */ + diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.am b/libraries/eina/src/modules/mp/pass_through/Makefile.am new file mode 100644 index 0000000..8f48974 --- /dev/null +++ b/libraries/eina/src/modules/mp/pass_through/Makefile.am @@ -0,0 +1,29 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la + +module_la_SOURCES = \ +eina_pass_through.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.in b/libraries/eina/src/modules/mp/pass_through/Makefile.in new file mode 100644 index 0000000..01e7b51 --- /dev/null +++ b/libraries/eina/src/modules/mp/pass_through/Makefile.in @@ -0,0 +1,643 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/modules/mp/pass_through +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(controllerdir)" +LTLIBRARIES = $(controller_LTLIBRARIES) +module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +am_module_la_OBJECTS = module_la-eina_pass_through.lo +module_la_OBJECTS = $(am_module_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(module_la_SOURCES) +DIST_SOURCES = $(module_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I. \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_srcdir)/src/lib \ +-I$(top_builddir)/src/lib \ +@EINA_CPPFLAGS@ \ +@EFL_EINA_BUILD@ + +controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH) +controller_LTLIBRARIES = module.la +module_la_SOURCES = \ +eina_pass_through.c + +module_la_CFLAGS = @EINA_CFLAGS@ +module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-controllerLTLIBRARIES: $(controller_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)" + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \ + } + +uninstall-controllerLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \ + done + +clean-controllerLTLIBRARIES: + -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES) + @list='$(controller_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_pass_through.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_la-eina_pass_through.lo: eina_pass_through.c +@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 +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_pass_through.Tpo $(DEPDIR)/module_la-eina_pass_through.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_pass_through.c' object='module_la-eina_pass_through.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(controllerdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-controllerLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-controllerLTLIBRARIES clean-generic clean-libtool \ + clean-local ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-controllerLTLIBRARIES install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \ + uninstall-hook + + +install-data-hook: + rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES) +uninstall-hook: + rm -f $(DESTDIR)$(controllerdir)/module.* + +clean-local: + rm -rf *.gcno + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c b/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c new file mode 100644 index 0000000..196868e --- /dev/null +++ b/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c @@ -0,0 +1,90 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_types.h" +#include "eina_module.h" +#include "eina_mempool.h" +#include "eina_private.h" + +static void * +eina_pass_through_malloc(__UNUSED__ void *data, unsigned int size) +{ + return malloc(size); +} + +static void +eina_pass_through_free(__UNUSED__ void *data, void *ptr) +{ + free(ptr); +} + +static void * +eina_pass_through_realloc(__UNUSED__ void *data, void *ptr, unsigned int size) +{ + return realloc(ptr, size); +} + +static void * +eina_pass_through_init(__UNUSED__ const char *context, + __UNUSED__ const char *option, + __UNUSED__ va_list args) +{ + return (void *)0x1; +} + +static void +eina_pass_through_shutdown(__UNUSED__ void *data) +{ +} + + +static Eina_Mempool_Backend _eina_pass_through_mp_backend = { + "pass_through", + &eina_pass_through_init, + &eina_pass_through_free, + &eina_pass_through_malloc, + &eina_pass_through_realloc, + NULL, + NULL, + &eina_pass_through_shutdown, + NULL +}; + +Eina_Bool pass_through_init(void) +{ + return eina_mempool_register(&_eina_pass_through_mp_backend); +} + +void pass_through_shutdown(void) +{ + eina_mempool_unregister(&_eina_pass_through_mp_backend); +} + +#ifndef EINA_STATIC_BUILD_PASS_THROUGH + +EINA_MODULE_INIT(pass_through_init); +EINA_MODULE_SHUTDOWN(pass_through_shutdown); + +#endif /* ! EINA_STATIC_BUILD_PASS_THROUGH */ + diff --git a/libraries/eina/src/tests/Ecore_Data.h b/libraries/eina/src/tests/Ecore_Data.h new file mode 100644 index 0000000..50d42f1 --- /dev/null +++ b/libraries/eina/src/tests/Ecore_Data.h @@ -0,0 +1,557 @@ +#ifndef _ECORE_DATA_H +# define _ECORE_DATA_H + +#include +/* we need this for size_t */ +#include + +#ifdef EAPI +# undef EAPI +#endif + +#ifdef _WIN32 +# ifdef EFL_ECORE_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif /* ! DLL_EXPORT */ +# else +# define EAPI __declspec(dllimport) +# endif /* ! EFL_ECORE_BUILD */ +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif /* ! _WIN32 */ + +/** + * @file Ecore_Data.h + * @brief Contains threading, list, hash, debugging and tree functions. + */ + +# ifdef __cplusplus +extern "C" { +# endif + + +#ifndef TRUE +# define TRUE 1 +#endif + +#ifndef FALSE +# define FALSE 0 +#endif + +#ifdef FREE +# undef FREE +#endif +#define FREE(ptr) free(ptr); ptr = NULL; + +#ifdef IF_FREE +# undef IF_FREE +#endif +#define IF_FREE(ptr) if (ptr) {free(ptr); } ptr = NULL; + +/* convenience macros for checking pointer parameters for non-NULL */ +#undef CHECK_PARAM_POINTER_RETURN +#define CHECK_PARAM_POINTER_RETURN(sparam, param, ret) \ + if (!(param)) \ + { \ + printf("***** Developer Warning ***** :\n" \ + "\tThis program is calling:\n\n" \ + "\t%s();\n\n" \ + "\tWith the parameter:\n\n" \ + "\t%s\n\n" \ + "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \ + if (getenv("ECORE_ERROR_ABORT")) { abort(); } \ + return ret; \ + } + +#undef CHECK_PARAM_POINTER +#define CHECK_PARAM_POINTER(sparam, param) \ + if (!(param)) \ + { \ + printf("***** Developer Warning ***** :\n" \ + "\tThis program is calling:\n\n" \ + "\t%s();\n\n" \ + "\tWith the parameter:\n\n" \ + "\t%s\n\n" \ + "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \ + if (getenv("ECORE_ERROR_ABORT")) { abort(); } \ + return; \ + } + + +# ifdef __sgi +# define __FUNCTION__ "unknown" +# ifndef __cplusplus +# define inline +# endif +# endif + +# define ECORE_SORT_MIN 0 +# define ECORE_SORT_MAX 1 + +typedef void (*Ecore_For_Each)(void *value, void *user_data); +# define ECORE_FOR_EACH(function) ((Ecore_For_Each)function) + +typedef void (*Ecore_Free_Cb)(void *data); +# define ECORE_FREE_CB(func) ((Ecore_Free_Cb)func) + +typedef unsigned int (*Ecore_Hash_Cb)(const void *key); +# define ECORE_HASH_CB(function) ((Ecore_Hash_Cb)function) + +typedef int (*Ecore_Compare_Cb)(const void *data1, const void *data2); +# define ECORE_COMPARE_CB(function) ((Ecore_Compare_Cb)function) + +typedef struct _ecore_list Ecore_List; +# define ECORE_LIST(list) ((Ecore_List *)list) + +typedef struct _ecore_list_node Ecore_List_Node; +# define ECORE_LIST_NODE(node) ((Ecore_List_Node *)node) + +typedef struct _ecore_strbuf Ecore_Strbuf; +# define ECORE_STRBUF(buf) ((Ecore_Strbuf *)buf) + +struct _ecore_list_node +{ + void *data; + struct _ecore_list_node *next; +}; + +struct _ecore_list +{ + Ecore_List_Node *first; /* The first node in the list */ + Ecore_List_Node *last; /* The last node in the list */ + Ecore_List_Node *current; /* The current node in the list */ + + Ecore_Free_Cb free_func; /* The callback to free data in nodes */ + + int nodes; /* The number of nodes in the list */ + int index; /* The position from the front of the + list of current node */ +}; + +EAPI int ecore_direct_compare(const void *key1, const void *key2); +EAPI int ecore_str_compare(const void *key1, const void *key2); + +EAPI unsigned int ecore_direct_hash(const void *key); +EAPI unsigned int ecore_str_hash(const void *key); + +/* Creating and initializing new list structures */ +EAPI Ecore_List * ecore_list_new(void); +EAPI int ecore_list_init(Ecore_List *list); + +/* Adding items to the list */ +EAPI int ecore_list_append(Ecore_List *list, void *_data); +EAPI int ecore_list_prepend(Ecore_List *list, void *_data); +EAPI int ecore_list_insert(Ecore_List *list, void *_data); +EAPI int ecore_list_append_list(Ecore_List *list, + Ecore_List *append); +EAPI int ecore_list_prepend_list(Ecore_List *list, + Ecore_List *prepend); + +/* Removing items from the list */ +EAPI int ecore_list_remove_destroy(Ecore_List *list); +EAPI void * ecore_list_remove(Ecore_List *list); +EAPI void * ecore_list_first_remove(Ecore_List *list); +EAPI void * ecore_list_last_remove(Ecore_List *list); + +/* Retrieve the current position in the list */ +EAPI void * ecore_list_current(Ecore_List *list); +EAPI void * ecore_list_first(Ecore_List *list); +EAPI void * ecore_list_last(Ecore_List *list); +EAPI int ecore_list_index(Ecore_List *list); +EAPI int ecore_list_count(Ecore_List *list); + +/* Traversing the list */ +EAPI int ecore_list_for_each(Ecore_List *list, + Ecore_For_Each function, + void *user_data); +EAPI void * ecore_list_first_goto(Ecore_List *list); +EAPI void * ecore_list_last_goto(Ecore_List *list); +EAPI void * ecore_list_index_goto(Ecore_List *list, int index); +EAPI void * ecore_list_goto(Ecore_List *list, const void *_data); + +/* Traversing the list and returning data */ +EAPI void * ecore_list_next(Ecore_List *list); +EAPI void * ecore_list_find(Ecore_List *list, + Ecore_Compare_Cb function, + const void *user_data); + +/* Sorting the list */ +EAPI int ecore_list_sort(Ecore_List *list, + Ecore_Compare_Cb compare, + char order); +EAPI int ecore_list_mergesort(Ecore_List *list, + Ecore_Compare_Cb compare, + char order); +EAPI int ecore_list_heapsort(Ecore_List *list, + Ecore_Compare_Cb compare, + char order); +EAPI void ecore_list_merge(Ecore_List *list, Ecore_List *l2, + Ecore_Compare_Cb, char order); + +/* Check to see if there is any data in the list */ +EAPI int ecore_list_empty_is(Ecore_List *list); + +/* Remove every node in the list without freeing the list itself */ +EAPI int ecore_list_clear(Ecore_List *list); +/* Free the list and it's contents */ +EAPI void ecore_list_destroy(Ecore_List *list); + +/* Creating and initializing list nodes */ +EAPI Ecore_List_Node *ecore_list_node_new(void); +EAPI int ecore_list_node_init(Ecore_List_Node *newNode); + +/* Destroying nodes */ +EAPI int ecore_list_node_destroy(Ecore_List_Node *_e_node, + Ecore_Free_Cb free_func); + +EAPI int ecore_list_free_cb_set(Ecore_List *list, + Ecore_Free_Cb free_func); + +typedef Ecore_List Ecore_DList; +# define ECORE_DLIST(dlist) ((Ecore_DList *)dlist) + +typedef struct _ecore_dlist_node Ecore_DList_Node; +# define ECORE_DLIST_NODE(dlist) ((Ecore_DList_Node *)dlist) + +struct _ecore_dlist_node +{ + Ecore_List_Node single; + Ecore_DList_Node *previous; +}; + +/* Creating and initializing new list structures */ +EAPI Ecore_DList *ecore_dlist_new(void); +EAPI int ecore_dlist_init(Ecore_DList *list); +EAPI void ecore_dlist_destroy(Ecore_DList *list); + +/* Adding items to the list */ +EAPI int ecore_dlist_append(Ecore_DList *_e_dlist, void *_data); +EAPI int ecore_dlist_prepend(Ecore_DList *_e_dlist, void *_data); +EAPI int ecore_dlist_insert(Ecore_DList *_e_dlist, void *_data); +EAPI int ecore_dlist_append_list(Ecore_DList *_e_dlist, + Ecore_DList *append); +EAPI int ecore_dlist_prepend_list(Ecore_DList *_e_dlist, + Ecore_DList *prepend); + +/* Info about list's state */ +# define ecore_dlist_first(list) ecore_list_first(list) +# define ecore_dlist_last(list) ecore_list_last(list) +EAPI void * ecore_dlist_current(Ecore_DList *list); +EAPI int ecore_dlist_index(Ecore_DList *list); +# define ecore_dlist_count(list) ecore_list_count(list) + +/* Removing items from the list */ +EAPI void * ecore_dlist_remove(Ecore_DList *_e_dlist); +EAPI void * ecore_dlist_first_remove(Ecore_DList *_e_dlist); +EAPI int ecore_dlist_remove_destroy(Ecore_DList *list); +EAPI void * ecore_dlist_last_remove(Ecore_DList *_e_dlist); + +/* Traversing the list */ +# define ecore_dlist_for_each(list, function, user_data) \ + ecore_list_for_each(list, function, user_data) +EAPI void * ecore_dlist_first_goto(Ecore_DList *_e_dlist); +EAPI void * ecore_dlist_last_goto(Ecore_DList *_e_dlist); +EAPI void * ecore_dlist_index_goto(Ecore_DList *_e_dlist, int index); +EAPI void * ecore_dlist_goto(Ecore_DList *_e_dlist, void *_data); + +/* Traversing the list and returning data */ +EAPI void * ecore_dlist_next(Ecore_DList *list); +EAPI void * ecore_dlist_previous(Ecore_DList *list); + +/* Sorting the list */ +EAPI int ecore_dlist_sort(Ecore_DList *list, + Ecore_Compare_Cb compare, + char order); +EAPI int ecore_dlist_mergesort(Ecore_DList *list, + Ecore_Compare_Cb compare, + char order); +# define ecore_dlist_heapsort(list, compare, order) \ + ecore_list_heapsort(list, compare, order) +EAPI void ecore_dlist_merge(Ecore_DList *list, Ecore_DList *l2, + Ecore_Compare_Cb, char order); + +/* Check to see if there is any data in the list */ +EAPI int ecore_dlist_empty_is(Ecore_DList *_e_dlist); + +/* Remove every node in the list without free'ing it */ +EAPI int ecore_dlist_clear(Ecore_DList *_e_dlist); + +/* Creating and initializing list nodes */ +EAPI int ecore_dlist_node_init(Ecore_DList_Node *node); +EAPI Ecore_DList_Node *ecore_dlist_node_new(void); + +/* Destroying nodes */ +EAPI int ecore_dlist_node_destroy(Ecore_DList_Node *node, + Ecore_Free_Cb free_func); + +EAPI int ecore_dlist_free_cb_set(Ecore_DList *dlist, + Ecore_Free_Cb free_func); + + + +/* + * Hash Table Implementation: + * + * Traditional hash table implementation. I had tried a list of tables + * approach to save on the realloc's but it ended up being much slower than + * the traditional approach. + */ + +typedef struct _ecore_hash_node Ecore_Hash_Node; +# define ECORE_HASH_NODE(hash) ((Ecore_Hash_Node *)hash) + +struct _ecore_hash_node +{ + Ecore_Hash_Node *next; /* Pointer to the next node in the bucket list */ + void *key; /* The key for the data node */ + void *value; /* The value associated with this node */ +}; + +typedef struct _ecore_hash Ecore_Hash; +# define ECORE_HASH(hash) ((Ecore_Hash *)hash) + +struct _ecore_hash +{ + Ecore_Hash_Node **buckets; + int size; /* An index into the table of primes to + determine size */ + int nodes; /* The number of nodes currently in the hash */ + + int index; /* The current index into the bucket table */ + + Ecore_Compare_Cb compare; /* The function used to compare node values */ + Ecore_Hash_Cb hash_func; /* The callback function to determine hash */ + + Ecore_Free_Cb free_key; /* The callback function to free key */ + Ecore_Free_Cb free_value; /* The callback function to free value */ +}; + +/* Create and initialize a hash */ +EAPI Ecore_Hash *ecore_hash_new(Ecore_Hash_Cb hash_func, + Ecore_Compare_Cb compare); +EAPI int ecore_hash_init(Ecore_Hash *hash, + Ecore_Hash_Cb hash_func, + Ecore_Compare_Cb compare); + +/* Functions related to freeing the data in the hash table */ +EAPI int ecore_hash_free_key_cb_set(Ecore_Hash *hash, + Ecore_Free_Cb function); +EAPI int ecore_hash_free_value_cb_set(Ecore_Hash *hash, + Ecore_Free_Cb function); +EAPI void ecore_hash_destroy(Ecore_Hash *hash); + +EAPI int ecore_hash_count(Ecore_Hash *hash); +EAPI int ecore_hash_for_each_node(Ecore_Hash *hash, + Ecore_For_Each for_each_func, + void *user_data); +EAPI Ecore_List *ecore_hash_keys(Ecore_Hash *hash); + +/* Retrieve and store data into the hash */ +EAPI void * ecore_hash_get(Ecore_Hash *hash, const void *key); +EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value); +EAPI int ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set); +EAPI void * ecore_hash_remove(Ecore_Hash *hash, const void *key); +EAPI void * ecore_hash_find(Ecore_Hash *hash, + Ecore_Compare_Cb compare, + const void *value); +EAPI void ecore_hash_dump_graph(Ecore_Hash *hash); +EAPI void ecore_hash_dump_stats(Ecore_Hash *hash); + + +typedef struct _ecore_heap Ecore_Sheap; +# define ECORE_HEAP(heap) ((Ecore_Sheap *)heap) + +struct _ecore_heap +{ + void **data; + int size; + int space; + + char order, sorted; + + /* Callback for comparing node values, default is direct comparison */ + Ecore_Compare_Cb compare; + + /* Callback for freeing node data, default is NULL */ + Ecore_Free_Cb free_func; +}; + +EAPI Ecore_Sheap *ecore_sheap_new(Ecore_Compare_Cb compare, int size); +EAPI void ecore_sheap_destroy(Ecore_Sheap *heap); +EAPI int ecore_sheap_init(Ecore_Sheap *heap, + Ecore_Compare_Cb compare, + int size); +EAPI int ecore_sheap_free_cb_set(Ecore_Sheap *heap, + Ecore_Free_Cb free_func); +EAPI int ecore_sheap_insert(Ecore_Sheap *heap, void *data); +EAPI void * ecore_sheap_extract(Ecore_Sheap *heap); +EAPI void * ecore_sheap_extreme(Ecore_Sheap *heap); +EAPI int ecore_sheap_change(Ecore_Sheap *heap, + void *item, + void *newval); +EAPI int ecore_sheap_compare_set(Ecore_Sheap *heap, + Ecore_Compare_Cb compare); +EAPI void ecore_sheap_order_set(Ecore_Sheap *heap, char order); +EAPI void ecore_sheap_sort(Ecore_Sheap *heap); + +EAPI void * ecore_sheap_item(Ecore_Sheap *heap, int i); + + +typedef struct _ecore_string Ecore_String; +struct _ecore_string +{ + char *string; + int references; +}; + +EAPI int ecore_string_init(); +EAPI void ecore_string_shutdown(); +EAPI const char *ecore_string_instance(const char *string); +EAPI void ecore_string_release(const char *string); + +typedef struct _Ecore_Tree_Node Ecore_Tree_Node; +# define ECORE_TREE_NODE(object) ((Ecore_Tree_Node *)object) +struct _Ecore_Tree_Node +{ + + /* The actual data for each node */ + void *key; + void *value; + + /* Pointers to surrounding nodes */ + Ecore_Tree_Node *parent; + Ecore_Tree_Node *left_child; + Ecore_Tree_Node *right_child; + + /* Book keeping information for quicker balancing of the tree */ + int max_right; + int max_left; +}; + +typedef struct _Ecore_Tree Ecore_Tree; +# define ECORE_TREE(object) ((Ecore_Tree *)object) +struct _Ecore_Tree +{ + /* Nodes of the tree */ + Ecore_Tree_Node *tree; + + /* Callback for comparing node values, default is direct comparison */ + Ecore_Compare_Cb compare_func; + + /* Callback for freeing node data, default is NULL */ + Ecore_Free_Cb free_value; + /* Callback for freeing node key, default is NULL */ + Ecore_Free_Cb free_key; +}; + +/* Some basic tree functions */ +/* Allocate and initialize a new tree */ +EAPI Ecore_Tree * ecore_tree_new(Ecore_Compare_Cb compare_func); +/* Initialize a new tree */ +EAPI int ecore_tree_init(Ecore_Tree *tree, + Ecore_Compare_Cb compare_func); + +/* Free the tree */ +EAPI int ecore_tree_destroy(Ecore_Tree *tree); +/* Check to see if the tree has any nodes in it */ +EAPI int ecore_tree_empty_is(Ecore_Tree *tree); + +/* Retrieve the value associated with key */ +EAPI void * ecore_tree_get(Ecore_Tree *tree, const void *key); +EAPI Ecore_Tree_Node *ecore_tree_get_node(Ecore_Tree *tree, const void *key); +/* Retrieve the value of node with key greater than or equal to key */ +EAPI void * ecore_tree_closest_larger_get(Ecore_Tree *tree, + const void *key); +/* Retrieve the value of node with key less than or equal to key */ +EAPI void * ecore_tree_closest_smaller_get(Ecore_Tree *tree, + const void *key); + +/* Set the value associated with key to value */ +EAPI int ecore_tree_set(Ecore_Tree *tree, void *key, void *value); +/* Remove the key from the tree */ +EAPI int ecore_tree_remove(Ecore_Tree *tree, const void *key); + +/* Add a node to the tree */ +EAPI int ecore_tree_node_add(Ecore_Tree *tree, + Ecore_Tree_Node *node); +/* Remove a node from the tree */ +EAPI int ecore_tree_node_remove(Ecore_Tree *tree, + Ecore_Tree_Node *node); + +/* For each node in the tree perform the for_each_func function */ +/* For this one pass in the node */ +EAPI int ecore_tree_for_each_node(Ecore_Tree *tree, + Ecore_For_Each for_each_func, + void *user_data); +/* And here pass in the node's value */ +EAPI int ecore_tree_for_each_node_value( + Ecore_Tree *tree, + Ecore_For_Each + for_each_func, + void *user_data); + +/* Some basic node functions */ +/* Initialize a node */ +EAPI int ecore_tree_node_init(Ecore_Tree_Node *new_node); +/* Allocate and initialize a new node */ +EAPI Ecore_Tree_Node *ecore_tree_node_new(void); +/* Free the desired node */ +EAPI int ecore_tree_node_destroy(Ecore_Tree_Node *node, + Ecore_Free_Cb free_value, + Ecore_Free_Cb free_key); + +/* Set the node's key to key */ +EAPI int ecore_tree_node_key_set(Ecore_Tree_Node *node, void *key); +/* Retrieve the key in node */ +EAPI void * ecore_tree_node_key_get(Ecore_Tree_Node *node); + +/* Set the node's value to value */ +EAPI int ecore_tree_node_value_set(Ecore_Tree_Node *node, + void *value); +/* Retrieve the value in node */ +EAPI void * ecore_tree_node_value_get(Ecore_Tree_Node *node); + +/* Add a function to free the data stored in nodes */ +EAPI int ecore_tree_free_value_cb_set(Ecore_Tree *tree, + Ecore_Free_Cb free_value); +/* Add a function to free the keys stored in nodes */ +EAPI int ecore_tree_free_key_cb_set(Ecore_Tree *tree, + Ecore_Free_Cb free_key); + + +EAPI Ecore_Strbuf * ecore_strbuf_new(void); +EAPI void ecore_strbuf_free(Ecore_Strbuf *buf); +EAPI void ecore_strbuf_append(Ecore_Strbuf *buf, const char *str); +EAPI void ecore_strbuf_append_char(Ecore_Strbuf *buf, char c); +EAPI void ecore_strbuf_insert(Ecore_Strbuf *buf, const char *str, + size_t pos); +# define ecore_strbuf_prepend(buf, str) ecore_strbuf_insert(buf, str, 0) +EAPI const char * ecore_strbuf_string_get(Ecore_Strbuf *buf); +EAPI size_t ecore_strbuf_length_get(Ecore_Strbuf *buf); +EAPI int ecore_strbuf_replace(Ecore_Strbuf *buf, const char *str, + const char *with, unsigned int n); +# define ecore_strbuf_replace_first(buf, str, with) \ + ecore_strbuf_replace(buf, str, with, 1) +EAPI int ecore_strbuf_replace_all(Ecore_Strbuf *buf, + const char *str, + const char *with); + +extern int ecore_str_compare(const void *key1, const void *key2); +extern int ecore_direct_compare(const void *key1, const void *key2); +extern unsigned int ecore_str_hash(const void *key); + +#ifdef __cplusplus +} +#endif +#endif /* _ECORE_DATA_H */ diff --git a/libraries/eina/src/tests/Evas_Data.h b/libraries/eina/src/tests/Evas_Data.h new file mode 100644 index 0000000..9784892 --- /dev/null +++ b/libraries/eina/src/tests/Evas_Data.h @@ -0,0 +1,195 @@ +#ifndef _EVAS_DATA_H +#define _EVAS_DATA_H + +#ifdef EAPI +# undef EAPI +#endif + +#ifdef _WIN32 +# ifdef EFL_EVAS_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif /* ! DLL_EXPORT */ +# else +# define EAPI __declspec(dllimport) +# endif /* ! EFL_EVAS_BUILD */ +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif /* ! _WIN32 */ + +/** + * @file + * @brief These routines are used for Evas data types. + */ + +typedef unsigned char Evas_Bool; + +typedef struct _Evas_Array_Hash Evas_Array_Hash; +typedef struct _Evas_Hash Evas_Hash; /**< A Hash table handle */ +typedef struct _Evas_List Evas_List; /**< A generic linked list node handle */ +typedef struct _Evas_Object_List Evas_Object_List; + +struct _Evas_Hash +{ + int population; + Evas_Object_List *buckets[256]; +}; + +struct _Evas_List /** A linked list node */ +{ + void *data; /**< Pointer to list element payload */ + Evas_List *next; /**< Next member in the list */ + Evas_List *prev; /**< Previous member in the list */ + struct _Evas_List_Accounting *accounting; /**< Private list accounting info - don't touch */ +}; + +struct _Evas_Object_List +{ + Evas_Object_List *next, *prev; + Evas_Object_List *last; +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Evas Array Hash functions + */ + +EAPI Evas_Array_Hash *evas_array_hash_new (void); +EAPI void evas_array_hash_free (Evas_Array_Hash *hash); +EAPI void evas_array_hash_add (Evas_Array_Hash *hash, + int key, + int data); +EAPI int evas_array_hash_search (Evas_Array_Hash *hash, + int key); + + +/* + * Evas Hash functions + */ + +/* FIXME: add: + * api to add find, del members by data, size not just string and also + * provide hash generation functions settable by the app + * + * do we really need this? hmmm - let me think... there may be a better way + */ +EAPI Evas_Hash *evas_hash_add (Evas_Hash *hash, + const char *key, + const void *data); +EAPI Evas_Hash *evas_hash_direct_add (Evas_Hash *hash, + const char *key, + const void *data); +EAPI Evas_Hash *evas_hash_del (Evas_Hash *hash, + const char *key, + const void *data); +EAPI void * evas_hash_find (const Evas_Hash *hash, + const char *key); +EAPI void * evas_hash_modify (Evas_Hash *hash, + const char *key, + const void *data); +EAPI int evas_hash_size (const Evas_Hash *hash); +EAPI void evas_hash_free (Evas_Hash *hash); +EAPI void evas_hash_foreach (const Evas_Hash *hash, + Evas_Bool (*func)( + const Evas_Hash *hash, + const char * + key, + void *data, + void *fdata), + const void *fdata); +EAPI int evas_hash_alloc_error (void); + + +/* + * Evas List functions + */ + +EAPI Evas_List *evas_list_append (Evas_List *list, + const void *data); +EAPI Evas_List *evas_list_prepend (Evas_List *list, + const void *data); +EAPI Evas_List *evas_list_append_relative (Evas_List *list, + const void *data, + const void *relative); +EAPI Evas_List *evas_list_append_relative_list (Evas_List *list, + const void *data, + Evas_List *relative); +EAPI Evas_List *evas_list_prepend_relative (Evas_List *list, + const void *data, + const void *relative); +EAPI Evas_List *evas_list_prepend_relative_list (Evas_List *list, + const void *data, + Evas_List *relative); +EAPI Evas_List *evas_list_remove (Evas_List *list, + const void *data); +EAPI Evas_List *evas_list_remove_list (Evas_List *list, + Evas_List *remove_list); +EAPI Evas_List *evas_list_promote_list (Evas_List *list, + Evas_List *move_list); +EAPI void * evas_list_find (const Evas_List *list, + const void *data); +EAPI Evas_List *evas_list_find_list (const Evas_List *list, + const void *data); +EAPI Evas_List *evas_list_free (Evas_List *list); +EAPI Evas_List *evas_list_last (const Evas_List *list); +EAPI Evas_List *evas_list_next (const Evas_List *list); +EAPI Evas_List *evas_list_prev (const Evas_List *list); +EAPI void * evas_list_data (const Evas_List *list); +EAPI int evas_list_count (const Evas_List *list); +EAPI void * evas_list_nth (const Evas_List *list, int n); +EAPI Evas_List *evas_list_nth_list (const Evas_List *list, int n); +EAPI Evas_List *evas_list_reverse (Evas_List *list); +EAPI Evas_List *evas_list_sort (Evas_List *list, + int size, + int (*func)(void *,void *)); +EAPI int evas_list_alloc_error (void); + + +/* + * Evas Object List functions + */ + +EAPI void * evas_object_list_append (void *in_list, + void *in_item); +EAPI void * evas_object_list_prepend (void *in_list, + void *in_item); +EAPI void * evas_object_list_append_relative (void *in_list, + void *in_item, + void *in_relative); +EAPI void * evas_object_list_prepend_relative (void *in_list, + void *in_item, + void *in_relative); +EAPI void * evas_object_list_remove (void *in_list, + void *in_item); +EAPI void * evas_object_list_find (void *in_list, + void *in_item); + + +/* + * Evas Stringshare functions + */ + +EAPI void evas_stringshare_init (void); /* not implemented */ +EAPI void evas_stringshare_shutdown (void); /* not implemented */ +EAPI const char *evas_stringshare_add (const char *str); +EAPI void evas_stringshare_del (const char *str); + +#ifdef __cplusplus +} +#endif + +#endif /* _EVAS_DATA_H */ diff --git a/libraries/eina/src/tests/Makefile.am b/libraries/eina/src/tests/Makefile.am new file mode 100644 index 0000000..a413e6e --- /dev/null +++ b/libraries/eina/src/tests/Makefile.am @@ -0,0 +1,137 @@ +MAINTAINERCLEANFILES = Makefile.in + +benchdir = $(bindir) + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_builddir)/src/lib \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \ +@CHECK_CFLAGS@ \ +@GLIB_CFLAGS@ + +if EINA_HAVE_GLIB + +AM_CPPFLAGS += -DEINA_BENCH_HAVE_GLIB + +endif + +if EINA_ENABLE_BENCHMARK_E17 + +AM_CPPFLAGS += -DEINA_ENABLE_BENCH_E17 + +endif + +if EFL_ENABLE_TESTS + +check_PROGRAMS = eina_suite + +eina_suite_SOURCES = \ +eina_suite.c \ +eina_test_fp.c \ +eina_test_stringshare.c \ +eina_test_ustringshare.c\ +eina_test_ustr.c \ +eina_test_binshare.c \ +eina_test_binbuf.c \ +eina_test_array.c \ +eina_test_clist.c \ +eina_test_error.c \ +eina_test_sched.c \ +eina_test_log.c \ +eina_test_magic.c \ +eina_test_inlist.c \ +eina_test_main.c \ +eina_test_counter.c \ +eina_test_lalloc.c \ +eina_test_hash.c \ +eina_test_iterator.c \ +eina_test_accessor.c \ +eina_test_module.c \ +eina_test_convert.c \ +eina_test_rbtree.c \ +eina_test_file.c \ +eina_test_benchmark.c \ +eina_test_mempool.c \ +eina_test_rectangle.c \ +eina_test_list.c \ +eina_test_matrixsparse.c \ +eina_test_tiler.c \ +eina_test_strbuf.c \ +eina_test_str.c \ +eina_test_quadtree.c \ +eina_test_simple_xml_parser.c + +eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm + +module_dummydir = $(libdir)/eina/test +module_dummy_LTLIBRARIES = module_dummy.la + +module_dummy_la_SOURCES = \ +eina_test_module_dummy.c + +module_dummy_la_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_builddir)/src/lib \ +@EFL_EINA_BUILD@ +module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +module_dummy_la_LIBTOOLFLAGS = --tag=disable-static + +endif + +if EFL_ENABLE_BENCHMARK + +bench_PROGRAMS = eina_bench + +eina_bench_SOURCES = \ +eina_bench.c \ +eina_bench_sort.c \ +eina_bench_hash.c \ +eina_bench_stringshare.c \ +eina_bench_convert.c \ +eina_bench_mempool.c \ +eina_bench_stringshare_e17.c \ +eina_bench_array.c \ +eina_bench_rectangle_pool.c \ +ecore_list.c \ +ecore_strings.c \ +ecore_hash.c \ +ecore_sheap.c \ +evas_hash.c \ +evas_list.c \ +evas_mempool.c \ +evas_object_list.c \ +evas_stringshare.c \ +eina_bench_quad.c + +if CITYHASH_BENCH +noinst_LTLIBRARIES = libcity.la +libcity_la_SOURCES = city.cc + +nodist_EXTRA_eina_bench_SOURCES = dummy.cc +eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la +else +eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la + +endif + + + +endif + +EXTRA_DIST = eina_bench.h \ + eina_suite.h \ + Ecore_Data.h \ + Evas_Data.h \ + evas_mempool.h \ + strlog + +clean-local: + rm -rf *.gcno *.gcda diff --git a/libraries/eina/src/tests/Makefile.in b/libraries/eina/src/tests/Makefile.in new file mode 100644 index 0000000..b5983b3 --- /dev/null +++ b/libraries/eina/src/tests/Makefile.in @@ -0,0 +1,982 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@EINA_HAVE_GLIB_TRUE@am__append_1 = -DEINA_BENCH_HAVE_GLIB +@EINA_ENABLE_BENCHMARK_E17_TRUE@am__append_2 = -DEINA_ENABLE_BENCH_E17 +@EFL_ENABLE_TESTS_TRUE@check_PROGRAMS = eina_suite$(EXEEXT) +@EFL_ENABLE_BENCHMARK_TRUE@bench_PROGRAMS = eina_bench$(EXEEXT) +subdir = src/tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_benchmark.m4 \ + $(top_srcdir)/m4/efl_compiler_flag.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_examples.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/efl_threads.m4 \ + $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \ + $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(module_dummydir)" \ + "$(DESTDIR)$(benchdir)" +LTLIBRARIES = $(module_dummy_LTLIBRARIES) $(noinst_LTLIBRARIES) +libcity_la_LIBADD = +am__libcity_la_SOURCES_DIST = city.cc +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_OBJECTS = \ +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ city.lo +libcity_la_OBJECTS = $(am_libcity_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_rpath = +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_DEPENDENCIES = \ +@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la +am__module_dummy_la_SOURCES_DIST = eina_test_module_dummy.c +@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_OBJECTS = module_dummy_la-eina_test_module_dummy.lo +module_dummy_la_OBJECTS = $(am_module_dummy_la_OBJECTS) +module_dummy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(module_dummy_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(module_dummy_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_rpath = -rpath \ +@EFL_ENABLE_TESTS_TRUE@ $(module_dummydir) +PROGRAMS = $(bench_PROGRAMS) +am__eina_bench_SOURCES_DIST = eina_bench.c eina_bench_sort.c \ + eina_bench_hash.c eina_bench_stringshare.c \ + eina_bench_convert.c eina_bench_mempool.c \ + eina_bench_stringshare_e17.c eina_bench_array.c \ + eina_bench_rectangle_pool.c ecore_list.c ecore_strings.c \ + ecore_hash.c ecore_sheap.c evas_hash.c evas_list.c \ + evas_mempool.c evas_object_list.c evas_stringshare.c \ + eina_bench_quad.c +@EFL_ENABLE_BENCHMARK_TRUE@am_eina_bench_OBJECTS = \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_sort.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_hash.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_convert.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_mempool.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare_e17.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_array.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_rectangle_pool.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ ecore_list.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ ecore_strings.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ ecore_hash.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ ecore_sheap.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ evas_hash.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ evas_list.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ evas_mempool.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ evas_object_list.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ evas_stringshare.$(OBJEXT) \ +@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_quad.$(OBJEXT) +eina_bench_OBJECTS = $(am_eina_bench_OBJECTS) +@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la \ +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ libcity.la +am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \ + eina_test_stringshare.c eina_test_ustringshare.c \ + eina_test_ustr.c eina_test_binshare.c eina_test_binbuf.c \ + eina_test_array.c eina_test_clist.c eina_test_error.c \ + eina_test_sched.c eina_test_log.c eina_test_magic.c \ + eina_test_inlist.c eina_test_main.c eina_test_counter.c \ + eina_test_lalloc.c eina_test_hash.c eina_test_iterator.c \ + eina_test_accessor.c eina_test_module.c eina_test_convert.c \ + eina_test_rbtree.c eina_test_file.c eina_test_benchmark.c \ + eina_test_mempool.c eina_test_rectangle.c eina_test_list.c \ + eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \ + eina_test_str.c eina_test_quadtree.c \ + eina_test_simple_xml_parser.c +@EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_ustringshare.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_ustr.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_binshare.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_binbuf.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_array.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_clist.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_error.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_sched.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_log.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_magic.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_inlist.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_main.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_counter.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_lalloc.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_hash.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_iterator.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_accessor.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_module.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_convert.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_rbtree.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_file.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_benchmark.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_mempool.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_rectangle.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_list.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_matrixsparse.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_tiler.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_strbuf.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT) +eina_suite_OBJECTS = $(am_eina_suite_OBJECTS) +@EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \ +@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_$(V)) +am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +am__v_CXX_0 = @echo " CXX " $@; +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_$(V)) +am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CXXLD_0 = @echo " CXXLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libcity_la_SOURCES) $(module_dummy_la_SOURCES) \ + $(eina_bench_SOURCES) $(nodist_EXTRA_eina_bench_SOURCES) \ + $(eina_suite_SOURCES) +DIST_SOURCES = $(am__libcity_la_SOURCES_DIST) \ + $(am__module_dummy_la_SOURCES_DIST) \ + $(am__eina_bench_SOURCES_DIST) $(am__eina_suite_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_EINA_BUILD = @EFL_EINA_BUILD@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@ +EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@ +EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@ +EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@ +EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@ +EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@ +EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@ +EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@ +EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@ +EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@ +EINA_CPPFLAGS = @EINA_CPPFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@ +EMEMOA_CFLAGS = @EMEMOA_CFLAGS@ +EMEMOA_LIBS = @EMEMOA_LIBS@ +ESCAPE_CFLAGS = @ESCAPE_CFLAGS@ +ESCAPE_LIBS = @ESCAPE_LIBS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +exec_prefix = @exec_prefix@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +iconv_libs = @iconv_libs@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +release_info = @release_info@ +requirement_eina = @requirement_eina@ +rt_libs = @rt_libs@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +benchdir = $(bindir) +AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/include \ + -I$(top_builddir)/src/include -I$(top_builddir)/src/lib \ + -DPACKAGE_BIN_DIR=\"$(bindir)\" \ + -DPACKAGE_LIB_DIR=\"$(libdir)\" \ + -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ + -DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" @CHECK_CFLAGS@ \ + @GLIB_CFLAGS@ $(am__append_1) $(am__append_2) +@EFL_ENABLE_TESTS_TRUE@eina_suite_SOURCES = \ +@EFL_ENABLE_TESTS_TRUE@eina_suite.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_fp.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_stringshare.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_ustringshare.c\ +@EFL_ENABLE_TESTS_TRUE@eina_test_ustr.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_binshare.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_binbuf.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_array.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_clist.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_error.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_sched.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_log.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_magic.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_inlist.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_main.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_counter.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_lalloc.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_hash.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_iterator.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_accessor.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_module.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_convert.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_rbtree.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_file.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_benchmark.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_mempool.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_rectangle.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_list.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_matrixsparse.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_tiler.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_strbuf.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_str.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \ +@EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c + +@EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm +@EFL_ENABLE_TESTS_TRUE@module_dummydir = $(libdir)/eina/test +@EFL_ENABLE_TESTS_TRUE@module_dummy_LTLIBRARIES = module_dummy.la +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_SOURCES = \ +@EFL_ENABLE_TESTS_TRUE@eina_test_module_dummy.c + +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_CPPFLAGS = \ +@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/lib \ +@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/include \ +@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/include \ +@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/lib \ +@EFL_ENABLE_TESTS_TRUE@@EFL_EINA_BUILD@ + +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version +@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBTOOLFLAGS = --tag=disable-static +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_SOURCES = \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_sort.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_hash.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_convert.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_mempool.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare_e17.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_array.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_rectangle_pool.c \ +@EFL_ENABLE_BENCHMARK_TRUE@ecore_list.c \ +@EFL_ENABLE_BENCHMARK_TRUE@ecore_strings.c \ +@EFL_ENABLE_BENCHMARK_TRUE@ecore_hash.c \ +@EFL_ENABLE_BENCHMARK_TRUE@ecore_sheap.c \ +@EFL_ENABLE_BENCHMARK_TRUE@evas_hash.c \ +@EFL_ENABLE_BENCHMARK_TRUE@evas_list.c \ +@EFL_ENABLE_BENCHMARK_TRUE@evas_mempool.c \ +@EFL_ENABLE_BENCHMARK_TRUE@evas_object_list.c \ +@EFL_ENABLE_BENCHMARK_TRUE@evas_stringshare.c \ +@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_quad.c + +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@noinst_LTLIBRARIES = libcity.la +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@libcity_la_SOURCES = city.cc +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@nodist_EXTRA_eina_bench_SOURCES = dummy.cc +@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la +@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la +EXTRA_DIST = eina_bench.h \ + eina_suite.h \ + Ecore_Data.h \ + Evas_Data.h \ + evas_mempool.h \ + strlog + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-module_dummyLTLIBRARIES: $(module_dummy_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(module_dummydir)" || $(MKDIR_P) "$(DESTDIR)$(module_dummydir)" + @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(module_dummydir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(module_dummydir)"; \ + } + +uninstall-module_dummyLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(module_dummydir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(module_dummydir)/$$f"; \ + done + +clean-module_dummyLTLIBRARIES: + -test -z "$(module_dummy_LTLIBRARIES)" || rm -f $(module_dummy_LTLIBRARIES) + @list='$(module_dummy_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libcity.la: $(libcity_la_OBJECTS) $(libcity_la_DEPENDENCIES) + $(AM_V_CXXLD)$(CXXLINK) $(am_libcity_la_rpath) $(libcity_la_OBJECTS) $(libcity_la_LIBADD) $(LIBS) +module_dummy.la: $(module_dummy_la_OBJECTS) $(module_dummy_la_DEPENDENCIES) + $(AM_V_CCLD)$(module_dummy_la_LINK) $(am_module_dummy_la_rpath) $(module_dummy_la_OBJECTS) $(module_dummy_la_LIBADD) $(LIBS) +install-benchPROGRAMS: $(bench_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(benchdir)" || $(MKDIR_P) "$(DESTDIR)$(benchdir)" + @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(benchdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(benchdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-benchPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(benchdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(benchdir)" && rm -f $$files + +clean-benchPROGRAMS: + @list='$(bench_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +eina_bench$(EXEEXT): $(eina_bench_OBJECTS) $(eina_bench_DEPENDENCIES) + @rm -f eina_bench$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(eina_bench_OBJECTS) $(eina_bench_LDADD) $(LIBS) +eina_suite$(EXEEXT): $(eina_suite_OBJECTS) $(eina_suite_DEPENDENCIES) + @rm -f eina_suite$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(eina_suite_OBJECTS) $(eina_suite_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/city.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_sheap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_strings.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_mempool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_quad.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_rectangle_pool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_sort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare_e17.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_suite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_accessor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_benchmark.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binbuf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binshare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_clist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_convert.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_counter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_fp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_inlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_iterator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_lalloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_log.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_magic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rectangle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_sched.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_simple_xml_parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_strbuf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_stringshare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_tiler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustringshare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_mempool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_object_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_stringshare.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_dummy_la-eina_test_module_dummy.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +module_dummy_la-eina_test_module_dummy.lo: eina_test_module_dummy.c +@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 +@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 +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_test_module_dummy.c' object='module_dummy_la-eina_test_module_dummy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@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 + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(module_dummydir)" "$(DESTDIR)$(benchdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-libtool clean-local clean-module_dummyLTLIBRARIES \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-benchPROGRAMS install-module_dummyLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-benchPROGRAMS \ + uninstall-module_dummyLTLIBRARIES + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-libtool clean-local clean-module_dummyLTLIBRARIES \ + clean-noinstLTLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-benchPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-module_dummyLTLIBRARIES install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-benchPROGRAMS \ + uninstall-module_dummyLTLIBRARIES + + +clean-local: + rm -rf *.gcno *.gcda + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libraries/eina/src/tests/city.cc b/libraries/eina/src/tests/city.cc new file mode 100644 index 0000000..36ff93b --- /dev/null +++ b/libraries/eina/src/tests/city.cc @@ -0,0 +1,307 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash Version 1, by Geoff Pike and Jyrki Alakuijala +// +// This file provides CityHash64() and related functions. +// +// It's probably possible to create even faster hash functions by +// writing a program that systematically explores some of the space of +// possible hash functions, by using SIMD instructions, or by +// compromising on hash quality. + +#include "city.h" + +#include + +using namespace std; + +#define UNALIGNED_LOAD64(p) (*(const uint64*)(p)) +#define UNALIGNED_LOAD32(p) (*(const uint32*)(p)) + +#if !defined(LIKELY) +#if defined(__GNUC__) +#define LIKELY(x) (__builtin_expect(!!(x), 1)) +#else +#define LIKELY(x) (x) +#endif +#endif + +// Some primes between 2^63 and 2^64 for various uses. +static const uint64 k0 = 0xc3a5c85c97cb3127ULL; +static const uint64 k1 = 0xb492b66fbe98f273ULL; +static const uint64 k2 = 0x9ae16a3b2f90404fULL; +static const uint64 k3 = 0xc949d7c7509e6557ULL; + +// Bitwise right rotate. Normally this will compile to a single +// instruction, especially if the shift is a manifest constant. +static uint64 Rotate(uint64 val, int shift) { + // Avoid shifting by 64: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); +} + +// Equivalent to Rotate(), but requires the second arg to be non-zero. +// On x86-64, and probably others, it's possible for this to compile +// to a single instruction if both args are already in registers. +static uint64 RotateByAtLeast1(uint64 val, int shift) { + return (val >> shift) | (val << (64 - shift)); +} + +static uint64 ShiftMix(uint64 val) { + return val ^ (val >> 47); +} + +static uint64 HashLen16(uint64 u, uint64 v) { + return Hash128to64(uint128(u, v)); +} + +static uint64 HashLen0to16(const char *s, size_t len) { + if (len > 8) { + uint64 a = UNALIGNED_LOAD64(s); + uint64 b = UNALIGNED_LOAD64(s + len - 8); + return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + uint64 a = UNALIGNED_LOAD32(s); + return HashLen16(len + (a << 3), UNALIGNED_LOAD32(s + len - 4)); + } + if (len > 0) { + uint8 a = s[0]; + uint8 b = s[len >> 1]; + uint8 c = s[len - 1]; + uint32 y = static_cast(a) + (static_cast(b) << 8); + uint32 z = len + (static_cast(c) << 2); + return ShiftMix(y * k2 ^ z * k3) * k2; + } + return k2; +} + +// This probably works well for 16-byte strings as well, but it may be overkill +// in that case. +static uint64 HashLen17to32(const char *s, size_t len) { + uint64 a = UNALIGNED_LOAD64(s) * k1; + uint64 b = UNALIGNED_LOAD64(s + 8); + uint64 c = UNALIGNED_LOAD64(s + len - 8) * k2; + uint64 d = UNALIGNED_LOAD64(s + len - 16) * k0; + return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d, + a + Rotate(b ^ k3, 20) - c + len); +} + +// Return a 16-byte hash for 48 bytes. Quick and dirty. +// Callers do best to use "random-looking" values for a and b. +static pair WeakHashLen32WithSeeds( + uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) { + a += w; + b = Rotate(b + a + z, 21); + uint64 c = a; + a += x; + a += y; + b += Rotate(a, 44); + return make_pair(a + z, b + c); +} + +// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. +static pair WeakHashLen32WithSeeds( + const char* s, uint64 a, uint64 b) { + return WeakHashLen32WithSeeds(UNALIGNED_LOAD64(s), + UNALIGNED_LOAD64(s + 8), + UNALIGNED_LOAD64(s + 16), + UNALIGNED_LOAD64(s + 24), + a, + b); +} + +// Return an 8-byte hash for 33 to 64 bytes. +static uint64 HashLen33to64(const char *s, size_t len) { + uint64 z = UNALIGNED_LOAD64(s + 24); + uint64 a = UNALIGNED_LOAD64(s) + (len + UNALIGNED_LOAD64(s + len - 16)) * k0; + uint64 b = Rotate(a + z, 52); + uint64 c = Rotate(a, 37); + a += UNALIGNED_LOAD64(s + 8); + c += Rotate(a, 7); + a += UNALIGNED_LOAD64(s + 16); + uint64 vf = a + z; + uint64 vs = b + Rotate(a, 31) + c; + a = UNALIGNED_LOAD64(s + 16) + UNALIGNED_LOAD64(s + len - 32); + z = UNALIGNED_LOAD64(s + len - 8); + b = Rotate(a + z, 52); + c = Rotate(a, 37); + a += UNALIGNED_LOAD64(s + len - 24); + c += Rotate(a, 7); + a += UNALIGNED_LOAD64(s + len - 16); + uint64 wf = a + z; + uint64 ws = b + Rotate(a, 31) + c; + uint64 r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0); + return ShiftMix(r * k0 + vs) * k2; +} + +uint64 CityHash64(const char *s, size_t len) { + if (len <= 32) { + if (len <= 16) { + return HashLen0to16(s, len); + } else { + return HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } + + // For strings over 64 bytes we hash the end first, and then as we + // loop we keep 56 bytes of state: v, w, x, y, and z. + uint64 x = UNALIGNED_LOAD64(s); + uint64 y = UNALIGNED_LOAD64(s + len - 16) ^ k1; + uint64 z = UNALIGNED_LOAD64(s + len - 56) ^ k0; + pair v = WeakHashLen32WithSeeds(s + len - 64, len, y); + pair w = WeakHashLen32WithSeeds(s + len - 32, len * k1, k0); + z += ShiftMix(v.second) * k1; + x = Rotate(z + x, 39) * k1; + y = Rotate(y, 33) * k1; + + // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. + len = (len - 1) & ~static_cast(63); + do { + x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1; + y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + len -= 64; + } while (len != 0); + return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z, + HashLen16(v.second, w.second) + x); +} + +uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) { + return CityHash64WithSeeds(s, len, k2, seed); +} + +uint64 CityHash64WithSeeds(const char *s, size_t len, + uint64 seed0, uint64 seed1) { + return HashLen16(CityHash64(s, len) - seed0, seed1); +} + +// A subroutine for CityHash128(). Returns a decent 128-bit hash for strings +// of any length representable in ssize_t. Based on City and Murmur. +static uint128 CityMurmur(const char *s, size_t len, uint128 seed) { + uint64 a = Uint128Low64(seed); + uint64 b = Uint128High64(seed); + uint64 c = 0; + uint64 d = 0; + ssize_t l = len - 16; + if (l <= 0) { // len <= 16 + c = b * k1 + HashLen0to16(s, len); + d = Rotate(a + (len >= 8 ? UNALIGNED_LOAD64(s) : c), 32); + } else { // len > 16 + c = HashLen16(UNALIGNED_LOAD64(s + len - 8) + k1, a); + d = HashLen16(b + len, c + UNALIGNED_LOAD64(s + len - 16)); + a += d; + do { + a ^= ShiftMix(UNALIGNED_LOAD64(s) * k1) * k1; + a *= k1; + b ^= a; + c ^= ShiftMix(UNALIGNED_LOAD64(s + 8) * k1) * k1; + c *= k1; + d ^= c; + s += 16; + l -= 16; + } while (l > 0); + } + a = HashLen16(a, c); + b = HashLen16(d, b); + return uint128(a ^ b, HashLen16(b, a)); +} + +uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) { + if (len < 128) { + return CityMurmur(s, len, seed); + } + + // We expect len >= 128 to be the common case. Keep 56 bytes of state: + // v, w, x, y, and z. + pair v, w; + uint64 x = Uint128Low64(seed); + uint64 y = Uint128High64(seed); + uint64 z = len * k1; + v.first = Rotate(y ^ k1, 49) * k1 + UNALIGNED_LOAD64(s); + v.second = Rotate(v.first, 42) * k1 + UNALIGNED_LOAD64(s + 8); + w.first = Rotate(y + z, 35) * k1 + x; + w.second = Rotate(x + UNALIGNED_LOAD64(s + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1; + y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1; + y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + len -= 128; + } while (LIKELY(len >= 128)); + y += Rotate(w.first, 37) * k0 + z; + x += Rotate(v.first + z, 49) * k0; + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = Rotate(y - x, 42) * k0 + v.second; + w.first += UNALIGNED_LOAD64(s + len - tail_done + 16); + x = Rotate(x, 49) * k0 + w.first; + w.first += v.first; + v = WeakHashLen32WithSeeds(s + len - tail_done, v.first, v.second); + } + // At this point our 48 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 48-byte-to-8-byte hashes to get a 16-byte final result. + x = HashLen16(x, v.first); + y = HashLen16(y, w.first); + return uint128(HashLen16(x + v.second, w.second) + y, + HashLen16(x + w.second, y + v.second)); +} + +uint128 CityHash128(const char *s, size_t len) { + if (len >= 16) { + return CityHash128WithSeed(s + 16, + len - 16, + uint128(UNALIGNED_LOAD64(s) ^ k3, + UNALIGNED_LOAD64(s + 8))); + } else if (len >= 8) { + return CityHash128WithSeed(NULL, + 0, + uint128(UNALIGNED_LOAD64(s) ^ (len * k0), + UNALIGNED_LOAD64(s + len - 8) ^ k1)); + } else { + return CityHash128WithSeed(s, len, uint128(k0, k1)); + } +} diff --git a/libraries/eina/src/tests/ecore_hash.c b/libraries/eina/src/tests/ecore_hash.c new file mode 100644 index 0000000..f957d52 --- /dev/null +++ b/libraries/eina/src/tests/ecore_hash.c @@ -0,0 +1,949 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include + +#include "Ecore_Data.h" + +#define PRIME_TABLE_MAX 21 +#define PRIME_MIN 17 +#define PRIME_MAX 16777213 + +#define ECORE_HASH_CHAIN_MAX 3 + +#define ECORE_COMPUTE_HASH(hash, key) hash->hash_func(key) % \ + ecore_prime_table[hash->size]; + +#define ECORE_HASH_INCREASE(hash) ((hash && ecore_prime_table[hash->size] < \ + PRIME_MAX) ? \ + (hash->nodes / \ + ecore_prime_table[hash->size]) > \ + ECORE_HASH_CHAIN_MAX : FALSE) +#define ECORE_HASH_REDUCE(hash) ((hash && ecore_prime_table[hash->size] > \ + PRIME_MIN) ? \ + (double)hash->nodes / \ + (double)ecore_prime_table[hash->size - 1] \ + < ((double)ECORE_HASH_CHAIN_MAX * \ + 0.375) : FALSE) + + +static const unsigned int ecore_prime_table[] = +{ + 17, 31, 61, 127, 257, 509, 1021, + 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573, + 2097143, 4194301, 8388617, 16777213 +}; + + +/* Private hash manipulation functions */ +static int _ecore_hash_node_add(Ecore_Hash *hash, + Ecore_Hash_Node *node); +static Ecore_Hash_Node * _ecore_hash_node_get(Ecore_Hash *hash, + const void *key); +static int _ecore_hash_increase(Ecore_Hash *hash); +static int _ecore_hash_decrease(Ecore_Hash *hash); +static inline int _ecore_hash_rehash(Ecore_Hash *hash, + Ecore_Hash_Node **old_table, + int old_size); +static int _ecore_hash_bucket_destroy(Ecore_Hash_Node *list, + Ecore_Free_Cb keyd, + Ecore_Free_Cb valued); +static inline Ecore_Hash_Node *_ecore_hash_bucket_get(Ecore_Hash *hash, + Ecore_Hash_Node *bucket, + const void *key); + +static Ecore_Hash_Node * _ecore_hash_node_new(void *key, void *value); +static int _ecore_hash_node_init(Ecore_Hash_Node *node, + void *key, + void *value); +static int _ecore_hash_node_destroy(Ecore_Hash_Node *node, + Ecore_Free_Cb keyd, + Ecore_Free_Cb valued); + +/** + * @defgroup Ecore_Data_Hash_ADT_Creation_Group Hash Creation Functions + * + * Functions that create hash tables. + */ + +/** + * Creates and initializes a new hash + * @param hash_func The function for determining hash position. + * @param compare The function for comparing node keys. + * @return @c NULL on error, a new hash on success. + * @ingroup Ecore_Data_Hash_ADT_Creation_Group + */ +EAPI Ecore_Hash * +ecore_hash_new(Ecore_Hash_Cb hash_func, Ecore_Compare_Cb compare) +{ + Ecore_Hash *new_hash = (Ecore_Hash *)malloc(sizeof(Ecore_Hash)); + if (!new_hash) + return NULL; + + if (!ecore_hash_init(new_hash, hash_func, compare)) + { + FREE(new_hash); + return NULL; + } + + return new_hash; +} + +/** + * Initializes the given hash. + * @param hash The given hash. + * @param hash_func The function used for hashing node keys. + * @param compare The function used for comparing node keys. + * @return @c TRUE on success, @c FALSE on an error. + * @ingroup Ecore_Data_Hash_ADT_Creation_Group + */ +EAPI int +ecore_hash_init(Ecore_Hash *hash, + Ecore_Hash_Cb hash_func, + Ecore_Compare_Cb compare) +{ + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + memset(hash, 0, sizeof(Ecore_Hash)); + + hash->hash_func = hash_func; + hash->compare = compare; + + hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[0], + sizeof(Ecore_Hash_Node *)); + + return TRUE; +} + +/** + * @defgroup Ecore_Data_Hash_ADT_Destruction_Group Hash Destruction Functions + * + * Functions that destroy hash tables and their contents. + */ + +/** + * Sets the function to destroy the keys of the given hash. + * @param hash The given hash. + * @param function The function used to free the node keys. NULL is a + * valid value and means that no function will be called. + * @return @c TRUE on success, @c FALSE on error. + * @ingroup Ecore_Data_Hash_ADT_Destruction_Group + */ +EAPI int +ecore_hash_free_key_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function) +{ + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + hash->free_key = function; + + return TRUE; +} + +/** + * Sets the function to destroy the values in the given hash. + * @param hash The given hash. + * @param function The function that will free the node values. NULL is a + * valid value and means that no function will be called. + * @return @c TRUE on success, @c FALSE on error + * @ingroup Ecore_Data_Hash_ADT_Destruction_Group + */ +EAPI int +ecore_hash_free_value_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function) +{ + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + hash->free_value = function; + + return TRUE; +} + +/** + * @defgroup Ecore_Data_Hash_ADT_Data_Group Hash Data Functions + * + * Functions that set, access and delete values from the hash tables. + */ + +/** + * Sets a key-value pair in the given hash table. + * @param hash The given hash table. + * @param key The key. + * @param value The value. + * @return @c TRUE if successful, @c FALSE if not. + * @ingroup Ecore_Data_Hash_ADT_Data_Group + */ +EAPI int +ecore_hash_set(Ecore_Hash *hash, void *key, void *value) +{ + int ret = FALSE; + Ecore_Hash_Node *node; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + node = _ecore_hash_node_get(hash, key); + if (node) + { + if (hash->free_key) + hash->free_key(key); + + if (node->value && hash->free_value) + hash->free_value(node->value); + + node->value = value; + ret = TRUE; + } + else + { + node = _ecore_hash_node_new(key, value); + if (node) + ret = _ecore_hash_node_add(hash, node); + } + + return ret; +} + +/** + * Sets all key-value pairs from set in the given hash table. + * @param hash The given hash table. + * @param set The hash table to import. + * @return @c TRUE if successful, @c FALSE if not. + * @ingroup Ecore_Data_Hash_ADT_Data_Group + */ +EAPI int +ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set) +{ + unsigned int i; + Ecore_Hash_Node *node, *old; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + CHECK_PARAM_POINTER_RETURN("set", set, FALSE); + + for (i = 0; i < ecore_prime_table[set->size]; i++) + { + /* Hash into a new list to avoid loops of rehashing the same nodes */ + while ((old = set->buckets[i])) + { + set->buckets[i] = old->next; + old->next = NULL; + node = _ecore_hash_node_get(hash, old->key); + if (node) + { + /* This key already exists. Delete the old and add the new + * value */ + if (hash->free_key) + hash->free_key(node->key); + + if (hash->free_value) + hash->free_key(node->value); + + node->key = old->key; + node->value = old->value; + free(old); + } + else + _ecore_hash_node_add(hash, old); + } + } + FREE(set->buckets); + ecore_hash_init(set, set->hash_func, set->compare); + return TRUE; +} + +/** + * Frees the hash table and the data contained inside it. + * @param hash The hash table to destroy. + * @return @c TRUE on success, @c FALSE on error. + * @ingroup Ecore_Data_Hash_ADT_Destruction_Group + */ +EAPI void +ecore_hash_destroy(Ecore_Hash *hash) +{ + unsigned int i = 0; + + CHECK_PARAM_POINTER("hash", hash); + + if (hash->buckets) + { + while (i < ecore_prime_table[hash->size]) + { + if (hash->buckets[i]) + { + Ecore_Hash_Node *bucket; + + /* + * Remove the bucket list to avoid possible recursion + * on the free callbacks. + */ + bucket = hash->buckets[i]; + hash->buckets[i] = NULL; + _ecore_hash_bucket_destroy(bucket, + hash->free_key, + hash->free_value); + } + + i++; + } + + FREE(hash->buckets); + } + + FREE(hash); + + return; +} + +/** + * @defgroup Ecore_Data_Hash_ADT_Traverse_Group Hash Traverse Functions + * + * Functions that iterate through hash tables. + */ + +/** + * Counts the number of nodes in a hash table. + * @param hash The hash table to count current nodes. + * @return The number of nodes in the hash. + * @ingroup Ecore_Data_Hash_ADT_Destruction_Group + */ +EAPI int +ecore_hash_count(Ecore_Hash *hash) +{ + CHECK_PARAM_POINTER_RETURN("hash", hash, 0); + + return hash->nodes; +} + +/** + * Runs the @p for_each_func function on each entry in the given hash. + * @param hash The given hash. + * @param for_each_func The function that each entry is passed to. + * @param user_data a pointer passed to calls of for_each_func + * @return TRUE on success, FALSE otherwise. + * @ingroup Ecore_Data_Hash_ADT_Traverse_Group + */ +EAPI int +ecore_hash_for_each_node(Ecore_Hash *hash, + Ecore_For_Each for_each_func, + void *user_data) +{ + unsigned int i = 0; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + CHECK_PARAM_POINTER_RETURN("for_each_func", for_each_func, FALSE); + + while (i < ecore_prime_table[hash->size]) + { + if (hash->buckets[i]) + { + Ecore_Hash_Node *node; + + for (node = hash->buckets[i]; node; node = node->next) + { + for_each_func(node, user_data); + } + } + + i++; + } + + return TRUE; +} + +/** + * Retrieves an ecore_list of all keys in the given hash. + * @param hash The given hash. + * @return new ecore_list on success, NULL otherwise + * @ingroup Ecore_Data_Hash_ADT_Traverse_Group + */ +EAPI Ecore_List * +ecore_hash_keys(Ecore_Hash *hash) +{ + unsigned int i = 0; + Ecore_List *keys; + + CHECK_PARAM_POINTER_RETURN("hash", hash, NULL); + + keys = ecore_list_new(); + while (i < ecore_prime_table[hash->size]) + { + if (hash->buckets[i]) + { + Ecore_Hash_Node *node; + + for (node = hash->buckets[i]; node; node = node->next) + { + ecore_list_append(keys, node->key); + } + } + + i++; + } + ecore_list_first_goto(keys); + + return keys; +} + +/** + * Prints the distribution of the given hash table for graphing. + * @param hash The given hash table. + */ +EAPI void +ecore_hash_dump_graph(Ecore_Hash *hash) +{ + unsigned int i; + + for (i = 0; i < ecore_prime_table[hash->size]; i++) + if (hash->buckets[i]) + { + int n = 0; + Ecore_Hash_Node *node; + for (node = hash->buckets[i]; node; node = node->next) + n++; + printf("%d\t%u", i, n); + } + else + printf("%d\t0", i); + +} + +/** + * Prints the distribution of the given hash table for graphing. + * @param hash The given hash table. + */ +EAPI void +ecore_hash_dump_stats(Ecore_Hash *hash) +{ + unsigned int i; + double variance, sum_n_2 = 0, sum_n = 0; + + for (i = 0; i < ecore_prime_table[hash->size]; i++) + { + if (hash->buckets[i]) + { + int n = 0; + Ecore_Hash_Node *node; + for (node = hash->buckets[i]; node; node = node->next) + n++; + sum_n_2 += ((double)n * (double)n); + sum_n += (double)n; + } + } + variance = (sum_n_2 - ((sum_n * sum_n) / (double)i)) / (double)i; + printf("Average length: %f\n\tvariance^2: %f", (sum_n / (double)i), + variance); +} + +static int +_ecore_hash_bucket_destroy(Ecore_Hash_Node *list, + Ecore_Free_Cb keyd, + Ecore_Free_Cb valued) +{ + Ecore_Hash_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + for (node = list; node; node = list) + { + list = list->next; + _ecore_hash_node_destroy(node, keyd, valued); + } + + return TRUE; +} + +/* + * @brief Add the node to the hash table + * @param hash: the hash table to add the key + * @param node: the node to add to the hash table + * @return Returns FALSE on error, TRUE on success + */ +static int +_ecore_hash_node_add(Ecore_Hash *hash, Ecore_Hash_Node *node) +{ + unsigned long hash_val; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + /* Check to see if the hash needs to be resized */ + if (ECORE_HASH_INCREASE(hash)) + _ecore_hash_increase(hash); + + /* Compute the position in the table */ + if (!hash->hash_func) + hash_val = (unsigned long)node->key % ecore_prime_table[hash->size]; + else + hash_val = ECORE_COMPUTE_HASH(hash, node->key); + + /* Prepend the node to the list at the index position */ + node->next = hash->buckets[hash_val]; + hash->buckets[hash_val] = node; + hash->nodes++; + + return TRUE; +} + +/** + * Retrieves the value associated with the given key from the given hash + * table. + * @param hash The given hash table. + * @param key The key to search for. + * @return The value corresponding to key on success, @c NULL otherwise. + * @ingroup Ecore_Data_Hash_ADT_Data_Group + */ +EAPI void * +ecore_hash_get(Ecore_Hash *hash, const void *key) +{ + void *data; + Ecore_Hash_Node *node; + + CHECK_PARAM_POINTER_RETURN("hash", hash, NULL); + + node = _ecore_hash_node_get(hash, key); + if (!node) + return NULL; + + data = node->value; + + return data; +} + +/** + * Removes the value associated with the given key in the given hash + * table. + * @param hash The given hash table. + * @param key The key to search for. + * @return The value corresponding to the key on success. @c NULL is + * returned if there is an error. + * @ingroup Ecore_Data_Hash_ADT_Data_Group + */ +EAPI void * +ecore_hash_remove(Ecore_Hash *hash, const void *key) +{ + Ecore_Hash_Node *node = NULL; + Ecore_Hash_Node *list; + unsigned long hash_val; + void *ret = NULL; + + CHECK_PARAM_POINTER_RETURN("hash", hash, NULL); + + /* Compute the position in the table */ + if (!hash->hash_func) + hash_val = (unsigned long )key % ecore_prime_table[hash->size]; + else + hash_val = ECORE_COMPUTE_HASH(hash, key); + + /* + * If their is a list that could possibly hold the key/value pair + * traverse it and remove the hash node. + */ + if (hash->buckets[hash_val]) + { + list = hash->buckets[hash_val]; + + /* + * Traverse the list to find the specified key + */ + node = list; + if (hash->compare) + while ((node) && (hash->compare(node->key, key) != 0)) + { + list = node; + node = node->next; + } + else + while ((node) && (node->key != key)) + { + list = node; + node = node->next; + } + + /* + * Remove the node with the matching key and free it's memory + */ + if (node) + { + if (list == node) + hash->buckets[hash_val] = node->next; + else + list->next = node->next; + + ret = node->value; + node->value = NULL; + _ecore_hash_node_destroy(node, hash->free_key, NULL); + hash->nodes--; + } + } + + if (ECORE_HASH_REDUCE(hash)) + _ecore_hash_decrease(hash); + + return ret; +} + +/** + * Retrieves the first value that matches + * table. + * @param hash The given hash table. + * @param key The key to search for. + * @return The value corresponding to key on success, @c NULL otherwise. + * @ingroup Ecore_Data_Hash_ADT_Data_Group + */ +EAPI void * +ecore_hash_find(Ecore_Hash *hash, Ecore_Compare_Cb compare, const void *value) +{ + unsigned int i = 0; + + CHECK_PARAM_POINTER_RETURN("hash", hash, NULL); + CHECK_PARAM_POINTER_RETURN("compare", compare, NULL); + CHECK_PARAM_POINTER_RETURN("value", value, NULL); + + while (i < ecore_prime_table[hash->size]) + { + if (hash->buckets[i]) + { + Ecore_Hash_Node *node; + + for (node = hash->buckets[i]; node; node = node->next) + { + if (!compare(node->value, value)) + return node->value; + } + } + + i++; + } + + return NULL; +} + +/* + * @brief Retrieve the node associated with key + * @param hash: the hash table to search for the key + * @param key: the key to search for in the hash table + * @return Returns NULL on error, node corresponding to key on success + */ +static Ecore_Hash_Node * +_ecore_hash_node_get(Ecore_Hash *hash, const void *key) +{ + unsigned long hash_val; + Ecore_Hash_Node *node = NULL; + + CHECK_PARAM_POINTER_RETURN("hash", hash, NULL); + + if (!hash->buckets) + return NULL; + + /* Compute the position in the table */ + if (!hash->hash_func) + hash_val = (unsigned long)key % ecore_prime_table[hash->size]; + else + hash_val = ECORE_COMPUTE_HASH(hash, key); + + /* Grab the bucket at the specified position */ + if (hash->buckets[hash_val]) + { + node = _ecore_hash_bucket_get(hash, hash->buckets[hash_val], key); + /* + * Move matched node to the front of the list as it's likely + * to be searched for again soon. + */ + if (node && node != hash->buckets[hash_val]) + { + node->next = hash->buckets[hash_val]; + hash->buckets[hash_val] = node; + } + } + + return node; +} + +/* + * @brief Search the hash bucket for a specified key + * @param hash: the hash table to retrieve the comparison function + * @param bucket: the list to search for the key + * @param key: the key to search for in the list + * @return Returns NULL on error or not found, the found node on success + */ +static inline Ecore_Hash_Node * +_ecore_hash_bucket_get(Ecore_Hash *hash, + Ecore_Hash_Node *bucket, + const void *key) +{ + Ecore_Hash_Node *prev = NULL; + Ecore_Hash_Node *node = NULL; + + /* + * Traverse the list to find the desired node, if the node is in the + * list, then return the node. + */ + if (hash->compare) + for (node = bucket; node; node = node->next) + { + if (hash->compare(node->key, key) == 0) + break; + + prev = node; + } + else + for (node = bucket; node; node = node->next) + { + if (node->key == key) + break; + + prev = node; + } + + /* + * Remove node from the list to replace it at the beginning. + */ + if (node && prev) + { + prev->next = node->next; + node->next = NULL; + } + + return node; +} + +/* + * @brief Increase the size of the hash table by approx. 2 * current size + * @param hash: the hash table to increase the size of + * @return Returns TRUE on success, FALSE on error + */ +static int +_ecore_hash_increase(Ecore_Hash *hash) +{ + void *old; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + /* Max size reached so return FALSE */ + if ((ecore_prime_table[hash->size] == PRIME_MAX) || + (hash->size == PRIME_TABLE_MAX)) + return FALSE; + + /* + * Increase the size of the hash and save a pointer to the old data + */ + hash->size++; + old = hash->buckets; + + /* + * Allocate a new bucket area, of the new larger size + */ + hash->buckets = + calloc(ecore_prime_table[hash->size], sizeof(Ecore_Hash_Node *)); + + /* + * Make sure the allocation succeeded, if not replace the old data and + * return a failure. + */ + if (!hash->buckets) + { + hash->buckets = old; + hash->size--; + return FALSE; + } + + hash->nodes = 0; + + /* + * Now move all of the old data into the new bucket area + */ + if (_ecore_hash_rehash(hash, old, hash->size - 1)) + { + FREE(old); + return TRUE; + } + + /* + * Free the old buckets regardless of success. + */ + FREE(old); + + return FALSE; +} + +/* + * @brief Decrease the size of the hash table by < 1/2 * current size + * @param hash: the hash table to decrease the size of + * @return Returns TRUE on success, FALSE on error + */ +static int +_ecore_hash_decrease(Ecore_Hash *hash) +{ + Ecore_Hash_Node **old; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + + if (ecore_prime_table[hash->size] == PRIME_MIN) + return FALSE; + + /* + * Decrease the hash size and store a pointer to the old data + */ + hash->size--; + old = hash->buckets; + + /* + * Allocate a new area to store the data + */ + hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[hash->size], + sizeof(Ecore_Hash_Node *)); + + /* + * Make sure allocation succeeded otherwise rreturn to the previous + * state + */ + if (!hash->buckets) + { + hash->buckets = old; + hash->size++; + return FALSE; + } + + hash->nodes = 0; + + if (_ecore_hash_rehash(hash, old, hash->size + 1)) + { + FREE(old); + return TRUE; + } + + return FALSE; +} + +/* + * @brief Rehash the nodes of a table into the hash table + * @param hash: the hash to place the nodes of the table + * @param table: the table to remove the nodes from and place in hash + * @return Returns TRUE on success, FALSE on error + */ +static inline int +_ecore_hash_rehash(Ecore_Hash *hash, Ecore_Hash_Node **old_table, int old_size) +{ + unsigned int i; + Ecore_Hash_Node *old; + + CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE); + CHECK_PARAM_POINTER_RETURN("old_table", old_table, FALSE); + + for (i = 0; i < ecore_prime_table[old_size]; i++) + { + /* Hash into a new list to avoid loops of rehashing the same nodes */ + while ((old = old_table[i])) + { + old_table[i] = old->next; + old->next = NULL; + _ecore_hash_node_add(hash, old); + } + } + + return TRUE; +} + +/* + * @brief Create a new hash node for key and value storage + * @param key: the key for this node + * @param value: the value that the key references + * @return Returns NULL on error, a new hash node on success + */ +static Ecore_Hash_Node * +_ecore_hash_node_new(void *key, void *value) +{ + Ecore_Hash_Node *node; + + node = (Ecore_Hash_Node *)malloc(sizeof(Ecore_Hash_Node)); + if (!node) + return NULL; + + if (!_ecore_hash_node_init(node, key, value)) + { + FREE(node); + return NULL; + } + + return node; +} + +/* + * @brief Initialize a hash node to some sane default values + * @param node: the node to set the values + * @param key: the key to reference this node + * @param value: the value that key refers to + * @return Returns TRUE on success, FALSE on error + */ +static int +_ecore_hash_node_init(Ecore_Hash_Node *node, void *key, void *value) +{ + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + node->key = key; + node->value = value; + + return TRUE; +} + +/* + * @brief Destroy a node and call the specified callbacks to free data + * @param node: the node to be destroyed + * @param keyd: the function to free the key + * @param valued: the function to free the value + * @return Returns TRUE on success, FALSE on error + */ +static int +_ecore_hash_node_destroy(Ecore_Hash_Node *node, + Ecore_Free_Cb keyd, + Ecore_Free_Cb valued) +{ + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + if (keyd) + keyd(node->key); + + if (valued) + valued(node->value); + + FREE(node); + + return TRUE; +} + +int +ecore_str_compare(const void *key1, const void *key2) +{ + const char *k1, *k2; + + if (!key1 || !key2) + return ecore_direct_compare(key1, key2); + else if (key1 == key2) + return 0; + + k1 = key1; + k2 = key2; + + return strcmp(k1, k2); +} + +unsigned int +ecore_str_hash(const void *key) +{ + int i; + unsigned int mask; + unsigned int value = 0; + const char *k = key; + + if (!k) + return 0; + + mask = (sizeof(unsigned int) * 8) - 1; + + for (i = 0; k[i] != '\0'; i++) + { + value ^= ((unsigned int)k[i] << ((i * 5) & mask)); + } + + return value; +} diff --git a/libraries/eina/src/tests/ecore_list.c b/libraries/eina/src/tests/ecore_list.c new file mode 100644 index 0000000..7da4417 --- /dev/null +++ b/libraries/eina/src/tests/ecore_list.c @@ -0,0 +1,2162 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#include "Ecore_Data.h" + +/* Some tests showed that beyond that value heap sort is faster than merge sort + * (in this implementation). This value has to be changed or at least review + * if someone is changing the implementation. */ +#define ECORE_MERGESORT_LIMIT 40000 + +/* Return information about the list */ +static void * _ecore_list_current(Ecore_List *list); + +/* Adding functions */ +static int _ecore_list_insert(Ecore_List *list, + Ecore_List_Node *node); +static int _ecore_list_append_0(Ecore_List *list, + Ecore_List_Node *node); +static int _ecore_list_prepend_0(Ecore_List *list, + Ecore_List_Node *node); + +/* Remove functions */ +static void * _ecore_list_remove_0(Ecore_List *list); +static void * _ecore_list_first_remove(Ecore_List *list); +static void * _ecore_list_last_remove(Ecore_List *list); + +/* Basic traversal functions */ +static void * _ecore_list_next(Ecore_List *list); +static void * _ecore_list_last_goto(Ecore_List *list); +static void * _ecore_list_first_goto(Ecore_List *list); +static void * _ecore_list_goto(Ecore_List *list, const void *data); +static void * _ecore_list_index_goto(Ecore_List *list, int idx); + +/* Iterative functions */ +static int _ecore_list_for_each(Ecore_List *list, + Ecore_For_Each function, + void *user_data); +static void * _ecore_list_find(Ecore_List *list, + Ecore_Compare_Cb function, + const void *user_data); + +/* Sorting functions */ +static Ecore_List_Node *_ecore_list_node_mergesort(Ecore_List_Node *first, + int n, + Ecore_Compare_Cb compare, + int order); +static Ecore_List_Node *_ecore_list_node_merge(Ecore_List_Node *first, + Ecore_List_Node *second, + Ecore_Compare_Cb compare, + int order); +static Ecore_List_Node *_ecore_dlist_node_mergesort(Ecore_List_Node *first, + int n, + Ecore_Compare_Cb compare, + int order); +static Ecore_List_Node *_ecore_dlist_node_merge(Ecore_List_Node *first, + Ecore_List_Node *second, + Ecore_Compare_Cb compare, + int order); + +/* Private double linked list functions */ +static void *_ecore_dlist_previous(Ecore_DList *list); +static void *_ecore_dlist_first_remove(Ecore_DList *list); +static void *_ecore_dlist_index_goto(Ecore_DList *list, int idx); + +/** + @defgroup Ecore_Data_List_Creation_Group List Creation/Destruction Functions + + Functions that create, initialize and destroy Ecore_Lists. + */ + +/** + * Create and initialize a new list. + * @return A new initialized list on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Creation_Group + */ +EAPI Ecore_List * +ecore_list_new(void) +{ + Ecore_List *list; + + list = (Ecore_List *)malloc(sizeof(Ecore_List)); + if (!list) + return NULL; + + if (!ecore_list_init(list)) + { + FREE(list); + return NULL; + } + + return list; +} + +/** + * Initialize a list to some sane starting values. + * @param list The list to initialize. + * @return @c TRUE if successful, @c FALSE if an error occurs. + * @ingroup Ecore_Data_List_Creation_Group + */ +EAPI int +ecore_list_init(Ecore_List *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + memset(list, 0, sizeof(Ecore_List)); + + return TRUE; +} + +/** + * Free a list and all of it's nodes. + * @param list The list to be freed. + * @ingroup Ecore_Data_List_Creation_Group + */ +EAPI void +ecore_list_destroy(Ecore_List *list) +{ + void *data; + + CHECK_PARAM_POINTER("list", list); + + while (list->first) + { + data = _ecore_list_first_remove(list); + if (list->free_func) + list->free_func(data); + } + + FREE(list); +} + +/** + * Set the function for freeing data. + * @param list The list that will use this function when nodes are + * destroyed. + * @param free_func The function that will free the key data. + * @return @c TRUE on successful set, @c FALSE otherwise. + */ +EAPI int +ecore_list_free_cb_set(Ecore_List *list, Ecore_Free_Cb free_func) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + list->free_func = free_func; + + return TRUE; +} + +/** + * Checks the list for any nodes. + * @param list The list to check for nodes + * @return @c TRUE if no nodes in list, @c FALSE if the list contains nodes + */ +EAPI int +ecore_list_empty_is(Ecore_List *list) +{ + int ret = TRUE; + + CHECK_PARAM_POINTER_RETURN("list", list, TRUE); + + if (list->nodes) + ret = FALSE; + + return ret; +} + +/** + * Returns the number of the current node. + * @param list The list to return the number of the current node. + * @return The number of the current node in the list. + */ +EAPI int +ecore_list_index(Ecore_List *list) +{ + int ret; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + ret = list->index; + + return ret; +} + +/** + * Find the number of nodes in the list. + * @param list The list to find the number of nodes + * @return The number of nodes in the list. + */ +EAPI int +ecore_list_count(Ecore_List *list) +{ + int ret = 0; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + ret = list->nodes; + + return ret; +} + +/** + @defgroup Ecore_Data_List_Add_Item_Group List Item Adding Functions + + Functions that are used to add nodes to an Ecore_List. + */ + +/** + * Append data to the list. + * @param list The list. + * @param data The data to append. + * @return @c FALSE if an error occurs, @c TRUE if appended successfully + * @ingroup Ecore_Data_List_Add_Item_Group + */ +EAPI inline int +ecore_list_append(Ecore_List *list, void *data) +{ + int ret; + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + node = ecore_list_node_new(); + node->data = data; + + ret = _ecore_list_append_0(list, node); + + return ret; +} + +/* For adding items to the end of the list */ +static int +_ecore_list_append_0(Ecore_List *list, Ecore_List_Node *end) +{ + if (list->last) + list->last->next = end; + + list->last = end; + + if (!list->first) + { + list->first = end; + list->index = 0; + list->current = NULL; + } + + if (list->index >= list->nodes) + list->index++; + + list->nodes++; + + return TRUE; +} + +/** + * Prepend data to the beginning of the list. + * @param list The list. + * @param data The data to prepend. + * @return @c FALSE if an error occurs, @c TRUE if prepended successfully. + * @ingroup Ecore_Data_List_Add_Item_Group + */ +EAPI inline int +ecore_list_prepend(Ecore_List *list, void *data) +{ + int ret; + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + node = ecore_list_node_new(); + node->data = data; + + ret = _ecore_list_prepend_0(list, node); + + return ret; +} + +/* For adding items to the beginning of the list */ +static int +_ecore_list_prepend_0(Ecore_List *list, Ecore_List_Node *start) +{ + /* Put it at the beginning of the list */ + start->next = list->first; + + list->first = start; + + /* If no last node, then the first node is the last node */ + if (!list->last) + list->last = list->first; + + list->nodes++; + list->index++; + + return TRUE; +} + +/** + * Insert data in front of the current point in the list. + * @param list The list to hold the inserted @p data. + * @param data The data to insert into @p list. + * @return @c FALSE if there is an error, @c TRUE on success + * @ingroup Ecore_Data_List_Add_Item_Group + */ +EAPI inline int +ecore_list_insert(Ecore_List *list, void *data) +{ + int ret; + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + node = ecore_list_node_new(); + node->data = data; + + ret = _ecore_list_insert(list, node); + + return ret; +} + +/* For adding items in front of the current position in the list */ +static int +_ecore_list_insert(Ecore_List *list, Ecore_List_Node *new_node) +{ + /* + * If the current point is at the beginning of the list, then it's the + * same as prepending it to the list. + */ + if (list->current == list->first) + return _ecore_list_prepend_0(list, new_node); + + if (!list->current) + { + int ret_value; + + ret_value = _ecore_list_append_0(list, new_node); + list->current = list->last; + + return ret_value; + } + + /* Setup the fields of the new node */ + new_node->next = list->current; + + /* And hook the node into the list */ + _ecore_list_index_goto(list, ecore_list_index(list) - 1); + + list->current->next = new_node; + + /* Now move the current item to the inserted item */ + list->current = new_node; + list->nodes++; + + return TRUE; +} +/** + * Append a list to the list. + * @param list The list. + * @param append The list to append. + * @return @c FALSE if an error occurs, @c TRUE if appended successfully + * @ingroup Ecore_Data_List_Add_Item_Group + */ + +EAPI int +ecore_list_append_list(Ecore_List *list, Ecore_List *append) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + CHECK_PARAM_POINTER_RETURN("append", append, FALSE); + + if (ecore_list_empty_is(append)) + return TRUE; + + if (ecore_list_empty_is(list)) + { + list->first = append->first; + list->current = list->first; + list->last = append->last; + list->nodes = append->nodes; + } + else + { + list->last->next = append->first; + list->last = append->last; + list->nodes += append->nodes; + } + + ecore_list_init(append); + return TRUE; +} + +/** + * Prepend a list to the beginning of the list. + * @param list The list. + * @param prepend The list to prepend. + * @return @c FALSE if an error occurs, @c TRUE if prepended successfully. + * @ingroup Ecore_Data_List_Add_Item_Group + */ +EAPI int +ecore_list_prepend_list(Ecore_List *list, Ecore_List *prepend) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE); + + if (ecore_list_empty_is(prepend)) + return TRUE; + + if (ecore_list_empty_is(list)) + { + list->first = prepend->first; + list->current = NULL; + list->last = prepend->last; + list->nodes = prepend->nodes; + } + else + { + prepend->last->next = list->first; + list->first = prepend->first; + list->nodes += prepend->nodes; + list->index += prepend->nodes; + } + + ecore_list_init(prepend); + return TRUE; +} + +/** + @defgroup Ecore_Data_List_Remove_Item_Group List Item Removing Functions + + Functions that remove nodes from an Ecore_List. + */ + +/** + * Remove the current item from the list. + * @param list The list to remove the current item + * @return A pointer to the removed data on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Remove_Item_Group + */ +EAPI inline void * +ecore_list_remove(Ecore_List *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_remove_0(list); + + return ret; +} + +/* Remove the current item from the list */ +static void * +_ecore_list_remove_0(Ecore_List *list) +{ + void *ret = NULL; + Ecore_List_Node *old; + + if (!list) + return NULL; + + if (ecore_list_empty_is(list)) + return NULL; + + if (!list->current) + return NULL; + + if (list->current == list->first) + return _ecore_list_first_remove(list); + + if (list->current == list->last) + return _ecore_list_last_remove(list); + + old = list->current; + + _ecore_list_index_goto(list, list->index - 1); + + list->current->next = old->next; + old->next = NULL; + ret = old->data; + old->data = NULL; + + _ecore_list_next(list); + + ecore_list_node_destroy(old, NULL); + list->nodes--; + + return ret; +} + +/** + * Remove and free the data in lists current position. + * @param list The list to remove and free the current item. + * @return @c TRUE on success, @c FALSE on error + * @ingroup Ecore_Data_List_Remove_Item_Group + */ +EAPI int +ecore_list_remove_destroy(Ecore_List *list) +{ + void *data; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + data = _ecore_list_remove_0(list); + if (list->free_func) + list->free_func(data); + + return TRUE; +} + +/** + * Remove the first item from the list. + * @param list The list to remove the current item + * @return Returns a pointer to the removed data on success, @c NULL on + * failure. + * @ingroup Ecore_Data_List_Remove_Item_Group + */ +EAPI inline void * +ecore_list_first_remove(Ecore_List *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_first_remove(list); + + return ret; +} + +/* Remove the first item from the list */ +static void * +_ecore_list_first_remove(Ecore_List *list) +{ + void *ret = NULL; + Ecore_List_Node *old; + + if (!list) + return NULL; + + if (ecore_list_empty_is(list)) + return NULL; + + old = list->first; + + list->first = list->first->next; + + if (list->current == old) + list->current = list->first; + else + (list->index ? list->index-- : 0); + + if (list->last == old) + list->last = list->first; + + ret = old->data; + old->data = NULL; + + ecore_list_node_destroy(old, NULL); + list->nodes--; + + return ret; +} + +/** + * Remove the last item from the list. + * @param list The list to remove the last node from + * @return A pointer to the removed data on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Remove_Item_Group + */ +EAPI inline void * +ecore_list_last_remove(Ecore_List *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_last_remove(list); + + return ret; +} + +/* Remove the last item from the list */ +static void * +_ecore_list_last_remove(Ecore_List *list) +{ + void *ret = NULL; + Ecore_List_Node *old, *prev; + + if (!list) + return NULL; + + if (ecore_list_empty_is(list)) + return NULL; + + old = list->last; + if (list->current == old) + list->current = NULL; + + if (list->first == old) + list->first = NULL; + + for (prev = list->first; prev && prev->next != old; prev = prev->next) ; + list->last = prev; + if (prev) + prev->next = NULL; + + old->next = NULL; + ret = old->data; + old->data = NULL; + + ecore_list_node_destroy(old, NULL); + list->nodes--; + + return ret; +} + +/** + @defgroup Ecore_Data_List_Traverse_Group List Traversal Functions + + Functions that can be used to traverse an Ecore_List. + */ + +/** + * Make the current item the item with the given index number. + * @param list The list. + * @param idx The position to move the current item. + * @return A pointer to new current item on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Traverse_Group + */ +EAPI inline void * +ecore_list_index_goto(Ecore_List *list, int idx) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_index_goto(list, idx); + + return ret; +} + +/* This is the non-threadsafe version, use this inside internal functions that + * already lock the list */ +static void * +_ecore_list_index_goto(Ecore_List *list, int idx) +{ + int i; + + if (!list) + return NULL; + + if (ecore_list_empty_is(list)) + return NULL; + + if (idx > ecore_list_count(list) || idx < 0) + return NULL; + + if (idx < list->index) + { + _ecore_list_first_goto(list); + i = 0; + } + else + i = list->index; + + for (; i < idx && _ecore_list_next(list); i++) ; + + if (i >= list->nodes) + return NULL; + + list->index = i; + + return list->current->data; +} + +/** + * Make the current item the node that contains @p data. + * @param list The list. + * @param data The data to find. + * @return A pointer to @p data on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Traverse_Group + */ +EAPI inline void * +ecore_list_goto(Ecore_List *list, const void *data) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_goto(list, data); + + return ret; +} + +/* Set the current position to the node containing data */ +static void * +_ecore_list_goto(Ecore_List *list, const void *data) +{ + int idx; + Ecore_List_Node *node; + + if (!list) + return NULL; + + idx = 0; + + node = list->first; + while (node && node->data) + { + Ecore_List_Node *next; + + if (node->data == data) + break; + + next = node->next; + + node = next; + + idx++; + } + + if (!node) + return NULL; + + list->current = node; + list->index = idx; + + return list->current->data; +} + +/** + * Make the current item the first item in the list + * @param list The list. + * @return A pointer to the first item on success, @c NULL on failure + * @ingroup Ecore_Data_List_Traverse_Group + */ +EAPI inline void * +ecore_list_first_goto(Ecore_List *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_first_goto(list); + + return ret; +} + +/* Set the current position to the start of the list */ +static void * +_ecore_list_first_goto(Ecore_List *list) +{ + if (!list || !list->first) + return NULL; + + list->current = list->first; + list->index = 0; + + return list->current->data; +} + +/** + * Make the current item the last item in the list. + * @param list The list. + * @return A pointer to the last item on success, @c NULL on failure. + * @ingroup Ecore_Data_List_Traverse_Group + */ +EAPI inline void * +ecore_list_last_goto(Ecore_List *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_last_goto(list); + + return ret; +} + +/* Set the current position to the end of the list */ +static void * +_ecore_list_last_goto(Ecore_List *list) +{ + if (!list || !list->last) + return NULL; + + list->current = list->last; + list->index = (list->nodes - 1); + + return list->current->data; +} + +/** + * Retrieve the data pointed to by the current item in @p list. + * @param list The list. + * @return Returns the data at current position, can be @c NULL. + */ +EAPI inline void * +ecore_list_current(Ecore_List *list) +{ + void *ret; + + ret = _ecore_list_current(list); + + return ret; +} + +/** + * Retrieve the data pointed to by the first item in @p list. + * @param list The list. + * @return Returns the data at current position, can be @c NULL. + */ +EAPI inline void * +ecore_list_first(Ecore_List *list) +{ + void *ret; + + if (!list->first) + return NULL; + + ret = list->first->data; + + return ret; +} + +/** + * Retrieve the data pointed to by the last item in @p list. + * @param list The list. + * @return Returns the data at current position, can be @c NULL. + */ +EAPI inline void * +ecore_list_last(Ecore_List *list) +{ + void *ret; + + if (!list->last) + return NULL; + + ret = list->last->data; + + return ret; +} + +/* Return the data of the current node without incrementing */ +static void * +_ecore_list_current(Ecore_List *list) +{ + void *ret; + + if (!list->current) + return NULL; + + ret = list->current->data; + + return ret; +} + +/** + * Retrieve the data pointed to by the current item, and make the next item + * the current item. + * @param list The list to retrieve data from. + * @return The current item in the list on success, @c NULL on failure. + */ +EAPI inline void * +ecore_list_next(Ecore_List *list) +{ + void *data; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + data = _ecore_list_next(list); + + return data; +} + +/* Return the data contained in the current node and go to the next node */ +static void * +_ecore_list_next(Ecore_List *list) +{ + void *data; + Ecore_List_Node *ret; + Ecore_List_Node *next; + + if (!list->current) + return NULL; + + ret = list->current; + next = list->current->next; + + list->current = next; + list->index++; + + data = ret->data; + + return data; +} + +/** + * Remove all nodes from @p list. + * @param list The list. + * @return Returns @c TRUE on success, @c FALSE on error. + * @note The data for each item on the list is not freed by + * @c ecore_list_clear(). + */ +EAPI int +ecore_list_clear(Ecore_List *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + while (!ecore_list_empty_is(list)) + _ecore_list_first_remove(list); + + return TRUE; +} + +/** + * Execute function for each node in @p list. + * @param list The list. + * @param function The function to pass each node from @p list to. + * @return Returns @c TRUE on success, @c FALSE on failure. + * @ingroup Ecore_Data_List_Traverse_Group + */ +EAPI int +ecore_list_for_each(Ecore_List *list, Ecore_For_Each function, void *user_data) +{ + int ret; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + ret = _ecore_list_for_each(list, function, user_data); + + return ret; +} + +/* The real meat of executing the function for each data node */ +static int +_ecore_list_for_each(Ecore_List *list, Ecore_For_Each function, void *user_data) +{ + void *value; + + if (!list || !function) + return FALSE; + + _ecore_list_first_goto(list); + while ((value = _ecore_list_next(list))) + function(value, user_data); + + return TRUE; +} + +/** + * Find data in @p list using the compare function @p func + * @param list The list. + * @param function The function to test each node of @p list with + * @param user_data Data to match against (used by @p function) + * @return the first matching data node, or NULL if none match + */ +EAPI void * +ecore_list_find(Ecore_List *list, + Ecore_Compare_Cb function, + const void *user_data) +{ + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + return _ecore_list_find(list, function, user_data); +} + +/* The real meat of finding a node via a compare cb */ +static void * +_ecore_list_find(Ecore_List *list, + Ecore_Compare_Cb function, + const void *user_data) +{ + void *value; + if (!list || !function) + return NULL; + + _ecore_list_first_goto(list); + while ((value = _ecore_list_current(list))) + { + if (!function(value, user_data)) + return value; + + ecore_list_next(list); + } + + return NULL; +} + +/** + * Sort data in @p list using the compare function @p compare + * @param list The list. + * @param compare The function to compare the data of @p list + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + * @return true on success + * + * This is a wrapper function for mergesort and heapsort. It + * tries to choose the fastest algorithm depending on the + * number of notes. Note: The sort may be unstable. + */ +EAPI int +ecore_list_sort(Ecore_List *list, Ecore_Compare_Cb compare, char order) +{ + CHECK_PARAM_POINTER_RETURN("list", list, 0); + + if (list->nodes < 2) + return 1; + + if (list->nodes < ECORE_MERGESORT_LIMIT) + return ecore_list_mergesort(list, compare, order); + + if (!ecore_list_heapsort(list, compare, order)) + return ecore_list_mergesort(list, compare, order); + + return 1; +} + +/** + * Sort data in @p list using the compare function @p compare + * @param list The list. + * @param compare The function to compare the data of @p list + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + * @return true on success + * + * Mergesort is a stable, in-place sorting algorithm + */ +EAPI int +ecore_list_mergesort(Ecore_List *list, Ecore_Compare_Cb compare, char order) +{ + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, 0); + if (list->nodes < 2) + return 1; + + if (order == ECORE_SORT_MIN) + order = 1; + else + order = -1; + + node = _ecore_list_node_mergesort(list->first, list->nodes, compare, order); + list->first = node; + + /* maybe there is a better way to do that but our last node has changed */ + while (node->next) + node = node->next; + list->last = node; + + _ecore_list_first_goto(list); + + return 1; +} + +/** + * Merge the @p l2 into the @p list using the compare function @p compare. + * Both lists need to be sorted else a corrupt list could be the result. + * @param list The list. + * @param l2 The second list, this list will be empty after the merge + * @param compare The function to compare the data of @p list and @p l2 + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + */ +EAPI void +ecore_list_merge(Ecore_List *list, + Ecore_List *l2, + Ecore_Compare_Cb compare, + char order) +{ + CHECK_PARAM_POINTER("list", list); + CHECK_PARAM_POINTER("l2", l2); + + if (ecore_list_empty_is(l2)) + return; + + if (ecore_list_empty_is(list)) + { + ecore_list_append_list(list, l2); + return; + } + + if (order == ECORE_SORT_MIN) + order = 1; + else + order = -1; + + list->first = _ecore_list_node_merge(list->first, l2->first, compare, order); + + if ((order * compare(list->last->data, l2->last->data)) < 0) + list->last = l2->last; + + list->nodes += l2->nodes; + ecore_list_init(l2); +} + +/* this is the internal recrusive function for the merge sort */ +static Ecore_List_Node * +_ecore_list_node_mergesort(Ecore_List_Node *first, int n, + Ecore_Compare_Cb compare, int order) +{ + Ecore_List_Node *middle; + Ecore_List_Node *premid; + int mid; + int i; + + mid = n / 2; + + if (n < 2) + return first; + else if (n == 2) + { + if (compare(first->data, first->next->data) * order > 0) + { + /* swap the data */ + void *data; + data = first->next->data; + first->next->data = first->data; + first->data = data; + } + + return first; + } + + /* first find the premiddle node*/ + for (premid = first, i = 0; i < mid - 1; i++) + premid = premid->next; + + /* split the list */ + middle = premid->next; + premid->next = NULL; + + /* sort the the partial lists */ + first = _ecore_list_node_mergesort(first, mid, compare, order); + middle = _ecore_list_node_mergesort(middle, n - mid, compare, order); + + return _ecore_list_node_merge(first, middle, compare, order); +} + +/* this function is used to merge the partial sorted lists */ +static Ecore_List_Node * +_ecore_list_node_merge(Ecore_List_Node *first, Ecore_List_Node *second, + Ecore_Compare_Cb compare, int order) +{ + Ecore_List_Node *list; + Ecore_List_Node *l; + + /* select the first node outside the loop, because we need to keep + * a pointer to it */ + if (compare(first->data, second->data) * order > 0) + { + list = l = second; + second = second->next; + } + else + { + list = l = first; + first = first->next; + } + + /* and now start the merging */ + while (first && second) + { + if (compare(first->data, second->data) * order > 0) + { + l = l->next = second; + second = second->next; + } + else + { + l = l->next = first; + first = first->next; + } + } + + /* append the rest or set it to NULL */ + if (first) + l->next = first; + else if (second) + l->next = second; + else + l->next = NULL; + + return list; +} + +/** + * Sort data in @p list using the compare function @p compare + * @param list The list. + * @param compare The function to compare the data of @p list + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + * @return true on success + * + * Heapsort is a unstable sorting algorithm, it needs to allocate extra memomry, + * but there for it is for a great number of nodes faster than mergesort + */ +EAPI int +ecore_list_heapsort(Ecore_List *list, Ecore_Compare_Cb compare, char order) +{ + Ecore_Sheap *heap; + Ecore_List_Node *node; + void *data; + + CHECK_PARAM_POINTER_RETURN("list", list, 0); + /* + * Push the data into a heap. + */ + heap = ecore_sheap_new(compare, list->nodes); + if (!heap) + return 0; + + ecore_sheap_order_set(heap, order); + _ecore_list_first_goto(list); + while ((data = _ecore_list_next(list))) + { + ecore_sheap_insert(heap, data); + } + + /* + * Extract in sorted order. + */ + node = list->first; + while (node) + { + node->data = ecore_sheap_extract(heap); + node = node->next; + } + + ecore_sheap_destroy(heap); + + _ecore_list_first_goto(list); + return 1; +} + +/* Initialize a node to starting values */ +EAPI int +ecore_list_node_init(Ecore_List_Node *node) +{ + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + node->next = NULL; + node->data = NULL; + + return TRUE; +} + +/** + @defgroup Ecore_Data_List_Node_Group List Node Functions + + Functions that are used in the creation, maintenance and destruction of + Ecore_List nodes. + */ + +/** + * Allocates and initializes a new list node. + * @return A new Ecore_List_Node on success, @c NULL otherwise. + * @ingroup Ecore_Data_List_Node_Group + */ +EAPI Ecore_List_Node * +ecore_list_node_new() +{ + Ecore_List_Node *new_node; + + new_node = malloc(sizeof(Ecore_List_Node)); + + if (!ecore_list_node_init(new_node)) + { + FREE(new_node); + return NULL; + } + + return new_node; +} + +/** + * Calls the function to free the data and the node. + * @param node Node to destroy. + * @param free_func Function to call if @p node points to data to free. + * @return @c TRUE. + * @ingroup Ecore_Data_List_Node_Group + */ +EAPI int +ecore_list_node_destroy(Ecore_List_Node *node, Ecore_Free_Cb free_func) +{ + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + if (free_func && node->data) + free_func(node->data); + + FREE(node); + + return TRUE; +} + +/** + * @defgroup Ecore_Data_DList_Creation_Group Doubly Linked List Creation/Destruction Functions + * + * Functions used to create, initialize and destroy @c Ecore_DLists. + */ + +/** + * Creates and initialises a new doubly linked list. + * @return A new initialised doubly linked list on success, @c NULL + * on failure. + * @ingroup Ecore_Data_DList_Creation_Group + */ +EAPI Ecore_DList * +ecore_dlist_new() +{ + Ecore_DList *list = NULL; + + list = (Ecore_DList *)malloc(sizeof(Ecore_DList)); + if (!list) + return NULL; + + if (!ecore_dlist_init(list)) + { + IF_FREE(list); + return NULL; + } + + return list; +} + +/** + * Initialises a list to some sane starting values. + * @param list The doubly linked list to initialise. + * @return @c TRUE if successful, @c FALSE if an error occurs. + * @ingroup Ecore_Data_DList_Creation_Group + */ +EAPI int +ecore_dlist_init(Ecore_DList *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + memset(list, 0, sizeof(Ecore_DList)); + + return TRUE; +} + +/** + * Frees a doubly linked list and all of its nodes. + * @param list The doubly linked list to be freed. + * @ingroup Ecore_Data_DList_Creation_Group + */ +EAPI void +ecore_dlist_destroy(Ecore_DList *list) +{ + void *data; + CHECK_PARAM_POINTER("list", list); + + while (list->first) + { + data = _ecore_dlist_first_remove(list); + if (list->free_func) + list->free_func(data); + } + + FREE(list); +} + +/** + * Sets the function used for freeing data stored in a doubly linked list. + * @param list The doubly linked list that will use this function when + * nodes are destroyed. + * @param free_func The function that will free the key data + * @return @c TRUE on success, @c FALSE on failure. + * @ingroup Ecore_Data_DList_Creation_Group + */ +EAPI int +ecore_dlist_free_cb_set(Ecore_DList *list, Ecore_Free_Cb free_func) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + return ecore_list_free_cb_set(ECORE_LIST(list), free_func); +} + +/** + * Returns whether there is anything in the given doubly linked list. + * @param list The given doubly linked list. + * @return @c TRUE if there are nodes, @c FALSE otherwise. + */ +EAPI int +ecore_dlist_empty_is(Ecore_DList *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + return ecore_list_empty_is(ECORE_LIST(list)); +} + +/** + * Retrieves the index of the current node of the given doubly linked list. + * @param list The given doubly linked list. + * @return The index of the current node. + */ +EAPI inline int +ecore_dlist_index(Ecore_DList *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + return ecore_list_index(ECORE_LIST(list)); +} + +/** + * @defgroup Ecore_Data_DList_Add_Item_Group Doubly Linked List Adding Functions + * + * Functions that are used to add nodes to an Ecore_DList. + */ + +/** + * Appends data to the given doubly linked list. + * @param list The given doubly linked list. + * @param data The data to append. + * @return @c TRUE if the data is successfully appended, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Add_Item_Group + */ +EAPI int +ecore_dlist_append(Ecore_DList *list, void *data) +{ + int ret; + Ecore_DList_Node *prev; + Ecore_DList_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + node = ecore_dlist_node_new(); + ECORE_LIST_NODE(node)->data = data; + + prev = ECORE_DLIST_NODE(ECORE_LIST(list)->last); + ret = _ecore_list_append_0(ECORE_LIST(list), ECORE_LIST_NODE(node)); + if (ret) + node->previous = prev; + + return ret; +} + +/** + * Adds data to the very beginning of the given doubly linked list. + * @param list The given doubly linked list. + * @param data The data to prepend. + * @return @c TRUE if the data is successfully prepended, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Add_Item_Group + */ +EAPI int +ecore_dlist_prepend(Ecore_DList *list, void *data) +{ + int ret; + Ecore_DList_Node *prev; + Ecore_DList_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + node = ecore_dlist_node_new(); + ECORE_LIST_NODE(node)->data = data; + + prev = ECORE_DLIST_NODE(ECORE_LIST(list)->first); + ret = _ecore_list_prepend_0(ECORE_LIST(list), ECORE_LIST_NODE(node)); + if (ret && prev) + prev->previous = node; + + return ret; +} + +/** + * Inserts data at the current point in the given doubly linked list. + * @param list The given doubly linked list. + * @param data The data to be inserted. + * @return @c TRUE on success, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Add_Item_Group + */ +EAPI int +ecore_dlist_insert(Ecore_DList *list, void *data) +{ + int ret = TRUE; + Ecore_DList_Node *prev; + Ecore_DList_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + /* + * Identify and shortcut the end cases. + */ + if (!ECORE_LIST(list)->current) + return ecore_dlist_append(list, data); + + if (ECORE_LIST(list)->current == ECORE_LIST(list)->first) + return ecore_dlist_prepend(list, data); + + node = ecore_dlist_node_new(); + ECORE_LIST_NODE(node)->data = data; + + /* Setup the fields of the new node */ + ECORE_LIST_NODE(node)->next = ECORE_LIST(list)->current; + + /* And hook the node into the list */ + prev = ECORE_DLIST_NODE(ECORE_LIST(list)->current)->previous; + ECORE_LIST_NODE(prev)->next = ECORE_LIST_NODE(node); + ECORE_DLIST_NODE(ECORE_LIST(list)->current)->previous = node; + node->previous = prev; + + /* Now move the current item to the inserted item */ + ECORE_LIST(list)->current = ECORE_LIST_NODE(node); + ECORE_LIST(list)->nodes++; + + return ret; +} + +/** + * Appends a list to the given doubly linked list. + * @param list The given doubly linked list. + * @param append The list to append. + * @return @c TRUE if the data is successfully appended, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Add_Item_Group + */ +EAPI int +ecore_dlist_append_list(Ecore_DList *list, Ecore_DList *append) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + CHECK_PARAM_POINTER_RETURN("append", append, FALSE); + + if (ecore_dlist_empty_is(append)) + return TRUE; + + if (ecore_dlist_empty_is(list)) + { + list->first = append->first; + list->current = NULL; + list->last = append->last; + list->nodes = append->nodes; + } + else + { + list->last->next = append->first; + ECORE_DLIST_NODE(append->first)->previous = ECORE_DLIST_NODE(list->last); + list->last = append->last; + list->nodes += append->nodes; + } + + ecore_dlist_init(append); + return TRUE; +} + +/** + * Adds a list to the very beginning of the given doubly linked list. + * @param list The given doubly linked list. + * @param prepend The list to prepend. + * @return @c TRUE if the data is successfully prepended, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Add_Item_Group + */ +EAPI int +ecore_dlist_prepend_list(Ecore_DList *list, Ecore_DList *prepend) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE); + + if (ecore_dlist_empty_is(prepend)) + return TRUE; + + if (ecore_dlist_empty_is(list)) + { + list->first = prepend->first; + list->current = NULL; + list->last = prepend->last; + list->nodes = prepend->nodes; + } + else + { + prepend->last->next = list->first; + ECORE_DLIST_NODE(list->first)->previous = ECORE_DLIST_NODE( + prepend->last); + list->first = prepend->first; + list->nodes += prepend->nodes; + list->index += prepend->nodes; + } + + ecore_dlist_init(prepend); + return TRUE; +} + +/** + * @defgroup Ecore_Data_DList_Remove_Item_Group Doubly Linked List Removing Functions + * + * Functions that remove nodes from an @c Ecore_DList. + */ + +/** + * Removes the current item from the given doubly linked list. + * @param list The given doubly linked list. + * @return A pointer to the removed data on success, @c NULL otherwise. + * @ingroup Ecore_Data_DList_Remove_Item_Group + */ +EAPI void * +ecore_dlist_remove(Ecore_DList *list) +{ + void *ret; + Ecore_List *l2 = ECORE_LIST(list); + Ecore_DList_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + if (l2->current) + { + node = ECORE_DLIST_NODE(list->current->next); + if (node) + node->previous = ECORE_DLIST_NODE(l2->current)->previous; + } + + ret = _ecore_list_remove_0(list); + + return ret; +} + +/** + * Removes the first item from the given doubly linked list. + * @param list The given doubly linked list. + * @return A pointer to the removed data on success, @c NULL on failure. + * @ingroup Ecore_Data_DList_Remove_Item_Group + */ +EAPI void * +ecore_dlist_first_remove(Ecore_DList *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_dlist_first_remove(list); + + return ret; +} + +/** + * Removes and frees the data at the current position in the given doubly + * linked list. + * @param list The given doubly linked list. + * @return @c TRUE on success, @c FALSE otherwise. + * @ingroup Ecore_Data_DList_Remove_Item_Group + */ +EAPI int +ecore_dlist_remove_destroy(Ecore_DList *list) +{ + void *data; + + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + data = ecore_dlist_remove(list); + if (!data) + return FALSE; + + if (list->free_func) + list->free_func(data); + + return TRUE; +} + +static void * +_ecore_dlist_first_remove(Ecore_DList *list) +{ + void *ret; + + if (!list) + return NULL; + + ret = _ecore_list_first_remove(list); + if (ret && ECORE_LIST(list)->first) + ECORE_DLIST_NODE(ECORE_LIST(list)->first)->previous = NULL; + + return ret; +} + +/** + * Removes the last item from the given doubly linked list. + * @param list The given doubly linked list. + * @return A pointer to the removed data on success, @c NULL otherwise. + * @ingroup Ecore_Data_DList_Remove_Item_Group + */ +EAPI void * +ecore_dlist_last_remove(Ecore_DList *list) +{ + void *ret; + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + if (ecore_list_empty_is(list)) + return NULL; + + node = list->last; + list->last = ECORE_LIST_NODE(ECORE_DLIST_NODE(node)->previous); + if (list->last) + list->last->next = NULL; + + if (list->first == node) + list->first = NULL; + + if (list->current == node) + list->current = NULL; + + ret = node->data; + ecore_list_node_destroy(node, NULL); + + list->nodes--; + if (list->index >= list->nodes) + list->index--; + + return ret; +} + +/** + * Moves the current item to the index number in the given doubly linked list. + * @param list The given doubly linked list. + * @param idx The position to move the current item + * @return The node at specified index on success, @c NULL on error. + */ +EAPI void * +ecore_dlist_index_goto(Ecore_DList *list, int idx) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_dlist_index_goto(list, idx); + + return ret; +} + +/* This is the non-threadsafe version, use this inside internal functions that + * already lock the list */ +static void * +_ecore_dlist_index_goto(Ecore_DList *list, int idx) +{ + int i, increment; + + if (!list) + return NULL; + + if (ecore_list_empty_is(ECORE_LIST(list))) + return NULL; + + if (idx > ecore_list_count(ECORE_LIST(list)) || idx < 0) + return NULL; + + if (ECORE_LIST(list)->index >= ECORE_LIST(list)->nodes) + _ecore_list_last_goto(ECORE_LIST(list)); + + if (idx < ECORE_LIST(list)->index) + increment = -1; + else + increment = 1; + + for (i = ECORE_LIST(list)->index; i != idx; i += increment) + { + if (increment > 0) + _ecore_list_next(list); + else + _ecore_dlist_previous(list); + } + + return _ecore_list_current(list); +} + +/** + * @brief Move the current item to the node that contains data + * @param list: the list to move the current item in + * @param data: the data to find and set the current item to + * + * @return Returns specified data on success, NULL on error + */ +EAPI void * +ecore_dlist_goto(Ecore_DList *list, void *data) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_goto(ECORE_LIST(list), data); + + return ret; +} + +/** + * @brief Move the current pointer to the first item in the list + * @param list: the list to change the current to the first item + * + * @return Returns a pointer to the first item on success, NULL on failure. + */ +EAPI void * +ecore_dlist_first_goto(Ecore_DList *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_first_goto(list); + + return ret; +} + +/** + * @brief Move the pointer to the current item to the last item + * @param list: the list to move the current item pointer to the last + * @return Returns a pointer to the last item in the list , NULL if empty. + */ +EAPI void * +ecore_dlist_last_goto(Ecore_DList *list) +{ + void *ret; + + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + ret = _ecore_list_last_goto(ECORE_LIST(list)); + + return ret; +} + +/** + * @brief Return the data in the current list item + * @param list: the list to the return the current data + * @return Returns value of the current data item, NULL if no current item + */ +EAPI void * +ecore_dlist_current(Ecore_DList *list) +{ + void *ret; + + ret = _ecore_list_current(ECORE_LIST(list)); + + return ret; +} + +/** + * @brief Move to the next item in the list and return current item + * @param list: the list to move to the next item in. + * @return Returns data in the current list node, or NULL on error + */ +EAPI void * +ecore_dlist_next(Ecore_DList *list) +{ + void *data; + + data = _ecore_list_next(list); + + return data; +} + +/** + * @brief Move to the previous item and return current item + * @param list: the list to move to the previous item in. + * @return Returns data in the current list node, or NULL on error + */ +EAPI void * +ecore_dlist_previous(Ecore_DList *list) +{ + void *data; + + data = _ecore_dlist_previous(list); + + return data; +} + +static void * +_ecore_dlist_previous(Ecore_DList *list) +{ + void *data = NULL; + + if (!list) + return NULL; + + if (ECORE_LIST(list)->current) + { + data = ECORE_LIST(list)->current->data; + ECORE_LIST(list)-> + current = ECORE_LIST_NODE(ECORE_DLIST_NODE( + ECORE_LIST(list)-> + current)->previous); + ECORE_LIST(list)->index + --; + } + else + _ecore_list_last_goto( + ECORE_LIST(list)); + + return data; +} + +/** + * @brief Remove all nodes from the list. + * @param list: the list to remove all nodes from + * + * @return Returns TRUE on success, FALSE on errors + */ +EAPI int +ecore_dlist_clear(Ecore_DList *list) +{ + CHECK_PARAM_POINTER_RETURN("list", list, FALSE); + + ecore_list_clear(ECORE_LIST(list)); + + return TRUE; +} + +/** + * Sort data in @p list using the compare function @p compare + * @param list The list. + * @param compare The function to compare the data of @p list + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + * @return true on success + * + * This is a wrapper function for mergesort and heapsort. It + * tries to choose the fastest algorithm depending on the + * number of notes. Note: The sort may be unstable. + */ +EAPI int +ecore_dlist_sort(Ecore_List *list, Ecore_Compare_Cb compare, char order) +{ + CHECK_PARAM_POINTER_RETURN("list", list, 0); + + if (list->nodes < 2) + return 1; + + if (list->nodes < ECORE_MERGESORT_LIMIT) + return ecore_dlist_mergesort(list, compare, order); + + if (!ecore_dlist_heapsort(list, compare, order)) + return ecore_dlist_mergesort(list, compare, order); + + return 1; +} + +/** + * Sort data in @p list using the compare function @p compare + * @param list The list. + * @param compare The function to compare the data of @p list + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + * @return true on success + * + * Mergesort is a stable, in-place sorting algorithm + */ +EAPI int +ecore_dlist_mergesort(Ecore_DList *list, Ecore_Compare_Cb compare, char order) +{ + Ecore_List_Node *node; + + CHECK_PARAM_POINTER_RETURN("list", list, 0); + if (list->nodes < 2) + return 1; + + if (order == ECORE_SORT_MIN) + order = 1; + else + order = -1; + + node = _ecore_dlist_node_mergesort(list->first, list->nodes, compare, order); + list->first = node; + + /* maybe there is a better way to do that but our last node has changed */ + while (node->next) + node = node->next; + list->last = node; + + _ecore_list_first_goto(list); + + return 1; +} + +/** + * Merge the @p l2 into the @p list using the compare function @p compare. + * Both lists need to be sorted else a corrupt list could be the result. + * @param list The list. + * @param l2 The second list, this list will be empty after the merge + * @param compare The function to compare the data of @p list and @p l2 + * @param order The sort direction, possible values are ECORE_SORT_MIN and + * ECORE_SORT_MAX + */ +EAPI void +ecore_dlist_merge(Ecore_DList *list, + Ecore_DList *l2, + Ecore_Compare_Cb compare, + char order) +{ + CHECK_PARAM_POINTER("list", list); + CHECK_PARAM_POINTER("l2", l2); + + if (ecore_dlist_empty_is(l2)) + return; + + if (ecore_dlist_empty_is(list)) + { + ecore_dlist_append_list(list, l2); + return; + } + + if (order == ECORE_SORT_MIN) + order = 1; + else + order = -1; + + list->first = _ecore_dlist_node_merge(list->first, l2->first, compare, order); + + if ((order * compare(list->last->data, l2->last->data)) < 0) + list->last = l2->last; + + list->nodes += l2->nodes; + ecore_dlist_init(l2); +} + +/* this is the internal recrusive function for the merge sort */ +static Ecore_List_Node * +_ecore_dlist_node_mergesort(Ecore_List_Node *first, int n, + Ecore_Compare_Cb compare, int order) +{ + Ecore_List_Node *middle; + Ecore_List_Node *premid; + int mid; + int i; + + mid = n / 2; + + if (n < 2) + return first; + else if (n == 2) + { + if (compare(first->data, first->next->data) * order > 0) + { + /* swap the data */ + void *data; + data = first->next->data; + first->next->data = first->data; + first->data = data; + } + + return first; + } + + /* first find the premiddle node*/ + for (premid = first, i = 0; i < mid - 1; i++) + premid = premid->next; + + /* split the list */ + middle = premid->next; + premid->next = NULL; + ECORE_DLIST_NODE(middle)->previous = NULL; + + /* sort the the partial lists */ + first = _ecore_dlist_node_mergesort(first, mid, compare, order); + middle = _ecore_dlist_node_mergesort(middle, n - mid, compare, order); + + return _ecore_dlist_node_merge(first, middle, compare, order); +} + +/* this function is used to merge the partial sorted lists */ +static Ecore_List_Node * +_ecore_dlist_node_merge(Ecore_List_Node *first, Ecore_List_Node *second, + Ecore_Compare_Cb compare, int order) +{ + Ecore_List_Node *list; + Ecore_List_Node *l; + + /* select the first node outside the loop, because we need to keep + * a pointer to it */ + if (compare(first->data, second->data) * order > 0) + { + list = l = second; + second = second->next; + } + else + { + list = l = first; + first = first->next; + } + + /* and now start the merging */ + while (first && second) + { + if (compare(first->data, second->data) * order > 0) + { + ECORE_DLIST_NODE(second)->previous = ECORE_DLIST_NODE(l); + l = l->next = second; + second = second->next; + } + else + { + ECORE_DLIST_NODE(first)->previous = ECORE_DLIST_NODE(l); + l = l->next = first; + first = first->next; + } + } + + /* append the rest or set it to NULL */ + if (first) + { + ECORE_DLIST_NODE(first)->previous = ECORE_DLIST_NODE(l); + l->next = first; + } + else if (second) + { + ECORE_DLIST_NODE(second)->previous = ECORE_DLIST_NODE(l); + l->next = second; + } + else + l->next = NULL; + + return list; +} + +/* + * @brief Initialize a node to sane starting values + * @param node: the node to initialize + * @return Returns TRUE on success, FALSE on errors + */ +EAPI int +ecore_dlist_node_init(Ecore_DList_Node *node) +{ + int ret; + + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + ret = ecore_list_node_init(ECORE_LIST_NODE(node)); + if (ret) + node->previous = NULL; + + return ret; +} + +/* + * @brief Allocate and initialize a new list node + * @return Returns NULL on error, new list node on success + */ +EAPI Ecore_DList_Node * +ecore_dlist_node_new() +{ + Ecore_DList_Node *new_node; + + new_node = malloc(sizeof(Ecore_DList_Node)); + + if (!new_node) + return NULL; + + if (!ecore_dlist_node_init(new_node)) + { + FREE(new_node); + return NULL; + } + + return new_node; +} + +/* + * @brief Call the data's free callback function, then free the node + * @param node: the node to be freed + * @param free_func: the callback function to execute on the data + * @return Returns TRUE on success, FALSE on error + */ +EAPI int +ecore_dlist_node_destroy(Ecore_DList_Node *node, Ecore_Free_Cb free_func) +{ + CHECK_PARAM_POINTER_RETURN("node", node, FALSE); + + return ecore_list_node_destroy(ECORE_LIST_NODE(node), free_func); +} diff --git a/libraries/eina/src/tests/ecore_sheap.c b/libraries/eina/src/tests/ecore_sheap.c new file mode 100644 index 0000000..448be97 --- /dev/null +++ b/libraries/eina/src/tests/ecore_sheap.c @@ -0,0 +1,467 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#include "Ecore_Data.h" + +#define HEAP_INCREMENT 4096 + +#define PARENT(i) (i / 2) +#define LEFT(i) (2 * i) +#define RIGHT(i) (2 * i + 1) + +static void _ecore_sheap_heapify(Ecore_Sheap *heap, int i); +static void _ecore_sheap_update_data(Ecore_Sheap *heap); + +/** + * Allocate and initialize a new binary heap + * @param compare The function for comparing keys, NULL for direct comparison + * @param size The number of elements to allow in the heap + * @return A pointer to the newly allocated binary heap on success, NULL on + * failure. + */ +EAPI Ecore_Sheap * +ecore_sheap_new(Ecore_Compare_Cb compare, int size) +{ + Ecore_Sheap *heap = NULL; + + heap = (Ecore_Sheap *)malloc(sizeof(Ecore_Sheap)); + if (!heap) + return NULL; + + memset(heap, 0, sizeof(Ecore_Sheap)); + + if (!ecore_sheap_init(heap, compare, size)) + { + FREE(heap); + return NULL; + } + + return heap; +} + +/** + * Initialize a binary heap to default values + * @param heap The heap to initialize + * @param compare The function for comparing keys, NULL for direct comparison + * @param size The number of elements to allow in the heap + * @return TRUE on success, FALSE on failure + */ +EAPI int +ecore_sheap_init(Ecore_Sheap *heap, Ecore_Compare_Cb compare, int size) +{ + CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE); + + heap->space = size; + if (!compare) + heap->compare = ecore_direct_compare; + else + heap->compare = compare; + + heap->order = ECORE_SORT_MIN; + + heap->data = (void **)malloc(heap->space * sizeof(void *)); + if (!heap->data) + return FALSE; + + memset(heap->data, 0, heap->space * sizeof(void *)); + + return TRUE; +} + +/** + * Free up the memory used by the heap + * + * Frees the memory used by @a heap, calls the destroy function on each data + * item if necessary. + * + * @param heap The heap to be freed + */ +EAPI void +ecore_sheap_destroy(Ecore_Sheap *heap) +{ + int i; + + CHECK_PARAM_POINTER("heap", heap); + + /* + * Free data in heap + */ + if (heap->free_func) + for (i = 0; i < heap->size; i++) + heap->free_func(heap->data[i]); + + FREE(heap->data); + + FREE(heap); +} + +/** + * Set the function for freeing data. + * @param heap The heap that will use this function when nodes are + * destroyed. + * @param free_func The function that will free the key data. + * @return @c TRUE on successful set, @c FALSE otherwise. + */ +EAPI int +ecore_sheap_free_cb_set(Ecore_Sheap *heap, Ecore_Free_Cb free_func) +{ + CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE); + + heap->free_func = free_func; + + return TRUE; +} + +/** + * Insert new data into the heap. + * @param heap The heap to insert @a data. + * @param data The data to add to @a heap. + * @return TRUE on success, NULL on failure. Increases the size of the heap if + * it becomes larger than available space. + */ +EAPI int +ecore_sheap_insert(Ecore_Sheap *heap, void *data) +{ + int i; + void *temp; + int parent; + int position; + + CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE); + + /* + * Increase the size of the allocated data area if there isn't enough + * space available to add this data + */ + if (heap->size >= heap->space) + return FALSE; + + heap->sorted = FALSE; + + /* + * Place the data at the end of the heap initially. Then determine the + * parent and position in the array of it's parent. + */ + heap->data[heap->size] = data; + position = heap->size; + heap->size++; + i = heap->size; + parent = PARENT(i) - 1; + + /* + * Check the order of the heap to decide where to place the inserted + * data. The loop is placed inside the if statement to reduce the + * number of branching decisions that must be predicted. + */ + if (heap->order == ECORE_SORT_MIN) + while ((position > 0) && heap->compare(heap->data[parent], + heap->data[position]) > 0) + { + + /* + * Swap the data with it's parents to move it up in + * the heap. + */ + temp = heap->data[position]; + heap->data[position] = heap->data[parent]; + heap->data[parent] = temp; + + /* + * Now determine the new position for the next + * iteration of the loop, as well as it's parents + * position. + */ + i = PARENT(i); + position = i - 1; + parent = PARENT(i) - 1; + } + else + while ((position > 0) && heap->compare(heap->data[parent], + heap->data[position]) < 0) + { + + /* + * Swap the data with it's parents to move it up in + * the heap. + */ + temp = heap->data[position]; + heap->data[position] = heap->data[PARENT(i) - 1]; + heap->data[PARENT(i) - 1] = temp; + + /* + * Now determine the new position for the next + * iteration of the loop, as well as it's parents + * position. + */ + i = PARENT(i); + position = i - 1; + parent = PARENT(i) - 1; + } + + return TRUE; +} + +/** + * Extract the item at the top of the heap + * @param heap The heap to remove the top item + * @return The top item of the heap on success, NULL on failure. + * @note The extract function maintains the heap properties after the + * extract. + */ +EAPI void * +ecore_sheap_extract(Ecore_Sheap *heap) +{ + void *extreme; + + if (heap->size < 1) + return NULL; + + heap->sorted = FALSE; + + extreme = heap->data[0]; + heap->size--; + heap->data[0] = heap->data[heap->size]; + + _ecore_sheap_heapify(heap, 1); + + return extreme; +} + +/** + * Examine the item at the top of the heap + * @param heap The heap to examine the top item + * @return The top item of the heap on success, NULL on failure. + * @note The function does not alter the heap. + */ +EAPI void * +ecore_sheap_extreme(Ecore_Sheap *heap) +{ + if (heap->size < 1) + return NULL; + + return heap->data[0]; +} + +/** + * Change the value of the specified item in the heap + * @param heap The heap to search for the item to change + * @param item The item in the heap to change + * @param newval The new value assigned to the item in the heap + * @return TRUE on success, FALSE on failure. + * @note The heap does not free the old data since it must be passed + * in, so the caller can perform the free if desired. + */ +EAPI int +ecore_sheap_change(Ecore_Sheap *heap, void *item, void *newval) +{ + int i; + + CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE); + + for (i = 0; i < heap->size && heap->compare(heap->data[i], item); i++) ; + + if (i < heap->size) + heap->data[i] = newval; + else + return FALSE; + + /* + * FIXME: This is not the correct procedure when a change occurs. + */ + _ecore_sheap_heapify(heap, 1); + + return TRUE; +} + +/** + * Change the comparison function for the heap + * @param heap The heap to change comparison function + * @param compare The new function for comparing nodes + * @return TRUE on success, FALSE on failure. + * + * The comparison function is changed to @compare and the heap is heapified + * by the new comparison. + */ +EAPI int +ecore_sheap_compare_set(Ecore_Sheap *heap, Ecore_Compare_Cb compare) +{ + CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE); + + if (!compare) + heap->compare = ecore_direct_compare; + else + heap->compare = compare; + + _ecore_sheap_update_data(heap); + + return TRUE; +} + +/** + * Change the order of the heap + * @param heap The heap to change the order + * @param order The new order of the heap + * + * Changes the heap order of @heap and re-heapifies the data to this new + * order. The default order is a min heap. + */ +EAPI void +ecore_sheap_order_set(Ecore_Sheap *heap, char order) +{ + CHECK_PARAM_POINTER("heap", heap); + + heap->order = order; + + _ecore_sheap_update_data(heap); +} + +/** + * Sort the data in the heap + * @param heap The heap to be sorted + * + * Sorts the data in the heap into the order that is used for the heap's + * data. + */ +EAPI void +ecore_sheap_sort(Ecore_Sheap *heap) +{ + int i = 0; + void **new_data; + + CHECK_PARAM_POINTER("heap", heap); + + new_data = (void **)malloc(heap->size * sizeof(void *)); + + /* + * Extract the heap and insert into the new data array in order. + */ + while (heap->size > 0) + new_data[i++] = ecore_sheap_extract(heap); + + /* + * Free the old data array and update the heap with the new data, also + * mark as sorted. + */ + FREE(heap->data); + heap->data = new_data; + heap->size = i; + heap->sorted = TRUE; +} + +/* + * Access the item at the ith position in the heap + * @param heap The heap to access the internal data + * @param i The index of the data within the heap + * @return The data located at the ith position within @heap on success, + * NULL on failure. + * @note The data is guaranteed to be in sorted order. + */ +EAPI inline void * +ecore_sheap_item(Ecore_Sheap *heap, int i) +{ + if (i >= heap->size) + return NULL; + + /* + * Make sure the data is sorted so we return the correct value. + */ + if (!heap->sorted) + ecore_sheap_sort(heap); + + return heap->data[i]; +} + +/* + * Regain the heap properties starting at position i + * @param heap The heap to regain heap properties + * @param i The position to start heapifying + */ +static void +_ecore_sheap_heapify(Ecore_Sheap *heap, int i) +{ + int extreme; + int left = LEFT(i); + int right = RIGHT(i); + + if (heap->order == ECORE_SORT_MIN) + { + if (left <= heap->size && heap->compare(heap->data[left - 1], + heap->data[i - 1]) < 0) + extreme = left; + else + extreme = i; + + if (right <= heap->size && heap->compare(heap->data[right - 1], + heap->data[extreme - 1]) < 0) + extreme = right; + } + else + { + if (left <= heap->size && heap->compare(heap->data[left - 1], + heap->data[i - 1]) > 0) + extreme = left; + else + extreme = i; + + if (right <= heap->size && heap->compare(heap->data[right - 1], + heap->data[extreme - 1]) > 0) + extreme = right; + } + + /* + * If the data needs to be swapped down the heap, recurse on + * heapifying it's new placement. + */ + if (extreme != i) + { + void *temp; + + temp = heap->data[extreme - 1]; + heap->data[extreme - 1] = heap->data[i - 1]; + heap->data[i - 1] = temp; + + _ecore_sheap_heapify(heap, extreme); + } +} + +static void +_ecore_sheap_update_data(Ecore_Sheap *heap) +{ + int i, old_size; + void **data; + + /* + * Track the old values from the heap + */ + old_size = heap->size; + data = heap->data; + + heap->size = 0; + heap->data = malloc(heap->space * sizeof(void *)); + + for (i = 0; i < old_size; i++) + ecore_sheap_insert(heap, data[i]); + + FREE(data); +} + +int +ecore_direct_compare(const void *key1, const void *key2) +{ + unsigned long k1, k2; + + k1 = (unsigned long)key1; + k2 = (unsigned long)key2; + + if (k1 > k2) + return 1; + + if (k1 < k2) + return -1; + + return 0; +} diff --git a/libraries/eina/src/tests/ecore_strings.c b/libraries/eina/src/tests/ecore_strings.c new file mode 100644 index 0000000..d76e4c5 --- /dev/null +++ b/libraries/eina/src/tests/ecore_strings.c @@ -0,0 +1,160 @@ +#include +#include + +#include "Ecore_Data.h" + +static void ecore_string_free_cb(void *data); + +static Ecore_Hash *ecore_strings = NULL; +static int ecore_string_init_count = 0; + +/** + * @defgroup Ecore_String_Group String Instance Functions + * + * These functions allow you to store one copy of a string, and use it + * throughout your program. + * + * This is a method to reduce the number of duplicated strings kept in + * memory. It's pretty common for the same strings to be dynamically + * allocated repeatedly between applications and libraries, especially in + * circumstances where you could have multiple copies of a structure that + * allocates the string. So rather than duplicating and freeing these + * strings, you request a read-only pointer to an existing string and + * only incur the overhead of a hash lookup. + * + * It sounds like micro-optimizing, but profiling has shown this can have + * a significant impact as you scale the number of copies up. It improves + * string creation/destruction speed, reduces memory use and decreases + * memory fragmentation, so a win all-around. + */ + +/** + * Initialize the ecore string internal structure. + * @return Zero on failure, non-zero on successful initialization. + */ +EAPI int +ecore_string_init() +{ + /* + * No strings have been loaded at this point, so create the hash + * table for storing string info for later. + */ + if (!ecore_string_init_count) + { + ecore_strings = ecore_hash_new(ecore_str_hash, ecore_str_compare); + if (!ecore_strings) + return 0; + + ecore_hash_free_value_cb_set(ecore_strings, ecore_string_free_cb); + } + + ecore_string_init_count++; + + return 1; +} + +/** + * Retrieves an instance of a string for use in an ecore program. + * @param string The string to retrieve an instance of. + * @return A pointer to an instance of the string on success. + * @c NULL on failure. + * @ingroup Ecore_String_Group + */ +EAPI const char * +ecore_string_instance(const char *string) +{ + Ecore_String *str; + + CHECK_PARAM_POINTER_RETURN("string", string, NULL); + + /* + * Check for a previous instance of the string, if not found, create + * it. + */ + str = ecore_hash_get(ecore_strings, string); + if (!str) + { + int length; + + /* + * Allocate and initialize a new string reference. + */ + length = strlen(string) + 1; + + str = + (Ecore_String *)malloc(sizeof(Ecore_String) + length * sizeof(char)); + + str->string = (char *)(str + 1); + str->references = 0; + + memcpy(str->string, string, length); + + ecore_hash_set(ecore_strings, str->string, str); + } + + str->references++; + + return str->string; +} + +/** + * Notes that the given string has lost an instance. + * + * It will free the string if no other instances are left. + * + * @param string The given string. + * @ingroup Ecore_String_Group + */ +EAPI void +ecore_string_release(const char *string) +{ + Ecore_String *str; + + CHECK_PARAM_POINTER("string", string); + + str = ecore_hash_get(ecore_strings, (char *)string); + if (!str) + return; + + str->references--; + if (str->references < 1) + { + ecore_hash_remove(ecore_strings, (char *)string); + FREE(str); + } +} + +EAPI void +ecore_string_hash_dump_graph(void) +{ + ecore_hash_dump_graph(ecore_strings); +} + +EAPI void +ecore_string_hash_dump_stats(void) +{ + ecore_hash_dump_stats(ecore_strings); +} + +/** + * Shutdown the ecore string internal structures + */ +EAPI void +ecore_string_shutdown() +{ + --ecore_string_init_count; + if (!ecore_string_init_count) + { + ecore_hash_destroy(ecore_strings); + ecore_strings = NULL; + } +} + +static void +ecore_string_free_cb(void *data) +{ + Ecore_String *str; + + str = data; + FREE(str); +} diff --git a/libraries/eina/src/tests/eina_bench.c b/libraries/eina/src/tests/eina_bench.c new file mode 100644 index 0000000..a4eadbe --- /dev/null +++ b/libraries/eina/src/tests/eina_bench.c @@ -0,0 +1,105 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_bench.h" +#include "Eina.h" + +typedef struct _Eina_Benchmark_Case Eina_Benchmark_Case; +struct _Eina_Benchmark_Case +{ + const char *bench_case; + void (*build)(Eina_Benchmark *bench); +}; + +static const Eina_Benchmark_Case etc[] = { + { "Hash", eina_bench_hash }, + /* { "Array vs List vs Inlist", eina_bench_array }, */ + /* { "Stringshare", eina_bench_stringshare }, */ + /* { "Convert", eina_bench_convert }, */ + /* { "Sort", eina_bench_sort }, */ + /* { "Mempool", eina_bench_mempool }, */ + /* { "Rectangle_Pool", eina_bench_rectangle_pool }, */ + // { "Render Loop", eina_bench_quadtree }, + { NULL, NULL } +}; + +/* FIXME this is a copy from eina_test_mempool + * we should remove the duplication + */ +static Eina_Array *_modules; +static void _mempool_init(void) +{ + eina_init(); + /* force modules to be loaded in case they are not installed */ + _modules = eina_module_list_get(NULL, + PACKAGE_BUILD_DIR "/src/modules", + EINA_TRUE, + NULL, + NULL); + eina_module_list_load(_modules); +} + +static void _mempool_shutdown(void) +{ + eina_module_list_free(_modules); + /* TODO delete the list */ + eina_shutdown(); +} + +int +main(int argc, char **argv) +{ + Eina_Benchmark *test; + Eina_Array *ea; + unsigned int i; + + if (argc != 2) + return -1; + + _mempool_init(); + + eina_init(); + + for (i = 0; etc[i].bench_case; ++i) + { + test = eina_benchmark_new(etc[i].bench_case, argv[1]); + if (!test) + continue; + + etc[i].build(test); + + ea = eina_benchmark_run(test); + + eina_benchmark_free(test); + } + + eina_bench_e17(); + + eina_shutdown(); + + _mempool_shutdown(); + return 0; +} diff --git a/libraries/eina/src/tests/eina_bench.h b/libraries/eina/src/tests/eina_bench.h new file mode 100644 index 0000000..d575822 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench.h @@ -0,0 +1,36 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_BENCH_H_ +#define EINA_BENCH_H_ + +#include "eina_benchmark.h" + +void eina_bench_hash(Eina_Benchmark *bench); +void eina_bench_array(Eina_Benchmark *bench); +void eina_bench_stringshare(Eina_Benchmark *bench); +void eina_bench_convert(Eina_Benchmark *bench); +void eina_bench_sort(Eina_Benchmark *bench); +void eina_bench_mempool(Eina_Benchmark *bench); +void eina_bench_rectangle_pool(Eina_Benchmark *bench); +void eina_bench_quadtree(Eina_Benchmark *bench); + +/* Specific benchmark. */ +void eina_bench_e17(void); + +#endif diff --git a/libraries/eina/src/tests/eina_bench_array.c b/libraries/eina/src/tests/eina_bench_array.c new file mode 100644 index 0000000..425eddd --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_array.c @@ -0,0 +1,699 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "Evas_Data.h" +#include "Ecore_Data.h" + +#include "eina_bench.h" +#include "eina_array.h" +#include "eina_list.h" +#include "eina_inlist.h" +#include "eina_main.h" + +typedef struct _Eina_Bench_Object Eina_Bench_Object; +struct _Eina_Bench_Object +{ + EINA_INLIST; + + void *somewhere; + int data; + Eina_Bool keep; +}; + +static Eina_Bool keep(void *data, __UNUSED__ void *gdata) +{ + Eina_Bench_Object *bo = data; + + if (bo->keep == EINA_TRUE) + return EINA_TRUE; + + free(bo); + return EINA_FALSE; +} + +static void +eina_bench_array_4evas_render_inline(int request) +{ + Eina_Array *array; + Eina_Bench_Object *ebo; + Eina_Array_Iterator it; + unsigned int i; + unsigned int j; + + srand(time(NULL)); + + eina_init(); + + array = eina_array_new(64); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < (unsigned int)request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + eina_array_push(array, ebo); + } + + if (i == 500) + { + EINA_ARRAY_ITER_NEXT(array, j, ebo, it) + free(ebo); + + eina_array_clean(array); + } + else if (i % 30 == 0) + eina_array_remove(array, keep, NULL); + + EINA_ARRAY_ITER_NEXT(array, j, ebo, it) + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + + EINA_ARRAY_ITER_NEXT(array, j, ebo, it) + free(ebo); + + eina_array_free(array); + + eina_shutdown(); +} + +static Eina_Bool +eina_iterator_ebo_free(__UNUSED__ const Eina_Array *array, + Eina_Bench_Object *ebo, __UNUSED__ void *fdata) +{ + free(ebo); + return EINA_TRUE; +} + +static Eina_Bool +eina_iterator_ebo_rand(__UNUSED__ const void *container, + Eina_Bench_Object *ebo, __UNUSED__ void *fdata) +{ + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + return EINA_TRUE; +} + +static void +eina_bench_array_4evas_render_iterator(int request) +{ + Eina_Array *array; + Eina_Bench_Object *ebo; + Eina_Iterator *it; + unsigned int i; + unsigned int j; + + srand(time(NULL)); + + eina_init(); + + array = eina_array_new(64); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < (unsigned int)request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + eina_array_push(array, ebo); + } + + if (i == 500) + { + it = eina_array_iterator_new(array); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_free), NULL); + eina_iterator_free(it); + + eina_array_clean(array); + } + else if (i % 30 == 0) + eina_array_remove(array, keep, NULL); + + it = eina_array_iterator_new(array); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL); + eina_iterator_free(it); + } + + it = eina_array_iterator_new(array); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_free), NULL); + eina_iterator_free(it); + + eina_array_free(array); + + eina_shutdown(); +} + +static void +eina_bench_list_4evas_render(int request) +{ + Eina_List *list = NULL; + Eina_List *tmp; + Eina_Bench_Object *ebo; + int i; + int j; + + eina_init(); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + list = eina_list_prepend(list, ebo); + } + + if (i == 500) + while (list) + { + free(eina_list_data_get(list)); + list = eina_list_remove_list(list, list); + } + else if (i % 30 == 0) + { + tmp = list; + while (tmp) + { + Eina_List *reminder = tmp; + + ebo = eina_list_data_get(reminder); + tmp = eina_list_next(tmp); + + if (ebo->keep == EINA_FALSE) + { + list = eina_list_remove_list(list, reminder); + free(ebo); + } + } + } + + for (tmp = list; tmp; tmp = eina_list_next(tmp)) + { + ebo = eina_list_data_get(tmp); + + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + } + + while (list) + { + free(eina_list_data_get(list)); + list = eina_list_remove_list(list, list); + } + + eina_shutdown(); +} + +static void +eina_bench_list_4evas_render_iterator(int request) +{ + Eina_List *list = NULL; + Eina_List *tmp; + Eina_Bench_Object *ebo; + Eina_Iterator *it; + int i; + int j; + + eina_init(); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + list = eina_list_prepend(list, ebo); + } + + if (i == 500) + while (list) + { + free(eina_list_data_get(list)); + list = eina_list_remove_list(list, list); + } + else if (i % 30 == 0) + { + tmp = list; + while (tmp) + { + Eina_List *reminder = tmp; + + ebo = eina_list_data_get(reminder); + tmp = eina_list_next(tmp); + + if (ebo->keep == EINA_FALSE) + { + list = eina_list_remove_list(list, reminder); + free(ebo); + } + } + } + + it = eina_list_iterator_new(list); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL); + eina_iterator_free(it); + } + + while (list) + { + free(eina_list_data_get(list)); + list = eina_list_remove_list(list, list); + } + + eina_shutdown(); +} + +static void +eina_bench_inlist_4evas_render(int request) +{ + Eina_Inlist *head = NULL; + Eina_Inlist *tmp; + Eina_Bench_Object *ebo; + int i; + int j; + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + head = eina_inlist_prepend(head, EINA_INLIST_GET(ebo)); + } + + if (i == 500) + while (head) + { + tmp = head; + head = head->next; + free(tmp); + } + else if (i % 30 == 0) + { + tmp = head; + while(tmp) + { + ebo = (Eina_Bench_Object *)tmp; + + tmp = tmp->next; + if (ebo->keep == EINA_FALSE) + { + head = eina_inlist_remove(head, EINA_INLIST_GET(ebo)); + free(ebo); + } + } + } + + EINA_INLIST_FOREACH(head, ebo) + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + + while (head) + { + tmp = head; + head = head->next; + free(tmp); + } +} + +static void +eina_bench_inlist_4evas_render_iterator(int request) +{ + Eina_Inlist *head = NULL; + Eina_Inlist *tmp; + Eina_Bench_Object *ebo; + Eina_Iterator *it; + int i; + int j; + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + head = eina_inlist_prepend(head, EINA_INLIST_GET(ebo)); + } + + if (i == 500) + while (head) + { + tmp = head; + head = head->next; + free(tmp); + } + else if (i % 30 == 0) + { + tmp = head; + while(tmp) + { + ebo = (Eina_Bench_Object *)tmp; + + tmp = tmp->next; + if (ebo->keep == EINA_FALSE) + { + head = eina_inlist_remove(head, EINA_INLIST_GET(ebo)); + free(ebo); + } + } + } + + it = eina_inlist_iterator_new(head); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL); + eina_iterator_free(it); + } + + while (head) + { + tmp = head; + head = head->next; + free(tmp); + } +} + +#ifdef EINA_BENCH_HAVE_GLIB +static void +eina_bench_glist_4evas_render(int request) +{ + GList *list = NULL; + GList *tmp; + Eina_Bench_Object *ebo; + int i; + int j; + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + list = g_list_prepend(list, ebo); + } + + if (i == 500) + while (list) + { + free(list->data); + list = g_list_delete_link(list, list); + } + else if (i % 30 == 0) + { + tmp = list; + while (tmp) + { + GList *reminder = tmp; + + ebo = reminder->data; + tmp = g_list_next(tmp); + + if (ebo->keep == EINA_FALSE) + { + list = g_list_delete_link(list, reminder); + free(ebo); + } + } + } + + for (tmp = list; tmp; tmp = g_list_next(tmp)) + { + ebo = tmp->data; + + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + } + + while (list) + { + free(list->data); + list = g_list_delete_link(list, list); + } +} + +static void +eina_bench_gptrarray_4evas_render(int request) +{ + GPtrArray *array = NULL; + Eina_Bench_Object *ebo; + unsigned int j; + int i; + + array = g_ptr_array_new(); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < (unsigned int)request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + g_ptr_array_add(array, ebo); + } + + if (i == 500) + { + for (j = 0; j < array->len; ++j) + free(g_ptr_array_index(array, j)); + g_ptr_array_remove_range(array, 0, array->len); + } + else if (i % 30 == 0) + for (j = 0; j < array->len; ) + { + ebo = g_ptr_array_index(array, j); + + if (ebo->keep == EINA_FALSE) + free(g_ptr_array_remove_index_fast(array, j)); + else + j++; + } + + for (j = 0; j < array->len; ++j) + { + ebo = g_ptr_array_index(array, j); + + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + } + + for (j = 0; j < array->len; ++j) + free(g_ptr_array_index(array, j)); + g_ptr_array_free(array, TRUE); +} +#endif + +static void +eina_bench_evas_list_4evas_render(int request) +{ + Evas_List *list = NULL; + Evas_List *tmp; + Eina_Bench_Object *ebo; + int i; + int j; + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + list = evas_list_prepend(list, ebo); + } + + if (i == 500) + while (list) + { + free(evas_list_data(list)); + list = evas_list_remove_list(list, list); + } + else if (i % 30 == 0) + { + tmp = list; + while (tmp) + { + Evas_List *reminder = tmp; + + ebo = evas_list_data(reminder); + tmp = evas_list_next(tmp); + + if (ebo->keep == EINA_FALSE) + { + list = evas_list_remove_list(list, reminder); + free(ebo); + } + } + } + + for (tmp = list; tmp; tmp = evas_list_next(tmp)) + { + ebo = evas_list_data(tmp); + + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; + } + } + + while (list) + { + free(evas_list_data(list)); + list = evas_list_remove_list(list, list); + } +} + +static void +_eina_ecore_for_each_remove(void *value, void *user_data) +{ + Eina_Bench_Object *ebo = value; + Ecore_List *list = user_data; + + if (ebo->keep == EINA_FALSE) + ecore_list_remove_destroy(list); +} + +static void +_eina_ecore_for_each_rand(void *value, __UNUSED__ void *user_data) +{ + Eina_Bench_Object *ebo = value; + + ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE; +} + +static void +eina_bench_ecore_list_4evas_render(int request) +{ + Ecore_List *list = NULL; + Eina_Bench_Object *ebo; + int i; + int j; + + list = ecore_list_new(); + ecore_list_free_cb_set(list, free); + + for (i = 0; i < 1000; ++i) + { + for (j = 0; j < request; ++j) + { + ebo = malloc(sizeof (Eina_Bench_Object)); + if (!ebo) + continue; + + ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE; + + ecore_list_prepend(list, ebo); + } + + if (i == 500) + ecore_list_clear(list); + else if (i % 30 == 0) + ecore_list_for_each(list, _eina_ecore_for_each_remove, list); + + ecore_list_for_each(list, _eina_ecore_for_each_rand, list); + } + + ecore_list_destroy(list); +} + +void eina_bench_array(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "array-inline", + EINA_BENCHMARK( + eina_bench_array_4evas_render_inline), 200, + 4000, 100); + eina_benchmark_register(bench, "array-iterator", + EINA_BENCHMARK( + eina_bench_array_4evas_render_iterator), 200, + 4000, 100); + eina_benchmark_register(bench, "list", + EINA_BENCHMARK( + eina_bench_list_4evas_render), 200, + 4000, 100); + eina_benchmark_register(bench, "list-iterator", + EINA_BENCHMARK( + eina_bench_list_4evas_render_iterator), 200, + 4000, 100); + eina_benchmark_register(bench, "inlist", + EINA_BENCHMARK( + eina_bench_inlist_4evas_render), 200, + 4000, 100); + eina_benchmark_register(bench, "inlist-iterator", + EINA_BENCHMARK( + eina_bench_inlist_4evas_render_iterator), 200, + 4000, 100); +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "glist", + EINA_BENCHMARK( + eina_bench_glist_4evas_render), 200, + 4000, 100); + eina_benchmark_register(bench, "gptrarray", + EINA_BENCHMARK( + eina_bench_gptrarray_4evas_render), 200, + 4000, 100); +#endif + eina_benchmark_register(bench, "evas", + EINA_BENCHMARK( + eina_bench_evas_list_4evas_render), 200, + 4000, 100); + eina_benchmark_register(bench, "ecore", + EINA_BENCHMARK( + eina_bench_ecore_list_4evas_render), 200, + 500, 100); +} + diff --git a/libraries/eina/src/tests/eina_bench_convert.c b/libraries/eina/src/tests/eina_bench_convert.c new file mode 100644 index 0000000..aafe9ea --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_convert.c @@ -0,0 +1,183 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "eina_bench.h" +#include "eina_convert.h" + +static void +eina_bench_convert_itoa_10(int request) +{ + char tmp[128]; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + eina_convert_itoa(rand(), tmp); + } +} + +static void +eina_bench_convert_itoa_16(int request) +{ + char tmp[128]; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + eina_convert_xtoa(rand(), tmp); + } +} + +static void +eina_bench_convert_snprintf_10(int request) +{ + char tmp[128]; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + snprintf(tmp, 128, "%i", rand()); + } +} + +static void +eina_bench_convert_snprintf_x(int request) +{ + char tmp[128]; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + snprintf(tmp, 128, "%x", rand()); + } +} + +static void +eina_bench_convert_snprintf_a(int request) +{ + char tmp[128]; + double r; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + r = 10000 * (rand() / ((double)RAND_MAX + 1)); + snprintf(tmp, 128, "%a", r); + sscanf(tmp, "%la", &r); + } +} + +static void +eina_bench_convert_dtoa(int request) +{ + char tmp[128]; + long long m; + long e; + double r; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + r = 10000 * (rand() / ((double)RAND_MAX + 1)); + eina_convert_dtoa(r, tmp); + eina_convert_atod(tmp, 128, &m, &e); + r = ldexp((double)m, e); + } +} + +#ifdef EINA_BENCH_HAVE_GLIB +static void +eina_bench_convert_gstrtod(int request) +{ + char tmp[128]; + double r; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + r = 10000 * (rand() / ((double)RAND_MAX + 1)); + g_ascii_dtostr(tmp, 128, r); + r = g_ascii_strtod(tmp, NULL); + } +} +#endif + +void eina_bench_convert(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "itoa 10", + EINA_BENCHMARK( + eina_bench_convert_itoa_10), 1000, 200000, + 500); + eina_benchmark_register(bench, "itoa 16", + EINA_BENCHMARK( + eina_bench_convert_itoa_16), 1000, 200000, + 500); + eina_benchmark_register(bench, "snprintf 10", + EINA_BENCHMARK( + eina_bench_convert_snprintf_10), 1000, 200000, + 500); + eina_benchmark_register(bench, "snprintf 16", + EINA_BENCHMARK( + eina_bench_convert_snprintf_x), 1000, 200000, + 500); + eina_benchmark_register(bench, "snprintf a", + EINA_BENCHMARK( + eina_bench_convert_snprintf_a), 1000, 200000, + 500); + eina_benchmark_register(bench, "dtoa", + EINA_BENCHMARK( + eina_bench_convert_dtoa), 1000, 200000, + 500); +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "gstrtod", + EINA_BENCHMARK( + eina_bench_convert_gstrtod), 1000, 200000, + 500); +#endif +} + + + + diff --git a/libraries/eina/src/tests/eina_bench_hash.c b/libraries/eina/src/tests/eina_bench_hash.c new file mode 100644 index 0000000..5b42318 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_hash.c @@ -0,0 +1,545 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "Evas_Data.h" +#include "Ecore_Data.h" + +#include "eina_hash.h" +#include "eina_array.h" +#include "eina_bench.h" +#include "eina_rbtree.h" +#include "eina_convert.h" + +#ifdef CITYHASH_BENCH +// Hash function for a byte array. +uint64_t CityHash64(const char *buf, size_t len); + +static unsigned int +_eina_string_key_length(const char *key) +{ + if (!key) + return 0; + + return (int)strlen(key) + 1; +} + +static int +_eina_string_key_cmp(const char *key1, __UNUSED__ int key1_length, + const char *key2, __UNUSED__ int key2_length) +{ + return strcmp(key1, key2); +} +#endif + + +typedef struct _Eina_Bench_Rbtree Eina_Bench_Rbtree; +struct _Eina_Bench_Rbtree +{ + Eina_Rbtree node; + char key[10]; + int value; +}; + +static Eina_Rbtree_Direction +_eina_bench_rbtree_cmp(const Eina_Bench_Rbtree *left, + const Eina_Bench_Rbtree *right, + __UNUSED__ void *data) +{ + if (!left) + return EINA_RBTREE_RIGHT; + + if (!right) + return EINA_RBTREE_LEFT; + + return strcmp(left->key, + right->key) < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT; +} + +static inline int +_eina_bench_rbtree_key(const Eina_Bench_Rbtree *node, + const char *key, + int length, + __UNUSED__ void *data) +{ + return strncmp(node->key, key, length); +} + +static void +_eina_bench_rbtree_free(Eina_Rbtree *node, __UNUSED__ void *data) +{ + free(node); +} + +static void +eina_bench_lookup_rbtree(int request) +{ + Eina_Rbtree *root = NULL; + int i; + int j; + + for (i = 0; i < request; ++i) + { + Eina_Bench_Rbtree *tmp; + + tmp = malloc(sizeof (Eina_Bench_Rbtree)); + if (!tmp) + continue; + + tmp->value = i; + eina_convert_itoa(i, tmp->key); + + root = eina_rbtree_inline_insert(root, + &tmp->node, + EINA_RBTREE_CMP_NODE_CB( + _eina_bench_rbtree_cmp), + NULL); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < request; ++i) + { + Eina_Rbtree *tmp; + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + + tmp = eina_rbtree_inline_lookup(root, + tmp_key, + 10, + EINA_RBTREE_CMP_KEY_CB( + _eina_bench_rbtree_key), + NULL); + } + + eina_rbtree_delete(root, EINA_RBTREE_FREE_CB(_eina_bench_rbtree_free), NULL); +} + +static void +eina_bench_lookup_murmur(int request) +{ + Eina_Hash *hash = NULL; + int *tmp_val; + unsigned int i; + unsigned int j; + + hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), + EINA_KEY_CMP(_eina_string_key_cmp), + EINA_KEY_HASH(eina_hash_murmur3), + free, + 8); + + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + tmp_val = malloc(sizeof (int)); + + if (!tmp_val) + continue; + + eina_convert_itoa(i, tmp_key); + *tmp_val = i; + + eina_hash_add(hash, tmp_key, tmp_val); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + tmp_val = eina_hash_find(hash, tmp_key); + } + + eina_hash_free(hash); +} + +#ifdef CITYHASH_BENCH +static void +eina_bench_lookup_cityhash(int request) +{ + Eina_Hash *hash = NULL; + int *tmp_val; + unsigned int i; + unsigned int j; + + hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), + EINA_KEY_CMP(_eina_string_key_cmp), + EINA_KEY_HASH(CityHash64), + free, + 8); + + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + tmp_val = malloc(sizeof (int)); + + if (!tmp_val) + continue; + + eina_convert_itoa(i, tmp_key); + *tmp_val = i; + + eina_hash_add(hash, tmp_key, tmp_val); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + tmp_val = eina_hash_find(hash, tmp_key); + } + + eina_hash_free(hash); +} +#endif + +static void +eina_bench_lookup_superfast(int request) +{ + Eina_Hash *hash = NULL; + int *tmp_val; + unsigned int i; + unsigned int j; + + hash = eina_hash_string_superfast_new(free); + + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + tmp_val = malloc(sizeof (int)); + + if (!tmp_val) + continue; + + eina_convert_itoa(i, tmp_key); + *tmp_val = i; + + eina_hash_add(hash, tmp_key, tmp_val); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + tmp_val = eina_hash_find(hash, tmp_key); + } + + eina_hash_free(hash); +} + +static void +eina_bench_lookup_djb2(int request) +{ + Eina_Hash *hash = NULL; + int *tmp_val; + unsigned int i; + unsigned int j; + + hash = eina_hash_string_djb2_new(free); + + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + tmp_val = malloc(sizeof (int)); + + if (!tmp_val) + continue; + + eina_convert_itoa(i, tmp_key); + *tmp_val = i; + + eina_hash_add(hash, tmp_key, tmp_val); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + + tmp_val = eina_hash_find(hash, tmp_key); + } + + eina_hash_free(hash); +} + +typedef struct _Eina_Bench_DJB2 Eina_Bench_DJB2; +struct _Eina_Bench_DJB2 +{ + char *key; + int value; +}; + +static void +eina_bench_lookup_djb2_inline(int request) +{ + Eina_Hash *hash = NULL; + Eina_Bench_DJB2 *elm; + unsigned int i; + unsigned int j; + + hash = eina_hash_string_djb2_new(free); + + for (i = 0; i < (unsigned int)request; ++i) + { + int length; + + elm = malloc(sizeof (Eina_Bench_DJB2) + 10); + if (!elm) + continue; + + elm->key = (char *)(elm + 1); + + length = eina_convert_itoa(i, elm->key) + 1; + elm->value = i; + + eina_hash_direct_add_by_hash(hash, elm->key, length, + eina_hash_djb2(elm->key, length), elm); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + int length = 6; + + length = eina_convert_itoa(rand() % request, tmp_key) + 1; + + elm = + eina_hash_find_by_hash(hash, tmp_key, length, + eina_hash_djb2(tmp_key, length)); + } + + eina_hash_free(hash); +} + +#ifdef EINA_BENCH_HAVE_GLIB +typedef struct _Eina_Bench_Glib Eina_Bench_Glib; +struct _Eina_Bench_Glib +{ + char *key; + int value; +}; + +static void +eina_bench_lookup_ghash(int request) +{ + Eina_Bench_Glib *elm; + GHashTable *hash; + unsigned int i; + unsigned int j; + + hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free); + + for (i = 0; i < (unsigned int)request; ++i) + { + elm = malloc(sizeof (Eina_Bench_Glib) + 10); + if (!elm) + continue; + + elm->key = (char *)(elm + 1); + + eina_convert_itoa(i, elm->key); + elm->value = i; + + g_hash_table_insert(hash, elm->key, elm); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + + elm = g_hash_table_lookup(hash, tmp_key); + } + + g_hash_table_destroy(hash); +} +#endif + +static void +eina_bench_lookup_evas(int request) +{ + Evas_Hash *hash = NULL; + Eina_Array *array = NULL; + int *tmp_val; + Eina_Array_Iterator it; + unsigned int i; + unsigned int j; + + array = eina_array_new(10000); + + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + tmp_val = malloc(sizeof (int)); + + if (!tmp_val) + continue; + + eina_convert_itoa(i, tmp_key); + *tmp_val = i; + + hash = evas_hash_add(hash, tmp_key, tmp_val); + + eina_array_push(array, tmp_val); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + + tmp_val = evas_hash_find(hash, tmp_key); + } + + evas_hash_free(hash); + + EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it) + free(tmp_val); + + eina_array_free(array); +} + +typedef struct _Eina_Bench_Ecore Eina_Bench_Ecore; +struct _Eina_Bench_Ecore +{ + char *key; + int value; +}; + +static void +eina_bench_lookup_ecore(int request) +{ + Ecore_Hash *hash = NULL; + Eina_Bench_Ecore *elm; + unsigned int i; + unsigned int j; + + hash = ecore_hash_new(ecore_str_hash, ecore_str_compare); + + ecore_hash_free_key_cb_set(hash, NULL); + ecore_hash_free_value_cb_set(hash, free); + + for (i = 0; i < (unsigned int)request; ++i) + { + elm = malloc(sizeof (Eina_Bench_Ecore) + 10); + if (!elm) + continue; + + elm->key = (char *)(elm + 1); + eina_convert_itoa(i, elm->key); + elm->value = i; + + ecore_hash_set(hash, elm->key, elm); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < (unsigned int)request; ++i) + { + char tmp_key[10]; + + eina_convert_itoa(rand() % request, tmp_key); + + elm = ecore_hash_get(hash, tmp_key); + } + + ecore_hash_destroy(hash); +} + +void eina_bench_hash(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "superfast-lookup", + EINA_BENCHMARK( + eina_bench_lookup_superfast), 10, 10000, 10); + eina_benchmark_register(bench, "djb2-lookup", + EINA_BENCHMARK( + eina_bench_lookup_djb2), 10, 10000, 10); + eina_benchmark_register(bench, "djb2-lookup-inline", + EINA_BENCHMARK( + eina_bench_lookup_djb2_inline), 10, 10000, 10); + eina_benchmark_register(bench, "murmur", + EINA_BENCHMARK( + eina_bench_lookup_murmur), 10, 10000, 10); +#ifdef CITYHASH_BENCH + eina_benchmark_register(bench, "cityhash", + EINA_BENCHMARK( + eina_bench_lookup_cityhash), 10, 10000, 10); +#endif + eina_benchmark_register(bench, "rbtree", + EINA_BENCHMARK( + eina_bench_lookup_rbtree), 10, 10000, 10); +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "ghash-lookup", + EINA_BENCHMARK( + eina_bench_lookup_ghash), 10, 10000, 10); +#endif + eina_benchmark_register(bench, "evas-lookup", + EINA_BENCHMARK( + eina_bench_lookup_evas), 10, 10000, 10); + eina_benchmark_register(bench, "ecore-lookup", + EINA_BENCHMARK( + eina_bench_lookup_ecore), 10, 10000, 10); + +} diff --git a/libraries/eina/src/tests/eina_bench_mempool.c b/libraries/eina/src/tests/eina_bench_mempool.c new file mode 100644 index 0000000..d7e2c62 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_mempool.c @@ -0,0 +1,188 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "eina_bench.h" +#include "Eina.h" + +static void +_eina_mempool_bench(Eina_Mempool *mp, int request) +{ + Eina_Array *array; + int i; + int j; + + eina_init(); + array = eina_array_new(32); + + for (i = 0; i < 100; ++i) + { + for (j = 0; j < request; ++j) + { + eina_array_push(array, eina_mempool_malloc(mp, sizeof (int))); + } + + for (j = 0; j < request; ++j) + { + eina_mempool_free(mp, eina_array_pop(array)); + } + } + + eina_array_free(array); + eina_shutdown(); +} + +#ifdef EINA_BUILD_CHAINED_POOL +static void +eina_mempool_chained_mempool(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_add("chained_mempool", "test", NULL, sizeof (int), 256); + _eina_mempool_bench(mp, request); + eina_mempool_del(mp); +} +#endif + +#ifdef EINA_BUILD_PASS_THROUGH +static void +eina_mempool_pass_through(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_add("pass_through", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_bench(mp, request); + eina_mempool_del(mp); +} +#endif + +#ifdef EINA_BUILD_FIXED_BITMAP +static void +eina_mempool_fixed_bitmap(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_add("fixed_bitmap", "test", NULL, sizeof (int)); + _eina_mempool_bench(mp, request); + eina_mempool_del(mp); +} +#endif + +#ifdef EINA_BUILD_EMEMOA_FIXED +static void +eina_mempool_ememoa_fixed(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_add("ememoa_fixed", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_bench(mp, request); + eina_mempool_del(mp); +} +#endif + +#ifdef EINA_BUILD_EMEMOA_UNKNOWN +static void +eina_mempool_ememoa_unknown(int request) +{ + Eina_Mempool *mp; + + mp = eina_mempool_add("ememoa_unknown", + "test", + NULL, + 0, + 2, + sizeof (int), + 8, + sizeof (int) * 2, + 8); + _eina_mempool_bench(mp, request); + eina_mempool_del(mp); +} +#endif + +#ifdef EINA_BENCH_HAVE_GLIB +static void +eina_mempool_glib(int request) +{ + Eina_Array *array; + int i; + int j; + + eina_init(); + array = eina_array_new(32); + + for (i = 0; i < 100; ++i) + { + for (j = 0; j < request; ++j) + { + eina_array_push(array, g_slice_alloc(sizeof (int))); + } + + for (j = 0; j < request; ++j) + { + g_slice_free1(sizeof (int), eina_array_pop(array)); + } + } + + eina_array_free(array); + eina_shutdown(); + +} +#endif + +void +eina_bench_mempool(Eina_Benchmark *bench) +{ +#ifdef EINA_BUILD_CHAINED_POOL + eina_benchmark_register(bench, "chained mempool", + EINA_BENCHMARK( + eina_mempool_chained_mempool), 10, 10000, 10); +#endif +#ifdef EINA_BUILD_PASS_THROUGH + eina_benchmark_register(bench, "pass through", + EINA_BENCHMARK( + eina_mempool_pass_through), 10, 10000, 10); +#endif +#ifdef EINA_BUILD_FIXED_BITMAP + eina_benchmark_register(bench, "fixed bitmap", + EINA_BENCHMARK( + eina_mempool_fixed_bitmap), 10, 10000, 10); +#endif +#ifdef EINA_BUILD_EMEMOA_FIXED + eina_benchmark_register(bench, "ememoa fixed", + EINA_BENCHMARK( + eina_mempool_ememoa_fixed), 10, 10000, 10); +#endif +#ifdef EINA_BUILD_EMEMOA_UNKNOWN + eina_benchmark_register(bench, "ememoa unknown", + EINA_BENCHMARK( + eina_mempool_ememoa_unknown), 10, 10000, 10); +#endif +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "gslice", + EINA_BENCHMARK( + eina_mempool_glib), 10, 10000, 10); +#endif +} diff --git a/libraries/eina/src/tests/eina_bench_quad.c b/libraries/eina/src/tests/eina_bench_quad.c new file mode 100644 index 0000000..76d6667 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_quad.c @@ -0,0 +1,318 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric BAIL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#define WIDTH 720 +#define HEIGHT 576 + +#include "eina_main.h" +#include "eina_mempool.h" +#include "eina_rectangle.h" +#include "eina_quadtree.h" +#include "eina_list.h" +#include "eina_bench.h" + +static void +eina_bench_render_loop(int request) +{ + Eina_List *objects = NULL; + Eina_Rectangle *r; + int i; + int j; + + eina_init(); + + for (i = 0; i < request; ++i) + objects = eina_list_append(objects, + eina_rectangle_new((rand() * WIDTH) / RAND_MAX, + (rand() * + HEIGHT) / RAND_MAX, + (rand() * WIDTH / + 2) / RAND_MAX, + (rand() * HEIGHT / + 2) / RAND_MAX)); + + for (j = 0; j < 100; ++j) + { + Eina_Rectangle *collide; + Eina_List *collided = NULL; + Eina_List *changed = NULL; + Eina_List *l; + + /* Delete 25% of all objects */ + i = request * 25 / 100; + for (; i > 0; --i) + { + eina_rectangle_free(eina_list_data_get(objects)); + objects = eina_list_remove_list(objects, objects); + } + + /* Add them back */ + i = request * 25 / 100; + for (; i > 0; --i) + { + r = eina_rectangle_new((rand() * WIDTH) / RAND_MAX, + (rand() * HEIGHT) / RAND_MAX, + (rand() * WIDTH / 3) / RAND_MAX, + (rand() * HEIGHT / 3) / RAND_MAX); + objects = eina_list_prepend(objects, r); + changed = eina_list_append(changed, r); + } + + /* Do one collide search */ + collide = eina_rectangle_new((rand() * WIDTH) / RAND_MAX, + (rand() * HEIGHT) / RAND_MAX, + (rand() * WIDTH / 4) / RAND_MAX, + (rand() * HEIGHT / 4) / RAND_MAX); + EINA_LIST_FOREACH(objects, l, r) + if (eina_rectangles_intersect(r, collide)) + collided = eina_list_append(collided, r); + + collided = eina_list_free(collided); + eina_rectangle_free(collide); + + /* Modify 50% of all objects */ + i = request * 50 / 100; + for (; i > 0; --i) + { + r = eina_list_data_get(eina_list_last(objects)); + objects = eina_list_remove_list(objects, eina_list_last(objects)); + + r->x = (rand() * WIDTH) / RAND_MAX; + r->y = (rand() * HEIGHT) / RAND_MAX; + r->w = (rand() * WIDTH / 3) / RAND_MAX; + r->h = (rand() * HEIGHT / 3) / RAND_MAX; + + objects = eina_list_prepend(objects, r); + changed = eina_list_append(changed, r); + } + + /* Emulating the render loop by colliding all modified + object with all intersecting object */ + EINA_LIST_FREE(changed, r) + { + EINA_LIST_FOREACH(objects, l, collide) + if (r != collide && eina_rectangles_intersect(collide, r)) + collided = eina_list_append(collided, collide); + + collided = eina_list_append(collided, r); + } + + /* Ok, we compute it, now it's done */ + collided = eina_list_free(collided); + } + + EINA_LIST_FREE(objects, r) + eina_rectangle_free(r); + + eina_shutdown(); +} + +typedef struct _Eina_Bench_Quad Eina_Bench_Quad; +struct _Eina_Bench_Quad +{ + Eina_Rectangle r; + Eina_QuadTree_Item *item; +}; + +static Eina_Quad_Direction +_eina_bench_quadtree_vertical(const void *object, size_t middle) +{ + const Eina_Bench_Quad *b = object; + size_t y; + + y = b->r.y < 0 ? 0 : (size_t)b->r.y; + + if (y + b->r.h < middle) + return EINA_QUAD_LEFT; + + if (y > middle) + return EINA_QUAD_RIGHT; + + return EINA_QUAD_BOTH; +} + +static Eina_Quad_Direction +_eina_bench_quadtree_horizontal(const void *object, size_t middle) +{ + const Eina_Bench_Quad *b = object; + size_t x; + + x = b->r.x < 0 ? 0 : (size_t)b->r.x; + + if (x + b->r.w < middle) + return EINA_QUAD_LEFT; + + if (x > middle) + return EINA_QUAD_RIGHT; + + return EINA_QUAD_BOTH; +} + +static void +eina_bench_quadtree_render_loop(int request) +{ + Eina_List *objects = NULL; + Eina_Inlist *possibility; + Eina_Bench_Quad *b; + Eina_QuadTree *q; + Eina_Mempool *mp; + int i; + int j; + + eina_init(); + + mp = eina_mempool_add("chained_mempool", "bench-quad", NULL, + sizeof (Eina_Bench_Quad), 320); + + q = eina_quadtree_new(WIDTH, HEIGHT, + _eina_bench_quadtree_vertical, + _eina_bench_quadtree_horizontal); + + /* Create requested object */ + for (i = 0; i < request; ++i) + { + b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad)); + EINA_RECTANGLE_SET(&b->r, + (rand() * WIDTH) / RAND_MAX, + (rand() * HEIGHT) / RAND_MAX, + (rand() * WIDTH / 2) / RAND_MAX, + (rand() * HEIGHT / 2) / RAND_MAX); + b->item = eina_quadtree_add(q, b); + + objects = eina_list_append(objects, b); + } + + for (j = 0; j < 100; ++j) + { + Eina_Bench_Quad *collide; + Eina_List *changed = NULL; + Eina_List *collided = NULL; + + /* Delete 25% of all objects */ + i = request * 25 / 100; + for (; i > 0; --i) + { + b = eina_list_data_get(objects); + eina_quadtree_del(b->item); + eina_mempool_free(mp, b); + + objects = eina_list_remove_list(objects, objects); + } + + /* Add them back */ + i = request * 25 / 100; + for (; i > 0; --i) + { + b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad)); + EINA_RECTANGLE_SET(&b->r, + (rand() * WIDTH) / RAND_MAX, + (rand() * HEIGHT) / RAND_MAX, + (rand() * WIDTH / 3) / RAND_MAX, + (rand() * HEIGHT / 3) / RAND_MAX); + b->item = eina_quadtree_add(q, b); + + objects = eina_list_prepend(objects, b); + changed = eina_list_append(changed, b); + } + + /* Do one collide search */ + collide = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad)); + EINA_RECTANGLE_SET(&collide->r, + (rand() * WIDTH) / RAND_MAX, + (rand() * HEIGHT) / RAND_MAX, + (rand() * WIDTH / 4) / RAND_MAX, + (rand() * HEIGHT / 4) / RAND_MAX); + possibility = eina_quadtree_collide(q, + collide->r.x, collide->r.y, + collide->r.w, collide->r.h); + while (possibility) + { + b = eina_quadtree_object(possibility); + possibility = possibility->next; + + if (eina_rectangles_intersect(&b->r, &collide->r)) + collided = eina_list_append(collided, b); + } + + collided = eina_list_free(collided); + eina_mempool_free(mp, collide); + + /* Modify 50% of all objects */ + i = request * 50 / 100; + for (; i > 0; --i) + { + b = eina_list_data_get(eina_list_last(objects)); + objects = eina_list_remove_list(objects, eina_list_last(objects)); + + b->r.x = (rand() * WIDTH) / RAND_MAX; + b->r.y = (rand() * HEIGHT) / RAND_MAX; + b->r.w = (rand() * WIDTH / 3) / RAND_MAX; + b->r.h = (rand() * HEIGHT / 3) / RAND_MAX; + + eina_quadtree_change(b->item); + + objects = eina_list_prepend(objects, b); + changed = eina_list_append(changed, b); + } + + /* Emulating the render loop by colliding all modified + object with all intersecting object */ + EINA_LIST_FREE(changed, b) + { + possibility = eina_quadtree_collide(q, + b->r.x, b->r.y, b->r.w, b->r.h); + while (possibility) + { + collide = eina_quadtree_object(possibility); + possibility = possibility->next; + + if (collide != b && + eina_rectangles_intersect(&b->r, &collide->r)) + collided = eina_list_append(collided, collide); + } + + collided = eina_list_append(collided, b); + } + + /* Ok, we compute it, now it's done */ + collided = eina_list_free(collided); + } + + EINA_LIST_FREE(objects, b) + { + eina_quadtree_del(b->item); + eina_mempool_free(mp, b); + } + + eina_mempool_del(mp); + + eina_quadtree_free(q); + + eina_shutdown(); +} + +void +eina_bench_quadtree(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "collide-all", + EINA_BENCHMARK(eina_bench_render_loop), + 100, 1500, 50); + eina_benchmark_register(bench, "collide-quad-tree", + EINA_BENCHMARK(eina_bench_quadtree_render_loop), + 100, 1500, 50); +} diff --git a/libraries/eina/src/tests/eina_bench_rectangle_pool.c b/libraries/eina/src/tests/eina_bench_rectangle_pool.c new file mode 100644 index 0000000..96d4b1b --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_rectangle_pool.c @@ -0,0 +1,76 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_bench.h" +#include "Eina.h" + +static void +eina_bench_eina_rectangle_pool(int request) +{ + Eina_Rectangle_Pool *pool; + Eina_Rectangle *rect; + Eina_List *list = NULL; + int i; + + eina_init(); + eina_init(); + + pool = eina_rectangle_pool_new(2048, 2048); + if (!pool) + return; + + for (i = 0; i < request; ++i) + { + rect = NULL; + + while (!rect) + { + rect = eina_rectangle_pool_request(pool, i & 0xFF, 256 - (i & 0xFF)); + if (!rect) + { + rect = eina_list_data_get(list); + list = eina_list_remove_list(list, list); + if (rect) + eina_rectangle_pool_release(rect); + } + else + list = eina_list_append(list, rect); + + if (!(i & 0xFF)) + break; + } + } + + eina_rectangle_pool_free(pool); + eina_list_free(list); + + eina_shutdown(); +} + +void eina_bench_rectangle_pool(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "eina", + EINA_BENCHMARK( + eina_bench_eina_rectangle_pool), 10, 4000, 100); +} + + diff --git a/libraries/eina/src/tests/eina_bench_sort.c b/libraries/eina/src/tests/eina_bench_sort.c new file mode 100644 index 0000000..c3c9d9f --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_sort.c @@ -0,0 +1,222 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "Evas_Data.h" +#include "Ecore_Data.h" + +#include "eina_bench.h" +#include "eina_convert.h" +#include "eina_list.h" +#include "eina_main.h" + +static int +_eina_cmp_str(const char *a, const char *b) +{ + return strcmp(a, b); +} + +static void +eina_bench_sort_eina(int request) +{ + Eina_List *list = NULL; + int i; + + eina_init(); + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + list = eina_list_prepend(list, strdup(buffer)); + } + + list = eina_list_sort(list, -1, EINA_COMPARE_CB(_eina_cmp_str)); + + while (list) + { + free(eina_list_data_get(list)); + list = eina_list_remove_list(list, list); + } + + eina_shutdown(); +} + +static void +eina_bench_sort_evas(int request) +{ + Evas_List *list = NULL; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + list = evas_list_prepend(list, strdup(buffer)); + } + + list = evas_list_sort(list, -1, (void *)_eina_cmp_str); + + while (list) + { + free(evas_list_data(list)); + list = evas_list_remove_list(list, list); + } +} + +#ifdef EINA_BENCH_HAVE_GLIB +static void +eina_bench_sort_glist(int request) +{ + GList *list = NULL; + int i; + + srand(time(NULL)); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + list = g_list_prepend(list, strdup(buffer)); + } + + list = g_list_sort(list, (void *)_eina_cmp_str); + + while (list) + { + free(list->data); + list = g_list_delete_link(list, list); + } +} +#endif + +static void +eina_bench_sort_ecore_default(int request) +{ + Ecore_List *list = NULL; + int i; + + list = ecore_list_new(); + ecore_list_free_cb_set(list, free); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + ecore_list_prepend(list, strdup(buffer)); + } + + ecore_list_sort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0); + + ecore_list_destroy(list); +} + +static void +eina_bench_sort_ecore_merge(int request) +{ + Ecore_List *list = NULL; + int i; + + list = ecore_list_new(); + ecore_list_free_cb_set(list, free); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + ecore_list_prepend(list, strdup(buffer)); + } + + ecore_list_mergesort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0); + + ecore_list_destroy(list); +} + +static void +eina_bench_sort_ecore_heap(int request) +{ + Ecore_List *list = NULL; + int i; + + list = ecore_list_new(); + ecore_list_free_cb_set(list, free); + + for (i = 0; i < request; ++i) + { + char buffer[10]; + + eina_convert_itoa(rand() % request, buffer); + + ecore_list_prepend(list, strdup(buffer)); + } + + ecore_list_heapsort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0); + + ecore_list_destroy(list); +} + +void eina_bench_sort(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "eina", + EINA_BENCHMARK( + eina_bench_sort_eina), 10, 10000, 100); +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "glist", + EINA_BENCHMARK( + eina_bench_sort_glist), 10, 10000, 100); +#endif + eina_benchmark_register(bench, "ecore", + EINA_BENCHMARK( + eina_bench_sort_ecore_default), 10, 10000, 100); + eina_benchmark_register(bench, "ecore-merge", + EINA_BENCHMARK( + eina_bench_sort_ecore_merge), 10, 10000, 100); + eina_benchmark_register(bench, "ecore-heap", + EINA_BENCHMARK( + eina_bench_sort_ecore_heap), 10, 10000, 100); + eina_benchmark_register(bench, "evas", + EINA_BENCHMARK( + eina_bench_sort_evas), 10, 10000, 100); +} + + + diff --git a/libraries/eina/src/tests/eina_bench_stringshare.c b/libraries/eina/src/tests/eina_bench_stringshare.c new file mode 100644 index 0000000..a2c7b38 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_stringshare.c @@ -0,0 +1,177 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "Evas_Data.h" +#include "Ecore_Data.h" + +#include "eina_stringshare.h" +#include "eina_bench.h" +#include "eina_convert.h" +#include "eina_main.h" + +static void +eina_bench_stringshare_job(int request) +{ + const char *tmp; + unsigned int j; + int i; + + eina_init(); + + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + tmp = eina_stringshare_add(build); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(rand() % request, build + 7); + tmp = eina_stringshare_add(build); + } + + eina_shutdown(); +} + +#ifdef EINA_BENCH_HAVE_GLIB +static void +eina_bench_stringchunk_job(int request) +{ + GStringChunk *chunk; + unsigned int j; + int i; + + chunk = g_string_chunk_new(4096); + + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + g_string_chunk_insert_const(chunk, build); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(rand() % request, build + 7); + g_string_chunk_insert_const(chunk, build); + } + + g_string_chunk_free(chunk); +} +#endif + +static void +eina_bench_evas_job(int request) +{ + const char *tmp; + unsigned int j; + int i; + + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + tmp = evas_stringshare_add(build); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(rand() % request, build + 7); + tmp = evas_stringshare_add(build); + } +} + +static void +eina_bench_ecore_job(int request) +{ + const char *tmp; + unsigned int j; + int i; + + ecore_string_init(); + + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + tmp = ecore_string_instance(build); + } + + srand(time(NULL)); + + for (j = 0; j < 200; ++j) + for (i = 0; i < request; ++i) + { + char build[64] = "string_"; + + eina_convert_xtoa(rand() % request, build + 7); + tmp = ecore_string_instance(build); + } + + ecore_string_shutdown(); +} + +void eina_bench_stringshare(Eina_Benchmark *bench) +{ + eina_benchmark_register(bench, "stringshare", + EINA_BENCHMARK( + eina_bench_stringshare_job), 100, 20100, 500); +#ifdef EINA_BENCH_HAVE_GLIB + eina_benchmark_register(bench, "stringchunk (glib)", + EINA_BENCHMARK( + eina_bench_stringchunk_job), 100, 20100, 500); +#endif + eina_benchmark_register(bench, "stringshare (evas)", + EINA_BENCHMARK( + eina_bench_evas_job), 100, 20100, 500); + eina_benchmark_register(bench, "stringshare (ecore)", + EINA_BENCHMARK( + eina_bench_ecore_job), 100, 20100, 500); +} diff --git a/libraries/eina/src/tests/eina_bench_stringshare_e17.c b/libraries/eina/src/tests/eina_bench_stringshare_e17.c new file mode 100644 index 0000000..6ab0a80 --- /dev/null +++ b/libraries/eina/src/tests/eina_bench_stringshare_e17.c @@ -0,0 +1,118 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef EINA_BENCH_HAVE_GLIB +# include +#endif + +#include "Evas_Data.h" +#include "Ecore_Data.h" + +#include "Eina.h" + +#if EINA_ENABLE_BENCH_E17 + +typedef struct _Eina_Stringshare_Test Eina_Stringshare_Test; +struct _Eina_Stringshare_Test +{ + const char *name; + + int (*init)(void); + const char *(*add)(const char *str); + void (*del)(const char *str); + int (*shutdown)(void); +}; + +static const char *strings[30000]; +static Eina_Stringshare_Test eina_str = { + "eina", + eina_init, + eina_stringshare_add, + eina_stringshare_del, + eina_shutdown +}; + +static Eina_Stringshare_Test evas_str = { + "evas", +/* evas_stringshare_init, */ + evas_stringshare_add, + evas_stringshare_del +/* evas_stringshare_shutdown */ +}; + +static Eina_Stringshare_Test ecore_str = { + "ecore", + ecore_string_init, + ecore_string_instance, + ecore_string_release, + ecore_string_shutdown +}; + +static Eina_Stringshare_Test *str[] = { + &eina_str, + &evas_str, + &ecore_str, + NULL +}; + +static void +eina_bench_e17_stringshare(Eina_Stringshare_Test *str) +{ + Eina_Counter *cnt; + + cnt = eina_counter_new(str->name); + + eina_counter_start(cnt); + + str->init(); + +#include "strlog" + + str->shutdown(); + + eina_counter_stop(cnt, 1); + + fprintf(stderr, "For `%s`:\n", str->name); + eina_counter_dump(cnt); + + eina_counter_free(cnt); +} +#endif + +void +eina_bench_e17(void) +{ +#if EINA_ENABLE_BENCH_E17 + int i; + + eina_init(); + + for (i = 0; str[i]; ++i) + eina_bench_e17_stringshare(str[i]); + + eina_shutdown(); +#endif +} diff --git a/libraries/eina/src/tests/eina_suite.c b/libraries/eina/src/tests/eina_suite.c new file mode 100644 index 0000000..9b748fc --- /dev/null +++ b/libraries/eina/src/tests/eina_suite.c @@ -0,0 +1,177 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_suite.h" +#include "Eina.h" +#include +#include + +typedef struct _Eina_Test_Case Eina_Test_Case; +struct _Eina_Test_Case +{ + const char *test_case; + void (*build)(TCase *tc); +}; + +static const Eina_Test_Case etc[] = { + { "FixedPoint", eina_test_fp }, + { "Array", eina_test_array }, + { "Binary Share", eina_test_binshare }, + { "String Share", eina_test_stringshare }, + { "UString Share", eina_test_ustringshare }, + { "Log", eina_test_log }, + { "Error", eina_test_error }, + { "Magic", eina_test_magic }, + { "Inlist", eina_test_inlist }, + { "Lazy alloc", eina_test_lalloc }, + { "Main", eina_test_main }, + { "Counter", eina_test_counter }, + { "Hash", eina_test_hash }, + { "List", eina_test_list }, + { "CList", eina_test_clist }, + { "Iterator", eina_test_iterator }, + { "Accessor", eina_test_accessor }, + { "Module", eina_test_module }, + { "Convert", eina_test_convert }, + { "Rbtree", eina_test_rbtree }, + { "File", eina_test_file }, + { "Benchmark", eina_test_benchmark }, + { "Mempool", eina_test_mempool }, + { "Rectangle", eina_test_rectangle }, + { "Matrix Sparse", eina_test_matrixsparse }, + { "Eina Tiler", eina_test_tiler }, + { "Eina Strbuf", eina_test_strbuf }, + { "Eina Binbuf", eina_test_binbuf }, + { "String", eina_test_str }, + { "Unicode String", eina_test_ustr }, + { "QuadTree", eina_test_quadtree }, + { "Sched", eina_test_sched }, + { "Simple Xml Parser", eina_test_simple_xml_parser}, + { NULL, NULL } +}; + +static void +_list_tests(void) +{ + const Eina_Test_Case *itr = etc; + fputs("Available Test Cases:\n", stderr); + for (; itr->test_case; itr++) + fprintf(stderr, "\t%s\n", itr->test_case); +} + +static Eina_Bool +_use_test(int argc, const char **argv, const char *test_case) +{ + if (argc < 1) + return 1; + + for (; argc > 0; argc--, argv++) + if (strcmp(test_case, *argv) == 0) + return 1; + + return 0; +} + +Suite * +eina_build_suite(int argc, const char **argv) +{ + TCase *tc; + Suite *s; + int i; + + s = suite_create("Eina"); + + for (i = 0; etc[i].test_case; ++i) + { + if (!_use_test(argc, argv, etc[i].test_case)) + continue; + + tc = tcase_create(etc[i].test_case); + + etc[i].build(tc); + + suite_add_tcase(s, tc); + tcase_set_timeout(tc, 0); + } + + return s; +} + +/* FIXME this is a copy from eina_test_mempool + * we should remove the duplication + */ +static Eina_Array *_modules; +static void _mempool_init(void) +{ + eina_init(); + /* force modules to be loaded in case they are not installed */ + _modules = eina_module_list_get(NULL, + PACKAGE_BUILD_DIR "/src/modules", + EINA_TRUE, + NULL, + NULL); + eina_module_list_load(_modules); +} + +static void _mempool_shutdown(void) +{ + eina_module_list_free(_modules); + /* TODO delete the list */ + eina_shutdown(); +} + +int +main(int argc, char **argv) +{ + Suite *s; + SRunner *sr; + int i, failed_count; + + for (i = 1; i < argc; i++) + if ((strcmp(argv[i], "-h") == 0) || + (strcmp(argv[i], "--help") == 0)) + { + fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n", + argv[0]); + _list_tests(); + return 0; + } + else if ((strcmp(argv[i], "-l") == 0) || + (strcmp(argv[i], "--list") == 0)) + { + _list_tests(); + return 0; + } + + s = eina_build_suite(argc - 1, (const char **)argv + 1); + sr = srunner_create(s); + + _mempool_init(); + + srunner_run_all(sr, CK_ENV); + failed_count = srunner_ntests_failed(sr); + srunner_free(sr); + + _mempool_shutdown(); + + return (failed_count == 0) ? 0 : 255; +} diff --git a/libraries/eina/src/tests/eina_suite.h b/libraries/eina/src/tests/eina_suite.h new file mode 100644 index 0000000..643d6cc --- /dev/null +++ b/libraries/eina/src/tests/eina_suite.h @@ -0,0 +1,58 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifndef EINA_SUITE_H_ +#define EINA_SUITE_H_ + +#include + +void eina_test_stringshare(TCase *tc); +void eina_test_ustringshare(TCase *tc); +void eina_test_binshare(TCase *tc); +void eina_test_array(TCase *tc); +void eina_test_log(TCase *tc); +void eina_test_error(TCase *tc); +void eina_test_magic(TCase *tc); +void eina_test_inlist(TCase *tc); +void eina_test_clist(TCase *tc); +void eina_test_lalloc(TCase *tc); +void eina_test_main(TCase *tc); +void eina_test_counter(TCase *tc); +void eina_test_hash(TCase *tc); +void eina_test_list(TCase *tc); +void eina_test_iterator(TCase *tc); +void eina_test_accessor(TCase *tc); +void eina_test_module(TCase *tc); +void eina_test_convert(TCase *tc); +void eina_test_rbtree(TCase *tc); +void eina_test_file(TCase *tc); +void eina_test_benchmark(TCase *tc); +void eina_test_mempool(TCase *tc); +void eina_test_rectangle(TCase *tc); +void eina_test_matrixsparse(TCase *tc); +void eina_test_tiler(TCase *tc); +void eina_test_strbuf(TCase *tc); +void eina_test_binbuf(TCase *tc); +void eina_test_str(TCase *tc); +void eina_test_ustr(TCase *tc); +void eina_test_quadtree(TCase *tc); +void eina_test_fp(TCase *tc); +void eina_test_sched(TCase *tc); +void eina_test_simple_xml_parser(TCase *tc); + +#endif /* EINA_SUITE_H_ */ diff --git a/libraries/eina/src/tests/eina_test_accessor.c b/libraries/eina/src/tests/eina_test_accessor.c new file mode 100644 index 0000000..3c85ef0 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_accessor.c @@ -0,0 +1,243 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Bool +eina_accessor_check(__UNUSED__ const Eina_Array *array, + int *data, int *fdata) +{ + fail_if(*fdata > *data); + *fdata = *data; + + return EINA_TRUE; +} + +START_TEST(eina_accessor_array_simple) +{ + Eina_Accessor *it; + Eina_Array *ea; + int *tmp; + int i; + + eina_init(); + + ea = eina_array_new(11); + fail_if(!ea); + + for (i = 0; i < 200; ++i) + { + tmp = malloc(sizeof(int)); + fail_if(!tmp); + *tmp = i; + + eina_array_push(ea, tmp); + } + + it = eina_array_accessor_new(ea); + fail_if(!it); + + fail_if(eina_accessor_data_get(it, 100, (void **)&tmp) != EINA_TRUE); + fail_if(!tmp); + fail_if(*tmp != 100); + + i = 50; + eina_accessor_over(it, EINA_EACH_CB(eina_accessor_check), 50, 100, &i); + fail_if(i != 99); + + fail_if(eina_accessor_container_get(it) != ea); + + eina_accessor_free(it); + + eina_array_free(ea); + + eina_shutdown(); +} +END_TEST + +typedef struct _Eina_Test_Inlist Eina_Test_Inlist; +struct _Eina_Test_Inlist +{ + EINA_INLIST; + int i; +}; + +static Eina_Test_Inlist * +_eina_test_inlist_build(int i) +{ + Eina_Test_Inlist *tmp; + + tmp = malloc(sizeof(Eina_Test_Inlist)); + fail_if(!tmp); + tmp->i = i; + + return tmp; +} + +static Eina_Bool +eina_accessor_inlist_data_check(__UNUSED__ const Eina_Inlist *in_list, + Eina_Test_Inlist *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(data->i != 3227); break; + + case 1: fail_if(data->i != 1664); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +START_TEST(eina_accessor_inlist_simple) +{ + Eina_Inlist *lst = NULL; + Eina_Test_Inlist *tmp; + Eina_Test_Inlist *prev; + Eina_Accessor *it; + int i = 0; + + tmp = _eina_test_inlist_build(42); + lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp)); + fail_if(!lst); + + tmp = _eina_test_inlist_build(1664); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst); + fail_if(!lst); + fail_if(((Eina_Test_Inlist *)lst)->i != 42); + + prev = tmp; + tmp = _eina_test_inlist_build(3227); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET( + tmp), EINA_INLIST_GET(prev)); + fail_if(!lst); + fail_if(((Eina_Test_Inlist *)lst)->i != 42); + + tmp = _eina_test_inlist_build(27); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL); + + tmp = _eina_test_inlist_build(81); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL); + + tmp = _eina_test_inlist_build(7); + lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp)); + + it = eina_inlist_accessor_new(lst); + fail_if(!it); + fail_if(eina_accessor_container_get(it) != lst); + + eina_accessor_over(it, EINA_EACH_CB(eina_accessor_inlist_data_check), 2, 4, &i); + + fail_if(eina_accessor_data_get(it, 5, (void **)&tmp) != EINA_TRUE); + fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE); + fail_if(tmp->i != 1664); + fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE); + fail_if(tmp->i != 1664); + fail_if(eina_accessor_data_get(it, 1, (void **)&tmp) != EINA_TRUE); + fail_if(tmp->i != 42); + + eina_accessor_free(it); + + fail_if(i != 2); +} +END_TEST + +static Eina_Bool +eina_iterator_list_data_check(__UNUSED__ const Eina_List *list, + int *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(*data != 9); break; + + case 1: fail_if(*data != 6); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +START_TEST(eina_accessor_list_simple) +{ + Eina_List *list = NULL; + Eina_Accessor *it; + int data[] = { 6, 9, 42, 1, 7, 1337, 81, 1664 }; + int *j; + int i = 0; + + eina_init(); + + list = eina_list_append(list, &data[0]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[1]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[2]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[3]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[4]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[5]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[6]); + fail_if(list == NULL); + + it = eina_list_accessor_new(list); + fail_if(!it); + + eina_accessor_over(it, EINA_EACH_CB(eina_iterator_list_data_check), 2, 4, &i); + + fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE); + fail_if(*j != 1); + fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE); + fail_if(*j != 6); + fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE); + fail_if(*j != 6); + fail_if(eina_accessor_data_get(it, 1, (void **)&j) != EINA_TRUE); + fail_if(*j != 7); + fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE); + fail_if(*j != 1); + + eina_accessor_free(it); +} +END_TEST + +void +eina_test_accessor(TCase *tc) +{ + tcase_add_test(tc, eina_accessor_array_simple); + tcase_add_test(tc, eina_accessor_inlist_simple); + tcase_add_test(tc, eina_accessor_list_simple); +} diff --git a/libraries/eina/src/tests/eina_test_array.c b/libraries/eina/src/tests/eina_test_array.c new file mode 100644 index 0000000..0b054ea --- /dev/null +++ b/libraries/eina/src/tests/eina_test_array.c @@ -0,0 +1,191 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(eina_array_simple) +{ + Eina_Array *ea; + char *tmp; + Eina_Array_Iterator it; + unsigned int i; + + eina_init(); + + ea = eina_array_new(11); + fail_if(!ea); + + for (i = 0; i < 201; ++i) + { + tmp = malloc(sizeof(char) * 10); + fail_if(!tmp); + eina_convert_itoa(i, tmp); + + eina_array_push(ea, tmp); + } + + fail_if(eina_array_data_get(ea, 10) == NULL); + fail_if(atoi(eina_array_data_get(ea, 10)) != 10); + tmp = eina_array_pop(ea); + fail_if(tmp == NULL); + fail_if(atoi(tmp) != 200); + free(tmp); + + EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) + { + fail_if((unsigned int)atoi(tmp) != i); + free(tmp); + } + + fail_if(i != 200); + + eina_array_clean(ea); + eina_array_flush(ea); + eina_array_free(ea); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_array_static) +{ + Eina_Array sea; + char *tmp; + Eina_Array_Iterator it; + unsigned int i; + + eina_init(); + + eina_array_step_set(&sea, sizeof(sea), 10); + + for (i = 0; i < 200; ++i) + { + tmp = malloc(sizeof(char) * 10); + fail_if(!tmp); + eina_convert_itoa(i, tmp); + + eina_array_push(&sea, tmp); + } + + fail_if(eina_array_data_get(&sea, 10) == NULL); + fail_if(atoi(eina_array_data_get(&sea, 10)) != 10); + + EINA_ARRAY_ITER_NEXT(&sea, i, tmp, it) + { + fail_if((unsigned int)atoi(tmp) != i); + free(tmp); + } + + fail_if(i != 200); + + eina_array_clean(&sea); + eina_array_flush(&sea); + + eina_shutdown(); +} +END_TEST + +Eina_Bool +keep_int(void *data, void *gdata) +{ + int *tmp = data; + + fail_if(gdata); + fail_if(!tmp); + + if (*tmp == 0) + return EINA_FALSE; + + return EINA_TRUE; +} + +START_TEST(eina_array_remove_stuff) +{ + Eina_Array *ea; + int *tmp; + Eina_Array_Iterator it; + unsigned int i; + + eina_init(); + + ea = eina_array_new(64); + fail_if(!ea); + + for (i = 0; i < 1000; ++i) + { + tmp = malloc(sizeof(int)); + fail_if(!tmp); + *tmp = i; + + eina_array_push(ea, tmp); + } + + // Remove the first 10 items + for (i = 0; i < 10; ++i) + { + tmp = eina_array_data_get(ea, i); + fail_if(!tmp); + *tmp = 0; + } + fail_if(eina_array_remove(ea, keep_int, NULL) != EINA_TRUE); + + fail_if(eina_array_count_get(ea) != 990); + EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) + fail_if(*tmp == 0); + + // Remove the last items + for (i = 980; i < 990; ++i) + { + tmp = eina_array_data_get(ea, i); + fail_if(!tmp); + *tmp = 0; + } + eina_array_remove(ea, keep_int, NULL); + + // Remove all items + fail_if(eina_array_count_get(ea) != 980); + EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) + { + fail_if(*tmp == 0); + *tmp = 0; + } + + eina_array_remove(ea, keep_int, NULL); + + fail_if(eina_array_count_get(ea) != 0); + + eina_array_free(ea); + + eina_shutdown(); +} +END_TEST + +void +eina_test_array(TCase *tc) +{ + tcase_add_test(tc, eina_array_simple); + tcase_add_test(tc, eina_array_static); + tcase_add_test(tc, eina_array_remove_stuff); +} diff --git a/libraries/eina/src/tests/eina_test_benchmark.c b/libraries/eina/src/tests/eina_test_benchmark.c new file mode 100644 index 0000000..4352c16 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_benchmark.c @@ -0,0 +1,76 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "eina_benchmark.h" + +static int global_test = 0; + +static void +_eina_benchmark_specimens(int request) +{ + int i; + int a = 0; + + for (i = 0; i < request; ++i) + a += i; + + global_test = a; +} + +START_TEST(eina_benchmark_simple) +{ + Eina_Benchmark *eb; + Eina_Array_Iterator it; + Eina_Array *ea; + char *tmp; + unsigned int i; + + eb = eina_benchmark_new("benchmark", "test"); + fail_if(!eb); + + eina_benchmark_register(eb, "specimens_check", + EINA_BENCHMARK(_eina_benchmark_specimens), + 1000, 1100, 100); + + ea = eina_benchmark_run(eb); + fail_if(!ea); + + EINA_ARRAY_ITER_NEXT(ea, i, tmp, it) + { + fail_if(!tmp); + fail_if(unlink(tmp)); + } + + fail_if(global_test != 499500); + + eina_benchmark_free(eb); +} +END_TEST + +void +eina_test_benchmark(TCase *tc) +{ + tcase_add_test(tc, eina_benchmark_simple); +} diff --git a/libraries/eina/src/tests/eina_test_binbuf.c b/libraries/eina/src/tests/eina_test_binbuf.c new file mode 100644 index 0000000..713e078 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_binbuf.c @@ -0,0 +1,235 @@ +/* EINA - EFL data type library + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(binbuf_simple) +{ + Eina_Binbuf *buf; + char *txt; + const char cbuf[] = "Null in the middle \0 and more text afterwards and \0 anotehr null just there and another one \0 here."; + size_t size = sizeof(cbuf) - 1; /* We don't care about the real NULL */ + + + eina_init(); + + buf = eina_binbuf_new(); + fail_if(!buf); + + eina_binbuf_append_length(buf, cbuf, size); + fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size)); + fail_if(size != eina_binbuf_length_get(buf)); + + eina_binbuf_append_length(buf, cbuf, size); + fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size)); + fail_if(memcmp(eina_binbuf_string_get(buf) + size, cbuf, size)); + fail_if(2 * size != eina_binbuf_length_get(buf)); + + txt = eina_binbuf_string_steal(buf); + fail_if(memcmp(txt, cbuf, size)); + fail_if(memcmp(txt + size, cbuf, size)); + free(txt); + fail_if(eina_binbuf_length_get(buf) != 0); + + eina_binbuf_append_length(buf, cbuf, size); + fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size)); + fail_if(size != eina_binbuf_length_get(buf)); + + eina_binbuf_reset(buf); + fail_if(eina_binbuf_length_get(buf) != 0); + + eina_binbuf_free(buf); + + eina_shutdown(); +#undef TEXT +} +END_TEST + +START_TEST(binbuf_remove) +{ + Eina_Binbuf *buf; + const char cbuf[] = "12\0 456 78\0 abcthis is some more random junk here!"; + size_t size = sizeof(cbuf) - 1; /* We don't care about the real NULL */ + + eina_init(); + + buf = eina_binbuf_new(); + fail_if(!buf); + + eina_binbuf_append_length(buf, cbuf, size); + fail_if(size != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 0, 4); + fail_if(size - 4 != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 8, 1000); + fail_if(8 != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 7, eina_binbuf_length_get(buf)); + fail_if(7 != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 2, 4); + fail_if(5 != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 4, 1); + fail_if(5 != eina_binbuf_length_get(buf)); + eina_binbuf_remove(buf, 0, eina_binbuf_length_get(buf)); + fail_if(0 != eina_binbuf_length_get(buf)); + + eina_binbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(binbuf_insert) +{ +#if 0 + Eina_Binbuf *buf; + + eina_init(); + + buf = eina_binbuf_new(); + fail_if(!buf); + + eina_binbuf_insert(buf, "abc", 10); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "abc")); + + eina_binbuf_insert(buf, "123", 0); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "123abc")); + + eina_binbuf_insert(buf, "xyz", eina_binbuf_length_get(buf)); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "123abcxyz")); + + eina_binbuf_insert(buf, "xyz", 1); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "1xyz23abcxyz")); + + eina_binbuf_insert_n(buf, "ABCDEF", 2, 1); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "1ABxyz23abcxyz")); + + eina_binbuf_insert_n(buf, "EINA", 2, 3); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strcmp(eina_binbuf_string_get(buf), "1ABEIxyz23abcxyz")); + + eina_binbuf_insert_escaped(buf, "678", 3); + fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf)); + fail_if(strncmp(eina_binbuf_string_get(buf) + 3, "678", 3)); + + eina_binbuf_insert_escaped(buf, "089 '\\", 9); + fail_if(strlen(eina_binbuf_string_get( + buf)) != eina_binbuf_length_get(buf)); + fail_if(strncmp(eina_binbuf_string_get(buf) + 9, + "089\\ \\'\\\\", + strlen("089\\ \\'\\\\"))); + eina_binbuf_reset(buf); + + eina_binbuf_free(buf); + + eina_shutdown(); +#endif +} +END_TEST + +START_TEST(binbuf_realloc) +{ + Eina_Binbuf *buf; + char pattern[1024 * 16]; + unsigned int i; + size_t sz; + + for (i = 0; i < sizeof(pattern) - 1; i++) + { + if (i % 27 == 26) + pattern[i] = '\0'; + else + pattern[i] = 'a' + (i % 27); + } + pattern[i] = '\0'; + + eina_init(); + + buf = eina_binbuf_new(); + fail_if(!buf); + + sz = 0; + + eina_binbuf_append_length(buf, pattern, 1); + fail_if(eina_binbuf_length_get(buf) != sz + 1); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 1)); + sz += 1; + + eina_binbuf_append_length(buf, pattern, 32); + fail_if(eina_binbuf_length_get(buf) != sz + 32); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 32)); + sz += 32; + + eina_binbuf_append_length(buf, pattern, 64); + fail_if(eina_binbuf_length_get(buf) != sz + 64); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 64)); + sz += 64; + + eina_binbuf_append_length(buf, pattern, 128); + fail_if(eina_binbuf_length_get(buf) != sz + 128); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 128)); + sz += 128; + + eina_binbuf_append_length(buf, pattern, 4096); + fail_if(eina_binbuf_length_get(buf) != sz + 4096); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 4096)); + sz += 4096; + + eina_binbuf_append_length(buf, pattern, sizeof(pattern) - 1); + fail_if(eina_binbuf_length_get(buf) != sz + sizeof(pattern) - 1); + fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, sizeof(pattern) - + 1)); + sz += sizeof(pattern) - 1; + + + eina_binbuf_remove(buf, 1024, 1024 + 1234); + fail_if(eina_binbuf_length_get(buf) != sz - 1234); + sz -= 1234; + + eina_binbuf_remove(buf, 0, 0 + 8192); + fail_if(eina_binbuf_length_get(buf) != sz - 8192); + sz -= 8192; + + eina_binbuf_remove(buf, 0, 0 + 32); + fail_if(eina_binbuf_length_get(buf) != sz - 32); + sz -= 32; + + + eina_binbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +void +eina_test_binbuf(TCase *tc) +{ + tcase_add_test(tc, binbuf_simple); + tcase_add_test(tc, binbuf_remove); + tcase_add_test(tc, binbuf_insert); + tcase_add_test(tc, binbuf_realloc); +} diff --git a/libraries/eina/src/tests/eina_test_binshare.c b/libraries/eina/src/tests/eina_test_binshare.c new file mode 100644 index 0000000..b2e77ae --- /dev/null +++ b/libraries/eina/src/tests/eina_test_binshare.c @@ -0,0 +1,199 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +#define TEST0 "te\0st/0" +#define TEST0_SIZE 7 +#define TEST1 "te\0st/11" +#define TEST1_SIZE 8 + +START_TEST(eina_binshare_simple) +{ + const char *t0; + const char *t1; + + eina_init(); + + t0 = eina_binshare_add_length(TEST0, TEST0_SIZE); + t1 = eina_binshare_add_length(TEST1, TEST1_SIZE); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0); + fail_if(memcmp(t1, TEST1, TEST1_SIZE) != 0); + + t0 = eina_binshare_ref(t0); + fail_if(t0 == NULL); + fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0); + + eina_binshare_del(t0); + eina_binshare_del(t0); + eina_binshare_del(t1); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_binshare_small) +{ + char buf[4]; + int i; + + eina_init(); + + for (i = 1; i < 3; i++) + { + const char *t0, *t1; + int j; + + for (j = 0; j < i; j++) + { + char c; + for (c = 'a'; c <= 'z'; c++) + buf[j] = c; + } + buf[i] = '\0'; + t0 = eina_binshare_add_length(buf, i); + t1 = eina_binshare_add_length(buf, i); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(t0 != t1); + fail_if(memcmp(t0, buf, i) != 0); + + eina_binshare_del(t0); + eina_binshare_del(t1); + } + eina_shutdown(); +} +END_TEST + + +START_TEST(eina_binshare_test_share) +{ + const char *t0; + const char *t1; + + eina_init(); + + t0 = eina_binshare_add_length(TEST0, TEST0_SIZE); + t1 = eina_binshare_add_length(TEST0, TEST0_SIZE); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0); + fail_if(memcmp(t1, TEST0, TEST0_SIZE) != 0); + fail_if(t0 != t1); + fail_if(TEST0_SIZE != eina_binshare_length(t0)); + + eina_binshare_del(t0); + eina_binshare_del(t1); + eina_shutdown(); +} +END_TEST + +START_TEST(eina_binshare_putstuff) +{ + const char *tmp; + int i; + + eina_init(); + + for (i = 10000; i > 0; --i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + tmp = eina_binshare_add_length(build, strlen(build)); + fail_if(tmp != eina_binshare_add_length(build, strlen(build))); + fail_if((int)strlen(build) != eina_binshare_length(tmp)); + } + eina_shutdown(); +} +END_TEST + +START_TEST(eina_binshare_collision) +{ + Eina_Array *ea; + char buffer[50]; + int i; + + srand(time(NULL)); + + eina_init(); + + ea = eina_array_new(256); + fail_if(!ea); + + for (i = 0; i < 10000; ++i) + { + eina_convert_itoa(rand(), buffer); + eina_array_push(ea, + (void *)eina_binshare_add_length(buffer, strlen(buffer))); + if (rand() > RAND_MAX / 2) + { + const char *r = eina_binshare_add_length(buffer, strlen(buffer)); + fail_if(r == NULL); + } + } + + for (i = 0; i < 10000; ++i) + { + const char *r; + + eina_convert_itoa(60000 - i, buffer); + eina_array_push(ea, + (void *)eina_binshare_add_length(buffer, strlen(buffer))); + r = eina_binshare_add_length(buffer, strlen(buffer)); + fail_if(r == NULL); + r = eina_binshare_add_length(buffer, strlen(buffer)); + fail_if(r == NULL); + } + + for (i = 0; i < 200; ++i) + eina_binshare_del(eina_array_data_get(ea, i)); + + for (i = 0; i < 1000; ++i) + eina_binshare_del(eina_array_pop(ea)); + + eina_shutdown(); + + eina_array_free(ea); +} +END_TEST + +void +eina_test_binshare(TCase *tc) +{ + tcase_add_test(tc, eina_binshare_simple); + tcase_add_test(tc, eina_binshare_small); + tcase_add_test(tc, eina_binshare_test_share); + tcase_add_test(tc, eina_binshare_collision); + tcase_add_test(tc, eina_binshare_putstuff); +} diff --git a/libraries/eina/src/tests/eina_test_clist.c b/libraries/eina/src/tests/eina_test_clist.c new file mode 100644 index 0000000..901c0e8 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_clist.c @@ -0,0 +1,89 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include + +#include +#include "eina_suite.h" + +Eina_Clist string_list = EINA_CLIST_INIT(string_list); + +struct test_string +{ + Eina_Clist entry; + const char *string; +}; + +static void add_string(const char *foo) +{ + struct test_string *t; + + t = malloc(sizeof *t); + assert(t != NULL); + + t->string = foo; + eina_clist_add_tail(&string_list, &t->entry); +} + +static void print_strings(void) +{ + struct test_string *str; + + EINA_CLIST_FOR_EACH_ENTRY(str, &string_list, struct test_string, entry) + { + printf("%s ", str->string); + } + printf("\n"); +} + +static void free_list(void) +{ + struct test_string *str, *tmp; + + EINA_CLIST_FOR_EACH_ENTRY_SAFE(str, tmp, &string_list, struct test_string, entry) + { + eina_clist_remove(&str->entry); + } +} + +START_TEST(eina_clist_basic) +{ + unsigned int n = 0; + + add_string("this"); + n++; + add_string("is"); + n++; + add_string("a"); + n++; + add_string("test"); + n++; + add_string("of"); + n++; + add_string("clists"); + n++; + add_string("-"); + n++; + add_string("hello"); + n++; + add_string("world"); + n++; + + fail_if(eina_clist_count(&string_list) != n); + + print_strings(); + + free_list(); + + fail_if(eina_clist_count(&string_list) != 0); +} +END_TEST + +void +eina_test_clist(TCase *tc) +{ + tcase_add_test(tc, eina_clist_basic); +} diff --git a/libraries/eina/src/tests/eina_test_convert.c b/libraries/eina/src/tests/eina_test_convert.c new file mode 100644 index 0000000..8e7f58c --- /dev/null +++ b/libraries/eina/src/tests/eina_test_convert.c @@ -0,0 +1,165 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(eina_convert_simple) +{ + char tmp[128]; + + fail_if(eina_convert_itoa(0, tmp) != 1); + fail_if(strcmp(tmp, "0") != 0); + + fail_if(eina_convert_itoa(-1, tmp) != 2); + fail_if(strcmp(tmp, "-1") != 0); + + fail_if(eina_convert_itoa(100, tmp) != 3); + fail_if(strcmp(tmp, "100") != 0); + + fail_if(eina_convert_itoa(-100, tmp) != 4); + fail_if(strcmp(tmp, "-100") != 0); + + fail_if(eina_convert_itoa(10000000, tmp) != 8); + fail_if(strcmp(tmp, "10000000") != 0); + + fail_if(eina_convert_xtoa(0, tmp) != 1); + fail_if(strcmp(tmp, "0") != 0); + + fail_if(eina_convert_xtoa(0xA1, tmp) != 2); + fail_if(strcmp(tmp, "a1") != 0); + + fail_if(eina_convert_xtoa(0xFF00EF0E, tmp) != 8); + fail_if(strcmp(tmp, "ff00ef0e") != 0); +} +END_TEST + +#define EET_TEST_DOUBLE0 123.45689 +#define EET_TEST_DOUBLE1 1.0 +#define EET_TEST_DOUBLE2 0.25 +#define EET_TEST_DOUBLE3 0.0001234 +#define EET_TEST_DOUBLE4 123456789.9876543210 + +static void +_eina_convert_check(double test, int length) +{ + char tmp[128]; + long long int m = 0; + long e = 0; + double r; + + fail_if(eina_convert_dtoa(test, tmp) != length); + fail_if(eina_convert_atod(tmp, 128, &m, &e) != EINA_TRUE); + r = ldexp((double)m, e); + fail_if(fabs(r - test) > DBL_MIN); +} + + START_TEST(eina_convert_double) +{ + long long int m = 0; + long e = 0; + + eina_init(); + + _eina_convert_check(EET_TEST_DOUBLE0, 20); + _eina_convert_check(-EET_TEST_DOUBLE0, 21); + _eina_convert_check(EET_TEST_DOUBLE1, 6); + _eina_convert_check(EET_TEST_DOUBLE2, 6); + _eina_convert_check(EET_TEST_DOUBLE3, 21); + _eina_convert_check(EET_TEST_DOUBLE4, 21); + + fail_if(eina_convert_atod("ah ah ah", 8, &m, &e) != EINA_FALSE); + fail_if(eina_convert_atod("0xjo", 8, &m, &e) != EINA_FALSE); + fail_if(eina_convert_atod("0xp", 8, &m, &e) != EINA_FALSE); + + eina_shutdown(); +} +END_TEST + +static void +_eina_convert_fp_check(double d, Eina_F32p32 fp, int length) +{ + char tmp1[128]; + char tmp2[128]; + Eina_F32p32 fpc; + double fpd; + int l1; + int l2; + + l1 = eina_convert_dtoa(d, tmp1); + l2 = eina_convert_fptoa(fp, tmp2); +/* fprintf(stderr, "[%s](%i) vs [%s](%i)\n", tmp1, l1, tmp2, l2); */ + fail_if(l1 != l2); + fail_if(length != l1); + fail_if(strcmp(tmp1, tmp2) != 0); + + fail_if(!eina_convert_atofp(tmp2, l2, &fpc)); +/* fprintf(stderr, "%016x vs %016x\n", fpc, fp); */ + fail_if(fpc != fp); + + fail_if(!eina_convert_atofp(tmp1, l1, &fpc)); + fpd = eina_f32p32_double_to(fpc); +/* fprintf(stderr, "%0.16f vs %0.16f\n", fpd, d); */ + fail_if(fabs(fpd - d) > DBL_MIN); + + d = -d; + fp = -fp; + + l1 = eina_convert_dtoa(d, tmp1); + l2 = eina_convert_fptoa(fp, tmp2); + fail_if(l1 != l2); + fail_if(length + 1 != l1); + fail_if(strcmp(tmp1, tmp2) != 0); + + fail_if(!eina_convert_atofp(tmp2, l2, &fpc)); +/* fprintf(stderr, "%016x vs %016x\n", fpc, fp); */ + fail_if(fpc != fp); + + fail_if(!eina_convert_atofp(tmp1, l1, &fpc)); + fpd = eina_f32p32_double_to(fpc); +/* fprintf(stderr, "%0.16f vs %0.16f\n", fpd, d); */ + fail_if(fabs(fpd - d) > DBL_MIN); +} + + START_TEST(eina_convert_fp) +{ + _eina_convert_fp_check(1.0, 0x0000000100000000, 6); + _eina_convert_fp_check(0.5, 0x0000000080000000, 8); + _eina_convert_fp_check(0.625, 0x00000000a0000000, 8); + _eina_convert_fp_check(256.0, 0x0000010000000000, 6); + _eina_convert_fp_check(0.5, 0x0000000080000000, 8); + _eina_convert_fp_check(128.625, 0x00000080a0000000, 10); +} +END_TEST + +void +eina_test_convert(TCase *tc) +{ + tcase_add_test(tc, eina_convert_simple); + tcase_add_test(tc, eina_convert_double); + tcase_add_test(tc, eina_convert_fp); +} diff --git a/libraries/eina/src/tests/eina_test_counter.c b/libraries/eina/src/tests/eina_test_counter.c new file mode 100644 index 0000000..2a3f30d --- /dev/null +++ b/libraries/eina/src/tests/eina_test_counter.c @@ -0,0 +1,108 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_suite.h" +#include "Eina.h" +#include "eina_safety_checks.h" + +START_TEST(eina_counter_simple) +{ + Eina_Counter *cnt; + char *dump; + int i; + + eina_init(); + + cnt = eina_counter_new("eina_test"); + fail_if(!cnt); + + eina_counter_start(cnt); + + for (i = 0; i < 100000; ++i) + { + void *tmp = malloc(sizeof(long int)); + free(tmp); + } + + eina_counter_stop(cnt, i); + + eina_counter_start(cnt); + + for (i = 0; i < 200000; ++i) + { + void *tmp = malloc(sizeof(long int)); + free(tmp); + } + + eina_counter_stop(cnt, i); + + dump = eina_counter_dump(cnt); + fail_if(!dump); + + fprintf(stderr, "%s", dump); + + free(dump); + + eina_counter_free(cnt); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_counter_break) +{ + Eina_Counter *cnt; + + eina_init(); + + cnt = eina_counter_new("eina_test"); + fail_if(!cnt); + + eina_counter_stop(cnt, 10); + + eina_counter_free(cnt); + +#ifdef EINA_SAFETY_CHECKS + { + char *dump; + + fprintf(stderr, "you should have a safety check failure below:\n"); + dump = eina_counter_dump(NULL); + fail_if(dump); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); + free(dump); + } +#endif + + eina_shutdown(); +} +END_TEST + +void eina_test_counter(TCase *tc) +{ + tcase_add_test(tc, eina_counter_simple); + tcase_add_test(tc, eina_counter_break); +} + diff --git a/libraries/eina/src/tests/eina_test_error.c b/libraries/eina/src/tests/eina_test_error.c new file mode 100644 index 0000000..506f406 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_error.c @@ -0,0 +1,59 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#ifdef HAVE_EVIL +# include +#endif + +#include "eina_suite.h" +#include "Eina.h" + +#define TEST_TEXT "The big test\n" + +START_TEST(eina_error_errno) +{ + int test; + + setenv("EINA_ERROR_LEVEL", "1", 0); + + eina_init(); + + test = eina_error_msg_register(TEST_TEXT); + fail_if(!eina_error_msg_get(test)); + fail_if(strcmp(eina_error_msg_get(test), TEST_TEXT) != 0); + + eina_error_set(test); + fail_if(eina_error_get() != test); + + eina_shutdown(); +} +END_TEST + +void +eina_test_error(TCase *tc) +{ + tcase_add_test(tc, eina_error_errno); +} diff --git a/libraries/eina/src/tests/eina_test_file.c b/libraries/eina/src/tests/eina_test_file.c new file mode 100644 index 0000000..aeb5461 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_file.c @@ -0,0 +1,88 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" +#include "eina_safety_checks.h" + +START_TEST(eina_file_split_simple) +{ + Eina_Array *ea; + + eina_init(); + +#ifdef EINA_SAFETY_CHECKS + fprintf(stderr, "you should have a safety check failure below:\n"); + ea = eina_file_split(NULL); + fail_if(ea); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); +#endif + +#ifdef _WIN32 + ea = eina_file_split(strdup("\\this\\is\\a\\small\\test")); +#else + ea = eina_file_split(strdup("/this/is/a/small/test")); +#endif + + fail_if(!ea); + fail_if(eina_array_count_get(ea) != 5); + fail_if(strcmp(eina_array_data_get(ea, 0), "this")); + fail_if(strcmp(eina_array_data_get(ea, 1), "is")); + fail_if(strcmp(eina_array_data_get(ea, 2), "a")); + fail_if(strcmp(eina_array_data_get(ea, 3), "small")); + fail_if(strcmp(eina_array_data_get(ea, 4), "test")); + + eina_array_free(ea); + +#ifdef _WIN32 + ea = + eina_file_split(strdup( + "this\\\\is\\\\\\a \\more\\complex\\\\\\case\\\\\\")); +#else + ea = eina_file_split(strdup("this//is///a /more/complex///case///")); +#endif + + fail_if(!ea); + fail_if(eina_array_count_get(ea) != 6); + fail_if(strcmp(eina_array_data_get(ea, 0), "this")); + fail_if(strcmp(eina_array_data_get(ea, 1), "is")); + fail_if(strcmp(eina_array_data_get(ea, 2), "a ")); + fail_if(strcmp(eina_array_data_get(ea, 3), "more")); + fail_if(strcmp(eina_array_data_get(ea, 4), "complex")); + fail_if(strcmp(eina_array_data_get(ea, 5), "case")); + + eina_array_free(ea); + + eina_shutdown(); +} +END_TEST + +void +eina_test_file(TCase *tc) +{ + tcase_add_test(tc, eina_file_split_simple); +} + diff --git a/libraries/eina/src/tests/eina_test_fp.c b/libraries/eina/src/tests/eina_test_fp.c new file mode 100644 index 0000000..bdb3100 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_fp.c @@ -0,0 +1,93 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(eina_fp_cos) +{ + Eina_F32p32 fc; + Eina_F32p32 fl; + Eina_F32p32 step; + Eina_F32p32 fresult; + double dc; + double dresult; + double delta; + + fail_if(!eina_init()); + + fl = eina_f32p32_scale(EINA_F32P32_PI, 4); + step = eina_f32p32_div(fl, eina_f32p32_int_from(2048)); + + for (fc = 0; fc < fl; fc += step) + { + fresult = eina_f32p32_cos(fc); + dc = eina_f32p32_double_to(fc); + dresult = cos(dc); + + delta = fabs(dresult - eina_f32p32_double_to(fresult)); + fail_if(delta > 0.005); + } + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_fp_sin) +{ + Eina_F32p32 fc; + Eina_F32p32 fl; + Eina_F32p32 step; + Eina_F32p32 fresult; + double dc; + double dresult; + double delta; + + fail_if(!eina_init()); + + fl = eina_f32p32_scale(EINA_F32P32_PI, 4); + step = eina_f32p32_div(fl, eina_f32p32_int_from(2048)); + + for (fc = 0; fc < fl; fc += step) + { + fresult = eina_f32p32_sin(fc); + dc = eina_f32p32_double_to(fc); + dresult = sin(dc); + + delta = fabs(dresult - eina_f32p32_double_to(fresult)); + fail_if(delta > 0.005); + } + + + eina_shutdown(); +} +END_TEST + +void +eina_test_fp(TCase *tc) +{ + tcase_add_test(tc, eina_fp_cos); + tcase_add_test(tc, eina_fp_sin); +} diff --git a/libraries/eina/src/tests/eina_test_hash.c b/libraries/eina/src/tests/eina_test_hash.c new file mode 100644 index 0000000..aeeb655 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_hash.c @@ -0,0 +1,206 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Bool +eina_foreach_check(__UNUSED__ const Eina_Hash *hash, + const void *key, + void *data, + __UNUSED__ void *fdata) +{ + int *j = data; + int i; + + if (strlen(key) <= 0) + return EINA_TRUE; + + i = atoi(key); + fail_if(i != *j); + + return EINA_TRUE; +} + +START_TEST(eina_hash_simple) +{ + Eina_Hash *hash = NULL; + int *test; + int array[] = { 1, 42, 4, 5, 6 }; + + /* As mempool is already initialized and it use hash, we should have 2 init. */ + fail_if(eina_init() != 2); + + hash = eina_hash_string_superfast_new(NULL); + fail_if(hash == NULL); + + fail_if(eina_hash_add(hash, "1", &array[0]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "42", &array[1]) != EINA_TRUE); + fail_if(eina_hash_direct_add(hash, "4", &array[2]) != EINA_TRUE); + fail_if(eina_hash_direct_add(hash, "5", &array[3]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "", "") != EINA_TRUE); + + test = eina_hash_find(hash, "4"); + fail_if(!test); + fail_if(*test != 4); + + test = eina_hash_find(hash, "42"); + fail_if(!test); + fail_if(*test != 42); + + eina_hash_foreach(hash, eina_foreach_check, NULL); + + test = eina_hash_modify(hash, "5", &array[4]); + fail_if(!test); + fail_if(*test != 5); + + test = eina_hash_find(hash, "5"); + fail_if(!test); + fail_if(*test != 6); + + fail_if(eina_hash_population(hash) != 5); + + fail_if(eina_hash_find(hash, "120") != NULL); + + fail_if(eina_hash_del(hash, "5", NULL) != EINA_TRUE); + fail_if(eina_hash_find(hash, "5") != NULL); + + fail_if(eina_hash_del(hash, NULL, &array[2]) != EINA_TRUE); + fail_if(eina_hash_find(hash, "4") != NULL); + + fail_if(eina_hash_del(hash, NULL, &array[2]) != EINA_FALSE); + + fail_if(eina_hash_del(hash, "1", NULL) != EINA_TRUE); + fail_if(eina_hash_del(hash, "42", NULL) != EINA_TRUE); + + eina_hash_free(hash); + + /* Same comment as eina_init */ + fail_if(eina_shutdown() != 1); +} +END_TEST + +START_TEST(eina_hash_extended) +{ + Eina_Hash *hash = NULL; + int i; + + fail_if(eina_init() != 2); + + hash = eina_hash_string_djb2_new(NULL); + fail_if(hash == NULL); + + fail_if(eina_hash_direct_add(hash, "42", "42") != EINA_TRUE); + + for (i = 43; i < 3043; ++i) + { + char *tmp = malloc(10); + fail_if(!tmp); + eina_convert_itoa(i, tmp); + fail_if(eina_hash_direct_add(hash, tmp, tmp) != EINA_TRUE); + } + + fail_if(eina_hash_find(hash, "42") == NULL); + + eina_hash_free(hash); + + fail_if(eina_shutdown() != 1); +} +END_TEST + +START_TEST(eina_hash_double_item) +{ + Eina_Hash *hash = NULL; + int i[] = { 7, 7 }; + int *test; + + fail_if(eina_init() != 2); + + hash = eina_hash_string_superfast_new(NULL); + fail_if(hash == NULL); + + fail_if(eina_hash_add(hash, "7", &i[0]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "7", &i[1]) != EINA_TRUE); + + fail_if(eina_hash_del(hash, "7", &i[1]) != EINA_TRUE); + test = eina_hash_find(hash, "7"); + fail_if(test != &i[0]); + + eina_hash_free(hash); + + fail_if(eina_shutdown() != 1); +} +END_TEST + +START_TEST(eina_hash_all_int) +{ + Eina_Hash *hash; + int64_t j[] = { 4321312301243122, 6, 7, 128 }; + int i[] = { 42, 6, 7, 0 }; + int64_t *test2; + int *test; + int it; + + fail_if(eina_init() != 2); + + hash = eina_hash_int32_new(NULL); + fail_if(hash == NULL); + + for (it = 0; it < 4; ++it) + fail_if(eina_hash_add(hash, &i[it], &i[it]) != EINA_TRUE); + + fail_if(eina_hash_del(hash, &i[1], &i[1]) != EINA_TRUE); + test = eina_hash_find(hash, &i[2]); + fail_if(test != &i[2]); + + test = eina_hash_find(hash, &i[3]); + fail_if(test != &i[3]); + + eina_hash_free(hash); + + hash = eina_hash_int64_new(NULL); + fail_if(hash == NULL); + + for (it = 0; it < 4; ++it) + fail_if(eina_hash_add(hash, &j[it], &j[it]) != EINA_TRUE); + + fail_if(eina_hash_del(hash, &j[1], &j[1]) != EINA_TRUE); + test2 = eina_hash_find(hash, &j[0]); + fail_if(test2 != &j[0]); + + eina_hash_free(hash); + + fail_if(eina_shutdown() != 1); +} +END_TEST + +void eina_test_hash(TCase *tc) +{ + tcase_add_test(tc, eina_hash_simple); + tcase_add_test(tc, eina_hash_extended); + tcase_add_test(tc, eina_hash_double_item); + tcase_add_test(tc, eina_hash_all_int); +} diff --git a/libraries/eina/src/tests/eina_test_inlist.c b/libraries/eina/src/tests/eina_test_inlist.c new file mode 100644 index 0000000..c27f393 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_inlist.c @@ -0,0 +1,254 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_suite.h" +#include "Eina.h" +#include "eina_safety_checks.h" + +typedef struct _Eina_Test_Inlist Eina_Test_Inlist; +struct _Eina_Test_Inlist +{ + int i; + EINA_INLIST; +}; + +static Eina_Test_Inlist * +_eina_test_inlist_build(int i) +{ + Eina_Test_Inlist *tmp; + + tmp = malloc(sizeof(Eina_Test_Inlist)); + fail_if(!tmp); + tmp->i = i; + + return tmp; +} + +START_TEST(eina_inlist_simple) +{ + Eina_Inlist *lst = NULL; + Eina_Test_Inlist *tmp; + Eina_Test_Inlist *prev; + int i = 0; + + fail_if(!eina_init()); + + tmp = _eina_test_inlist_build(42); + lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp)); + fail_if(!lst); + + lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); + lst = eina_inlist_prepend(lst, EINA_INLIST_GET(tmp)); + + tmp = _eina_test_inlist_build(1664); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst); + fail_if(!lst); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42); + + prev = tmp; + tmp = _eina_test_inlist_build(3227); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET( + tmp), EINA_INLIST_GET(prev)); + fail_if(!lst); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42); + + lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); + + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst); + lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); + + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), lst); + + tmp = _eina_test_inlist_build(27); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL); + + tmp = _eina_test_inlist_build(81); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL); + + EINA_INLIST_FOREACH(lst, tmp) + { + switch (i) + { + case 0: fail_if(tmp->i != 27); break; + + case 1: fail_if(tmp->i != 3227); break; + + case 2: fail_if(tmp->i != 42); break; + + case 3: fail_if(tmp->i != 1664); break; + + case 4: fail_if(tmp->i != 81); break; + } + + ++i; + } + +#ifdef EINA_SAFETY_CHECKS + fprintf(stderr, "you should have a safety check failure below:\n"); + { + Eina_Inlist *tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp)); + fail_if(tmp2 != NULL); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); + } + + fprintf(stderr, "you should have a safety check failure below:\n"); + lst = eina_inlist_remove(lst, NULL); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); +#endif + + tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); + lst = eina_inlist_demote(lst, lst); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist) == tmp); + + lst = eina_inlist_promote(lst, EINA_INLIST_GET(tmp)); + fail_if(lst != EINA_INLIST_GET(tmp)); + + tmp = EINA_INLIST_CONTAINER_GET(eina_inlist_find(lst, EINA_INLIST_GET( + prev)), Eina_Test_Inlist); + lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); + prev = (Eina_Test_Inlist *)eina_inlist_find(lst, EINA_INLIST_GET(tmp)); + tmp = prev ? EINA_INLIST_CONTAINER_GET(prev, Eina_Test_Inlist) : NULL; + fail_if(tmp != NULL); + + while (lst) + lst = eina_inlist_remove(lst, lst); + + eina_shutdown(); +} +END_TEST + +typedef struct _Eina_Test_Inlist_Sorted Eina_Test_Inlist_Sorted; +struct _Eina_Test_Inlist_Sorted +{ + EINA_INLIST; + + int value; +}; + +static int +_eina_test_inlist_cmp(const void *d1, const void *d2) +{ + const Eina_Test_Inlist_Sorted *t1 = d1; + const Eina_Test_Inlist_Sorted *t2 = d2; + + return t1->value - t2->value; +} + +static void +_eina_test_inlist_check(const Eina_Inlist *list) +{ + const Eina_Test_Inlist_Sorted *t; + int last_value = 0; + + EINA_INLIST_FOREACH(list, t) + { + fail_if(t->value < last_value); + last_value = t->value; + } +} + +START_TEST(eina_inlist_sorted) +{ + Eina_Test_Inlist_Sorted *tmp; + Eina_Inlist *list = NULL; + Eina_Inlist *sorted = NULL; + int i; + + fail_if(!eina_init()); + + srand(time(NULL)); + + for (i = 0; i < 2000; ++i) + { + tmp = malloc(sizeof (Eina_Test_Inlist_Sorted)); + if (!tmp) continue ; + + tmp->value = rand(); + + list = eina_inlist_prepend(list, EINA_INLIST_GET(tmp)); + } + + list = eina_inlist_sort(list, _eina_test_inlist_cmp); + + _eina_test_inlist_check(list); + + EINA_INLIST_FOREACH(list, tmp) + tmp->value = rand(); + + i = 0; + while (list) + { + Eina_Inlist *p = list; + + list = eina_inlist_remove(list, list); + + sorted = eina_inlist_sorted_insert(sorted, p, _eina_test_inlist_cmp); + _eina_test_inlist_check(sorted); + } + + _eina_test_inlist_check(sorted); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_inlist_sorted_state) +{ + Eina_Test_Inlist_Sorted *tmp; + Eina_Inlist_Sorted_State *state; + Eina_Inlist *list = NULL; + int i; + + fail_if(!eina_init()); + + state = eina_inlist_sorted_state_new(); + fail_if(!state); + + for (i = 0; i < 2000; ++i) + { + tmp = malloc(sizeof (Eina_Test_Inlist_Sorted)); + if (!tmp) continue ; + + tmp->value = rand(); + + list = eina_inlist_sorted_state_insert(list, EINA_INLIST_GET(tmp), _eina_test_inlist_cmp, state); + _eina_test_inlist_check(list); + } + + _eina_test_inlist_check(list); + + eina_inlist_sorted_state_free(state); + + eina_shutdown(); +} +END_TEST + +void +eina_test_inlist(TCase *tc) +{ + tcase_add_test(tc, eina_inlist_simple); + tcase_add_test(tc, eina_inlist_sorted); + tcase_add_test(tc, eina_inlist_sorted_state); +} diff --git a/libraries/eina/src/tests/eina_test_iterator.c b/libraries/eina/src/tests/eina_test_iterator.c new file mode 100644 index 0000000..84bb336 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_iterator.c @@ -0,0 +1,465 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Bool +eina_iterator_array_check(__UNUSED__ const Eina_Array *array, + int *data, int *fdata) +{ + fail_if(*fdata > *data); + *fdata = *data; + + return EINA_TRUE; +} + +START_TEST(eina_iterator_array_simple) +{ + Eina_Iterator *it; + Eina_Array *ea; + int *tmp; + int i; + + eina_init(); + + ea = eina_array_new(11); + fail_if(!ea); + + for (i = 0; i < 200; ++i) + { + tmp = malloc(sizeof(int)); + fail_if(!tmp); + *tmp = i; + + eina_array_push(ea, tmp); + } + + it = eina_array_iterator_new(ea); + fail_if(!it); + + i = -1; + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &i); + fail_if(i != 199); + + fail_if(eina_iterator_container_get(it) != ea); + fail_if(eina_iterator_next(it, (void **)&tmp) != EINA_FALSE); + + eina_iterator_free(it); + + eina_array_free(ea); + + eina_shutdown(); +} +END_TEST + +static Eina_Bool +eina_iterator_hash_key_check(const Eina_Hash *hash, + const char *key, + __UNUSED__ void *fdata) +{ + fail_if(eina_hash_find(hash, key) == NULL); + + return EINA_TRUE; +} +static Eina_Bool +eina_iterator_hash_data_check(const Eina_Hash *hash, + int *data, + __UNUSED__ void *fdata) +{ + char tmp[10]; + + snprintf(tmp, 10, "%i", *data); + fail_if(eina_hash_find(hash, tmp) != data); + + return EINA_TRUE; +} +static Eina_Bool +eina_iterator_hash_tuple_check(__UNUSED__ const Eina_Hash *hash, + Eina_Hash_Tuple *tuple, + __UNUSED__ void *fdata) +{ + fail_if(atoi((char *)tuple->key) != *((int *)tuple->data)); + + return EINA_TRUE; +} + +START_TEST(eina_iterator_hash_simple) +{ + Eina_Iterator *it; + Eina_Hash *hash; + int array[] = { 1, 42, 7, 8, 6 }; + + eina_init(); + + hash = eina_hash_string_superfast_new(NULL); + fail_if(hash == NULL); + + fail_if(eina_hash_add(hash, "1", &array[0]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "42", &array[1]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "7", &array[2]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "8", &array[3]) != EINA_TRUE); + fail_if(eina_hash_add(hash, "6", &array[4]) != EINA_TRUE); + + it = eina_hash_iterator_key_new(hash); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_key_check), NULL); + eina_iterator_free(it); + + it = eina_hash_iterator_data_new(hash); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_data_check), NULL); + eina_iterator_free(it); + + it = eina_hash_iterator_tuple_new(hash); + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_tuple_check), NULL); + eina_iterator_free(it); + + eina_hash_free(hash); + + eina_shutdown(); +} +END_TEST + +typedef struct _Eina_Test_Inlist Eina_Test_Inlist; +struct _Eina_Test_Inlist +{ + EINA_INLIST; + int i; +}; + +static Eina_Test_Inlist * +_eina_test_inlist_build(int i) +{ + Eina_Test_Inlist *tmp; + + tmp = malloc(sizeof(Eina_Test_Inlist)); + fail_if(!tmp); + tmp->i = i; + + return tmp; +} + +static Eina_Bool +eina_iterator_inlist_data_check(__UNUSED__ const Eina_Inlist *in_list, + Eina_Test_Inlist *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(data->i != 27); break; + + case 1: fail_if(data->i != 42); break; + + case 2: fail_if(data->i != 3227); break; + + case 3: fail_if(data->i != 1664); break; + + case 4: fail_if(data->i != 81); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +START_TEST(eina_iterator_inlist_simple) +{ + Eina_Inlist *lst = NULL; + Eina_Test_Inlist *tmp; + Eina_Test_Inlist *prev; + Eina_Iterator *it; + int i = 0; + + tmp = _eina_test_inlist_build(42); + lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp)); + fail_if(!lst); + + tmp = _eina_test_inlist_build(1664); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst); + fail_if(!lst); + fail_if(((Eina_Test_Inlist *)lst)->i != 42); + + prev = tmp; + tmp = _eina_test_inlist_build(3227); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET( + tmp), EINA_INLIST_GET(prev)); + fail_if(!lst); + fail_if(((Eina_Test_Inlist *)lst)->i != 42); + + tmp = _eina_test_inlist_build(27); + lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL); + + tmp = _eina_test_inlist_build(81); + lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL); + + it = eina_inlist_iterator_new(lst); + fail_if(!it); + + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_inlist_data_check), &i); + eina_iterator_free(it); + + fail_if(i != 5); +} +END_TEST + +static Eina_Bool +eina_iterator_list_data_check(__UNUSED__ const Eina_List *list, + int *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(*data != 81); break; + + case 1: fail_if(*data != 7); break; + + case 2: fail_if(*data != 9); break; + + case 3: fail_if(*data != 6); break; + + case 4: fail_if(*data != 42); break; + + case 5: fail_if(*data != 1); break; + + case 6: fail_if(*data != 1337); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +START_TEST(eina_iterator_list_simple) +{ + Eina_List *list = NULL; + Eina_Iterator *it; + int data[] = { 6, 9, 42, 1, 7, 1337, 81, 1664 }; + int i = 0; + + eina_init(); + + list = eina_list_append(list, &data[0]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[1]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[2]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[3]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[4]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[5]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[6]); + fail_if(list == NULL); + + it = eina_list_iterator_new(list); + fail_if(!it); + + eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_list_data_check), &i); + eina_iterator_free(it); +} +END_TEST + +typedef struct _Eina_Rbtree_Int Eina_Rbtree_Int; +struct _Eina_Rbtree_Int +{ + Eina_Rbtree node; + int value; +}; + +static Eina_Rbtree_Direction +eina_rbtree_int_cmp(const Eina_Rbtree_Int *left, const Eina_Rbtree_Int *right) +{ + fail_if(!left); + fail_if(!right); + + if (left->value < right->value) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static Eina_Rbtree * +_eina_rbtree_int_new(int value) +{ + Eina_Rbtree_Int *it; + + it = malloc(sizeof (Eina_Rbtree_Int)); + fail_if(!it); + + it->value = value; + + return &it->node; +} + +static Eina_Bool +eina_iterator_rbtree_data_check_sorted(__UNUSED__ const Eina_List *list, + Eina_Rbtree_Int *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(data->value != 10); break; + + case 1: fail_if(data->value != 27); break; + + case 2: fail_if(data->value != 42); break; + + case 3: fail_if(data->value != 69); break; + + case 4: fail_if(data->value != 1337); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +static Eina_Bool +eina_iterator_rbtree_data_check_prefix(__UNUSED__ const Eina_List *list, + Eina_Rbtree_Int *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(data->value != 27); break; + + case 1: fail_if(data->value != 10); break; + + case 2: fail_if(data->value != 69); break; + + case 3: fail_if(data->value != 42); break; + + case 4: fail_if(data->value != 1337); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +static Eina_Bool +eina_iterator_rbtree_data_check_postfix(__UNUSED__ const Eina_List *list, + Eina_Rbtree_Int *data, + int *fdata) +{ + switch (*fdata) + { + case 0: fail_if(data->value != 10); break; + + case 1: fail_if(data->value != 42); break; + + case 2: fail_if(data->value != 1337); break; + + case 3: fail_if(data->value != 69); break; + + case 4: fail_if(data->value != 27); break; + } + + (*fdata)++; + + return EINA_TRUE; +} + +START_TEST(eina_iterator_rbtree_simple) +{ + Eina_Rbtree *root = NULL; + Eina_Iterator *it; + int i; + + root = eina_rbtree_inline_insert(NULL, + _eina_rbtree_int_new(10), + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp), + NULL); + fail_if(!root); + + root = eina_rbtree_inline_insert(root, + _eina_rbtree_int_new(1337), + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp), + NULL); + fail_if(!root); + + root = eina_rbtree_inline_insert(root, + _eina_rbtree_int_new(27), + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp), + NULL); + fail_if(!root); + + root = eina_rbtree_inline_insert(root, + _eina_rbtree_int_new(69), + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp), + NULL); + fail_if(!root); + + root = eina_rbtree_inline_insert(root, + _eina_rbtree_int_new(42), + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp), + NULL); + fail_if(!root); + + i = 0; + it = eina_rbtree_iterator_prefix(root); + fail_if(!it); + + eina_iterator_foreach(it, + EINA_EACH_CB(eina_iterator_rbtree_data_check_prefix), + &i); + eina_iterator_free(it); + + /* This will return the item sorted. */ + i = 0; + it = eina_rbtree_iterator_infix(root); + fail_if(!it); + + eina_iterator_foreach(it, + EINA_EACH_CB(eina_iterator_rbtree_data_check_sorted), + &i); + eina_iterator_free(it); + + i = 0; + it = eina_rbtree_iterator_postfix(root); + fail_if(!it); + + eina_iterator_foreach(it, + EINA_EACH_CB(eina_iterator_rbtree_data_check_postfix), + &i); + eina_iterator_free(it); +} +END_TEST + +void +eina_test_iterator(TCase *tc) +{ + tcase_add_test(tc, eina_iterator_array_simple); + tcase_add_test(tc, eina_iterator_hash_simple); + tcase_add_test(tc, eina_iterator_inlist_simple); + tcase_add_test(tc, eina_iterator_list_simple); + tcase_add_test(tc, eina_iterator_rbtree_simple); +} diff --git a/libraries/eina/src/tests/eina_test_lalloc.c b/libraries/eina/src/tests/eina_test_lalloc.c new file mode 100644 index 0000000..13fd607 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_lalloc.c @@ -0,0 +1,89 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +typedef struct _Eina_Lazy_Allocator_Test Eina_Lazy_Allocator_Test; +struct _Eina_Lazy_Allocator_Test +{ + void *data; + int num; +}; + +static Eina_Bool +_test_alloc(Eina_Lazy_Allocator_Test *elat, int num) +{ + if (elat->num == 10 && num == 1) + return EINA_FALSE; + + if (elat->num == 122 && num == 128) + return EINA_FALSE; + + elat->num += num; + elat->data = realloc(elat->data, elat->num); + + return EINA_TRUE; +} + +static void +_test_free(Eina_Lazy_Allocator_Test *elat) +{ + free(elat->data); + elat->data = NULL; + elat->num = 0; +} + +START_TEST(eina_lalloc_simple) +{ + Eina_Lazy_Allocator_Test *elat; + Eina_Lalloc *test; + int i; + + elat = calloc(1, sizeof (Eina_Lazy_Allocator_Test)); + fail_if(!elat); + + test = eina_lalloc_new(elat, EINA_LALLOC_ALLOC( + _test_alloc), EINA_LALLOC_FREE(_test_free), 10); + fail_if(!test); + + for (i = 0; i < 10; ++i) + fail_if(eina_lalloc_element_add(test) != EINA_TRUE); + fail_if(eina_lalloc_element_add(test) != EINA_FALSE); + fail_if(eina_lalloc_elements_add(test, 5) != EINA_TRUE); + for (i = 0; i < 21; ++i) + fail_if(eina_lalloc_element_add(test) != EINA_TRUE); + + fail_if(eina_lalloc_elements_add(test, 50) != EINA_FALSE); + + eina_lalloc_free(test); +} +END_TEST + +void +eina_test_lalloc(TCase *tc) +{ + tcase_add_test(tc, eina_lalloc_simple); +} diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c new file mode 100644 index 0000000..6e08847 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_list.c @@ -0,0 +1,347 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Bool eina_list_sorted_check(const Eina_List *list) +{ + const Eina_List *n; + void *d; + int last = *(int *)list->data; + + EINA_LIST_FOREACH(list->next, n, d) + { + int current = *(int *)d; + if (last > current) + { + fprintf(stderr, "list is not sorted: last=%d, current=%d\n", + last, current); + return 0; + } + + last = current; + } + + return 1; +} + +static int eina_int_cmp(const void *a, const void *b) +{ + const int *ia = a; + const int *ib = b; + + return *ia - *ib; +} + +START_TEST(eina_test_simple) +{ + Eina_List *list = NULL; + Eina_List *tmp; + int *test1; + int *test2; + int *test3; + int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337 }; + int result[] = { 81, 9, 9, 7, 1 }; + int i; + + eina_init(); + + list = eina_list_append(list, &data[0]); + fail_if(list == NULL); + + list = eina_list_prepend(list, &data[1]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[2]); + fail_if(list == NULL); + + list = eina_list_remove(list, &data[0]); + fail_if(list == NULL); + + list = eina_list_remove(list, &data[0]); + fail_if(list == NULL); + + tmp = eina_list_data_find_list(list, &data[2]); + fail_if(tmp == NULL); + + list = eina_list_append_relative_list(list, &data[3], tmp); + fail_if(list == NULL); + + list = eina_list_prepend_relative_list(list, &data[4], tmp); + fail_if(list == NULL); + + list = eina_list_promote_list(list, tmp); + fail_if(list == NULL); + + list = eina_list_append_relative(list, &data[5], &data[2]); + fail_if(list == NULL); + + list = eina_list_prepend_relative(list, &data[6], &data[2]); + fail_if(list == NULL); + + list = eina_list_remove_list(list, tmp); + fail_if(list == NULL); + + fail_if(eina_list_data_find_list(list, &data[2]) != NULL); + fail_if(eina_list_data_find(list, &data[2]) != NULL); + fail_if(eina_list_data_find(list, &data[5]) != &data[5]); + + fail_if(eina_list_count(list) != 5); + fail_if(eina_list_nth(list, 4) != &data[3]); + fail_if(eina_list_nth(list, 10) != NULL); + fail_if(eina_list_nth_list(list, 10) != NULL); + + for (tmp = list, i = 0; tmp != NULL; tmp = eina_list_next(tmp), ++i) + { + int *d = eina_list_data_get(tmp); + fail_if(d == NULL); + fail_if(*d != result[i]); + } + + list = eina_list_reverse(list); + + for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp), --i) + { + int *d = eina_list_data_get(tmp); + fail_if(d == NULL); + fail_if(*d != result[i - 1]); + } + + list = eina_list_append_relative(list, &data[7], &data[7]); + fail_if(list == NULL); + + list = eina_list_prepend_relative(list, &data[8], &data[8]); + fail_if(list == NULL); + + list = eina_list_sort(list, 2, eina_int_cmp); + + list = eina_list_sort(list, 2, eina_int_cmp); + + test1 = eina_list_nth(list, 0); + test2 = eina_list_nth(list, 1); + test3 = eina_list_nth(list, 2); + + fail_if(test1 == NULL || test2 == NULL || test3 == NULL); + fail_if(*test1 > *test2); + fail_if(*test3 == *test2); + + list = eina_list_sort(list, 5, eina_int_cmp); + + test1 = eina_list_nth(list, 3); + test2 = eina_list_nth(list, 4); + test3 = eina_list_nth(list, 5); + + fail_if(test1 == NULL || test2 == NULL || test3 == NULL); + fail_if(*test1 > *test2); + fail_if(*test3 > *test2); + + list = eina_list_append(list, &data[8]); + fail_if(list == NULL); + + list = eina_list_append(list, &data[7]); + fail_if(list == NULL); + + list = eina_list_sort(list, -1, eina_int_cmp); + + test1 = eina_list_nth(list, 0); + for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp)) + { + int *d = eina_list_data_get(tmp); + fail_if(*test1 > *d); + + test1 = d; + } + + test3 = eina_list_nth(list, 5); + fail_if(test3 == NULL); + + list = eina_list_promote_list(list, list); + fail_if(list == NULL); + + list = eina_list_promote_list(list, eina_list_last(list)); + fail_if(list == NULL); + + test1 = eina_list_nth(list, 0); + test2 = eina_list_nth(list, 1); + + list = eina_list_promote_list(eina_list_next(list), list); + fail_if(list == NULL); + fail_if(eina_list_data_get(list) != test1); + fail_if(eina_list_data_get(eina_list_next(list)) != test2); + + list = eina_list_remove_list(list, list); + fail_if(list == NULL); + + list = eina_list_remove_list(list, eina_list_last(list)); + fail_if(list == NULL); + + list = eina_list_free(list); + fail_if(list != NULL); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_test_merge) +{ + Eina_List *l1; + Eina_List *l2; + Eina_List *l3; + Eina_List *l4; + Eina_List *l5; + int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008 }; + int i; + + eina_init(); + + l1 = eina_list_append(NULL, &data[0]); + l1 = eina_list_append(l1, &data[1]); + l1 = eina_list_append(l1, &data[2]); + l1 = eina_list_append(l1, &data[3]); + fail_if(l1 == NULL); + + l2 = eina_list_append(NULL, &data[4]); + l2 = eina_list_append(l2, &data[5]); + fail_if(l2 == NULL); + + l1 = eina_list_merge(l1, l2); + fail_if(l1 == NULL); + fail_if(eina_list_count(l1) != 6); + for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next) + fail_if(l2->data != &data[i]); + fail_if(i != 6); + fail_if(l2 != NULL); + + eina_list_free(l1); + + l1 = eina_list_append(NULL, &data[0]); + l1 = eina_list_append(l1, &data[1]); + fail_if(l1 == NULL); + + l2 = eina_list_append(NULL, &data[2]); + l2 = eina_list_append(l2, &data[3]); + l2 = eina_list_append(l2, &data[4]); + l2 = eina_list_append(l2, &data[5]); + fail_if(l2 == NULL); + + l1 = eina_list_merge(l1, l2); + fail_if(l1 == NULL); + fail_if(eina_list_count(l1) != 6); + for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next) + fail_if(l2->data != &data[i]); + fail_if(i != 6); + fail_if(l2 != NULL); + + l3 = eina_list_append(NULL, &data[6]); + l3 = eina_list_append(l3, &data[7]); + l3 = eina_list_append(l3, &data[8]); + + l4 = eina_list_append(NULL, &data[9]); + l4 = eina_list_append(l4, &data[10]); + l4 = eina_list_append(l4, &data[11]); + + l5 = eina_list_append(NULL, &data[12]); + l5 = eina_list_append(l5, &data[13]); + l5 = eina_list_append(l5, &data[14]); + + l1 = eina_list_sort(l1, -1, eina_int_cmp); + l3 = eina_list_sort(l3, -1, eina_int_cmp); + l4 = eina_list_sort(l4, -1, eina_int_cmp); + l5 = eina_list_sort(l5, -1, eina_int_cmp); + + l1 = eina_list_sorted_merge(l1, l3, eina_int_cmp); + fail_if(l1 == NULL); + fail_if(eina_list_count(l1) != 9); + + l1 = eina_list_sorted_merge(l1, l4, eina_int_cmp); + fail_if(l1 == NULL); + fail_if(eina_list_count(l1) != 12); + + l1 = eina_list_sorted_merge(l1, l5, eina_int_cmp); + fail_if(l1 == NULL); + fail_if(eina_list_count(l1) != 15); + + fail_if(!eina_list_sorted_check(l1)); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_test_sorted_insert) +{ + const int data[] = {6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008}; + const int data2[] = {5, 0, 3, 2, 1, 0, 1, 2, 3, 4, 5}; + int i, count; + Eina_List *l1, *l2, *itr; + void *d; + + eina_init(); + + count = sizeof(data) / sizeof(data[0]); + + l1 = NULL; + for (i = 0; i < count; i++) + l1 = eina_list_sorted_insert(l1, eina_int_cmp, data + i); + + fail_if(l1 == NULL); + fail_if(!eina_list_sorted_check(l1)); + + l2 = NULL; + EINA_LIST_FOREACH(l1, itr, d) + l2 = eina_list_sorted_insert(l2, eina_int_cmp, d); + + fail_if(l2 == NULL); + fail_if(!eina_list_sorted_check(l2)); + eina_list_free(l2); + + l2 = NULL; + EINA_LIST_REVERSE_FOREACH(l1, itr, d) + l2 = eina_list_sorted_insert(l2, eina_int_cmp, d); + + fail_if(l2 == NULL); + fail_if(!eina_list_sorted_check(l2)); + eina_list_free(l2); + eina_list_free(l1); + + count = sizeof(data2) / sizeof(data2[0]); + l1 = NULL; + for (i = 0; i < count; i++) + l1 = eina_list_sorted_insert(l1, eina_int_cmp, data2 + i); + + fail_if(l1 == NULL); + fail_if(!eina_list_sorted_check(l1)); + eina_list_free(l1); + + eina_shutdown(); +} +END_TEST + +void +eina_test_list(TCase *tc) +{ + tcase_add_test(tc, eina_test_simple); + tcase_add_test(tc, eina_test_merge); + tcase_add_test(tc, eina_test_sorted_insert); +} diff --git a/libraries/eina/src/tests/eina_test_log.c b/libraries/eina/src/tests/eina_test_log.c new file mode 100644 index 0000000..ba17d5f --- /dev/null +++ b/libraries/eina/src/tests/eina_test_log.c @@ -0,0 +1,235 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + + START_TEST(eina_log_macro) +{ + fail_if(!eina_init()); + + eina_log_level_set(EINA_LOG_LEVEL_DBG); + eina_log_print_cb_set(eina_log_print_cb_file, stderr); + + EINA_LOG_CRIT("Critical message\n"); + EINA_LOG_ERR("An error\n"); + EINA_LOG_INFO("An info\n"); + EINA_LOG_WARN("A warning\n"); + EINA_LOG_DBG("A debug\n"); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_domains_macros) +{ + fail_if(!eina_init()); + + int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN); + fail_if(d < 0); + + EINA_LOG_DOM_CRIT(d, "A critical message\n"); + EINA_LOG_DOM_ERR(d, "An error\n"); + EINA_LOG_DOM_WARN(d, "A warning\n"); + EINA_LOG_DOM_DBG(d, "A debug\n"); + EINA_LOG_DOM_INFO(d, "An info\n"); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_domains_registry) +{ + fail_if(!eina_init()); + + int i; + int d[50]; + + for (i = 0; i < 50; i++) + { + d[i] = eina_log_domain_register("Test", EINA_COLOR_GREEN); + fail_if(d[i] < 0); + } + + for (i = 0; i < 50; i++) + eina_log_domain_unregister(d[i]); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_domains_slot_reuse) +{ + fail_if(!eina_init()); + fail_if(!eina_threads_init()); + + // Create 9 domains + int idx[9]; + int i; + + for (i = 0; i < 9; i++) + { + idx[i] = eina_log_domain_register("Test1", EINA_COLOR_GREEN); + fail_if(idx[i] < 0); + } + + // Slot 0 by default contains the global logger. The above code created + // domains for slots indexes from 1 to 9. + // + // The global logger allocated the first 8 initial slots. The 8th domain + // registered on the for loop will create 8 more slots. + // + // Test will just unregister a domain between 1 and 9 and assure that a new + // domain register will be placed on the available slot and not at the end. + + int removed = idx[5]; + eina_log_domain_unregister(removed); + + int new = eina_log_domain_register("Test Slot", EINA_COLOR_GREEN); + + // Check for slot reuse + fail_if(new != removed); + + eina_threads_shutdown(); + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_level_indexes) +{ + fail_if(!eina_init()); + fail_if(!eina_threads_init()); + fail_if(!eina_threads_init()); + + int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN); + fail_if(d < 0); + + // Displayed unless user sets level lower than -1 + EINA_LOG(d, -1, "Negative index message\n"); + + // Displayed only if user sets level 6 or higher + EINA_LOG(d, 6, "Higher level debug\n"); + + eina_threads_shutdown(); + eina_threads_shutdown(); + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_customize) +{ + int d; + + /* please don't define EINA_LOG_LEVELS for it */ +#define TEST_DOM "_Test_Log_Dom" + + fail_if(!eina_init()); + +#define test_set_get(func, val) \ + eina_log_ ## func ## _set(val); \ + fail_if(eina_log_ ## func ## _get() != val) + + test_set_get(level, -1234); + test_set_get(level, 4567); + +#define test_set_get_bool(func) \ + test_set_get(func, EINA_FALSE); \ + test_set_get(func, EINA_TRUE) + + test_set_get_bool(color_disable); + test_set_get_bool(file_disable); + test_set_get_bool(function_disable); + test_set_get_bool(abort_on_critical); + + test_set_get(abort_on_critical_level, -1234); + test_set_get(abort_on_critical_level, 4567); + + fail_if(eina_log_domain_level_get(TEST_DOM) != eina_log_level_get()); + + eina_log_domain_level_set(TEST_DOM, -123); + fail_if(eina_log_domain_level_get(TEST_DOM) != -123); + + eina_log_domain_level_set(TEST_DOM, 890); + fail_if(eina_log_domain_level_get(TEST_DOM) != 890); + + d = eina_log_domain_register(TEST_DOM, EINA_COLOR_GREEN); + fail_if(d < 0); + + fail_if(eina_log_domain_level_get(TEST_DOM) != 890); + fail_if(eina_log_domain_registered_level_get(d) != 890); + + eina_log_domain_unregister(d); + fputs("NOTE: You should see a failed safety check or " + "a crash if compiled without safety checks support.\n", + stderr); + eina_log_abort_on_critical_set(EINA_FALSE); + fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN); + +#undef test_set_get_bool +#undef test_set_get + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_log_level_name) +{ + char name[4]; + + fail_if(!eina_init()); + +#define tst(level, str) \ + eina_log_level_name_get(level, name); \ + fail_if(strcmp(name, str) != 0) + + tst(0, "CRI"); + tst(1, "ERR"); + tst(2, "WRN"); + tst(3, "INF"); + tst(4, "DBG"); + tst(5, "005"); + tst(12, "012"); + tst(369, "369"); + tst(-1, "-01"); + tst(-48, "-48"); + +#undef tst + + eina_shutdown(); +} +END_TEST + +void +eina_test_log(TCase *tc) +{ + tcase_add_test(tc, eina_log_macro); + tcase_add_test(tc, eina_log_domains_macros); + tcase_add_test(tc, eina_log_domains_registry); + tcase_add_test(tc, eina_log_domains_slot_reuse); + tcase_add_test(tc, eina_log_level_indexes); + tcase_add_test(tc, eina_log_customize); + tcase_add_test(tc, eina_log_level_name); +} diff --git a/libraries/eina/src/tests/eina_test_magic.c b/libraries/eina/src/tests/eina_test_magic.c new file mode 100644 index 0000000..d2c3d49 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_magic.c @@ -0,0 +1,96 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#define EINA_MAGIC_DEBUG + +#include "eina_suite.h" +#include "Eina.h" +#include "eina_safety_checks.h" + +#define EINA_MAGIC_TEST 0x7781fee7 +#define EINA_MAGIC_TEST2 0x42241664 +#define EINA_MAGIC_STRING "Eina Magic Test" + +typedef struct _Eina_Magic_Struct Eina_Magic_Struct; +struct _Eina_Magic_Struct +{ + EINA_MAGIC +}; + +START_TEST(eina_magic_simple) +{ + Eina_Magic_Struct *ems = NULL; + + eina_init(); + + eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING); + +#ifdef EINA_SAFETY_CHECKS + fprintf(stderr, "you should have a safety check failure below:\n"); + eina_magic_string_set(EINA_MAGIC_TEST2, NULL); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); + + fprintf(stderr, "you should have a safety check failure below:\n"); + eina_magic_string_set(EINA_MAGIC_TEST2, NULL); + fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); +#endif + + eina_magic_string_set(EINA_MAGIC_TEST2, EINA_MAGIC_STRING); + + fail_if(eina_magic_string_get(EINA_MAGIC_TEST) == NULL); + fail_if(strcmp(eina_magic_string_get( + EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0); + +#ifdef EINA_MAGIC_DEBUG + fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); + fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n"); + EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); + + ems = malloc(sizeof (Eina_Magic_Struct)); + fail_if(!ems); + EINA_MAGIC_SET(ems, EINA_MAGIC_TEST); + + fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST)); + + EINA_MAGIC_SET(ems, EINA_MAGIC_NONE); + fprintf(stderr, + "you should see 'Input handle has already been freed' below\n"); + EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); + + EINA_MAGIC_SET(ems, 42424242); + fprintf(stderr, "you should see 'Input handle is wrong type' below\n"); + EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST); +#endif + + eina_shutdown(); +} +END_TEST + +void eina_test_magic(TCase *tc) +{ + tcase_add_test(tc, eina_magic_simple); +} + diff --git a/libraries/eina/src/tests/eina_test_main.c b/libraries/eina/src/tests/eina_test_main.c new file mode 100644 index 0000000..04364a1 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_main.c @@ -0,0 +1,62 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + + START_TEST(eina_simple) +{ + fail_if(eina_init() != 2); /* one init by test suite */ + fail_if(eina_shutdown() != 1); +} +END_TEST + +START_TEST(eina_cpu) +{ + fail_if(eina_init() != 2); /* one init by test suite */ + + fail_if(eina_cpu_count() <= 0); + + eina_cpu_features_get(); + + fail_if(eina_shutdown() != 1); +} +END_TEST + +START_TEST(eina_hamster) +{ + fail_if(eina_init() != 2); /* one init by test suite */ + + fail_if(eina_hamster_count() <= 0); + + fail_if(eina_shutdown() != 1); +} +END_TEST + +void eina_test_main(TCase *tc) +{ + tcase_add_test(tc, eina_simple); + tcase_add_test(tc, eina_cpu); + tcase_add_test(tc, eina_hamster); +} diff --git a/libraries/eina/src/tests/eina_test_matrixsparse.c b/libraries/eina/src/tests/eina_test_matrixsparse.c new file mode 100644 index 0000000..e07b1ee --- /dev/null +++ b/libraries/eina/src/tests/eina_test_matrixsparse.c @@ -0,0 +1,489 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +#define MAX_ROWS 10 +#define MAX_COLS 10 + +static void eina_matrixsparse_free_cell_cb(void *user_data __UNUSED__, + void *cell_data __UNUSED__) +{ +} + +static void matrixsparse_initialize(Eina_Matrixsparse *matrix, + long data[MAX_ROWS][MAX_COLS], + unsigned long nrows, + unsigned long ncols) +{ + unsigned long i, j; + Eina_Bool r; + + for (i = 0; i < nrows; i++) + for (j = 0; j < ncols; j++) + if (data[i][j] != 0) + { + r = eina_matrixsparse_data_idx_set(matrix, i, j, &data[i][j]); + fail_if(r == EINA_FALSE); + } + +} + +static void matrixsparse_check(Eina_Matrixsparse *matrix, + long data[MAX_ROWS][MAX_COLS], + unsigned long nrows __UNUSED__, + unsigned long ncols __UNUSED__) +{ + unsigned long i, j; + long *test1; + + for (i = 0; i < MAX_ROWS; i++) + for (j = 0; j < MAX_COLS; j++) + { + if (data[i][j] != 0) + { + test1 = eina_matrixsparse_data_idx_get(matrix, i, j); + fail_if(test1 == NULL || *test1 != data[i][j]); + } + else + { + test1 = eina_matrixsparse_data_idx_get(matrix, i, j); + fail_if(test1 != NULL); + } + } +} + +START_TEST(eina_test_simple) +{ + Eina_Matrixsparse *matrix = NULL; + Eina_Matrixsparse_Cell *cell = NULL; + Eina_Bool r; + long *test1, value, value2, value3, value4; + unsigned long i, j; + unsigned long row, col; + + long data[MAX_ROWS][MAX_COLS]; + + for (i = 0; i < MAX_ROWS; i++) + for (j = 0; j < MAX_COLS; j++) + data[i][j] = 0; + + data[0][3] = 3; + data[1][3] = 13; + data[1][6] = 16; + data[1][9] = 19; + data[1][8] = 18; + data[1][7] = 17; + data[2][8] = 28; + data[2][7] = 27; + data[2][6] = 26; + data[3][5] = 35; + data[3][6] = 36; + data[3][7] = 37; + data[3][9] = 39; + data[3][0] = 30; + data[4][6] = 46; + data[4][8] = 48; + data[4][2] = 42; + data[4][3] = 43; + data[4][7] = 47; + data[5][3] = 53; + data[6][3] = 63; + data[6][4] = 64; + data[6][6] = 66; + data[7][3] = 73; + data[7][7] = 77; + data[8][8] = 88; + + value = -1; + value2 = -2; + value3 = -3; + value4 = -4; + + eina_init(); + + matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS, + eina_matrixsparse_free_cell_cb, data); + fail_if(matrix == NULL); + + r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell); + fail_if(r == EINA_FALSE); + fail_if(cell != NULL); + + matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS); + + /* data fetching */ + test1 = eina_matrixsparse_data_idx_get(matrix, 3, 0); + fail_if(test1 == NULL); + fail_if(*test1 != data[3][0]); + + test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5); + fail_if(test1 == NULL); + fail_if(*test1 != data[3][5]); + + test1 = eina_matrixsparse_data_idx_get(matrix, 3, 6); + fail_if(test1 == NULL); + fail_if(*test1 != data[3][6]); + + test1 = eina_matrixsparse_data_idx_get(matrix, 3, 1); + fail_if(test1 != NULL); + + r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell); + fail_if(r == EINA_FALSE); + fail_if(cell == NULL); + + test1 = eina_matrixsparse_cell_data_get(cell); + fail_if(test1 == NULL); + fail_if(*test1 != data[3][5]); + + r = eina_matrixsparse_cell_position_get(cell, &row, &col); + fail_if(r == EINA_FALSE); + fail_if(row != 3 || col != 5); + + test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3); + fail_if(*test1 != data[4][3]); + + test1 = eina_matrixsparse_data_idx_get(matrix, 1, 3); + fail_if(*test1 != data[1][3]); + + /* data changing */ + r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]); + fail_if(r == EINA_FALSE); + + r = eina_matrixsparse_data_idx_replace(matrix, 4, 3, &value, (void **)&test1); + fail_if(r == EINA_FALSE); + fail_if(test1 == NULL); + fail_if(*test1 != data[4][3]); + data[4][3] = value; + + test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3); + fail_if(test1 == NULL || *test1 != value); + + r = eina_matrixsparse_cell_data_replace(cell, &value2, (void **)&test1); + fail_if(r == EINA_FALSE); + fail_if(test1 == NULL); + fail_if(*test1 != data[3][5]); + data[3][5] = value2; + + test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5); + fail_if(test1 == NULL); + fail_if(*test1 != value2); + + r = eina_matrixsparse_cell_idx_get(matrix, 4, 2, &cell); + fail_if(r == EINA_FALSE || cell == NULL); + + r = eina_matrixsparse_cell_data_set(cell, &value3); + fail_if(r == EINA_FALSE); + data[4][2] = value3; + + test1 = eina_matrixsparse_data_idx_get(matrix, 4, 2); + fail_if(test1 == NULL || *test1 != value3); + + r = eina_matrixsparse_data_idx_replace(matrix, + 6, + 5, + &value4, + (void **)&test1); + fail_if(r == EINA_FALSE || test1 != NULL); + data[6][5] = value4; + + + /* cell deletion */ + r = eina_matrixsparse_row_idx_clear(matrix, 4); + fail_if(r == EINA_FALSE); + data[4][6] = 0; + data[4][8] = 0; + data[4][2] = 0; + data[4][3] = 0; + data[4][7] = 0; + + test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3); + fail_if(test1 != NULL); + + test1 = eina_matrixsparse_data_idx_get(matrix, 4, 8); + fail_if(test1 != NULL); + + test1 = eina_matrixsparse_data_idx_get(matrix, 5, 3); + fail_if(*test1 != data[5][3]); + + r = eina_matrixsparse_column_idx_clear(matrix, 3); + fail_if(r != EINA_TRUE); + data[0][3] = 0; + data[1][3] = 0; + data[4][3] = 0; + data[5][3] = 0; + data[6][3] = 0; + data[7][3] = 0; + + r = eina_matrixsparse_cell_idx_clear(matrix, 3, 5); + fail_if(r != EINA_TRUE); + data[3][5] = 0; + + r = eina_matrixsparse_cell_idx_clear(matrix, 3, 9); + fail_if(r != EINA_TRUE); + data[3][9] = 0; + + r = eina_matrixsparse_cell_idx_clear(matrix, 4, 3); + fail_if(r != EINA_TRUE); + data[4][3] = 0; + + r = eina_matrixsparse_cell_idx_get(matrix, 3, 7, &cell); + fail_if(r == EINA_FALSE); + fail_if(cell == NULL); + + r = eina_matrixsparse_cell_clear(cell); + fail_if(r == EINA_FALSE); + data[3][7] = 0; + + r = eina_matrixsparse_cell_idx_get(matrix, 2, 7, &cell); + fail_if(r == EINA_FALSE); + + r = eina_matrixsparse_cell_idx_clear(matrix, 2, 8); + fail_if(r == EINA_FALSE); + data[2][8] = 0; + + r = eina_matrixsparse_cell_idx_clear(matrix, 2, 7); + fail_if(r == EINA_FALSE); + data[2][7] = 0; + + r = eina_matrixsparse_cell_idx_get(matrix, 7, 7, &cell); + fail_if(r == EINA_FALSE); + + r = eina_matrixsparse_row_idx_clear(matrix, 8); + fail_if(r == EINA_FALSE); + data[8][8] = 0; + + r = eina_matrixsparse_row_idx_clear(matrix, 7); + fail_if(r == EINA_FALSE); + data[7][3] = 0; + data[7][7] = 0; + + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + eina_matrixsparse_free(matrix); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_test_resize) +{ + Eina_Matrixsparse *matrix = NULL; + Eina_Bool r; + unsigned long i, j; + unsigned long nrows, ncols; + + long data[MAX_ROWS][MAX_COLS]; + + for (i = 0; i < MAX_ROWS; i++) + for (j = 0; j < MAX_COLS; j++) + data[i][j] = 0; + + eina_init(); + + matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS, + eina_matrixsparse_free_cell_cb, data); + fail_if(matrix == NULL); + + /* cell insertion */ + data[0][5] = 5; + data[1][0] = 10; + data[1][3] = 13; + data[1][6] = 16; + data[1][9] = 19; + data[1][8] = 18; + data[1][7] = 17; + data[2][8] = 28; + data[2][7] = 27; + data[2][6] = 26; + data[3][0] = 30; + data[3][5] = 35; + data[3][6] = 36; + data[3][7] = 37; + data[3][9] = 39; + data[3][0] = 30; + data[4][8] = 48; + data[4][2] = 42; + data[4][3] = 43; + data[4][7] = 47; + data[4][6] = 46; + data[5][3] = 53; + data[6][3] = 63; + data[6][4] = 64; + data[6][6] = 66; + data[7][3] = 73; + data[7][7] = 77; + data[8][8] = 88; + + matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS); + + eina_matrixsparse_size_get(matrix, &nrows, &ncols); + fail_if(nrows != MAX_ROWS || ncols != MAX_COLS); + + r = eina_matrixsparse_size_set(matrix, nrows - 2, ncols - 2); + fail_if(r == EINA_FALSE); + data[1][9] = 0; + data[1][8] = 0; + data[2][8] = 0; + data[3][9] = 0; + data[4][8] = 0; + data[8][8] = 0; + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + + r = eina_matrixsparse_size_set(matrix, 5, 1); + fail_if(r == EINA_FALSE); + data[0][5] = 0; + data[1][3] = 0; + data[1][6] = 0; + data[1][7] = 0; + data[2][7] = 0; + data[2][6] = 0; + data[3][5] = 0; + data[3][6] = 0; + data[3][7] = 0; + data[4][2] = 0; + data[4][3] = 0; + data[4][7] = 0; + data[4][6] = 0; + data[5][3] = 0; + data[6][3] = 0; + data[6][4] = 0; + data[6][6] = 0; + data[7][3] = 0; + data[7][7] = 0; + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + + r = eina_matrixsparse_size_set(matrix, 1, 1); + fail_if(r == EINA_FALSE); + data[3][0] = 0; + data[1][0] = 0; + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + + r = eina_matrixsparse_size_set(matrix, 5, 4); + fail_if(r == EINA_FALSE); + + r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]); + fail_if(r == EINA_FALSE); + data[4][2] = 42; + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + + r = eina_matrixsparse_size_set(matrix, 5, 1); + fail_if(r == EINA_FALSE); + data[4][2] = 0; + matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS); + + eina_matrixsparse_free(matrix); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_test_iterators) +{ + Eina_Matrixsparse *matrix = NULL; + Eina_Matrixsparse_Cell *cell = NULL; + Eina_Iterator *it = NULL; + Eina_Bool r; + long *test1, value; + unsigned long i, j; + unsigned long row, col; + + long data[MAX_ROWS][MAX_COLS]; + + value = 0; + for (i = 0; i < MAX_ROWS; i++) + { + for (j = 0; j < MAX_COLS; j++) + { + data[i][j] = value++; + printf("%4ld ", data[i][j]); + } + printf("\n"); + } + + eina_init(); + + matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS, + eina_matrixsparse_free_cell_cb, data); + fail_if(matrix == NULL); + + r = eina_matrixsparse_data_idx_set(matrix, 3, 5, &data[3][5]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 3, 6, &data[3][6]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 3, 7, &data[3][7]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 3, 9, &data[3][9]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 3, 0, &data[3][0]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 4, 6, &data[4][6]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 4, 8, &data[4][8]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 4, 3, &data[4][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 4, 7, &data[4][7]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 6, 4, &data[6][4]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 5, 3, &data[5][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 6, 3, &data[6][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 7, 3, &data[7][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 0, 3, &data[0][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 1, 3, &data[1][3]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 1, 6, &data[1][6]); + fail_if(r == EINA_FALSE); + r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]); + fail_if(r == EINA_FALSE); + + it = eina_matrixsparse_iterator_new(matrix); + fail_if(it == NULL); + EINA_ITERATOR_FOREACH(it, cell) + { + fail_if(cell == NULL); + r = eina_matrixsparse_cell_position_get(cell, &row, &col); + fail_if(r == EINA_FALSE); + + test1 = eina_matrixsparse_cell_data_get(cell); + fail_if(test1 == NULL || *test1 != data[row][col]); + } + eina_iterator_free(it); + + it = eina_matrixsparse_iterator_complete_new(matrix); + fail_if(it == NULL); + EINA_ITERATOR_FOREACH(it, cell) + { + fail_if(cell == NULL); + r = eina_matrixsparse_cell_position_get(cell, &row, &col); + fail_if(r == EINA_FALSE); + + test1 = eina_matrixsparse_cell_data_get(cell); + if (test1) + fail_if(*test1 != data[row][col]); + } + eina_iterator_free(it); + + eina_matrixsparse_free(matrix); + + eina_shutdown(); +} +END_TEST + +void +eina_test_matrixsparse(TCase *tc) +{ + tcase_add_test(tc, eina_test_simple); + tcase_add_test(tc, eina_test_resize); + tcase_add_test(tc, eina_test_iterators); +} diff --git a/libraries/eina/src/tests/eina_test_mempool.c b/libraries/eina/src/tests/eina_test_mempool.c new file mode 100644 index 0000000..7106afa --- /dev/null +++ b/libraries/eina/src/tests/eina_test_mempool.c @@ -0,0 +1,187 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Array *_modules; + +static void +_mempool_init(void) +{ + eina_init(); + /* force modules to be loaded in case they are not installed */ + _modules = eina_module_list_get(NULL, + PACKAGE_BUILD_DIR "/src/modules", + EINA_TRUE, + NULL, + NULL); + eina_module_list_load(_modules); +} + +static void +_mempool_shutdown(void) +{ + eina_module_list_free(_modules); + /* TODO delete the list */ + eina_shutdown(); +} + +static void +_eina_mempool_test(Eina_Mempool *mp, Eina_Bool with_realloc, Eina_Bool with_gc) +{ + int *tbl[512]; + int i; + + fail_if(!mp); + + for (i = 0; i < 512; ++i) + { + tbl[i] = eina_mempool_malloc(mp, sizeof (int)); + fail_if(!tbl[i]); + *tbl[i] = i; + } + + for (i = 0; i < 512; ++i) + fail_if(*tbl[i] != i); + + for (i = 0; i < 256; ++i) + eina_mempool_free(mp, tbl[i]); + + if (with_realloc) + fail_if(eina_mempool_realloc(mp, tbl[500], 25) == NULL); + else + fail_if(eina_mempool_realloc(mp, tbl[500], 25) != NULL); + + if (with_gc) + { + eina_mempool_gc(mp); + eina_mempool_statistics(mp); + } + + eina_mempool_del(mp); +} + +#ifdef EINA_BUILD_CHAINED_POOL +START_TEST(eina_mempool_chained_mempool) +{ + Eina_Mempool *mp; + + _mempool_init(); + + mp = eina_mempool_add("chained_mempool", "test", NULL, sizeof (int), 256); + _eina_mempool_test(mp, EINA_FALSE, EINA_FALSE); + + _mempool_shutdown(); +} +END_TEST +#endif + +#ifdef EINA_BUILD_PASS_THROUGH +START_TEST(eina_mempool_pass_through) +{ + Eina_Mempool *mp; + + _mempool_init(); + + mp = eina_mempool_add("pass_through", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_test(mp, EINA_TRUE, EINA_FALSE); + + _mempool_shutdown(); +} +END_TEST +#endif + +#ifdef EINA_BUILD_FIXED_BITMAP +START_TEST(eina_mempool_fixed_bitmap) +{ + Eina_Mempool *mp; + + _mempool_init(); + + mp = eina_mempool_add("fixed_bitmap", "test", NULL, sizeof (int)); + _eina_mempool_test(mp, EINA_FALSE, EINA_FALSE); + + _mempool_shutdown(); +} +END_TEST +#endif + +#ifdef EINA_BUILD_EMEMOA_FIXED +START_TEST(eina_mempool_ememoa_fixed) +{ + Eina_Mempool *mp; + + _mempool_init(); + + mp = eina_mempool_add("ememoa_fixed", "test", NULL, sizeof (int), 8, 0); + _eina_mempool_test(mp, EINA_FALSE, EINA_TRUE); + + _mempool_shutdown(); +} +END_TEST +#endif + +#ifdef EINA_BUILD_EMEMOA_UNKNOWN +START_TEST(eina_mempool_ememoa_unknown) +{ + Eina_Mempool *mp; + + _mempool_init(); + + mp = eina_mempool_add("ememoa_unknown", + "test", + NULL, + 0, + 2, + sizeof (int), + 8, + sizeof (int) * 2, + 8); + _eina_mempool_test(mp, EINA_TRUE, EINA_TRUE); + + _mempool_shutdown(); +} +END_TEST +#endif + +void +eina_test_mempool(TCase *tc) +{ +#ifdef EINA_BUILD_CHAINED_POOL + tcase_add_test(tc, eina_mempool_chained_mempool); +#endif +#ifdef EINA_BUILD_PASS_THROUGH + tcase_add_test(tc, eina_mempool_pass_through); +#endif +#ifdef EINA_BUILD_FIXED_BITMAP + tcase_add_test(tc, eina_mempool_fixed_bitmap); +#endif +#ifdef EINA_BUILD_EMEMOA_FIXED + tcase_add_test(tc, eina_mempool_ememoa_fixed); +#endif +#ifdef EINA_BUILD_EMEMOA_UNKNOWN + tcase_add_test(tc, eina_mempool_ememoa_unknown); +#endif +} + + diff --git a/libraries/eina/src/tests/eina_test_module.c b/libraries/eina/src/tests/eina_test_module.c new file mode 100644 index 0000000..56bdca7 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_module.c @@ -0,0 +1,70 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Bool list_cb(Eina_Module *m, void *data __UNUSED__) +{ + int *sym; + const char *file; + + /* the reference count */ + eina_module_load(m); + /* get */ + sym = eina_module_symbol_get(m, "dummy_symbol"); + fail_if(!sym); + fail_if(*sym != 0xbad); + file = eina_module_file_get(m); + fail_if(!file); + eina_module_unload(m); + + return EINA_TRUE; +} + + +START_TEST(eina_module_load_unload) +{ + Eina_Array *_modules; + + eina_init(); + _modules = eina_module_list_get(NULL, + PACKAGE_BUILD_DIR "/src/tests/", + EINA_TRUE, + &list_cb, + NULL); + fail_if(!_modules); + eina_module_list_load(_modules); + eina_module_list_unload(_modules); + eina_module_list_free(_modules); + /* TODO delete the list */ + eina_shutdown(); +} +END_TEST + +void +eina_test_module(TCase *tc) +{ + tcase_add_test(tc, eina_module_load_unload); +} diff --git a/libraries/eina/src/tests/eina_test_module_dummy.c b/libraries/eina/src/tests/eina_test_module_dummy.c new file mode 100644 index 0000000..d42b530 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_module_dummy.c @@ -0,0 +1,22 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "Eina.h" + +Eina_Bool dummy_module_init(void) +{ + return EINA_TRUE; +} + +void dummy_module_shutdown(void) +{ + +} + +EAPI int dummy_symbol = 0xbad; + +EINA_MODULE_INIT(dummy_module_init); +EINA_MODULE_SHUTDOWN(dummy_module_shutdown); diff --git a/libraries/eina/src/tests/eina_test_quadtree.c b/libraries/eina/src/tests/eina_test_quadtree.c new file mode 100644 index 0000000..52faeec --- /dev/null +++ b/libraries/eina/src/tests/eina_test_quadtree.c @@ -0,0 +1,195 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +static Eina_Quad_Direction +_eina_quadtree_rectangle_vert(const void *object, size_t middle) +{ + const Eina_Rectangle *r = object; + + if (r->y + r->h < (int)middle) + return EINA_QUAD_LEFT; + + if (r->y > (int)middle) + return EINA_QUAD_RIGHT; + + return EINA_QUAD_BOTH; +} + +static Eina_Quad_Direction +_eina_quadtree_rectangle_hort(const void *object, size_t middle) +{ + const Eina_Rectangle *r = object; + + if (r->x + r->w < (int)middle) + return EINA_QUAD_LEFT; + + if (r->x > (int)middle) + return EINA_QUAD_RIGHT; + + return EINA_QUAD_BOTH; +} + +START_TEST(eina_quadtree_collision) +{ + struct + { + Eina_Rectangle r; + Eina_QuadTree_Item *item; + } objects[] = { + { { 10, 10, 30, 30 }, NULL }, + { { 20, 20, 30, 30 }, NULL }, + { { 5, 30, 30, 30 }, NULL }, + { { 70, 130, 100, 100 }, NULL }, + { { 10, 220, 50, 40 }, NULL }, + { { 310, 20, 50, 30 }, NULL }, + { { 300, 220, 40, 40 }, NULL }, + { { 500, 150, 40, 40 }, NULL }, + { { 500, 220, 40, 40 }, NULL }, + { { 330, 250, 40, 40 }, NULL }, + { { 300, 400, 40, 40 }, NULL }, + { { 10, 400, 40, 40 }, NULL }, + { { 0, 0, 0, 0 }, NULL } + }; + struct + { + Eina_Rectangle r; + int count; + int result[20]; + } tests [] = { + { { 600, 400, 40, 40 }, 4, { 4, 6, 8, 10 } }, + { { 20, 30, 10, 10 }, 7, { 0, 1, 2, 4, 5, 6, 8 } }, + { { 0, 0, 0, 0 }, -1, {} }, + }; + int hidden[] = { 4, 5, 6, 8, 10 }; + int show[] = { 0, 1, 2 }; + Eina_QuadTree *q; + Eina_Inlist *head; + Eina_Rectangle *r; + int count; + int i; + + fail_if(!eina_init()); + + q = eina_quadtree_new(640, 480, + _eina_quadtree_rectangle_vert, + _eina_quadtree_rectangle_hort); + + fail_if(!q); + + for (i = 0; objects[i].r.w != 0 && objects[i].r.h != 0; ++i) + { + objects[i].item = eina_quadtree_add(q, &objects[i].r); + fail_if(!objects[i].item); + fail_if(!eina_quadtree_show(objects[i].item)); + } + + eina_quadtree_resize(q, 640, 480); + + for (i = 0; tests[i].count != -1; ++i) + { + head = eina_quadtree_collide(q, + tests[i].r.x, tests[i].r.y, + tests[i].r.w, tests[i].r.h); + + count = 0; + while (head) + { + int k; + + r = eina_quadtree_object(head); + + for (k = 0; k < tests[i].count; ++k) + { + if (&objects[tests[i].result[k]].r == r) + break; + } + fail_if(k == tests[i].count); + + head = head->next; + count++; + } + fail_if(count != tests[i].count); + } + + for (i = 0; i < (int)(sizeof (hidden) / sizeof (int)); ++i) + eina_quadtree_hide(objects[hidden[i]].item); + for (i = 0; i < (int)(sizeof (show) / sizeof (int)); ++i) + eina_quadtree_show(objects[show[i]].item); + + head = eina_quadtree_collide(q, + tests[1].r.x, tests[1].r.y, + tests[1].r.w, tests[1].r.h); + + count = 0; + while (head) + { + r = eina_quadtree_object(head); + + fail_if(r != &objects[tests[1].result[show[count]]].r); + + head = head->next; + count++; + } + fail_if(count != 3); + + eina_quadtree_cycle(q); + eina_quadtree_show(objects[4].item); + eina_quadtree_increase(objects[4].item); + eina_quadtree_show(objects[5].item); + eina_quadtree_increase(objects[5].item); + eina_quadtree_del(objects[5].item); + eina_quadtree_change(objects[10].item); + eina_quadtree_increase(objects[10].item); + + eina_quadtree_resize(q, 641, 480); + + head = eina_quadtree_collide(q, + tests[0].r.x, tests[0].r.y, + tests[0].r.w, tests[0].r.h); + + count = 0; + while (head) + { + r = eina_quadtree_object(head); + + head = head->next; + count++; + } + fail_if(count != 1); + + eina_quadtree_free(q); + + eina_shutdown(); +} +END_TEST + +void +eina_test_quadtree(TCase *tc) +{ + tcase_add_test(tc, eina_quadtree_collision); +} diff --git a/libraries/eina/src/tests/eina_test_rbtree.c b/libraries/eina/src/tests/eina_test_rbtree.c new file mode 100644 index 0000000..fabe2bf --- /dev/null +++ b/libraries/eina/src/tests/eina_test_rbtree.c @@ -0,0 +1,452 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +static inline Eina_Bool +_eina_rbtree_is_red(Eina_Rbtree *tree) +{ + return tree != NULL && tree->color == EINA_RBTREE_RED; +} + +static int +_eina_rbtree_black_height(Eina_Rbtree *tree, Eina_Rbtree_Cmp_Node_Cb cmp) +{ + Eina_Rbtree *left; + Eina_Rbtree *right; + Eina_Rbtree_Direction dir; + int left_height; + int right_height; + + if (!tree) + return 1; + + left = tree->son[EINA_RBTREE_LEFT]; + right = tree->son[EINA_RBTREE_RIGHT]; + + /* Consecutive red links. */ + fail_if(_eina_rbtree_is_red(tree) && + (_eina_rbtree_is_red(left) || _eina_rbtree_is_red(right))); + + left_height = _eina_rbtree_black_height(left, cmp); + right_height = _eina_rbtree_black_height(right, cmp); + + /* Check binary search tree. */ + if (left) + { + dir = cmp(tree, left, NULL); + fail_if(dir != EINA_RBTREE_LEFT); + } + + if (right) + { + dir = cmp(tree, right, NULL); + fail_if(dir != EINA_RBTREE_RIGHT); + } + + /* Check black height */ + if (left_height != right_height) + fprintf(stderr, "%i != %i\n", left_height, right_height); + + fail_if(left_height != right_height); + + return _eina_rbtree_is_red(tree) ? left_height : left_height + 1; +} + +typedef struct _Eina_Rbtree_Int Eina_Rbtree_Int; +struct _Eina_Rbtree_Int +{ + Eina_Rbtree node; + int value; +}; + +static Eina_Rbtree_Direction +eina_rbtree_int_cmp(const Eina_Rbtree_Int *left, + const Eina_Rbtree_Int *right, + __UNUSED__ void *data) +{ + fail_if(!left); + fail_if(!right); + + if (left->value < right->value) + return EINA_RBTREE_LEFT; + + return EINA_RBTREE_RIGHT; +} + +static int +eina_rbtree_int_key(const Eina_Rbtree_Int *node, + const int *key, + __UNUSED__ int length, + __UNUSED__ void *data) +{ + fail_if(!node); + return node->value - *key; +} + +static Eina_Rbtree_Int * +_eina_rbtree_int_new(int value) +{ + Eina_Rbtree_Int *it; + + it = malloc(sizeof (Eina_Rbtree_Int)); + fail_if(!it); + + it->value = value; + + return it; +} + +START_TEST(eina_rbtree_insertion) +{ + Eina_Rbtree_Int *root = NULL; + Eina_Rbtree_Int *item; + int i; + + srand(time(NULL)); + + for (i = 0; i < 500; ++i) + { + item = _eina_rbtree_int_new(rand()); + root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert( + &root->node, + &item->node, + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), + NULL); + } + + _eina_rbtree_black_height(&root->node, + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp)); +} +END_TEST + +START_TEST(eina_rbtree_lookup) +{ + Eina_Rbtree_Int *root = NULL; + Eina_Rbtree_Int *item; + int list[] = { 50, 100, 10, 43, 23 }; + unsigned int i; + + for (i = 0; i < sizeof (list) / sizeof (int); ++i) + { + item = _eina_rbtree_int_new(list[i]); + root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert( + &root->node, + &item->node, + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), + NULL); + } + + item = (Eina_Rbtree_Int *)eina_rbtree_inline_lookup(&root->node, + &list[0], + sizeof(int), + EINA_RBTREE_CMP_KEY_CB( + eina_rbtree_int_key), + NULL); + fail_if(!item); + + i = 42; + item = + (Eina_Rbtree_Int *)eina_rbtree_inline_lookup(&root->node, + &i, + sizeof(int), + EINA_RBTREE_CMP_KEY_CB( + eina_rbtree_int_key), + NULL); + fail_if(item); +} +END_TEST + +START_TEST(eina_rbtree_remove) +{ + Eina_Rbtree_Int *root = NULL; + Eina_Rbtree_Int *item; + Eina_Array *ea; + Eina_Array_Iterator it; + unsigned int i; + + eina_init(); + + ea = eina_array_new(11); + fail_if(!ea); + + srand(time(NULL)); + + for (i = 0; i < 500; ++i) + { + item = _eina_rbtree_int_new(rand()); + eina_array_push(ea, item); + root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert( + &root->node, + &item->node, + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), + NULL); + } + + _eina_rbtree_black_height(&root->node, + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + + EINA_ARRAY_ITER_NEXT(ea, i, item, it) + { + root = (Eina_Rbtree_Int *)eina_rbtree_inline_remove( + &root->node, + &item->node, + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), + NULL); + _eina_rbtree_black_height(&root->node, + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + } + + fail_if(root != NULL); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_rbtree_simple_remove) +{ + Eina_Rbtree *root = NULL; + Eina_Rbtree *lookup; + int i; + + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 10), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 42), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 69), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1337), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + _eina_rbtree_black_height(root, + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + + fail_if(root == NULL); + + i = 69; + lookup = eina_rbtree_inline_lookup(root, + &i, + sizeof (int), + EINA_RBTREE_CMP_KEY_CB( + eina_rbtree_int_key), + NULL); + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + fail_if(lookup == NULL); + + root = + eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); +} +END_TEST + +START_TEST(eina_rbtree_simple_remove2) +{ + Eina_Rbtree *root = NULL; + Eina_Rbtree *lookup; + int i; + + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 10), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 42), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 69), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1337), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 77), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 75), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 81), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + _eina_rbtree_black_height(root, + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + + fail_if(root == NULL); + + i = 69; + lookup = eina_rbtree_inline_lookup(root, + &i, + sizeof (int), + EINA_RBTREE_CMP_KEY_CB( + eina_rbtree_int_key), + NULL); + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + fail_if(lookup == NULL); + + root = + eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); +} +END_TEST + +START_TEST(eina_rbtree_simple_remove3) +{ + Eina_Rbtree *root = NULL; + Eina_Rbtree *lookup; + int i; + + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1113497590), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 499187507), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1693860487), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 26211080), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 797272577), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1252184882), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1448158229), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1821884856), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 346086006), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 936357333), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1462073936), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1717320055), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + root = + eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new( + 1845524606), + EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + _eina_rbtree_black_height(root, + EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + + fail_if(root == NULL); + + i = 1113497590; + lookup = eina_rbtree_inline_lookup(root, + &i, + sizeof (int), + EINA_RBTREE_CMP_KEY_CB( + eina_rbtree_int_key), + NULL); + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); + fail_if(lookup == NULL); + + root = + eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB( + eina_rbtree_int_cmp), NULL); + + _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp)); +} +END_TEST + +void +eina_test_rbtree(TCase *tc) +{ + tcase_add_test(tc, eina_rbtree_insertion); + tcase_add_test(tc, eina_rbtree_lookup); + tcase_add_test(tc, eina_rbtree_remove); + tcase_add_test(tc, eina_rbtree_simple_remove); + tcase_add_test(tc, eina_rbtree_simple_remove2); + tcase_add_test(tc, eina_rbtree_simple_remove3); +} + diff --git a/libraries/eina/src/tests/eina_test_rectangle.c b/libraries/eina/src/tests/eina_test_rectangle.c new file mode 100644 index 0000000..581ab76 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_rectangle.c @@ -0,0 +1,115 @@ +/* EINA - EFL data type library + * Copyright (C) 2007-2008 Cedric BAIL, Carsten Haitzler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(eina_rectangle_pool) +{ + Eina_Rectangle_Pool *pool; + Eina_Rectangle *rects[8][8]; + int x; + int y; + int w; + int h; + + fail_if(!eina_init()); + + pool = eina_rectangle_pool_new(256, 256); + fail_if(pool == NULL); + + eina_rectangle_pool_data_set(pool, rects); + fail_if(eina_rectangle_pool_data_get(pool) != rects); + + fail_if(eina_rectangle_pool_request(pool, 1024, 1024) != NULL); + + for (x = 0; x < 8; x++) + for (y = 0; y < 8; y++) + { + rects[x][y] = eina_rectangle_pool_request(pool, 32, 32); + fail_if(rects[x][y] == NULL); + } + + fail_if(eina_rectangle_pool_count(pool) != 64); + + fail_if(eina_rectangle_pool_get(rects[0][0]) != pool); + + fail_if(eina_rectangle_pool_geometry_get(pool, &w, &h) != EINA_TRUE); + fail_if(w != 256 || h != 256); + + fail_if(eina_rectangle_pool_request(pool, 32, 32) != NULL); + fail_if(eina_rectangle_pool_request(pool, 1024, 1024) != NULL); + + for (x = 0; x < 8; x++) + eina_rectangle_pool_release(rects[0][x]); + + fail_if(eina_rectangle_pool_request(pool, 16, 16) == NULL); + + eina_rectangle_pool_free(pool); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_rectangle_intersect) +{ + Eina_Rectangle r1, r2, r3, r4, rd; + + fail_if(!eina_init()); + + EINA_RECTANGLE_SET(&r1, 10, 10, 50, 50); + EINA_RECTANGLE_SET(&r2, 20, 20, 20, 20); + EINA_RECTANGLE_SET(&r3, 0, 0, 10, 10); + EINA_RECTANGLE_SET(&r4, 30, 30, 50, 50); + + rd = r1; + + fail_if(eina_rectangle_intersection(&rd, &r3)); + fail_if(!eina_rectangle_intersection(&rd, &r2)); + + fail_if(rd.x != r2.x + || rd.y != r2.y + || rd.w != r2.w + || rd.h != r2.h); + + rd = r1; + + fail_if(!eina_rectangle_intersection(&rd, &r4)); + + fail_if(rd.x != 30 + || rd.y != 30 + || rd.w != 30 + || rd.h != 30); + + eina_shutdown(); +} +END_TEST + +void +eina_test_rectangle(TCase *tc) +{ + tcase_add_test(tc, eina_rectangle_pool); + tcase_add_test(tc, eina_rectangle_intersect); +} + diff --git a/libraries/eina/src/tests/eina_test_sched.c b/libraries/eina/src/tests/eina_test_sched.c new file mode 100644 index 0000000..ff83a7e --- /dev/null +++ b/libraries/eina/src/tests/eina_test_sched.c @@ -0,0 +1,85 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#if defined(EFL_HAVE_THREADS) && defined __linux__ +#include +#include +#include +#endif + +#include "eina_suite.h" +#include "Eina.h" + +#if defined(EFL_HAVE_THREADS) && defined __linux__ + +/* + * TODO: Test if RT priorities are right. However, make check should be run as + * root. + */ + +static void * +_thread_run(void *arg __UNUSED__) +{ + int niceval = getpriority(PRIO_PROCESS, 0); + int niceval2; + eina_sched_prio_drop(); + + niceval2 = getpriority(PRIO_PROCESS, 0); + fail_if((niceval2 != 19) && (niceval2 != niceval+5)); + + return NULL; +} + +START_TEST(eina_test_sched_prio_drop) +{ + int niceval = getpriority(PRIO_PROCESS, 0); + int niceval2; + pthread_t tid; + + eina_init(); + + pthread_create(&tid, NULL, _thread_run, NULL); + + niceval2 = getpriority(PRIO_PROCESS, 0); + /* niceness of main thread should not have changed */ + fail_if(niceval2 != niceval); + + pthread_join(tid, NULL); + /* niceness of main thread should not have changed */ + fail_if(niceval2 != niceval); + + eina_shutdown(); +} +END_TEST +#else +START_TEST(eina_test_sched_prio_drop) +{ + fprintf(stderr, "scheduler priority is not supported by your configuration.\n"); +} +END_TEST +#endif + +void +eina_test_sched(TCase *tc) +{ + tcase_add_test(tc, eina_test_sched_prio_drop); +} diff --git a/libraries/eina/src/tests/eina_test_simple_xml_parser.c b/libraries/eina/src/tests/eina_test_simple_xml_parser.c new file mode 100644 index 0000000..94e6a2a --- /dev/null +++ b/libraries/eina/src/tests/eina_test_simple_xml_parser.c @@ -0,0 +1,73 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(eina_simple_xml_parser_node_dump) +{ + FILE *f; + + eina_init(); + f = fopen("sample.gpx", "rb"); + if (f) + { + long sz; + + fseek(f, 0, SEEK_END); + sz = ftell(f); + if (sz > 0) + { + char *buf; + + fseek(f, 0, SEEK_SET); + buf = malloc(sz); + if (buf) + { + if (fread(buf, 1, sz, f)) + { + Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load + (buf, sz, EINA_TRUE); + char *out = eina_simple_xml_node_dump(&root->base, " "); + puts(out); + free(out); + eina_simple_xml_node_root_free(root); + free(buf); + } + } + } + fclose(f); + } + + eina_shutdown(); +} +END_TEST + +void +eina_test_simple_xml_parser(TCase *tc) +{ + tcase_add_test(tc, eina_simple_xml_parser_node_dump); +} diff --git a/libraries/eina/src/tests/eina_test_str.c b/libraries/eina/src/tests/eina_test_str.c new file mode 100644 index 0000000..f0ea291 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_str.c @@ -0,0 +1,181 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Gustavo Sverzut Barbieri + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + + START_TEST(str_simple) +{ + eina_init(); + + fail_if(!eina_str_has_prefix("", "")); + + fail_if(!eina_str_has_prefix("x", "x")); + fail_if(!eina_str_has_prefix("xab", "x")); + fail_if(!eina_str_has_prefix("xab", "xab")); + + fail_if(eina_str_has_prefix("x", "xab")); + fail_if(eina_str_has_prefix("xab", "xyz")); + fail_if(eina_str_has_prefix("", "x")); + fail_if(eina_str_has_prefix("X", "x")); + fail_if(eina_str_has_prefix("xAb", "X")); + fail_if(eina_str_has_prefix("xAb", "xab")); + + + fail_if(!eina_str_has_suffix("", "")); + + fail_if(!eina_str_has_suffix("x", "x")); + fail_if(!eina_str_has_suffix("abx", "x")); + fail_if(!eina_str_has_suffix("xab", "xab")); + + fail_if(eina_str_has_suffix("x", "xab")); + fail_if(eina_str_has_suffix("xab", "xyz")); + fail_if(eina_str_has_suffix("", "x")); + fail_if(eina_str_has_suffix("X", "x")); + fail_if(eina_str_has_suffix("aBx", "X")); + fail_if(eina_str_has_suffix("xaB", "Xab")); + + + fail_if(!eina_str_has_extension("", "")); + + fail_if(!eina_str_has_extension("x", "x")); + fail_if(!eina_str_has_extension("abx", "x")); + fail_if(!eina_str_has_extension("xab", "xab")); + fail_if(!eina_str_has_extension("x", "X")); + fail_if(!eina_str_has_extension("abx", "X")); + fail_if(!eina_str_has_extension("xab", "Xab")); + fail_if(!eina_str_has_extension("X", "X")); + fail_if(!eina_str_has_extension("aBx", "X")); + fail_if(!eina_str_has_extension("xaB", "Xab")); + + fail_if(eina_str_has_extension("x", "xab")); + fail_if(eina_str_has_extension("xab", "xyz")); + fail_if(eina_str_has_extension("", "x")); + fail_if(eina_str_has_extension("x", "xAb")); + fail_if(eina_str_has_extension("xab", "xYz")); + fail_if(eina_str_has_extension("", "x")); + + fail_if(eina_strlen_bounded("abc", 1024) != strlen("abc")); + fail_if(eina_strlen_bounded("abc", 2) != (size_t)-1); + + eina_shutdown(); +} +END_TEST + +START_TEST(str_split) +{ + char **result; + unsigned int elements; + + eina_init(); + + result = eina_str_split_full("nomatch", "", -1, &elements); + fail_if(result != NULL); + fail_if(elements != 0); + + result = eina_str_split_full("nomatch", "x", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 1); + fail_if(strcmp(result[0], "nomatch") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full("nomatch", "xyz", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 1); + fail_if(strcmp(result[0], "nomatch") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full("match:match:match", ":", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 3); + while (elements >= 1) + { + elements--; + fail_if(strcmp(result[elements], "match") != 0); + } + free(result[0]); + free(result); + + result = eina_str_split_full("a:b:c", ":", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 3); + fail_if(strcmp(result[0], "a") != 0); + fail_if(strcmp(result[1], "b") != 0); + fail_if(strcmp(result[2], "c") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full("a:b:", ":", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 3); + fail_if(strcmp(result[0], "a") != 0); + fail_if(strcmp(result[1], "b") != 0); + fail_if(strcmp(result[2], "") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full(":b:c", ":", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 3); + fail_if(strcmp(result[0], "") != 0); + fail_if(strcmp(result[1], "b") != 0); + fail_if(strcmp(result[2], "c") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full(":", ":", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 2); + fail_if(strcmp(result[0], "") != 0); + fail_if(strcmp(result[1], "") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full("a", "!!!!!!!!!", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 1); + fail_if(strcmp(result[0], "a") != 0); + free(result[0]); + free(result); + + result = eina_str_split_full("aaba", "ab", -1, &elements); + fail_if(result == NULL); + fail_if(elements != 2); + fail_if(strcmp(result[0], "a") != 0); + fail_if(strcmp(result[1], "a") != 0); + free(result[0]); + free(result); + + eina_shutdown(); +} +END_TEST + +void +eina_test_str(TCase *tc) +{ + tcase_add_test(tc, str_simple); + tcase_add_test(tc, str_split); +} diff --git a/libraries/eina/src/tests/eina_test_strbuf.c b/libraries/eina/src/tests/eina_test_strbuf.c new file mode 100644 index 0000000..2205e3e --- /dev/null +++ b/libraries/eina/src/tests/eina_test_strbuf.c @@ -0,0 +1,449 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Sebastian Dransfeld + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +START_TEST(strbuf_simple) +{ + Eina_Strbuf *buf; + char *txt; +#define TEXT \ + "This test should be so long that it is longer than the initial size of strbuf" + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + eina_strbuf_append(buf, TEXT); + fail_if(strcmp(eina_strbuf_string_get(buf), TEXT)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_append(buf, TEXT); + fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + txt = eina_strbuf_string_steal(buf); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(txt, TEXT TEXT)); + free(txt); + fail_if(eina_strbuf_length_get(buf) != 0); + fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT)); + eina_strbuf_append(buf, TEXT); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_reset(buf); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(eina_strbuf_length_get(buf) != 0); + fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT)); + + eina_strbuf_free(buf); + + eina_shutdown(); +#undef TEXT +} +END_TEST + +START_TEST(strbuf_manage_simple) +{ + Eina_Strbuf *buf; + char *txt; +#define TEXT \ + "This test should be so long that it is longer than the initial size of strbuf" + + eina_init(); + + txt = strdup(TEXT); + + buf = eina_strbuf_manage_new(txt); + fail_if(!buf); + + fail_if(strcmp(eina_strbuf_string_get(buf), TEXT)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_append(buf, TEXT); + fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + txt = eina_strbuf_string_steal(buf); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(txt, TEXT TEXT)); + free(txt); + fail_if(eina_strbuf_length_get(buf) != 0); + fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT)); + eina_strbuf_append(buf, TEXT); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_reset(buf); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(eina_strbuf_length_get(buf) != 0); + fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT)); + + eina_strbuf_free(buf); + + eina_shutdown(); +#undef TEXT +} +END_TEST + +START_TEST(strbuf_remove) +{ + Eina_Strbuf *buf; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + eina_strbuf_append(buf, "123 456 789 abc"); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_remove(buf, 0, 4); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 abc")); + eina_strbuf_remove(buf, 8, 1000); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 ")); + eina_strbuf_remove(buf, 7, eina_strbuf_length_get(buf)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "456 789")); + eina_strbuf_remove(buf, 2, 4); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "45789")); + eina_strbuf_remove(buf, 4, 1); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "45789")); + eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "")); + +#define TEXT \ + "This test should be so long that it is longer than the initial size of strbuf" + eina_strbuf_append(buf, TEXT TEXT); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf) - 1); + fail_if(strcmp(eina_strbuf_string_get(buf), "f")); +#undef TEXT + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_append) +{ + Eina_Strbuf *buf; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + eina_strbuf_append(buf, "abc"); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "abc")); + eina_strbuf_reset(buf); + + eina_strbuf_append_escaped(buf, "abc"); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "abc")); + eina_strbuf_reset(buf); + + eina_strbuf_append_escaped(buf, "abc '\\"); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "abc\\ \\'\\\\")); + eina_strbuf_reset(buf); + + eina_strbuf_append_n(buf, "abc", 2); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "ab")); + eina_strbuf_reset(buf); + + eina_strbuf_append_char(buf, 'a'); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "a")); + eina_strbuf_reset(buf); + + eina_strbuf_append_length(buf, "something", strlen("something")); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "something")); + eina_strbuf_reset(buf); + + eina_strbuf_append_length(buf, "somethingELSE", strlen("something")); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "something")); + eina_strbuf_reset(buf); + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_insert) +{ + Eina_Strbuf *buf; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + eina_strbuf_insert(buf, "abc", 10); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "abc")); + + eina_strbuf_insert(buf, "123", 0); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "123abc")); + + eina_strbuf_insert(buf, "xyz", eina_strbuf_length_get(buf)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "123abcxyz")); + + eina_strbuf_insert(buf, "xyz", 1); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "1xyz23abcxyz")); + + eina_strbuf_insert_n(buf, "ABCDEF", 2, 1); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "1ABxyz23abcxyz")); + + eina_strbuf_insert_n(buf, "EINA", 2, 3); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "1ABEIxyz23abcxyz")); + + eina_strbuf_insert_escaped(buf, "678", 3); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strncmp(eina_strbuf_string_get(buf) + 3, "678", 3)); + + eina_strbuf_insert_escaped(buf, "089 '\\", 9); + fail_if(strlen(eina_strbuf_string_get( + buf)) != eina_strbuf_length_get(buf)); + fail_if(strncmp(eina_strbuf_string_get(buf) + 9, + "089\\ \\'\\\\", + strlen("089\\ \\'\\\\"))); + eina_strbuf_reset(buf); + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_replace) +{ + Eina_Strbuf *buf; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + eina_strbuf_append(buf, "aaa"); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "aaa")); + + fail_if(!eina_strbuf_replace(buf, "a", "b", 1)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "baa")); + + fail_if(eina_strbuf_replace_all(buf, "a", "b") != 2); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "bbb")); + + fail_if(!eina_strbuf_replace(buf, "b", "cc", 2)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "bccb")); + + fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 2); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab")); + + fail_if(eina_strbuf_replace(buf, "c", "aa", 0)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab")); + + fail_if(eina_strbuf_replace(buf, "c", "aa", 2)); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab")); + + fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 0); + fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf)); + fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab")); + + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_realloc) +{ + Eina_Strbuf *buf; + char pattern[1024 * 16]; + unsigned int i; + size_t sz; + + for (i = 0; i < sizeof(pattern) - 1; i++) + pattern[i] = 'a' + (i % 26); + pattern[i] = '\0'; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + sz = 0; + + eina_strbuf_append_length(buf, pattern, 1); + fail_if(eina_strbuf_length_get(buf) != sz + 1); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 1)); + sz += 1; + + eina_strbuf_append_length(buf, pattern, 32); + fail_if(eina_strbuf_length_get(buf) != sz + 32); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 32)); + sz += 32; + + eina_strbuf_append_length(buf, pattern, 64); + fail_if(eina_strbuf_length_get(buf) != sz + 64); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 64)); + sz += 64; + + eina_strbuf_append_length(buf, pattern, 128); + fail_if(eina_strbuf_length_get(buf) != sz + 128); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 128)); + sz += 128; + + eina_strbuf_append_length(buf, pattern, 4096); + fail_if(eina_strbuf_length_get(buf) != sz + 4096); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 4096)); + sz += 4096; + + eina_strbuf_append_length(buf, pattern, sizeof(pattern) - 1); + fail_if(eina_strbuf_length_get(buf) != sz + sizeof(pattern) - 1); + fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, sizeof(pattern) - + 1)); + sz += sizeof(pattern) - 1; + + + eina_strbuf_remove(buf, 1024, 1024 + 1234); + fail_if(eina_strbuf_length_get(buf) != sz - 1234); + sz -= 1234; + + eina_strbuf_remove(buf, 0, 0 + 8192); + fail_if(eina_strbuf_length_get(buf) != sz - 8192); + sz -= 8192; + + eina_strbuf_remove(buf, 0, 0 + 32); + fail_if(eina_strbuf_length_get(buf) != sz - 32); + sz -= 32; + + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_append_realloc) +{ + Eina_Strbuf *buf; + const size_t runs = 40960; + const char target_pattern[] = "stringstrsstr"; + const char *str; + size_t i, target_pattern_size; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + for (i = 0; i < runs; i++) + { + fail_if(!eina_strbuf_append(buf, "string")); + fail_if(!eina_strbuf_append_n(buf, "string", 3)); + fail_if(!eina_strbuf_append_char(buf, 's')); + fail_if(!eina_strbuf_append_length(buf, "string", 3)); + } + + target_pattern_size = strlen(target_pattern); + fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size)); + + str = eina_strbuf_string_get(buf); + fail_if(str == NULL); + for (i = 0; i < runs; i++, str += target_pattern_size) + fail_if(memcmp(str, target_pattern, target_pattern_size)); + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +START_TEST(strbuf_prepend_realloc) +{ + Eina_Strbuf *buf; + const size_t runs = 40960; + const char target_pattern[] = "strsstrstring"; + const char *str; + size_t i, target_pattern_size; + + eina_init(); + + buf = eina_strbuf_new(); + fail_if(!buf); + + for (i = 0; i < runs; i++) + { + fail_if(!eina_strbuf_prepend(buf, "string")); + fail_if(!eina_strbuf_prepend_n(buf, "string", 3)); + fail_if(!eina_strbuf_prepend_char(buf, 's')); + fail_if(!eina_strbuf_prepend_length(buf, "string", 3)); + } + + target_pattern_size = strlen(target_pattern); + fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size)); + + str = eina_strbuf_string_get(buf); + fail_if(str == NULL); + for (i = 0; i < runs; i++, str += target_pattern_size) + fail_if(memcmp(str, target_pattern, target_pattern_size)); + + eina_strbuf_free(buf); + + eina_shutdown(); +} +END_TEST + +void +eina_test_strbuf(TCase *tc) +{ + tcase_add_test(tc, strbuf_simple); + tcase_add_test(tc, strbuf_remove); + tcase_add_test(tc, strbuf_append); + tcase_add_test(tc, strbuf_insert); + tcase_add_test(tc, strbuf_replace); + tcase_add_test(tc, strbuf_realloc); + tcase_add_test(tc, strbuf_append_realloc); + tcase_add_test(tc, strbuf_prepend_realloc); + tcase_add_test(tc, strbuf_manage_simple); +} diff --git a/libraries/eina/src/tests/eina_test_stringshare.c b/libraries/eina/src/tests/eina_test_stringshare.c new file mode 100644 index 0000000..0d34aec --- /dev/null +++ b/libraries/eina/src/tests/eina_test_stringshare.c @@ -0,0 +1,201 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +#define TEST0 "test/0" +#define TEST1 "test/1" + +START_TEST(eina_stringshare_simple) +{ + const char *t0; + const char *t1; + + eina_init(); + + t0 = eina_stringshare_add(TEST0); + t1 = eina_stringshare_add(TEST1); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(strcmp(t0, TEST0) != 0); + fail_if(strcmp(t1, TEST1) != 0); + fail_if((int)strlen(TEST0) != eina_stringshare_strlen(t0)); + fail_if((int)strlen(TEST1) != eina_stringshare_strlen(t1)); + + t0 = eina_stringshare_ref(t0); + fail_if(t0 == NULL); + fail_if((int)strlen(TEST0) != eina_stringshare_strlen(t0)); + + eina_stringshare_del(t0); + eina_stringshare_del(t0); + eina_stringshare_del(t1); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_stringshare_small) +{ + char buf[4]; + int i; + + eina_init(); + + for (i = 0; i < 3; i++) + { + const char *t0, *t1; + int j; + + for (j = 0; j < i; j++) + { + char c; + for (c = 'a'; c <= 'z'; c++) + buf[j] = c; + } + buf[i] = '\0'; + t0 = eina_stringshare_add(buf); + t1 = eina_stringshare_add(buf); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(t0 != t1); + fail_if(strcmp(t0, buf) != 0); + fail_if((int)strlen(buf) != eina_stringshare_strlen(t0)); + fail_if((int)strlen(buf) != eina_stringshare_strlen(t1)); + + eina_stringshare_del(t0); + eina_stringshare_del(t1); + } + + eina_shutdown(); +} +END_TEST + + +START_TEST(eina_stringshare_test_share) +{ + const char *t0; + const char *t1; + + eina_init(); + + t0 = eina_stringshare_add(TEST0); + t1 = eina_stringshare_add(TEST0); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(strcmp(t0, TEST0) != 0); + fail_if(strcmp(t1, TEST0) != 0); + fail_if(t0 != t1); + fail_if((int)strlen(t0) != eina_stringshare_strlen(t0)); + + eina_stringshare_del(t0); + eina_stringshare_del(t1); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_stringshare_putstuff) +{ + const char *tmp; + int i; + + eina_init(); + + for (i = 10000; i > 0; --i) + { + char build[64] = "string_"; + + eina_convert_xtoa(i, build + 7); + tmp = eina_stringshare_add(build); + fail_if(tmp != eina_stringshare_add(build)); + } + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_stringshare_collision) +{ + Eina_Array *ea; + char buffer[50]; + int i; + + srand(time(NULL)); + + eina_init(); + + ea = eina_array_new(256); + fail_if(!ea); + + for (i = 0; i < 10000; ++i) + { + eina_convert_itoa(rand(), buffer); + eina_array_push(ea, (void *)eina_stringshare_add(buffer)); + if (rand() > RAND_MAX / 2) + { + const char *r = eina_stringshare_add(buffer); + fail_if(r == NULL); + } + } + + for (i = 0; i < 10000; ++i) + { + const char *r; + + eina_convert_itoa(60000 - i, buffer); + eina_array_push(ea, (void *)eina_stringshare_add(buffer)); + r = eina_stringshare_add(buffer); + fail_if(r == NULL); + r = eina_stringshare_add(buffer); + fail_if(r == NULL); + } + + for (i = 0; i < 200; ++i) + eina_stringshare_del(eina_array_data_get(ea, i)); + + for (i = 0; i < 1000; ++i) + eina_stringshare_del(eina_array_pop(ea)); + + eina_shutdown(); + + eina_array_free(ea); +} +END_TEST + +void +eina_test_stringshare(TCase *tc) +{ + tcase_add_test(tc, eina_stringshare_simple); + tcase_add_test(tc, eina_stringshare_small); + tcase_add_test(tc, eina_stringshare_test_share); + tcase_add_test(tc, eina_stringshare_collision); + tcase_add_test(tc, eina_stringshare_putstuff); +} diff --git a/libraries/eina/src/tests/eina_test_tiler.c b/libraries/eina/src/tests/eina_test_tiler.c new file mode 100644 index 0000000..f1ef8f0 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_tiler.c @@ -0,0 +1,184 @@ +/* EINA - EFL data type library + * Copyright (C) 2009 Rafael Antognolli + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "eina_suite.h" +#include "Eina.h" + +struct test_rect +{ + unsigned long col, row; + int x, y, w, h; + Eina_Bool full; +}; + +static void +check_iterator(Eina_Iterator *it, struct test_rect *cur_test) +{ + unsigned int i = 0; + struct Eina_Tile_Grid_Info *tile; + + EINA_ITERATOR_FOREACH(it, tile) { + fail_if(cur_test[i].col != tile->col || + cur_test[i].row != tile->row || + cur_test[i].x != tile->rect.x || + cur_test[i].y != tile->rect.y || + cur_test[i].w != tile->rect.w || + cur_test[i].h != tile->rect.h || + cur_test[i].full != tile->full); + i++; + } + + fail_if(i == 0); +} + + START_TEST(eina_test_tile_grid_slicer_iterator) +{ + Eina_Iterator *it; + struct test_rect *cur_test; + struct test_rect test1[] = {{1, 1, 72, 82, 10, 15, 0}}; + struct test_rect test2[] = + {{1, 1, 72, 82, 56, 15, 0}, + {2, 1, 0, 82, 128, 15, 0}, + {3, 1, 0, 82, 116, 15, 0}}; + struct test_rect test3[] = + {{1, 1, 72, 82, 10, 46, 0}, + {1, 2, 72, 0, 10, 128, 0}, + {1, 3, 72, 0, 10, 126, 0}}; + struct test_rect test4[] = + {{1, 1, 72, 82, 56, 46, 0}, + {2, 1, 0, 82, 128, 46, 0}, + {3, 1, 0, 82, 128, 46, 0}, + {4, 1, 0, 82, 88, 46, 0}, + {1, 2, 72, 0, 56, 128, 0}, + {2, 2, 0, 0, 128, 128, 1}, + {3, 2, 0, 0, 128, 128, 1}, + {4, 2, 0, 0, 88, 128, 0}, + {1, 3, 72, 0, 56, 126, 0}, + {2, 3, 0, 0, 128, 126, 0}, + {3, 3, 0, 0, 128, 126, 0}, + {4, 3, 0, 0, 88, 126, 0}}; + struct test_rect test5[] = {{1, 1, 0, 0, 128, 128, 1}}; + struct test_rect test6[] = {{1, 1, 0, 0, 1, 1, 0}}; + struct test_rect test7[] = + {{1, 1, 0, 0, 128, 128, 1}, + {2, 1, 0, 0, 1, 128, 0}, + {1, 2, 0, 0, 128, 1, 0}, + {2, 2, 0, 0, 1, 1, 0}}; + + eina_init(); + + cur_test = test1; + it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 15, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test2; + it = eina_tile_grid_slicer_iterator_new(200, 210, 300, 15, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test3; + it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 300, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test4; + it = eina_tile_grid_slicer_iterator_new(200, 210, 400, 300, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test5; + it = eina_tile_grid_slicer_iterator_new(128, 128, 128, 128, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test6; + it = eina_tile_grid_slicer_iterator_new(128, 128, 1, 1, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + cur_test = test7; + it = eina_tile_grid_slicer_iterator_new(128, 128, 129, 129, 128, 128); + check_iterator(it, cur_test); + eina_iterator_free(it); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_test_tiler_all) +{ + Eina_Tiler *tl; + Eina_Iterator *it; + Eina_Rectangle *rp; + Eina_Rectangle r; + int i = 0; + + eina_init(); + + tl = eina_tiler_new(640, 480); + + eina_tiler_tile_size_set(tl, 32, 32); + + EINA_RECTANGLE_SET(&r, 50, 50, 20, 20); + fail_if(!eina_tiler_rect_add(tl, &r)); + + EINA_RECTANGLE_SET(&r, -10, -10, 5, 5); + fail_if(eina_tiler_rect_add(tl, &r)); + + EINA_RECTANGLE_SET(&r, 40, 40, 20, 20); + eina_tiler_rect_del(tl, &r); + + it = eina_tiler_iterator_new(tl); + fail_if(!it); + + EINA_ITERATOR_FOREACH(it, rp) + { + fail_if(rp->w <= 0); + fail_if(rp->h <= 0); + fail_if(rp->x < 0 || rp->x + rp->w > 640); + fail_if(rp->y < 0 || rp->y + rp->h > 480); + ++i; + } + + fail_if(eina_iterator_container_get(it) != tl); + + eina_iterator_free(it); + + fail_if(i == 0); + + eina_tiler_clear(tl); + + eina_tiler_free(tl); + + eina_shutdown(); +} +END_TEST + +void +eina_test_tiler(TCase *tc) +{ + tcase_add_test(tc, eina_test_tile_grid_slicer_iterator); + tcase_add_test(tc, eina_test_tiler_all); +} diff --git a/libraries/eina/src/tests/eina_test_ustr.c b/libraries/eina/src/tests/eina_test_ustr.c new file mode 100644 index 0000000..eaeba9d --- /dev/null +++ b/libraries/eina/src/tests/eina_test_ustr.c @@ -0,0 +1,483 @@ +/* EINA - EFL data type library + * Copyright (C) 2010 Brett Nash + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; +static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0}; +static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0}; +static const Eina_Unicode STR4[] = {'A', 0}; +static const Eina_Unicode EMPTYSTR[] = {0}; + +START_TEST(eina_unicode_strcmp_test) +{ + eina_init(); + + /* 1 & 2 */ + fail_if(eina_unicode_strcmp(STR1,STR2) == 0); + fail_if(eina_unicode_strcmp(STR1,STR2) < 1); + + /* 1 & 3 */ + fail_if(eina_unicode_strcmp(STR1, STR3) != 0); + + /* 1 & 4 */ + fail_if(eina_unicode_strcmp(STR1, STR4) == 0); + fail_if(eina_unicode_strcmp(STR1, STR4) > 1); + + /* 1 & empty */ + fail_if(eina_unicode_strcmp(STR1, EMPTYSTR) < 1); + + /* Self tests */ + fail_if(eina_unicode_strcmp(STR1, STR1) != 0); + fail_if(eina_unicode_strcmp(STR2, STR2) != 0); + fail_if(eina_unicode_strcmp(STR3, STR3) != 0); + fail_if(eina_unicode_strcmp(STR4, STR4) != 0); + fail_if(eina_unicode_strcmp(EMPTYSTR, EMPTYSTR) != 0); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_strcpy_test) +{ + Eina_Unicode buf[10] = { 0 }; + Eina_Unicode *rv; + + eina_init(); + + rv = eina_unicode_strcpy(buf,STR1); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR1) != 0); + + rv = eina_unicode_strcpy(buf,STR2); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR2) != 0); + + /* Now a shorter string */ + rv = eina_unicode_strcpy(buf,STR2); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR2) != 0); + + /* Really short string */ + rv = eina_unicode_strcpy(buf,STR4); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR4) != 0); + fail_if(buf[2] != 'n'); /* check old buf is there */ + + buf[1] = '7'; + rv = eina_unicode_strcpy(buf,EMPTYSTR); + fail_if(rv != buf); + fail_if(buf[0] != 0); + fail_if(buf[1] != '7'); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_strncpy_test) +{ + Eina_Unicode buf[10] = { 0 }; + Eina_Unicode *rv; + + eina_init(); + + rv = eina_unicode_strncpy(buf,STR1,9); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR1) != 0); + + buf[1] = '7'; + rv = eina_unicode_strncpy(buf,STR1,1); + fail_if(rv != buf); + fail_if(buf[1] != '7'); + fail_if(buf[0] != STR1[0]); + + buf[9] = '7'; + rv = eina_unicode_strncpy(buf, STR4, 10); + fail_if(rv != buf); + fail_if(eina_unicode_strcmp(buf,STR4) != 0); + fail_if(buf[9] != 0); + + buf[0] = '7'; + rv = eina_unicode_strncpy(buf, STR1, 0); + fail_if(buf[0] != '7'); + + /* may segfault */ + buf[0] = '7'; + rv = eina_unicode_strncpy(buf, NULL, 0); + fail_if(buf[0] != '7'); + + /* Hopefully won't segfault */ + rv = eina_unicode_strncpy(NULL, STR1, 0); + fail_if(rv != NULL); + + eina_shutdown(); +} +END_TEST + + + +START_TEST(eina_ustr_strlen_test) +{ + + eina_init(); + + fail_if(eina_unicode_strlen(STR1) != 8); + fail_if(eina_unicode_strlen(STR2) != 9); + fail_if(eina_unicode_strlen(STR3) != 8); + fail_if(eina_unicode_strlen(STR4) != 1); + fail_if(eina_unicode_strlen(EMPTYSTR) != 0); + /* Eina unicode doesn't take NULL */ + // fail_if(eina_unicode_strlen(NULL)); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_strnlen_test) +{ + eina_init(); + + /* Strlen style tests*/ + fail_if(eina_unicode_strnlen(STR1,10) != 8); + fail_if(eina_unicode_strnlen(STR2,10) != 9); + fail_if(eina_unicode_strnlen(STR3,10) != 8); + fail_if(eina_unicode_strnlen(STR4,10) != 1); + fail_if(eina_unicode_strnlen(EMPTYSTR,10) != 0); + + /* Too short tests */ + fail_if(eina_unicode_strnlen(STR1,3) != 3); + fail_if(eina_unicode_strnlen(STR2,3) != 3); + fail_if(eina_unicode_strnlen(STR3,3) != 3); + fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0); + fail_if(eina_unicode_strnlen(NULL,0) != 0); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_strdup_test) +{ + Eina_Unicode *buf; + + eina_init(); + + buf = eina_unicode_strdup(STR1); + fail_if(!buf); + fail_if(eina_unicode_strlen(buf) != eina_unicode_strlen(STR1)); + fail_if(eina_unicode_strcmp(buf, STR1)); + free(buf); + + buf = eina_unicode_strdup(EMPTYSTR); + fail_if(!buf); + fail_if(buf[0] != 0); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_strstr_test) +{ + Eina_Unicode *buf; + Eina_Unicode on[] = { 'O', 'n', 0 }; + + eina_init(); + + buf = eina_unicode_strstr(STR1,on); + fail_if(!buf); + fail_if(buf != STR1 + 6); + fail_if(eina_unicode_strcmp(buf,on) != 0); + + buf = eina_unicode_strstr(STR2,on); + fail_if(buf); + + buf = eina_unicode_strstr(EMPTYSTR, on); + fail_if(buf); + + buf = eina_unicode_strstr(STR1, EMPTYSTR); + fail_if(!buf); + fail_if(buf != STR1); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_utf8) +{ + int ind; + unsigned char ch; + eina_init(); + + /* Valid utf-8 cases */ + /* First possible sequence of a certain length */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\x00", &ind) != 0x00) || + (ind != 0)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\x01", &ind) != 0x01) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xC2\x80", &ind) != 0x80) || + (ind != 2)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xE0\xA0\x80", &ind) != 0x800) || + (ind != 3)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF0\x90\x80\x80", &ind) != 0x10000) || + (ind != 4)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF8\x88\x80\x80\x80", &ind) != 0x200000) || (ind != 5)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFC\x84\x80\x80\x80\x80", &ind) != 0x4000000) || (ind != 6)); + + /* Last possible sequence of a certain length */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\x7F", &ind) != 0x7F) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xDF\xBF", &ind) != 0x7FF) || + (ind != 2)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBF", &ind) != 0xFFFF) || + (ind != 3)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF7\xBF\xBF\xBF", &ind) != 0x1FFFFF) || + (ind != 4)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFB\xBF\xBF\xBF\xBF", &ind) != 0x3FFFFFF) || (ind != 5)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFD\xBF\xBF\xBF\xBF\xBF", &ind) != 0x7FFFFFFF) || (ind != 6)); + + /* Other boundary conditions */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xED\x9F\xBF", &ind) != 0xD7FF) || + (ind != 3)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xEE\x80\x80", &ind) != 0xE000) || + (ind != 3)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBD", &ind) != 0xFFFD) || + (ind != 3)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF4\x8F\xBF\xBF", &ind) != 0x10FFFF) || + (ind != 4)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF4\x90\x80\x80", &ind) != 0x110000) || + (ind != 4)); + + /* Error cases */ + /* Standalone continuation bytes */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\x80", &ind) != 0xDC80) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xBF", &ind) != 0xDCBF) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\x80\xBF", &ind) != 0xDC80) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xBF\x80", &ind) != 0xDCBF) || + (ind != 1)); + /* All possible continuation bytes */ + for (ch = 0x80 ; ch <= 0xBF ; ch++) + { + char buf[] = {ch, 0}; + ind = 0; + fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) || + (ind != 1)); + } + + /* Isolated starting sequences */ +#define _FIRST_SEQUENCES(start, end) \ + do \ + { \ + int i; \ + char *buf = alloca(((end - start + 1) * 2) + 1); \ + for (i = 0, ch = start ; ch <= end ; i++, ch++) \ + { \ + buf[i * 2] = ch; \ + buf[(i * 2) + 1] = ' '; \ + } \ + ind = 0; \ + for (i = 0, ch = start ; ch <= end ; ch++) \ + { \ + fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) || \ + (ind != ++i)); \ + fail_if((eina_unicode_utf8_get_next(buf, &ind) != 0x20) || \ + (ind != ++i)); \ + } \ + } \ + while (0) + /* all first bytes of 2-byte sequences separated by spaces. */ + _FIRST_SEQUENCES(0xC0, 0xDF); + /* all first bytes of 3-byte sequences separated by spaces. */ + _FIRST_SEQUENCES(0xE0, 0xEF); + /* all first bytes of 4-byte sequences separated by spaces. */ + _FIRST_SEQUENCES(0xF0, 0xF7); + /* all first bytes of 5-byte sequences separated by spaces. */ + _FIRST_SEQUENCES(0xF8, 0xFB); + /* all first bytes of 6-byte sequences separated by spaces. */ + _FIRST_SEQUENCES(0xFC, 0xFD); + + /* Incomplete sequences first means the first utf8 char, len means + * the correct length */ +#define _INCOMPLETE_SEQUENCES(first, conti, len) \ + do \ + { \ + int i, j; \ + char *buf = alloca(len + 1); \ + i = 0; \ + buf[i++] = first; \ + for ( ; i < len ; i++) \ + { \ + Eina_Unicode val; \ + for (j = 1 ; j < i ; j++) \ + { \ + buf[j] = conti; \ + } \ + buf[j] = 0; \ + ind = 0; \ + fail_if( \ + (eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | first))); \ + while ((val = eina_unicode_utf8_get_next(buf, &ind))) \ + { \ + fail_if(val != (0xDC00 | conti)); \ + } \ + fail_if(ind != i); \ + } \ + } \ + while (0) + + /* Sequences with missing continuation */ + _INCOMPLETE_SEQUENCES(0xC0, 0x81, 2); + _INCOMPLETE_SEQUENCES(0xDF, 0xBF, 2); + _INCOMPLETE_SEQUENCES(0xE0, 0x81, 3); + _INCOMPLETE_SEQUENCES(0xEF, 0xBF, 3); + _INCOMPLETE_SEQUENCES(0xF0, 0x81, 4); + _INCOMPLETE_SEQUENCES(0xF7, 0xBF, 4); + _INCOMPLETE_SEQUENCES(0xF8, 0x81, 5); + _INCOMPLETE_SEQUENCES(0xFB, 0xBF, 5); + _INCOMPLETE_SEQUENCES(0xFC, 0x81, 6); + _INCOMPLETE_SEQUENCES(0xFD, 0xBF, 6); + + /* Impossible bytes */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFE", &ind) != 0xDCFE) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFF", &ind) != 0xDCFF) || + (ind != 1)); + + /* Overlong sequences */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xC0\xAF", &ind) != 0xDCC0) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xE0\x80\xAF", &ind) != 0xDCE0) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF0\x80\x80\xAF", &ind) != 0xDCF0) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF8\x80\x80\x80\xAF", &ind) != 0xDCF8) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFC\x80\x80\x80\x80\xAF", &ind) != 0xDCFC) || + (ind != 1)); + + /* Maximum overlong sequences */ + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xC1\xBF", &ind) != 0xDCC1) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xE0\x9F\xBF", &ind) != 0xDCE0) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF0\x8F\xBF\xBF", &ind) != 0xDCF0) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xF8\x87\xBF\xBF\xBF", &ind) != 0xDCF8) || + (ind != 1)); + ind = 0; + fail_if((eina_unicode_utf8_get_next("\xFC\x83\xBF\xBF\xBF\xBF", &ind) != 0xDCFC) || + (ind != 1)); + /* Add some more error cases here */ + + /* Just to cover prev/len. General utf-8 parsing was covered above */ + fail_if(eina_unicode_utf8_get_len("\xF4\x90\x80\x80\xF4\x8F\xBF\xBF") != 2); + ind = 0; + fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0xD7FF) || + (ind != 0)); + ind = 3; + fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0x00) || + (ind != 0)); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_unicode_utf8_conversion) +{ + Eina_Unicode uni_in[] = {0x5D0, 0xFDF6, 0xDC80, 0x1F459, 0x3FFFFFF, + 0x7FFFFFFF, 'a', 'b', 'c', 0}; + Eina_Unicode *uni_out; + char c_in[] = "\xD7\x90""\xEF\xB7\xB6""\x80""\xF0\x9F\x91\x99" + "\xFB\xBF\xBF\xBF\xBF""\xFD\xBF\xBF\xBF\xBF\xBF""abc"; + char *c_out; + int len; + + eina_init(); + + uni_out = eina_unicode_utf8_to_unicode(c_in, &len); + fail_if((len != 9) || eina_unicode_strcmp(uni_in, uni_out)); + free(uni_out); + + c_out = eina_unicode_unicode_to_utf8(uni_in, &len); + fail_if((len != 24) || strcmp(c_in, c_out)); + free(c_out); + + eina_shutdown(); +} +END_TEST + +void +eina_test_ustr(TCase *tc) +{ + printf("ustr test\n"); + tcase_add_test(tc,eina_unicode_strcmp_test); + tcase_add_test(tc,eina_unicode_strcpy_test); + tcase_add_test(tc,eina_unicode_strncpy_test); + tcase_add_test(tc,eina_ustr_strlen_test); + tcase_add_test(tc,eina_unicode_strnlen_test); + tcase_add_test(tc,eina_unicode_strdup_test); + tcase_add_test(tc,eina_unicode_strstr_test); + tcase_add_test(tc,eina_unicode_utf8); + tcase_add_test(tc,eina_unicode_utf8_conversion); + +} + diff --git a/libraries/eina/src/tests/eina_test_ustringshare.c b/libraries/eina/src/tests/eina_test_ustringshare.c new file mode 100644 index 0000000..1b1ffb2 --- /dev/null +++ b/libraries/eina/src/tests/eina_test_ustringshare.c @@ -0,0 +1,119 @@ +/* EINA - EFL data type library + * Copyright (C) 2008 Cedric Bail + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; + * if not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#include "eina_suite.h" +#include "Eina.h" + +static const Eina_Unicode TEST0[] = {'t', 'e', 's', 't', '/', '0', 0}; +static const Eina_Unicode TEST1[] = {'t', 'e', 's', 't', '/', '1', 0}; + +START_TEST(eina_ustringshare_simple) +{ + const Eina_Unicode *t0; + const Eina_Unicode *t1; + + eina_init(); + + t0 = eina_ustringshare_add(TEST0); + t1 = eina_ustringshare_add(TEST1); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(eina_unicode_strcmp(t0, TEST0) != 0); + fail_if(eina_unicode_strcmp(t1, TEST1) != 0); + fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t0)); + fail_if((int)eina_unicode_strlen(TEST1) != eina_ustringshare_strlen(t1)); + + t0 = eina_ustringshare_ref(t0); + fail_if(t0 == NULL); + fail_if((int)strlen((char*)TEST0) != eina_stringshare_strlen((const char*)t0)); + + eina_ustringshare_del(t0); + eina_ustringshare_del(t0); + eina_ustringshare_del(t1); + + eina_shutdown(); +} +END_TEST + + +START_TEST(eina_ustringshare_test_share) +{ + const Eina_Unicode *t0; + const Eina_Unicode *t1; + + eina_init(); + + t0 = eina_ustringshare_add(TEST0); + t1 = eina_ustringshare_add(TEST0); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(eina_unicode_strcmp(t0, TEST0) != 0); + fail_if(eina_unicode_strcmp(t1, TEST0) != 0); + fail_if(t0 != t1); + fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t0)); + fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t1)); + + eina_ustringshare_del(t0); + eina_ustringshare_del(t1); + + eina_shutdown(); +} +END_TEST + +START_TEST(eina_ustringshare_putstuff) +{ + const Eina_Unicode *tmp; + int i; + + eina_init(); + + for (i = 10000; i > 0; --i) + { + Eina_Unicode string_[] = {'s', 't', 'r', 'i', 'n', 'g', '_', 0}; + Eina_Unicode build[64]; + eina_unicode_strcpy(build, string_); + + build[7] = i; + build[8] = 0; + tmp = eina_ustringshare_add(build); + fail_if(tmp != eina_ustringshare_add(build)); + fail_if((int)eina_unicode_strlen(build) != eina_ustringshare_strlen(tmp)); + } + + eina_shutdown(); +} +END_TEST + +void +eina_test_ustringshare(TCase *tc) +{ + tcase_add_test(tc, eina_ustringshare_simple); + tcase_add_test(tc, eina_ustringshare_test_share); + tcase_add_test(tc, eina_ustringshare_putstuff); +} diff --git a/libraries/eina/src/tests/evas_hash.c b/libraries/eina/src/tests/evas_hash.c new file mode 100644 index 0000000..33615af --- /dev/null +++ b/libraries/eina/src/tests/evas_hash.c @@ -0,0 +1,536 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "Evas_Data.h" + +typedef struct _Evas_Hash_El Evas_Hash_El; + +struct _Evas_Hash_El +{ + Evas_Object_List _list_data; + const char *key; + void *data; +}; + +static inline int _evas_hash_gen(const char *key); + +static int _evas_hash_alloc_error = 0; + +static inline int +_evas_hash_gen(const char *key) +{ + unsigned int hash_num = 5381; + const unsigned char *ptr; + + if (!key) + return 0; + + for (ptr = (unsigned char *)key; *ptr; ptr++) + hash_num = (hash_num * 33) ^ *ptr; + + hash_num &= 0xff; + return (int)hash_num; +} + +/** + * @defgroup Evas_Hash_Data Hash Data Functions + * + * Functions that add, access or remove data from hashes. + * + * The following example shows how to add and then access data in a + * hash table: + * @code + * Evas_Hash *hash = NULL; + * extern void *my_data; + * + * hash = evas_hash_add(hash, "My Data", my_data); + * if (evas_hash_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. Hash allocation failed.\n"); + * exit(-1); + * } + * if (evas_hash_find(hash, "My Data") == my_data) + * { + * printf("My Data inserted and successfully found.\n"); + * } + * @endcode + * + * What follows is another example, showing how the @ref evas_hash_del + * function is used: + * @code + * extern Evas_Hash *hash; + * extern void *data; + * + * printf("Insert some data...\n"); + * hash = evas_hash_add(hash, "My Data", my_data); + * printf("Removing by key...\n"); + * hash = evas_hash_del(hash, "My Data", NULL); + * printf("Insert some more data as a NULL key...\n"); + * hash = evas_hash_add(hash, NULL, my_data); + * printf("Removing by data as a NULL key...\n"); + * hash = evas_hash_del(hash, NULL, my_data); + * @endcode + */ + +/** + * Adds an entry to the given hash table. + * + * @p key is expected to be a unique string within the hash table. + * Otherwise, you cannot be sure which inserted data pointer will be + * accessed with @ref evas_hash_find , and removed with + * @ref evas_hash_del . + * + * Key strings are case sensitive. + * + * @ref evas_hash_alloc_error should be used to determine if an + * allocation error occurred during this function. + * + * @param hash The given hash table. Can be @c NULL, in which case a + * new hash table is allocated and returned. + * @param key A unique string. Can be @c NULL. + * @param data Data to associate with the string given by @p key. + * @return Either the given hash table, or if the given value for @p + * hash is @c NULL, then a new one. @c NULL will be returned + * if memory could not be allocated for a new table. + * @ingroup Evas_Hash_Data + */ +EAPI Evas_Hash * +evas_hash_add(Evas_Hash *hash, const char *key, const void *data) +{ + int hash_num; + Evas_Hash_El *el; + + if ((!key) || (!data)) + return hash; + + _evas_hash_alloc_error = 0; + if (!hash) + { + hash = calloc(1, sizeof(struct _Evas_Hash)); + if (!hash) + { + _evas_hash_alloc_error = 1; + return NULL; + } + } + + if (!(el = malloc(sizeof(struct _Evas_Hash_El) + strlen(key) + 1))) + { + if (hash->population <= 0) + { + free(hash); + hash = NULL; + } + + _evas_hash_alloc_error = 1; + return hash; + } + + el->key = ((char *)el) + sizeof(struct _Evas_Hash_El); + strcpy((char *)el->key, key); + el->data = (void *)data; + hash_num = _evas_hash_gen(key); + hash->buckets[hash_num] = evas_object_list_prepend(hash->buckets[hash_num], + el); + hash->population++; + return hash; +} + +/** + * Adds an entry to the given hash table and does not duplicate the string key. + * + * @p key is expected to be a unique string within the hash table. + * Otherwise, you cannot be sure which inserted data pointer will be + * accessed with @ref evas_hash_find , and removed with + * @ref evas_hash_del . This call does not make a copy of the key so it must + * be a string constant or stored elsewhere (in the object being added) etc. + * + * Key strings are case sensitive. + * + * @ref evas_hash_alloc_error should be used to determine if an + * allocation error occurred during this function. + * + * @param hash The given hash table. Can be @c NULL, in which case a + * new hash table is allocated and returned. + * @param key A unique string. Can be @c NULL. + * @param data Data to associate with the string given by @p key. + * @return Either the given hash table, or if the given value for @p + * hash is @c NULL, then a new one. @c NULL will be returned + * if memory could not be allocated for a new table. + * @ingroup Evas_Hash_Data + */ +EAPI Evas_Hash * +evas_hash_direct_add(Evas_Hash *hash, const char *key, const void *data) +{ + int hash_num; + Evas_Hash_El *el; + + if ((!key) || (!data)) + return hash; + + _evas_hash_alloc_error = 0; + if (!hash) + { + hash = calloc(1, sizeof(struct _Evas_Hash)); + if (!hash) + { + _evas_hash_alloc_error = 1; + return NULL; + } + } + + if (!(el = malloc(sizeof(struct _Evas_Hash_El)))) + { + if (hash->population <= 0) + { + free(hash); + hash = NULL; + } + + _evas_hash_alloc_error = 1; + return hash; + } + + el->key = key; + el->data = (void *)data; + hash_num = _evas_hash_gen(key); + hash->buckets[hash_num] = evas_object_list_prepend(hash->buckets[hash_num], + el); + hash->population++; + return hash; +} + +/** + * Removes the entry identified by @p key or @p data from the given + * hash table. + * + * If @p key is @c NULL, then @p data is used to find a match to + * remove. + * + * @param hash The given hash table. + * @param key The key string. Can be @c NULL. + * @param data The data pointer to remove if @p key is @c NULL. + * Otherwise, not required and can be @c NULL. + * @return The modified hash table. If there are no entries left, the + * hash table will be freed and @c NULL will be returned. + * @ingroup Evas_Hash_Data + */ +EAPI Evas_Hash * +evas_hash_del(Evas_Hash *hash, const char *key, const void *data) +{ + int hash_num; + Evas_Hash_El *el; + Evas_Object_List *l; + + if (!hash) + return NULL; + + if (!key) + for (hash_num = 0; hash_num < 256; hash_num++) + { + for (l = hash->buckets[hash_num]; l; l = l->next) + { + el = (Evas_Hash_El *)l; + if (el->data == data) + { + hash->buckets[hash_num] = evas_object_list_remove( + hash->buckets[hash_num], + el); + free(el); + hash->population--; + if (hash->population <= 0) + { + free(hash); + hash = NULL; + } + + return hash; + } + } + } + else + { + hash_num = _evas_hash_gen(key); + for (l = hash->buckets[hash_num]; l; l = l->next) + { + el = (Evas_Hash_El *)l; + if (!strcmp(el->key, key)) + if ((!data) || (el->data == data)) + { + hash->buckets[hash_num] = evas_object_list_remove( + hash->buckets[hash_num], + el); + free(el); + hash->population--; + if (hash->population <= 0) + { + free(hash); + hash = NULL; + } + + return hash; + } + + } + } + + return hash; +} + +/** + * Retrieves a specific entry in the given hash table. + * @param hash The given hash table. + * @param key The key string of the entry to find. + * @return The data pointer for the stored entry, or @c NULL if not + * found. + * @ingroup Evas_Hash_Data + */ +EAPI void * +evas_hash_find(const Evas_Hash *hash, const char *key) +{ + int hash_num; + Evas_Hash_El *el; + Evas_Object_List *l; + + _evas_hash_alloc_error = 0; + if ((!hash) || (!key)) + return NULL; + + hash_num = _evas_hash_gen(key); + for (l = hash->buckets[hash_num]; l; l = l->next) + { + el = (Evas_Hash_El *)l; + if (!strcmp(el->key, key)) + { + if (l != hash->buckets[hash_num]) + { + Evas_Object_List *bucket; + + bucket = hash->buckets[hash_num]; + bucket = evas_object_list_remove(bucket, el); + bucket = evas_object_list_prepend(bucket, el); + ((Evas_Hash *)hash)->buckets[hash_num] = bucket; + } + + return el->data; + } + } + return NULL; +} + +/** + * Modifies the entry pointer at the specified key and returns the old entry + * @param hash The given hash table. + * @param key The key string of the entry to modify. + * @param data The data to replace the old entry, if it exists. + * @return The data pointer for the old stored entry, or @c NULL if not + * found. If an existing entry is not found, nothing is added to the + * hash. + * @ingroup Evas_Hash_Data + */ +EAPI void * +evas_hash_modify(Evas_Hash *hash, const char *key, const void *data) +{ + int hash_num; + Evas_Hash_El *el; + Evas_Object_List *l; + + _evas_hash_alloc_error = 0; + if (!hash) + return NULL; + + hash_num = _evas_hash_gen(key); + for (l = hash->buckets[hash_num]; l; l = l->next) + { + el = (Evas_Hash_El *)l; + if ((key) && (!strcmp(el->key, key))) + { + void *old_data; + + if (l != hash->buckets[hash_num]) + { + hash->buckets[hash_num] = evas_object_list_remove( + hash->buckets[hash_num], + el); + hash->buckets[hash_num] = evas_object_list_prepend( + hash->buckets[hash_num], + el); + } + + old_data = el->data; + el->data = (void *)data; + return old_data; + } + } + return NULL; +} + +/** + * @defgroup Evas_Hash_General_Group Hash General Functions + * + * Miscellaneous functions that operate on hash objects. + */ + +/** + * Retrieves the number of buckets available in the given hash table. + * @param hash The given hash table. + * @return @c 256 if @p hash is not @c NULL. @c 0 otherwise. + * @ingroup Evas_Hash_General_Group + */ +EAPI int +evas_hash_size(const Evas_Hash *hash) +{ + if (!hash) + return 0; + + return 256; +} + +/** + * @todo Complete polishing documentation for evas_hash.c. The + * functions' docs may be grouped, but they need some simplification. + */ + +/** + * Free an entire hash table + * @param hash The hash table to be freed + * + * This function frees up all the memory allocated to storing the specified + * hash tale pointed to by @p hash. Any entries in the table that the program + * has no more pointers for elsewhere may now be lost, so this should only be + * called if the program has lready freed any allocated data in the hash table + * or has the pointers for data in the table stored elswehere as well. + * + * Example: + * @code + * extern Evas_Hash *hash; + * + * evas_hash_free(hash); + * hash = NULL; + * @endcode + * @ingroup Evas_Hash_General_Group + */ +EAPI void +evas_hash_free(Evas_Hash *hash) +{ + int i, size; + + if (!hash) + return; + + size = evas_hash_size(hash); + for (i = 0; i < size; i++) + { + while (hash->buckets[i]) + { + Evas_Hash_El *el; + + el = (Evas_Hash_El *)hash->buckets[i]; + hash->buckets[i] = evas_object_list_remove(hash->buckets[i], el); + free(el); + } + } + free(hash); +} + +/** + * Call a function on every member stored in the hash table + * @param hash The hash table whose members will be walked + * @param func The function to call on each parameter + * @param fdata The data pointer to pass to the function being called + * + * This function goes through every entry in the hash table @p hash and calls + * the function @p func on each member. The function should NOT modify the + * hash table contents if it returns 1. IF the hash table contents are + * modified by this function or the function wishes to stop processing it must + * return 0, otherwise return 1 to keep processing. + * + * Example: + * @code + * extern Evas_Hash *hash; + * + * Evas_Bool hash_fn(Evas_Hash *hash, const char *key, void *data, void *fdata) + * { + * printf("Func data: %s, Hash entry: %s / %p\n", fdata, key, data); + * return 1; + * } + * + * int main(int argc, char **argv) + * { + * char *hash_fn_data; + * + * hash_fn_data = strdup("Hello World"); + * evas_hash_foreach(hash, hash_fn, hash_fn_data); + * free(hash_fn_data); + * } + * @endcode + * @ingroup Evas_Hash_General_Group + */ +EAPI void +evas_hash_foreach(const Evas_Hash *hash, Evas_Bool (*func)( + const Evas_Hash *hash, + const char *key, + void *data, + void *fdata), const void *fdata) +{ + int i, size; + + if (!hash) + return; + + size = evas_hash_size(hash); + for (i = 0; i < size; i++) + { + Evas_Object_List *l, *next_l; + + for (l = hash->buckets[i]; l; ) + { + Evas_Hash_El *el; + + next_l = l->next; + el = (Evas_Hash_El *)l; + if (!func(hash, el->key, el->data, (void *)fdata)) + return; + + l = next_l; + } + } +} + +/** + * Return memory allocation failure flag after an function requiring allocation + * @return The state of the allocation flag + * + * This function returns the state of the memory allocation flag. This flag is + * set if memory allocations fail during evas_hash_add() calls. If they do, 1 + * will be returned, otherwise 0 will be returned. The flag will remain in its + * current state until the next call that requires allocation is called, and + * is then reset. + * + * Example: + * @code + * Evas_Hash *hash = NULL; + * extern void *my_data; + * + * hash = evas_hash_add(hash, "My Data", my_data); + * if (evas_hash_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. Hash allocation failed.\n"); + * exit(-1); + * } + * if (evas_hash_find(hash, "My Data") == my_data) + * { + * printf("My Data inserted and successfully found.\n"); + * } + * @endcode + * @ingroup Evas_Hash_General_Group + */ +EAPI int +evas_hash_alloc_error(void) +{ + return _evas_hash_alloc_error; +} diff --git a/libraries/eina/src/tests/evas_list.c b/libraries/eina/src/tests/evas_list.c new file mode 100644 index 0000000..55e301f --- /dev/null +++ b/libraries/eina/src/tests/evas_list.c @@ -0,0 +1,1093 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "Evas_Data.h" +#include + +typedef struct _Evas_List_Accounting Evas_List_Accounting; + +struct _Evas_List_Accounting +{ + Evas_List *last; + int count; +}; + +static int _evas_list_alloc_error = 0; + +static Evas_Mempool _evas_list_mempool = +{ + sizeof(Evas_List), + 320, + 0, NULL, NULL +}; +static Evas_Mempool _evas_list_accounting_mempool = +{ + sizeof(Evas_List_Accounting), + 80, + 0, NULL, NULL +}; + +/** + * @defgroup Evas_List_Data_Group Linked List Creation Functions + * + * Functions that add data to an Evas_List. + */ + +/** + * Appends the given data to the given linked list. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully appended. + * + * @code + * Evas_List *list = NULL; + * extern void *my_data; + * + * list = evas_list_append(list, my_data); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @param list The given list. If @c NULL is given, then a new list + * is created. + * @param data The data to append. + * @return A new list pointer that should be used in place of the one + * given to this function if successful. Otherwise, the old + * pointer is returned. + * @ingroup Evas_List_Data_Group + */ +EAPI Evas_List * +evas_list_append(Evas_List *list, const void *data) +{ + Evas_List *l, *new_l; + + _evas_list_alloc_error = 0; + new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List)); + if (!new_l) + { + _evas_list_alloc_error = 1; + return list; + } + + new_l->next = NULL; + new_l->data = (void *)data; + if (!list) + { + new_l->prev = NULL; + new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool, + sizeof(Evas_List_Accounting)); + if (!new_l->accounting) + { + _evas_list_alloc_error = 1; + evas_mempool_free(&_evas_list_mempool, new_l); + return list; + } + + new_l->accounting->last = new_l; + new_l->accounting->count = 1; + return new_l; + } + + l = list->accounting->last; + l->next = new_l; + new_l->prev = l; + new_l->accounting = list->accounting; + list->accounting->last = new_l; + list->accounting->count++; + return list; +} + +/** + * Prepends the given data to the given linked list. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully prepended. + * + * Example: + * @code + * Evas_List *list = NULL; + * extern void *my_data; + * + * list = evas_list_prepend(list, my_data); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @param list The given list. + * @param data The given data. + * @return A new list pointer that should be used in place of the one + * given to this function, if successful. Otherwise, the old + * pointer is returned. + * @ingroup Evas_List_Data_Group + */ +EAPI Evas_List * +evas_list_prepend(Evas_List *list, const void *data) +{ + Evas_List *new_l; + + _evas_list_alloc_error = 0; + new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List)); + if (!new_l) + { + _evas_list_alloc_error = 1; + return list; + } + + new_l->prev = NULL; + new_l->data = (void *)data; + if (!list) + { + new_l->next = NULL; + new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool, + sizeof(Evas_List_Accounting)); + if (!new_l->accounting) + { + _evas_list_alloc_error = 1; + evas_mempool_free(&_evas_list_mempool, new_l); + return list; + } + + new_l->accounting->last = new_l; + new_l->accounting->count = 1; + return new_l; + } + + new_l->next = list; + list->prev = new_l; + new_l->accounting = list->accounting; + list->accounting->count++; + return new_l; +} + +/** + * Inserts the given data into the given linked list after the specified data. + * + * If @p relative is not in the list, @p data is appended to the end of the + * list. If there are multiple instances of @p relative in the list, + * @p data is inserted after the first instance. + * + * The following example code demonstrates how to ensure that the + * given data has been successfully inserted. + * + * @code + * Evas_List *list = NULL; + * extern void *my_data; + * extern void *relative_member; + * + * list = evas_list_append(list, relative_member); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * list = evas_list_append_relative(list, my_data, relative_member); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @param list The given linked list. + * @param data The given data. + * @param relative The data to insert after. + * @return A new list pointer that should be used in place of the one + * given to this function if successful. Otherwise, the old pointer + * is returned. + * @ingroup Evas_List_Data_Group + */ +EAPI Evas_List * +evas_list_append_relative(Evas_List *list, + const void *data, + const void *relative) +{ + Evas_List *l; + + for (l = list; l; l = l->next) + { + if (l->data == relative) + return evas_list_append_relative_list(list, data, l); + } + return evas_list_append(list, data); +} + +EAPI Evas_List * +evas_list_append_relative_list(Evas_List *list, + const void *data, + Evas_List *relative) +{ + Evas_List *new_l; + + if ((!list) || (!relative)) + return evas_list_append(list, data); + + _evas_list_alloc_error = 0; + new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List)); + if (!new_l) + { + _evas_list_alloc_error = 1; + return list; + } + + new_l->data = (void *)data; + if (relative->next) + { + new_l->next = relative->next; + relative->next->prev = new_l; + } + else + new_l->next = NULL; + + relative->next = new_l; + new_l->prev = relative; + new_l->accounting = list->accounting; + list->accounting->count++; + if (!new_l->next) + new_l->accounting->last = new_l; + + return list; +} + +/** + * Prepend a data pointer to a linked list before the member specified + * @param list The list handle to prepend @p data too + * @param data The data pointer to prepend to list @p list before @p relative + * @param relative The data pointer before which to insert @p data + * @return A new list handle to replace the old one + + * Inserts the given data into the given linked list before the member + * specified. + * + * If @p relative is not in the list, @p data is prepended to the + * start of the list. If there are multiple instances of @p relative + * in the list, @p data is inserted before the first instance. + * + * The following code example demonstrates how to ensure that the + * given data has been successfully inserted. + * + * @code + * Evas_List *list = NULL; + * extern void *my_data; + * extern void *relative_member; + * + * list = evas_list_append(list, relative_member); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * list = evas_list_prepend_relative(list, my_data, relative_member); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * + * @param list The given linked list. + * @param data The given data. + * @param relative The data to insert before. + * @return A new list pointer that should be used in place of the one + * given to this function if successful. Otherwise the old pointer + * is returned. + * @ingroup Evas_List_Data_Group + */ +EAPI Evas_List * +evas_list_prepend_relative(Evas_List *list, + const void *data, + const void *relative) +{ + Evas_List *l; + + _evas_list_alloc_error = 0; + for (l = list; l; l = l->next) + { + if (l->data == relative) + return evas_list_prepend_relative_list(list, data, l); + } + return evas_list_prepend(list, data); +} + +EAPI Evas_List * +evas_list_prepend_relative_list(Evas_List *list, + const void *data, + Evas_List *relative) +{ + Evas_List *new_l; + + if ((!list) || (!relative)) + return evas_list_prepend(list, data); + + _evas_list_alloc_error = 0; + new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List)); + if (!new_l) + { + _evas_list_alloc_error = 1; + return list; + } + + new_l->data = (void *)data; + new_l->prev = relative->prev; + new_l->next = relative; + if (relative->prev) + relative->prev->next = new_l; + + relative->prev = new_l; + new_l->accounting = list->accounting; + list->accounting->count++; + if (new_l->prev) + return list; + + return new_l; +} + +/** + * @defgroup Evas_List_Remove_Group Linked List Remove Functions + * + * Functions that remove data from linked lists. + */ + +/** + * Removes the first instance of the specified data from the given list. + * + * If the specified data is not in the given list, nothing is done. + * + * @param list The given list. + * @param data The specified data. + * @return A new list pointer that should be used in place of the one + * passed to this functions. + * @ingroup Evas_List_Remove_Group + */ +EAPI Evas_List * +evas_list_remove(Evas_List *list, const void *data) +{ + Evas_List *l; + + for (l = list; l; l = l->next) + { + if (l->data == data) + return evas_list_remove_list(list, l); + } + return list; +} + +/** + * Removes the specified data + * + * Remove a specified member from a list + * @param list The list handle to remove @p remove_list from + * @param remove_list The list node which is to be removed + * @return A new list handle to replace the old one + * + * Calling this function takes the list node @p remove_list and removes it + * from the list @p list, freeing the list node structure @p remove_list. + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *l; + * extern void *my_data; + * + * for (l = list; l; l= l->next) + * { + * if (l->data == my_data) + * { + * list = evas_list_remove_list(list, l); + * break; + * } + * } + * @endcode + * @ingroup Evas_List_Remove_Group + */ +EAPI Evas_List * +evas_list_remove_list(Evas_List *list, Evas_List *remove_list) +{ + Evas_List *return_l; + + if (!list) + return NULL; + + if (!remove_list) + return list; + + if (remove_list->next) + remove_list->next->prev = remove_list->prev; + + if (remove_list->prev) + { + remove_list->prev->next = remove_list->next; + return_l = list; + } + else + return_l = remove_list->next; + + if (remove_list == list->accounting->last) + list->accounting->last = remove_list->prev; + + list->accounting->count--; + if (list->accounting->count == 0) + evas_mempool_free(&_evas_list_accounting_mempool, list->accounting); + + evas_mempool_free(&_evas_list_mempool, remove_list); + return return_l; +} + +/** + * Moves the specified data to the head of the list + * + * Move a specified member to the head of the list + * @param list The list handle to move @p inside + * @param move_list The list node which is to be moved + * @return A new list handle to replace the old one + * + * Calling this function takes the list node @p move_list and moves it + * to the front of the @p list. + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *l; + * extern void *my_data; + * + * for (l = list; l; l= l->next) + * { + * if (l->data == my_data) + * { + * list = evas_list_promote_list(list, l); + * break; + * } + * } + * @endcode + * @ingroup Evas_List_Promote_Group + */ +EAPI Evas_List * +evas_list_promote_list(Evas_List *list, Evas_List *move_list) +{ + Evas_List *return_l; + + if (!list) + return NULL; + + if (!move_list) + return list; + + if (move_list == list) + return list; + + if (move_list->next) + move_list->next->prev = move_list->prev; + + if (move_list->prev) + { + move_list->prev->next = move_list->next; + return_l = list; + } + else + return_l = move_list->next; + + if (move_list == list->accounting->last) + list->accounting->last = move_list->prev; + + move_list->prev = return_l->prev; + if (return_l->prev) + return_l->prev->next = move_list; + + return_l->prev = move_list; + move_list->next = return_l; + return move_list; +} + + + +/** + * @defgroup Evas_List_Find_Group Linked List Find Functions + * + * Functions that find specified data in a linked list. + */ + +/** + * Find a member of a list and return the member + * @param list The list handle to search for @p data + * @param data The data pointer to find in the list @p list + * @return The found member data pointer + * + * A call to this function will search the list @p list from beginning to end + * for the first member whose data pointer is @p data. If it is found, @p data + * will be returned, otherwise NULL will be returned. + * + * Example: + * @code + * extern Evas_List *list; + * extern void *my_data; + * + * if (evas_list_find(list, my_data) == my_data) + * { + * printf("Found member %p\n", my_data); + * } + * @endcode + * @ingroup Evas_List_Find_Group + */ +EAPI void * +evas_list_find(const Evas_List *list, const void *data) +{ + const Evas_List *l; + + for (l = list; l; l = l->next) + { + if (l->data == data) + return (void *)data; + } + return NULL; +} + +/** + * Find a member of a list and return the list node containing that member + * @param list The list handle to search for @p data + * @param data The data pointer to find in the list @p list + * @return The found members list node + * + * A call to this function will search the list @p list from beginning to end + * for the first member whose data pointer is @p data. If it is found, the + * list node containing the specified member will be returned, otherwise NULL + * will be returned. + * + * Example: + * @code + * extern Evas_List *list; + * extern void *my_data; + * Evas_List *found_node; + * + * found_node = evas_list_find_list(list, my_data); + * if (found_node) + * { + * printf("Found member %p\n", found_node->data); + * } + * @endcode + * @ingroup Evas_List_Find_Group + */ +EAPI Evas_List * +evas_list_find_list(const Evas_List *list, const void *data) +{ + const Evas_List *l; + + for (l = list; l; l = l->next) + { + if (l->data == data) + return (Evas_List *)l; + } + return NULL; +} + +/** + * Free an entire list and all the nodes, ignoring the data contained + * @param list The list to free + * @return A NULL pointer + * + * This function will free all the list nodes in list specified by @p list. + * + * Example: + * @code + * extern Evas_List *list; + * + * list = evas_list_free(list); + * @endcode + * @ingroup Evas_List_Remove_Group + */ +EAPI Evas_List * +evas_list_free(Evas_List *list) +{ + Evas_List *l, *free_l; + + if (!list) + return NULL; + + evas_mempool_free(&_evas_list_accounting_mempool, list->accounting); + for (l = list; l; ) + { + free_l = l; + l = l->next; + evas_mempool_free(&_evas_list_mempool, free_l); + } + return NULL; +} + +/** + * @defgroup Evas_List_Traverse_Group Linked List Traverse Functions + * + * Functions that you can use to traverse a linked list. + */ + +/** + * Get the last list node in the list + * @param list The list to get the last list node from + * @return The last list node in the list @p list + * + * This function will return the last list node in the list (or NULL if the + * list is empty). + * + * NB: This is a order-1 operation (it takes the same short time regardless of + * the length of the list). + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *last, *l; + * + * last = evas_list_last(list); + * printf("The list in reverse:\n"); + * for (l = last; l; l = l->prev) + * { + * printf("%p\n", l->data); + * } + * @endcode + * @ingroup Evas_List_Traverse_Group + */ +EAPI Evas_List * +evas_list_last(const Evas_List *list) +{ + if (!list) + return NULL; + + return list->accounting->last; +} + +/** + * Get the next list node after the specified list node + * @param list The list node to get the next list node from + * @return The next list node, or NULL if no next list node exists + * + * This function returns the next list node after the current one. It is + * equivalent to list->next. + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *l; + * + * printf("The list:\n"); + * for (l = list; l; l = evas_list_next(l)) + * { + * printf("%p\n", l->data); + * } + * @endcode + * @ingroup Evas_List_Traverse_Group + */ +EAPI Evas_List * +evas_list_next(const Evas_List *list) +{ + if (!list) + return NULL; + + return list->next; +} + +/** + * Get the previous list node before the specified list node + * @param list The list node to get the previous list node from + * @return The previous list node, or NULL if no previous list node exists + * + * This function returns the previous list node before the current one. It is + * equivalent to list->prev. + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *last, *l; + * + * last = evas_list_last(list); + * printf("The list in reverse:\n"); + * for (l = last; l; l = evas_list_prev(l)) + * { + * printf("%p\n", l->data); + * } + * @endcode + * @ingroup Evas_List_Traverse_Group + */ +EAPI Evas_List * +evas_list_prev(const Evas_List *list) +{ + if (!list) + return NULL; + + return list->prev; +} + +/** + * @defgroup Evas_List_General_Group Linked List General Functions + * + * Miscellaneous functions that work on linked lists. + */ + +/** + * Get the list node data member + * @param list The list node to get the data member of + * @return The data member from the list node @p list + * + * This function returns the data member of the specified list node @p list. + * It is equivalent to list->data. + * + * Example: + * @code + * extern Evas_List *list; + * Evas_List *l; + * + * printf("The list:\n"); + * for (l = list; l; l = evas_list_next(l)) + * { + * printf("%p\n", evas_list_data(l)); + * } + * @endcode + * @ingroup Evas_List_General_Group + */ +EAPI void * +evas_list_data(const Evas_List *list) +{ + if (!list) + return NULL; + + return list->data; +} + +/** + * Get the count of the number of items in a list + * @param list The list whose count to return + * @return The number of members in the list @p list + * + * This function returns how many members in the specified list: @p list. If + * the list is empty (NULL), 0 is returned. + * + * NB: This is an order-1 operation and takes the same time regardless of the + * length of the list. + * + * Example: + * @code + * extern Evas_List *list; + * + * printf("The list has %i members\n", evas_list_count(list)); + * @endcode + * @ingroup Evas_List_General_Group + */ +EAPI int +evas_list_count(const Evas_List *list) +{ + if (!list) + return 0; + + return list->accounting->count; +} + +/** + * Get the nth member's data pointer in a list + * @param list The list to get member number @p n from + * @param n The number of the element (0 being the first) + * @return The data pointer stored in the specified element + * + * This function returns the data pointer of element number @p n, in the list + * @p list. The first element in the array is element number 0. If the element + * number @p n does not exist, NULL will be returned. + * + * Example: + * @code + * extern Evas_List *list; + * extern int number; + * void *data; + * + * data = evas_list_nth(list, number); + * if (data) + * printf("Element number %i has data %p\n", number, data); + * @endcode + * @ingroup Evas_List_Find_Group + */ +EAPI void * +evas_list_nth(const Evas_List *list, int n) +{ + Evas_List *l; + + l = evas_list_nth_list(list, n); + return l ? l->data : NULL; +} + +/** + * Get the nth member's list node in a list + * @param list The list to get member number @p n from + * @param n The number of the element (0 being the first) + * @return The list node stored in the numbered element + * + * This function returns the list node of element number @p n, in the list + * @p list. The first element in the array is element number 0. If the element + * number @p n does not exist, NULL will be returned. + * + * Example: + * @code + * extern Evas_List *list; + * extern int number; + * Evas_List *nth_list; + * + * nth_list = evas_list_nth_list(list, number); + * if (nth_list) + * printf("Element number %i has data %p\n", number, nth_list->data); + * @endcode + * @ingroup Evas_List_Find_Group + */ +EAPI Evas_List * +evas_list_nth_list(const Evas_List *list, int n) +{ + int i; + const Evas_List *l; + + /* check for non-existing nodes */ + if ((!list) || (n < 0) || + (n > (list->accounting->count - 1))) + return NULL; + + /* if the node is in the 2nd half of the list, search from the end + * else, search from the beginning. + */ + if (n > (list->accounting->count / 2)) + for (i = list->accounting->count - 1, + l = list->accounting->last; + l; + l = l->prev, i--) + { + if (i == n) + return (Evas_List *)l; + } + else + for (i = 0, l = list; l; l = l->next, i++) + { + if (i == n) + return (Evas_List *)l; + } + + return NULL; +} + +/** + * @defgroup Evas_List_Ordering_Group Linked List Ordering Functions + * + * Functions that change the ordering of data in a linked list. + */ + +/** + * Reverse all the elements in the list + * @param list The list to reverse + * @return The list after it has been reversed + * + * This takes a list @p list, and reverses the order of all elements in the + * list, so the last member is now first, and so on. + * + * Example: + * @code + * extern Evas_List *list; + * + * list = evas_list_reverse(list); + * @endcode + * @ingroup Evas_List_Ordering_Group + */ +EAPI Evas_List * +evas_list_reverse(Evas_List *list) +{ + Evas_List *l1, *l2; + + if (!list) + return NULL; + + l1 = list; + l2 = list->accounting->last; + while (l1 != l2) + { + void *data; + + data = l1->data; + l1->data = l2->data; + l2->data = data; + l1 = l1->next; + if (l1 == l2) + break; + + l2 = l2->prev; + } + + return list; +} + +/** + * Sort a list according to the ordering func will return + * @param list The list handle to sort + * @param size The length of the list to sort + * @param func A function pointer that can handle comparing the list data + * nodes + * @return A new sorted list + * + * This function sorts your list. The data in your nodes can be arbitrary, + * you just have to be smart enough to know what kind of data is in your + * lists + * + * Example: + * @code + * int + * sort_cb(void *d1, void *d2) + * { + * const char *txt = NULL; + * const char *txt2 = NULL; + * + * if(!d1) return(1); + * if(!d2) return(-1); + * + * return(strcmp((const char*)d1, (const char*)d2)); + * } + * extern Evas_List *list; + * + * list = evas_list_sort(list, evas_list_count(list), sort_cb); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List Sorting failed.\n"); + * exit(-1); + * } + * @endcode + * @ingroup Evas_List_Ordering_Group + */ +EAPI Evas_List * +evas_list_sort(Evas_List *list, int size, int (*func)(void *, void *)) +{ + Evas_List *last; + unsigned int list_number; + unsigned int middle; + int list_size; + + if (!list || !func) + return NULL; + + /* if the caller specified an invalid size, sort the whole list */ + if ((size <= 0) || + (size > list->accounting->count)) + size = list->accounting->count; + + last = list->accounting->last; + middle = size - size / 2; + + for (list_number = middle, list_size = 1; + list_size < middle * 2; + list_number >>= 1, list_size <<= 1) + { + Evas_List *head1 = list; + unsigned int limit = size; + unsigned int process_list; + unsigned int pass_number; + unsigned int split_size = list_size; + + for (process_list = 0; process_list < list_number + 1; ++process_list) + { + Evas_List *head2; + unsigned int size_sum; + int size1, size2; + int i; + + size1 = limit < split_size ? limit : split_size; + limit -= size1; + + size2 = limit < split_size ? limit : split_size; + limit -= size2; + + size_sum = size1 + size2; + + for (head2 = head1, i = 0; i < size1; ++i) + head2 = evas_list_next (head2); + + for (pass_number = 0; pass_number < size_sum; ++pass_number) + { + Evas_List *next; + Evas_List *prev1; + Evas_List *prev2; + + if (size1 == 0 || !head1) /* List1 is empty, head1 is already at the end of the list. So only need to update head2 */ + { + for (; pass_number < size_sum; ++pass_number) + head2 = evas_list_next (head2); + break; + } + else + if (size2 == 0 || !head2) /* List2 is empty, just leave */ + break; + else + if (func (head1->data, head2->data) < 0) + { + head1 = evas_list_next (head1); + --size1; + } + else + { + next = evas_list_next (head2); + prev1 = evas_list_prev (head1); + prev2 = evas_list_prev (head2); + + if (next) + next->prev = prev2; + + if (prev1) + prev1->next = head2; + + if (prev2) + prev2->next = next; + + head2->prev = prev1; + head2->next = head1; + head1->prev = head2; + + --size2; + + if (head1 == list) + list = head2; + + if (head2 == last) + last = prev2; + + head2 = next; + } + } + head1 = head2; + } + } + + list->accounting->last = last; + return list; +} +/** + * Return the memory allocation failure flag after any operation needin allocation + * @return The state of the allocation flag + * + * This function returns the state of the memory allocation flag. This flag is + * set if memory allocations during evas_list_append(), evas_list_prepend(), + * evas_list_append_relative(), or evas_list_prepend_relative() fail. If they + * do fail, 1 will be returned, otherwise 0 will be returned. The flag will + * remain in its current state until the next call that requires allocation + * is called, and is then reset. + * + * Example: + * @code + * Evas_List *list = NULL; + * extern void *my_data; + * + * list = evas_list_append(list, my_data); + * if (evas_list_alloc_error()) + * { + * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); + * exit(-1); + * } + * @endcode + * @ingroup Evas_List_General_Group + */ +EAPI int +evas_list_alloc_error(void) +{ + return _evas_list_alloc_error; +} diff --git a/libraries/eina/src/tests/evas_mempool.c b/libraries/eina/src/tests/evas_mempool.c new file mode 100644 index 0000000..fbc48fa --- /dev/null +++ b/libraries/eina/src/tests/evas_mempool.c @@ -0,0 +1,200 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "Evas_Data.h" +#include "evas_mempool.h" + +//#define NOPOOL + +typedef struct _Pool Pool; + +struct _Pool +{ + int usage; + void *base; + Pool *prev, *next; +}; + + +Pool * +_evas_mp_pool_new(Evas_Mempool *pool) +{ +#ifdef NOPOOL + static Pool thepool; + return &thepool; +#else + Pool *p; + void **ptr; + int item_alloc, i; + + item_alloc = + ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *); + p = malloc(sizeof(Pool) + (pool->pool_size * item_alloc)); + ptr = (void **)(((unsigned char *)p) + sizeof(Pool)); + p->usage = 0; + p->base = ptr; + for (i = 0; i < pool->pool_size - 1; i++) + { + *ptr = (void **)(((unsigned char *)ptr) + item_alloc); + ptr = *ptr; + } + *ptr = NULL; + return p; +#endif +} + +void +_evas_mp_pool_free(Pool *p) +{ +#if !defined(NOPOOL) + free(p); +#endif +} + +void * +evas_mempool_malloc(Evas_Mempool *pool, int size) +{ +#ifdef NOPOOL + return malloc(size); +#else + Pool *p; + void *mem; + + for (p = pool->first; p; p = p->next) // look 4 pool from 2nd bucket on + { + if (p->base) // base is not NULL - has a free slot + { + if (p->prev) + { + if (pool->last == p) + pool->last = p->prev; + + p->prev->next = p->next; + p->prev = NULL; + p->next = pool->first; + p->next->prev = p; + pool->first = p; + } + + break; + } + } + if (!p) // we have reached the end of the list - no free pools + { + p = _evas_mp_pool_new(pool); + if (!p) + return NULL; + + p->prev = NULL; + p->next = pool->first; + if (p->next) + p->next->prev = p; + + if (!pool->last) + pool->last = p; + + pool->first = p; + } + + mem = p->base; // this points to the next free block - so take it + p->base = *((void **)mem); // base now points to the next free block + if (!p->base) // move to end - it just filled up + if (p->next) + { + if (p->prev) + p->prev->next = p->next; + else + pool->first = p->next; + + p->next->prev = p->prev; + ((Pool *)pool->last)->next = p; + p->prev = pool->last; + p->next = NULL; + pool->last = p; + } + + p->usage++; + pool->usage++; + return mem; +#endif +} + +void +evas_mempool_free(Evas_Mempool *pool, void *ptr) +{ +#ifdef NOPOOL + free(ptr); +#else + Pool *p; + void *pmem; + int item_alloc, psize; + + item_alloc = + ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *); + psize = item_alloc * pool->pool_size; + for (p = (Pool *)(pool->first); p; p = p->next) // look 4 pool + { + pmem = (void *)(((unsigned char *)p) + sizeof(Pool)); // pool mem base + if ((ptr >= pmem) && + ((unsigned char *)ptr < (((unsigned char *)pmem) + psize))) // is it in pool mem? + { + *((void **)ptr) = p->base; // freed node points to prev free node + p->base = ptr; // next free node is now the one we freed + p->usage--; + pool->usage--; + if (p->usage == 0) // free bucket + { + if (p->prev) + p->prev->next = p->next; + + if (p->next) + p->next->prev = p->prev; + + if (pool->last == p) + pool->last = p->prev; + + if (pool->first == p) + pool->first = p->next; + + _evas_mp_pool_free(p); + } + else if (p->prev) // if not the first - move to front + { + p->prev->next = p->next; + if (p->next) + p->next->prev = p->prev; + + if (pool->last == p) + pool->last = p->prev; + + p->prev = NULL; + p->next = pool->first; + p->next->prev = p; + pool->first = p; + } + + break; + } + } +#endif +} + + +void * +evas_mempool_calloc(Evas_Mempool *pool, int size) +{ +#ifdef NOPOOL + return calloc(1, size); +#else + void *mem; + + mem = evas_mempool_malloc(pool, size); + memset(mem, 0, size); + return mem; +#endif +} + diff --git a/libraries/eina/src/tests/evas_mempool.h b/libraries/eina/src/tests/evas_mempool.h new file mode 100644 index 0000000..983c434 --- /dev/null +++ b/libraries/eina/src/tests/evas_mempool.h @@ -0,0 +1,21 @@ +#ifndef _EVAS_MEMPOOL_H +#define _EVAS_MEMPOOL_H + + +typedef struct _Evas_Mempool Evas_Mempool; + +struct _Evas_Mempool +{ + int item_size; + int pool_size; + int usage; + void *first, *last; +}; + + +void *evas_mempool_malloc(Evas_Mempool *pool, int size); +void evas_mempool_free(Evas_Mempool *pool, void *ptr); +void *evas_mempool_calloc(Evas_Mempool *pool, int size); + + +#endif /* _EVAS_MEMPOOL_H */ diff --git a/libraries/eina/src/tests/evas_object_list.c b/libraries/eina/src/tests/evas_object_list.c new file mode 100644 index 0000000..8ba4267 --- /dev/null +++ b/libraries/eina/src/tests/evas_object_list.c @@ -0,0 +1,183 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "Evas_Data.h" + +/* list ops */ +void * +evas_object_list_append(void *in_list, void *in_item) +{ + Evas_Object_List *l, *new_l; + Evas_Object_List *list; + + list = in_list; + new_l = in_item; + new_l->next = NULL; + if (!list) + { + new_l->prev = NULL; + new_l->last = new_l; + return new_l; + } + + if (list->last) + l = list->last; + else + for (l = list; (l) && (l->next); l = l->next) ; + + l->next = new_l; + new_l->prev = l; + list->last = new_l; + return list; +} + +void * +evas_object_list_prepend(void *in_list, void *in_item) +{ + Evas_Object_List *new_l; + Evas_Object_List *list; + + list = in_list; + new_l = in_item; + new_l->prev = NULL; + if (!list) + { + new_l->next = NULL; + new_l->last = new_l; + return new_l; + } + + new_l->next = list; + list->prev = new_l; + new_l->last = list->last; + list->last = NULL; + return new_l; +} + +void * +evas_object_list_append_relative(void *in_list, + void *in_item, + void *in_relative) +{ + Evas_Object_List *list, *relative, *new_l; + + list = in_list; + new_l = in_item; + relative = in_relative; + if (relative) + { + if (relative->next) + { + new_l->next = relative->next; + relative->next->prev = new_l; + } + else + new_l->next = NULL; + + relative->next = new_l; + new_l->prev = relative; + if (!new_l->next) + list->last = new_l; + + return list; + } + + return evas_object_list_append(list, new_l); +} + +void * +evas_object_list_prepend_relative(void *in_list, + void *in_item, + void *in_relative) +{ + Evas_Object_List *list, *relative, *new_l; + + list = in_list; + new_l = in_item; + relative = in_relative; + if (relative) + { + new_l->prev = relative->prev; + new_l->next = relative; + relative->prev = new_l; + if (new_l->prev) + { + new_l->prev->next = new_l; + if (!new_l->next) + list->last = new_l; + + return list; + } + else + { + if (!new_l->next) + new_l->last = new_l; + else + { + new_l->last = list->last; + list->last = NULL; + } + + return new_l; + } + } + + return evas_object_list_prepend(list, new_l); +} + +void * +evas_object_list_remove(void *in_list, void *in_item) +{ + Evas_Object_List *return_l; + Evas_Object_List *list, *item; + + /* checkme */ + if(!in_list) + return in_list; + + list = in_list; + item = in_item; + if (!item) + return list; + + if (item->next) + item->next->prev = item->prev; + + if (item->prev) + { + item->prev->next = item->next; + return_l = list; + } + else + { + return_l = item->next; + if (return_l) + return_l->last = list->last; + } + + if (item == list->last) + list->last = item->prev; + + item->next = NULL; + item->prev = NULL; + return return_l; +} + +void * +evas_object_list_find(void *in_list, void *in_item) +{ + Evas_Object_List *l; + Evas_Object_List *list, *item; + + list = in_list; + item = in_item; + for (l = list; l; l = l->next) + { + if (l == item) + return item; + } + return NULL; +} diff --git a/libraries/eina/src/tests/evas_stringshare.c b/libraries/eina/src/tests/evas_stringshare.c new file mode 100644 index 0000000..6e8797c --- /dev/null +++ b/libraries/eina/src/tests/evas_stringshare.c @@ -0,0 +1,275 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + + +#include "Evas_Data.h" + +typedef struct _Evas_Stringshare Evas_Stringshare; +typedef struct _Evas_Stringshare_El Evas_Stringshare_El; + +struct _Evas_Stringshare +{ + Evas_Stringshare_El *buckets[1024]; +}; + +struct _Evas_Stringshare_El +{ + Evas_Stringshare_El *next; +// int op; + int references; +}; + +static Evas_Stringshare share = +{ + { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL + } +}; + +//static int op = 0; +//static FILE *f = NULL; + +static inline int +_evas_stringshare_hash_gen(const char *str, int *len) +{ + unsigned int hash_num = 5381; + const unsigned char *ptr; + + for (ptr = (const unsigned char *)str; *ptr; ptr++) + { + hash_num = (hash_num * 33) ^ *ptr; + } + + hash_num &= 0x3ff; + *len = ptr - (const unsigned char *)str; + return (int)hash_num; +} + +EAPI const char * +evas_stringshare_add(const char *str) +{ + int hash_num, slen; + char *el_str; + Evas_Stringshare_El *el, *pel = NULL; + + if (!str) + { + return NULL; // if (!f) + + } + +// { +// char bf[256]; +// snprintf(bf, sizeof(bf), "strlog-%i", getpid()); +// f = fopen(bf, "w"); +// } + hash_num = _evas_stringshare_hash_gen(str, &slen); + for (el = share.buckets[hash_num]; el; pel = el, el = el->next) + { + el_str = ((char *)el) + sizeof(Evas_Stringshare_El); + if (!strcmp(el_str, str)) + { + if (pel) + { + pel->next = el->next; + el->next = share.buckets[hash_num]; + share.buckets[hash_num] = el; + } + + el->references++; +// fprintf(f, "strings[%i] = str->add(strings[%i]);\n", el->op, el->op); +// fflush(f); + return el_str; + } + } + if (!(el = malloc(sizeof(Evas_Stringshare_El) + slen + 1))) + return NULL; + + el_str = ((char *)el) + sizeof(Evas_Stringshare_El); + strcpy(el_str, str); + el->references = 1; + el->next = share.buckets[hash_num]; + share.buckets[hash_num] = el; +// el->op = op; +// fprintf(f, "strings[%i] = str->add(\"%s\");\n", el->op, el_str); +// fflush(f); +// op++; + return el_str; +} + +EAPI void +evas_stringshare_del(const char *str) +{ + int hash_num, slen; + char *el_str; + Evas_Stringshare_El *el, *pel = NULL; + + if (!str) + return; + + hash_num = _evas_stringshare_hash_gen(str, &slen); + for (el = share.buckets[hash_num]; el; pel = el, el = el->next) + { + el_str = ((char *)el) + sizeof(Evas_Stringshare_El); + if (el_str == str) + { + el->references--; +// fprintf(f, "str->del(strings[%i]);\n", el->op); +// fflush(f); + if (el->references == 0) + { + if (pel) + pel->next = el->next; + else + share.buckets[hash_num] = el->next; + + free(el); + } + else if (pel) + { + pel->next = el->next; + el->next = share.buckets[hash_num]; + share.buckets[hash_num] = el; + } + + return; + } + } + printf("EEEK trying to del non-shared stringshare \"%s\"\n", str); + abort(); +} diff --git a/libraries/eina/src/tests/strlog b/libraries/eina/src/tests/strlog new file mode 100644 index 0000000..d9fc2af --- /dev/null +++ b/libraries/eina/src/tests/strlog @@ -0,0 +1,46999 @@ +strings[0] = str->add("extensions"); +strings[1] = str->add("Extensions"); +strings[2] = str->add("enlightenment/extensions"); +strings[3] = str->add("modules"); +strings[4] = str->add("Modules"); +strings[5] = str->add("enlightenment/modules"); +strings[6] = str->add("default.edj"); +strings[7] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj"); +strings[8] = str->add("Desktop %i, %i"); +strings[9] = str->add("en_US.UTF-8"); +strings[10] = str->add("note"); +strings[11] = str->add("conf_interaction"); +strings[12] = str->add("fileman"); +strings[13] = str->add("conf_engine"); +strings[14] = str->add("conf_winlist"); +strings[15] = str->add("conf_window_manipulation"); +strings[16] = str->add("conf_window_focus"); +strings[17] = str->add("conf_window_display"); +strings[18] = str->add("conf_wallpaper"); +strings[19] = str->add("conf_transitions"); +strings[20] = str->add("conf_theme"); +strings[21] = str->add("conf_startup"); +strings[22] = str->add("conf_shelves"); +strings[23] = str->add("conf_screensaver"); +strings[24] = str->add("conf_profiles"); +strings[25] = str->add("conf_performance"); +strings[26] = str->add("conf_paths"); +strings[27] = str->add("conf_mouse_cursor"); +strings[28] = str->add("conf_mousebindings"); +strings[29] = str->add("conf_mouse"); +strings[30] = str->add("conf_mime"); +strings[31] = str->add("conf_menus"); +strings[32] = str->add("conf_keybindings"); +strings[33] = str->add("conf_intl"); +strings[34] = str->add("conf_imc"); +strings[35] = str->add("conf_icon_theme"); +strings[36] = str->add("conf_fonts"); +strings[37] = str->add("conf_exebuf"); +strings[38] = str->add("conf_dpms"); +strings[39] = str->add("conf_display"); +strings[40] = str->add("conf_dialogs"); +strings[41] = str->add("conf_desks"); +strings[42] = str->add("conf_desklock"); +strings[43] = str->add("conf_desk"); +strings[44] = str->add("conf_colors"); +strings[45] = str->add("conf_clientlist"); +strings[46] = str->add("conf_borders"); +strings[47] = str->add("conf_applications"); +strings[48] = str->add("conf"); +strings[49] = str->add("winlist"); +strings[50] = str->add("exebuf"); +strings[51] = str->add("pager"); +strings[52] = str->add("temperature"); +strings[53] = str->add("cpufreq"); +strings[54] = str->add("battery"); +strings[55] = str->add("clock"); +strings[56] = str->add("dropshadow"); +strings[57] = str->add("ibox"); +strings[58] = str->add("ibar"); +strings[59] = str->add("start"); +strings[60] = str->add("gadman"); +strings[61] = str->add("default"); +strings[62] = str->add("Vera"); +strings[63] = str->add("theme"); +strings[64] = str->add("/home/cedric/.e/e/themes/b_and_w.edj"); +strings[65] = str->add("menu_show"); +strings[66] = str->add("main"); +strings[67] = str->add("window_move"); +strings[65] = str->add(strings[65]); +strings[68] = str->add("clients"); +strings[69] = str->add("window_resize"); +strings[65] = str->add(strings[65]); +strings[70] = str->add("favorites"); +strings[71] = str->add("window_menu"); +strings[72] = str->add("Left"); +strings[73] = str->add("desk_flip_by"); +strings[74] = str->add("-1 0"); +strings[75] = str->add("Right"); +strings[73] = str->add(strings[73]); +strings[76] = str->add("1 0"); +strings[77] = str->add("Up"); +strings[73] = str->add(strings[73]); +strings[78] = str->add("0 -1"); +strings[79] = str->add("Down"); +strings[73] = str->add(strings[73]); +strings[80] = str->add("0 1"); +strings[77] = str->add(strings[77]); +strings[81] = str->add("window_raise"); +strings[79] = str->add(strings[79]); +strings[82] = str->add("window_lower"); +strings[83] = str->add("x"); +strings[84] = str->add("window_close"); +strings[85] = str->add("k"); +strings[86] = str->add("window_kill"); +strings[87] = str->add("w"); +strings[71] = str->add(strings[71]); +strings[88] = str->add("s"); +strings[89] = str->add("window_sticky_toggle"); +strings[90] = str->add("i"); +strings[91] = str->add("window_iconic_toggle"); +strings[92] = str->add("f"); +strings[93] = str->add("window_maximized_toggle"); +strings[94] = str->add("F10"); +strings[93] = str->add(strings[93]); +strings[95] = str->add("default vertical"); +strings[94] = str->add(strings[94]); +strings[93] = str->add(strings[93]); +strings[96] = str->add("default horizontal"); +strings[97] = str->add("r"); +strings[98] = str->add("window_shaded_toggle"); +strings[72] = str->add(strings[72]); +strings[99] = str->add("desk_linear_flip_by"); +strings[100] = str->add("-1"); +strings[75] = str->add(strings[75]); +strings[99] = str->add(strings[99]); +strings[101] = str->add("1"); +strings[102] = str->add("F1"); +strings[103] = str->add("desk_linear_flip_to"); +strings[104] = str->add("0"); +strings[105] = str->add("F2"); +strings[103] = str->add(strings[103]); +strings[101] = str->add(strings[101]); +strings[106] = str->add("F3"); +strings[103] = str->add(strings[103]); +strings[107] = str->add("2"); +strings[108] = str->add("F4"); +strings[103] = str->add(strings[103]); +strings[109] = str->add("3"); +strings[110] = str->add("F5"); +strings[103] = str->add(strings[103]); +strings[111] = str->add("4"); +strings[112] = str->add("F6"); +strings[103] = str->add(strings[103]); +strings[113] = str->add("5"); +strings[114] = str->add("F7"); +strings[103] = str->add(strings[103]); +strings[115] = str->add("6"); +strings[116] = str->add("F8"); +strings[103] = str->add(strings[103]); +strings[117] = str->add("7"); +strings[118] = str->add("F9"); +strings[103] = str->add(strings[103]); +strings[119] = str->add("8"); +strings[94] = str->add(strings[94]); +strings[103] = str->add(strings[103]); +strings[120] = str->add("9"); +strings[121] = str->add("F11"); +strings[103] = str->add(strings[103]); +strings[122] = str->add("10"); +strings[123] = str->add("F12"); +strings[103] = str->add(strings[103]); +strings[124] = str->add("11"); +strings[125] = str->add("m"); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[126] = str->add("a"); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[127] = str->add("Menu"); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[127] = str->add(strings[127]); +strings[65] = str->add(strings[65]); +strings[68] = str->add(strings[68]); +strings[127] = str->add(strings[127]); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[128] = str->add("Insert"); +strings[129] = str->add("exec"); +strings[130] = str->add("Eterm"); +strings[131] = str->add("Tab"); +strings[49] = str->add(strings[49]); +strings[132] = str->add("next"); +strings[131] = str->add(strings[131]); +strings[49] = str->add(strings[49]); +strings[133] = str->add("prev"); +strings[134] = str->add("End"); +strings[135] = str->add("restart"); +strings[136] = str->add("Delete"); +strings[137] = str->add("logout"); +strings[138] = str->add("Escape"); +strings[50] = str->add(strings[50]); +strings[139] = str->add("l"); +strings[140] = str->add("desk_lock"); +strings[141] = str->add("d"); +strings[142] = str->add("desk_deskshow_toggle"); +strings[72] = str->add(strings[72]); +strings[143] = str->add("screen_send_by"); +strings[100] = str->add(strings[100]); +strings[75] = str->add(strings[75]); +strings[143] = str->add(strings[143]); +strings[101] = str->add(strings[101]); +strings[102] = str->add(strings[102]); +strings[144] = str->add("screen_send_to"); +strings[104] = str->add(strings[104]); +strings[105] = str->add(strings[105]); +strings[144] = str->add(strings[144]); +strings[101] = str->add(strings[101]); +strings[106] = str->add(strings[106]); +strings[144] = str->add(strings[144]); +strings[107] = str->add(strings[107]); +strings[108] = str->add(strings[108]); +strings[144] = str->add(strings[144]); +strings[109] = str->add(strings[109]); +strings[145] = str->add("mouse,down,1,double"); +strings[146] = str->add("e.event.titlebar"); +strings[98] = str->add(strings[98]); +strings[147] = str->add("up"); +strings[148] = str->add("mouse,down,2"); +strings[146] = str->add(strings[146]); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[149] = str->add("mouse,wheel,?,1"); +strings[146] = str->add(strings[146]); +strings[150] = str->add("window_shaded"); +strings[151] = str->add("0 up"); +strings[152] = str->add("mouse,wheel,?,-1"); +strings[146] = str->add(strings[146]); +strings[150] = str->add(strings[150]); +strings[153] = str->add("1 up"); +strings[154] = str->add("mouse,clicked,3"); +strings[146] = str->add(strings[146]); +strings[71] = str->add(strings[71]); +strings[155] = str->add("mouse,clicked,?"); +strings[156] = str->add("e.event.icon"); +strings[71] = str->add(strings[71]); +strings[157] = str->add("mouse,clicked,[12]"); +strings[158] = str->add("e.event.close"); +strings[84] = str->add(strings[84]); +strings[154] = str->add(strings[154]); +strings[158] = str->add(strings[158]); +strings[86] = str->add(strings[86]); +strings[159] = str->add("mouse,clicked,1"); +strings[160] = str->add("e.event.maximize"); +strings[93] = str->add(strings[93]); +strings[161] = str->add("mouse,clicked,2"); +strings[160] = str->add(strings[160]); +strings[93] = str->add(strings[93]); +strings[162] = str->add("smart"); +strings[154] = str->add(strings[154]); +strings[160] = str->add(strings[160]); +strings[93] = str->add(strings[93]); +strings[163] = str->add("expand"); +strings[155] = str->add(strings[155]); +strings[164] = str->add("e.event.minimize"); +strings[91] = str->add(strings[91]); +strings[155] = str->add(strings[155]); +strings[165] = str->add("e.event.shade"); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[155] = str->add(strings[155]); +strings[166] = str->add("e.event.lower"); +strings[82] = str->add(strings[82]); +strings[167] = str->add("mouse,down,1"); +strings[156] = str->add(strings[156]); +strings[168] = str->add("window_drag_icon"); +strings[167] = str->add(strings[167]); +strings[146] = str->add(strings[146]); +strings[67] = str->add(strings[67]); +strings[169] = str->add("mouse,up,1"); +strings[146] = str->add(strings[146]); +strings[67] = str->add(strings[67]); +strings[170] = str->add("end"); +strings[167] = str->add(strings[167]); +strings[171] = str->add("e.event.resize.tl"); +strings[69] = str->add(strings[69]); +strings[172] = str->add("tl"); +strings[167] = str->add(strings[167]); +strings[173] = str->add("e.event.resize.t"); +strings[69] = str->add(strings[69]); +strings[174] = str->add("t"); +strings[167] = str->add(strings[167]); +strings[175] = str->add("e.event.resize.tr"); +strings[69] = str->add(strings[69]); +strings[176] = str->add("tr"); +strings[167] = str->add(strings[167]); +strings[177] = str->add("e.event.resize.r"); +strings[69] = str->add(strings[69]); +strings[97] = str->add(strings[97]); +strings[167] = str->add(strings[167]); +strings[178] = str->add("e.event.resize.br"); +strings[69] = str->add(strings[69]); +strings[179] = str->add("br"); +strings[167] = str->add(strings[167]); +strings[180] = str->add("e.event.resize.b"); +strings[69] = str->add(strings[69]); +strings[181] = str->add("b"); +strings[167] = str->add(strings[167]); +strings[182] = str->add("e.event.resize.bl"); +strings[69] = str->add(strings[69]); +strings[183] = str->add("bl"); +strings[167] = str->add(strings[167]); +strings[184] = str->add("e.event.resize.l"); +strings[69] = str->add(strings[69]); +strings[139] = str->add(strings[139]); +strings[169] = str->add(strings[169]); +strings[185] = str->add("e.event.resize.*"); +strings[69] = str->add(strings[69]); +strings[170] = str->add(strings[170]); +strings[186] = str->add("mouse,down,3"); +strings[185] = str->add(strings[185]); +strings[67] = str->add(strings[67]); +strings[187] = str->add("mouse,up,3"); +strings[185] = str->add(strings[185]); +strings[67] = str->add(strings[67]); +strings[170] = str->add(strings[170]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[188] = str->add("vswipe"); +strings[189] = str->add("crossfade"); +strings[190] = str->add("E"); +strings[191] = str->add("_config_winlist_dialog...ADVANCED"); +strings[192] = str->add("Window List Settings"); +strings[193] = str->add("enlightenment -display :1.0"); +strings[190] = str->add(strings[190]); +strings[194] = str->add("_config_focus_dialog...ADVANCED"); +strings[195] = str->add("Focus Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[196] = str->add("_config_window_manipulation_dialog...ADVANCED"); +strings[197] = str->add("Window Manipulation"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[198] = str->add("_config_keybindings_dialog...BASIC"); +strings[199] = str->add("Key Binding Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[200] = str->add("_fwin:://home/cedric/Videos"); +strings[201] = str->add("Videos"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[202] = str->add("_fwin:://home/cedric/Vidéos"); +strings[203] = str->add("Vidéos"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[204] = str->add("_fwin:://home/cedric/wav"); +strings[205] = str->add("wav"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[206] = str->add("_config_startup_dialog...BASIC"); +strings[207] = str->add("Startup Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[208] = str->add("_config_transitions_dialog...BASIC"); +strings[209] = str->add("Transition Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[210] = str->add("_config_cursor_dialog...ADVANCED"); +strings[211] = str->add("Cursor Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[212] = str->add("_config_fonts_dialog...ADVANCED"); +strings[213] = str->add("Font Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[214] = str->add("_config_color_classes_dialog...ADVANCED"); +strings[215] = str->add("Colors"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[216] = str->add("_config_imc_dialog...ADVANCED"); +strings[217] = str->add("Input Method Configuration"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[218] = str->add("_eap_exec_select_dialog"); +strings[219] = str->add("Select an Executable"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[220] = str->add("_desktop_editor_dialog...ADVANCED"); +strings[221] = str->add("Desktop Entry Editor"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[222] = str->add("_theme_web_dialog"); +strings[223] = str->add("[get-e.org] Download 2 images of 28"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[224] = str->add("_config_desks_dialog...ADVANCED"); +strings[225] = str->add("Virtual Desktops Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[226] = str->add("_config_theme_dialog...ADVANCED"); +strings[227] = str->add("Theme Selector"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[228] = str->add("_e_modules_gadman_config_dialog...BASIC"); +strings[229] = str->add("Gadgets Manager"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[230] = str->add("_config_intl_dialog...ADVANCED"); +strings[231] = str->add("Language Configuration"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[232] = str->add("_e_mod_pager_config_dialog...ADVANCED"); +strings[233] = str->add("Configuration du Pager"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[234] = str->add("_shelf_config_dialog...ADVANCED"); +strings[235] = str->add("Shelf Configuration"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[236] = str->add("_gadcon_config_dialog...BASIC"); +strings[237] = str->add("Shelf Contents"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[238] = str->add("_e_mod_temperature_config_dialog...ADVANCED"); +strings[239] = str->add("Configuration de la Température"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[240] = str->add("_e_mod_battery_config_dialog...ADVANCED"); +strings[241] = str->add("Configuration de la batterie"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[242] = str->add("_config_paths_dialog...BASIC"); +strings[243] = str->add("Configuration de dossiers de recherche"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[244] = str->add("_config_profiles_dialog...BASIC"); +strings[245] = str->add("Profile Selector"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[246] = str->add("_config_engine_dialog...BASIC"); +strings[247] = str->add("Engine Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[248] = str->add("_config_exebuf_dialog...ADVANCED"); +strings[249] = str->add("Paramètres de l'exécution de commande"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[250] = str->add("_config_performance_dialog...ADVANCED"); +strings[251] = str->add("Performance Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[252] = str->add("_config_config_interaction_dialog...BASIC"); +strings[253] = str->add("Interaction Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[254] = str->add("_dpms_capable_dialog"); +strings[255] = str->add("Affiché les informations sur la gestion d'énergie"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[256] = str->add("_config_screensaver_dialog...BASIC"); +strings[257] = str->add("Paramètres du verrouillage d'écran"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[258] = str->add("_config_desklock_dialog...BASIC"); +strings[259] = str->add("Paramètres de verrouillage d'écran"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[260] = str->add("_config_display_dialog...BASIC"); +strings[261] = str->add("Paramètre de résolution de l'écran"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[262] = str->add("_mousebind_getmouse_dialog"); +strings[263] = str->add("Séquence de raccourci-souris"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[264] = str->add("_config_mousebindings_dialog...BASIC"); +strings[265] = str->add("Mouse Binding Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[266] = str->add("_config_border_style_dialog...BASIC"); +strings[267] = str->add("Default Border Style"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[268] = str->add("_fwin:://home"); +strings[269] = str->add("home"); +strings[270] = str->add("/usr/devel/bin/enlightenment -display :1.0"); +strings[190] = str->add(strings[190]); +strings[271] = str->add("_config_winlist_dialog...BASIC"); +strings[272] = str->add("Paramètres de la liste de fenêtres"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[273] = str->add("_config_config_dialog_dialog...BASIC"); +strings[274] = str->add("Dialog Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[275] = str->add("_error_dialog"); +strings[276] = str->add("Error - no PAM support"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[277] = str->add("_shelf_config_dialog...BASIC"); +strings[278] = str->add("Configuration de gondole"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[279] = str->add("_config_imc_dialog...BASIC"); +strings[280] = str->add("Configuration de la méthode de saisie"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[281] = str->add("_e_mod_dropshadow_config_dialog...BASIC"); +strings[282] = str->add("Dropshadow Configuration"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[283] = str->add("_config_cursor_dialog...BASIC"); +strings[284] = str->add("Paramètres du curseur"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[285] = str->add("_config_desks_dialog...BASIC"); +strings[286] = str->add("Configuration des Bureaux virtuels"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[287] = str->add("_config_fileman_dialog...BASIC"); +strings[288] = str->add("Fileman Settings"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[289] = str->add("_fwin:://"); +strings[290] = str->add("Root"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[291] = str->add("_fwin:://home/cedric/tmp"); +strings[292] = str->add("tmp"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[293] = str->add("_fwin:://tmp"); +strings[294] = str->add("Temp"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[295] = str->add("_module_unload_dialog"); +strings[296] = str->add("Erreur de chargement du module"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[297] = str->add("_e_exec_run_error_dialog"); +strings[298] = str->add("Erreur d'exécution d'une application"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[297] = str->add(strings[297]); +strings[298] = str->add(strings[298]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[297] = str->add(strings[297]); +strings[298] = str->add(strings[298]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[299] = str->add("_sys_logout"); +strings[300] = str->add("Logout in progress"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[301] = str->add("_logout_dialog"); +strings[302] = str->add("Are you sure you want to log out?"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[299] = str->add(strings[299]); +strings[303] = str->add("Fermeture de votre session en cours"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[301] = str->add(strings[301]); +strings[304] = str->add("Êtes-vous sur de vouloir fermer votre session ?"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[299] = str->add(strings[299]); +strings[303] = str->add(strings[303]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[301] = str->add(strings[301]); +strings[304] = str->add(strings[304]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[305] = str->add("_configure"); +strings[306] = str->add("Enlightenment Configuration"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[307] = str->add("_confirm_dialog"); +strings[308] = str->add("Êtes-vous sûr de vouloir supprimer cette gondole ?"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[309] = str->add("_config_shelf_dialog...BASIC"); +strings[310] = str->add("Shelf Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[311] = str->add("_config_modules_dialog...BASIC"); +strings[312] = str->add("Module Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[313] = str->add("_config_icon_theme_dialog...BASIC"); +strings[314] = str->add("Icon Theme Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[315] = str->add("_config_color_classes_dialog...BASIC"); +strings[316] = str->add("Couleurs"); +strings[270] = str->add(strings[270]); +strings[190] = str->add(strings[190]); +strings[317] = str->add("_config_wallpaper_dialog...ADVANCED"); +strings[318] = str->add("Wallpaper Settings"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[319] = str->add("_fwin:://home/cedric"); +strings[320] = str->add("Home Directory"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[321] = str->add("_fwin:://home/cedric/.e/e/fileman/favorites"); +strings[70] = str->add(strings[70]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[322] = str->add("_theme_import_dialog"); +strings[323] = str->add("Select a Theme..."); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[324] = str->add("_wallpaper_web_dialog"); +strings[325] = str->add("[get-e.org - Static] Choose an image from list"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[326] = str->add("_config_wallpaper_dialog...BASIC"); +strings[327] = str->add("Paramètres de fond d'écran"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[305] = str->add(strings[305]); +strings[328] = str->add("Configuration d'Enlightenment"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[299] = str->add(strings[299]); +strings[303] = str->add(strings[303]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[301] = str->add(strings[301]); +strings[304] = str->add(strings[304]); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[329] = str->add("_theme_about"); +strings[330] = str->add("About This Theme"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[331] = str->add("_about"); +strings[332] = str->add("About Enlightenment"); +strings[193] = str->add(strings[193]); +strings[190] = str->add(strings[190]); +strings[333] = str->add("_config_theme_dialog...BASIC"); +strings[227] = str->add(strings[227]); +strings[193] = str->add(strings[193]); +strings[334] = str->add("xterm -hold -e"); +strings[335] = str->add("shelf"); +strings[59] = str->add(strings[59]); +strings[59] = str->add(strings[59]); +strings[336] = str->add("plain"); +strings[51] = str->add(strings[51]); +strings[51] = str->add(strings[51]); +strings[337] = str->add("inset"); +strings[57] = str->add(strings[57]); +strings[338] = str->add("ibox.1"); +strings[337] = str->add(strings[337]); +strings[58] = str->add(strings[58]); +strings[339] = str->add("ibar.1"); +strings[337] = str->add(strings[337]); +strings[52] = str->add(strings[52]); +strings[340] = str->add("temperature.1"); +strings[336] = str->add(strings[336]); +strings[53] = str->add(strings[53]); +strings[53] = str->add(strings[53]); +strings[336] = str->add(strings[336]); +strings[54] = str->add(strings[54]); +strings[54] = str->add(strings[54]); +strings[336] = str->add(strings[336]); +strings[55] = str->add(strings[55]); +strings[55] = str->add(strings[55]); +strings[336] = str->add(strings[336]); +strings[10] = str->add(strings[10]); +strings[341] = str->add("note.1"); +strings[336] = str->add(strings[336]); +strings[335] = str->add(strings[335]); +strings[51] = str->add(strings[51]); +strings[57] = str->add(strings[57]); +strings[335] = str->add(strings[335]); +strings[51] = str->add(strings[51]); +strings[57] = str->add(strings[57]); +strings[335] = str->add(strings[335]); +strings[51] = str->add(strings[51]); +strings[57] = str->add(strings[57]); +strings[342] = str->add("slipshelf_extra"); +strings[343] = str->add("slipshelf"); +strings[60] = str->add(strings[60]); +strings[344] = str->add("gadman_top"); +strings[335] = str->add(strings[335]); +strings[61] = str->add(strings[61]); +strings[335] = str->add(strings[335]); +strings[61] = str->add(strings[61]); +strings[335] = str->add(strings[335]); +strings[61] = str->add(strings[61]); +strings[335] = str->add(strings[335]); +strings[61] = str->add(strings[61]); +strings[345] = str->add("Tango"); +strings[346] = str->add("~/"); +strings[347] = str->add("/"); +strings[61] = str->add(strings[61]); +strings[348] = str->add("image/jpeg"); +strings[349] = str->add("THUMB"); +strings[350] = str->add("image/png"); +strings[349] = str->add(strings[349]); +strings[351] = str->add("image/x-pixmap"); +strings[349] = str->add(strings[349]); +strings[352] = str->add("image/x-xpixmap"); +strings[349] = str->add(strings[349]); +strings[353] = str->add("image/svg+xml"); +strings[349] = str->add(strings[349]); +strings[354] = str->add("image/gif"); +strings[349] = str->add(strings[349]); +strings[355] = str->add("image/tiff"); +strings[349] = str->add(strings[349]); +strings[356] = str->add("application/x-desktop"); +strings[357] = str->add("DESKTOP"); +strings[358] = str->add("/usr/devel/share/enlightenment/data"); +strings[359] = str->add("/home/cedric/.e/e/images"); +strings[360] = str->add("/usr/devel/share/enlightenment/data/images"); +strings[361] = str->add("/home/cedric/.e/e/fonts"); +strings[362] = str->add("/usr/devel/share/enlightenment/data/fonts"); +strings[363] = str->add("/home/cedric/.e/e/themes"); +strings[364] = str->add("/usr/devel/share/enlightenment/data/themes"); +strings[365] = str->add("/home/cedric/.e/e/icons"); +strings[366] = str->add("/usr/devel/share/enlightenment/data/icons"); +strings[367] = str->add("/home/cedric/.e/e/init"); +strings[368] = str->add("/usr/devel/share/enlightenment/data/init"); +strings[369] = str->add("/home/cedric/.e/e/modules"); +strings[370] = str->add("/usr/devel/lib/enlightenment/modules"); +strings[371] = str->add("/usr/devel/lib/enlightenment/modules_extra"); +strings[372] = str->add("/home/cedric/.e/e/backgrounds"); +strings[373] = str->add("/home/cedric/.e/e/locale"); +strings[374] = str->add("/usr/devel/share/locale"); +strings[61] = str->add(strings[61]); +strings[62] = str->add(strings[62]); +strings[375] = str->add("Set As Theme"); +strings[376] = str->add("enlightenment/themes"); +strings[377] = str->add("base"); +strings[6] = str->add(strings[6]); +strings[6] = str->add(strings[6]); +strings[378] = str->add("base/theme"); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[379] = str->add("Sans:style=Bold,Edje-Vera-Bold"); +strings[380] = str->add("tb_plain"); +strings[381] = str->add("align=center valign=center color=#fff style=soft_shadow shadow_color=#0000001f wrap=word"); +strings[382] = str->add("\n"); +strings[379] = str->add(strings[379]); +strings[383] = str->add("tb_light"); +strings[384] = str->add("+"); +strings[385] = str->add("Sans,Edje-Vera"); +strings[380] = str->add(strings[380]); +strings[386] = str->add("align=center color=#000 style=shadow shadow_color=#ffffff80 wrap=word"); +strings[382] = str->add(strings[382]); +strings[379] = str->add(strings[379]); +strings[383] = str->add(strings[383]); +strings[384] = str->add(strings[384]); +strings[385] = str->add(strings[385]); +strings[387] = str->add("align=left color=#000 style=shadow shadow_color=#ffffff80 wrap=word"); +strings[379] = str->add(strings[379]); +strings[388] = str->add("+ style=soft_shadow color=#fff shadow_color=#00000021"); +strings[389] = str->add("-"); +strings[379] = str->add(strings[379]); +strings[390] = str->add("+ style=glow color=#fff glow2_color=#333 glow_color=#b01010"); +strings[379] = str->add(strings[379]); +strings[384] = str->add(strings[384]); +strings[382] = str->add(strings[382]); +strings[391] = str->add("e/desktop/background"); +strings[392] = str->add("e/widgets/border/default/border"); +strings[393] = str->add("e/widgets/border/shaped/border"); +strings[394] = str->add("e/widgets/border/noresize/border"); +strings[395] = str->add("e/widgets/border/dialog/border"); +strings[396] = str->add("e/widgets/border/noresize_dialog/border"); +strings[397] = str->add("e/widgets/border/pixel/border"); +strings[398] = str->add("e/pointer/enlightenment/default/color"); +strings[399] = str->add("e/pointer/enlightenment/default/mono"); +strings[400] = str->add("e/widgets/menu/default/background"); +strings[401] = str->add("e/widgets/menu/default/separator"); +strings[402] = str->add("e/widgets/menu/default/item_bg"); +strings[403] = str->add("e/widgets/menu/default/icon"); +strings[404] = str->add("e/widgets/menu/default/label"); +strings[405] = str->add("e/widgets/menu/default/submenu"); +strings[406] = str->add("e/widgets/menu/default/check"); +strings[407] = str->add("e/widgets/menu/default/radio"); +strings[408] = str->add("e/shelf/default/base"); +strings[409] = str->add("e/shelf/default/inset"); +strings[410] = str->add("e/shelf/default/plain"); +strings[411] = str->add("e/shelf/invisible/base"); +strings[412] = str->add("e/shelf/invisible/inset"); +strings[413] = str->add("e/shelf/invisible/plain"); +strings[414] = str->add("e/shelf/alternate/base"); +strings[415] = str->add("e/shelf/alternate/inset"); +strings[416] = str->add("e/shelf/alternate/plain"); +strings[417] = str->add("e/modules/start/main"); +strings[418] = str->add("e/modules/pager/popup"); +strings[419] = str->add("e/modules/pager/desk"); +strings[420] = str->add("e/modules/pager/window"); +strings[421] = str->add("e/modules/battery/main"); +strings[422] = str->add("e/modules/temperature/main"); +strings[423] = str->add("e/modules/clock/main"); +strings[424] = str->add("e/modules/cpufreq/main"); +strings[425] = str->add("e/widgets/winlist/main"); +strings[426] = str->add("e/widgets/winlist/item"); +strings[427] = str->add("e/modules/mixer/main"); +strings[428] = str->add("e/sys/logout"); +strings[429] = str->add("e/widgets/dialog/main"); +strings[430] = str->add("e/widgets/dialog/text"); +strings[431] = str->add("e/widgets/configure/main"); +strings[432] = str->add("e/widgets/border/default/move"); +strings[433] = str->add("e/widgets/border/default/resize"); +strings[434] = str->add("e/transpreview/0"); +strings[435] = str->add("e/transpreview/1"); +strings[436] = str->add("e/transitions/crossfade"); +strings[437] = str->add("e/transitions/vswipe"); +strings[438] = str->add("e/widgets/check"); +strings[439] = str->add("e/widgets/check_icon"); +strings[440] = str->add("e/widgets/radio"); +strings[441] = str->add("e/widgets/radio_icon"); +strings[442] = str->add("e/widgets/button"); +strings[443] = str->add("e/widgets/scrollframe"); +strings[444] = str->add("e/widgets/ilist"); +strings[445] = str->add("e/widgets/ilist_odd"); +strings[446] = str->add("e/widgets/ilist_header"); +strings[447] = str->add("e/widgets/ilist_header_odd"); +strings[448] = str->add("e/widgets/entry"); +strings[449] = str->add("e/widgets/entry/text"); +strings[450] = str->add("e/widgets/entry/cursor"); +strings[451] = str->add("e/widgets/entry/selection"); +strings[452] = str->add("e/widgets/preview"); +strings[453] = str->add("e/widgets/deskpreview/desk"); +strings[454] = str->add("e/widgets/color_well"); +strings[455] = str->add("e/widgets/spectrum"); +strings[456] = str->add("e/widgets/cslider"); +strings[457] = str->add("e/widgets/slider_vertical"); +strings[458] = str->add("e/widgets/slider_horizontal"); +strings[459] = str->add("e/widgets/frame"); +strings[460] = str->add("e/widgets/label"); +strings[461] = str->add("e/widgets/fontpreview"); +strings[462] = str->add("e/widgets/textblock"); +strings[463] = str->add("e/widgets/menu/default/submenu_bg"); +strings[464] = str->add("e/sys/halt"); +strings[465] = str->add("e/sys/reboot"); +strings[466] = str->add("e/sys/suspend"); +strings[467] = str->add("e/sys/hibernate"); +strings[468] = str->add("e/widgets/gradpreview"); +strings[189] = str->add(strings[189]); +strings[188] = str->add(strings[188]); +str->del(strings[391]); +str->del(strings[392]); +str->del(strings[393]); +str->del(strings[394]); +str->del(strings[395]); +str->del(strings[396]); +str->del(strings[397]); +str->del(strings[398]); +str->del(strings[399]); +str->del(strings[400]); +str->del(strings[401]); +str->del(strings[402]); +str->del(strings[403]); +str->del(strings[404]); +str->del(strings[405]); +str->del(strings[406]); +str->del(strings[407]); +str->del(strings[408]); +str->del(strings[409]); +str->del(strings[410]); +str->del(strings[411]); +str->del(strings[412]); +str->del(strings[413]); +str->del(strings[414]); +str->del(strings[415]); +str->del(strings[416]); +str->del(strings[417]); +str->del(strings[418]); +str->del(strings[419]); +str->del(strings[420]); +str->del(strings[421]); +str->del(strings[422]); +str->del(strings[423]); +str->del(strings[424]); +str->del(strings[425]); +str->del(strings[426]); +str->del(strings[427]); +str->del(strings[428]); +str->del(strings[429]); +str->del(strings[430]); +str->del(strings[431]); +str->del(strings[432]); +str->del(strings[433]); +str->del(strings[434]); +str->del(strings[435]); +str->del(strings[436]); +str->del(strings[437]); +str->del(strings[438]); +str->del(strings[439]); +str->del(strings[440]); +str->del(strings[441]); +str->del(strings[442]); +str->del(strings[443]); +str->del(strings[444]); +str->del(strings[445]); +str->del(strings[446]); +str->del(strings[447]); +str->del(strings[448]); +str->del(strings[449]); +str->del(strings[450]); +str->del(strings[451]); +str->del(strings[452]); +str->del(strings[453]); +str->del(strings[454]); +str->del(strings[455]); +str->del(strings[456]); +str->del(strings[457]); +str->del(strings[458]); +str->del(strings[459]); +str->del(strings[460]); +str->del(strings[461]); +str->del(strings[462]); +str->del(strings[463]); +str->del(strings[464]); +str->del(strings[465]); +str->del(strings[466]); +str->del(strings[467]); +str->del(strings[468]); +strings[469] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj"); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +strings[470] = str->add("fonts/Edje-Vera"); +strings[380] = str->add(strings[380]); +strings[387] = str->add(strings[387]); +strings[382] = str->add(strings[382]); +strings[471] = str->add("fonts/Edje-Vera-Bold"); +strings[383] = str->add(strings[383]); +strings[472] = str->add("+ style=glow color=#fff glow2_color=#fe87 glow_color=#fa14"); +strings[470] = str->add(strings[470]); +strings[380] = str->add(strings[380]); +strings[386] = str->add(strings[386]); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[383] = str->add(strings[383]); +strings[472] = str->add(strings[472]); +strings[470] = str->add(strings[470]); +strings[380] = str->add(strings[380]); +strings[386] = str->add(strings[386]); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[383] = str->add(strings[383]); +strings[472] = str->add(strings[472]); +strings[471] = str->add(strings[471]); +strings[473] = str->add("tb_big"); +strings[474] = str->add("+ style=soft_shadow color=#fff shadow_color=#00000020"); +strings[475] = str->add("- \n \n"); +strings[470] = str->add(strings[470]); +strings[476] = str->add("style=glow color=#fff glow2_color=#fe87 glow_color=#fa14 align=center wrap=word"); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[384] = str->add(strings[384]); +strings[470] = str->add(strings[470]); +strings[477] = str->add("+ style=none color=#0002"); +strings[470] = str->add(strings[470]); +strings[387] = str->add(strings[387]); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[472] = str->add(strings[472]); +strings[471] = str->add(strings[471]); +strings[474] = str->add(strings[474]); +strings[475] = str->add(strings[475]); +strings[470] = str->add(strings[470]); +strings[387] = str->add(strings[387]); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[472] = str->add(strings[472]); +strings[471] = str->add(strings[471]); +strings[384] = str->add(strings[384]); +strings[471] = str->add(strings[471]); +strings[474] = str->add(strings[474]); +strings[475] = str->add(strings[475]); +strings[471] = str->add(strings[471]); +strings[478] = str->add("tb_large"); +strings[479] = str->add("align=center color=#fff style=soft_shadow shadow_color=#0002 wrap=word"); +strings[382] = str->add(strings[382]); +strings[471] = str->add(strings[471]); +strings[480] = str->add("tb_large_light"); +strings[472] = str->add(strings[472]); +strings[470] = str->add(strings[470]); +strings[471] = str->add(strings[471]); +strings[481] = str->add("e/desktop/background"); +strings[482] = str->add("e/modules/battery/main"); +strings[483] = str->add("e/modules/battery/popup"); +strings[484] = str->add("e/widgets/border/default/border"); +strings[485] = str->add("e/widgets/border/shaped/border"); +strings[486] = str->add("e/widgets/border/noresize/border"); +strings[487] = str->add("e/widgets/border/dialog/border"); +strings[488] = str->add("e/widgets/border/noresize_dialog/border"); +strings[489] = str->add("e/widgets/border/pixel/border"); +strings[490] = str->add("e/widgets/border/default/close"); +strings[491] = str->add("e/widgets/border/default/minimize"); +strings[492] = str->add("e/widgets/border/default/maximize"); +strings[493] = str->add("e/widgets/border/default/shade"); +strings[494] = str->add("e/widgets/border/default/stick"); +strings[495] = str->add("e/widgets/border/default/kill"); +strings[496] = str->add("e/widgets/border/default/locks"); +strings[497] = str->add("e/widgets/border/default/locks_user"); +strings[498] = str->add("e/widgets/border/default/locks_application"); +strings[499] = str->add("e/widgets/border/default/borderless"); +strings[500] = str->add("e/widgets/border/default/fullscreen"); +strings[501] = str->add("e/widgets/border/default/remember"); +strings[502] = str->add("e/widgets/border/default/skip_winlist"); +strings[503] = str->add("e/widgets/border/default/skip"); +strings[504] = str->add("e/widgets/border/default/skip_pager"); +strings[505] = str->add("e/widgets/border/default/sendto"); +strings[506] = str->add("e/widgets/border/default/stacking"); +strings[507] = str->add("e/widgets/border/default/stack_on_top"); +strings[508] = str->add("e/widgets/border/default/stack_normal"); +strings[509] = str->add("e/widgets/border/default/stack_below"); +strings[510] = str->add("e/widgets/border/default/properties"); +strings[511] = str->add("e/modules/clock/main"); +strings[512] = str->add("e/gadman/control"); +strings[513] = str->add("e/gadman/popup"); +strings[514] = str->add("e/gadman/full_bg"); +strings[515] = str->add("e/gadman/frame"); +strings[516] = str->add("e/modules/ibar/icon"); +strings[517] = str->add("e/modules/ibar/icon_overlay"); +strings[518] = str->add("e/modules/ibar/drop"); +strings[519] = str->add("e/modules/ibar/drop_overlay"); +strings[520] = str->add("e/widgets/menu/default/background"); +strings[521] = str->add("e/widgets/menu/default/separator"); +strings[522] = str->add("e/widgets/menu/default/item_bg"); +strings[523] = str->add("e/widgets/menu/default/submenu_bg"); +strings[524] = str->add("e/widgets/menu/default/check"); +strings[525] = str->add("e/widgets/menu/default/radio"); +strings[526] = str->add("e/widgets/menu/default/icon"); +strings[527] = str->add("e/widgets/menu/default/label"); +strings[528] = str->add("e/widgets/menu/default/submenu"); +strings[529] = str->add("e/modules/pager/popup"); +strings[530] = str->add("e/modules/pager/desk"); +strings[531] = str->add("e/modules/pager/window"); +strings[532] = str->add("e/widgets/border/default/resize"); +strings[533] = str->add("e/widgets/border/default/move"); +strings[534] = str->add("e/modules/temperature/main"); +strings[535] = str->add("e/error/main"); +strings[536] = str->add("e/modules/cpufreq/main"); +strings[537] = str->add("e/modules/ibox/icon"); +strings[538] = str->add("e/modules/ibox/icon_overlay"); +strings[539] = str->add("e/modules/ibox/drop"); +strings[540] = str->add("e/modules/ibox/drop_overlay"); +strings[541] = str->add("e/modules/start/main"); +strings[542] = str->add("e/widgets/winlist/main"); +strings[543] = str->add("e/widgets/winlist/item"); +strings[544] = str->add("e/transpreview/0"); +strings[545] = str->add("e/transpreview/1"); +strings[546] = str->add("e/transitions/crossfade"); +strings[547] = str->add("e/transitions/vswipe"); +strings[548] = str->add("e/widgets/dialog/main"); +strings[549] = str->add("e/widgets/dialog/text"); +strings[550] = str->add("e/widgets/configure/main"); +strings[551] = str->add("e/icons/enlightenment/e"); +strings[552] = str->add("e/icons/enlightenment/reset"); +strings[553] = str->add("e/icons/enlightenment/exit"); +strings[554] = str->add("e/icons/enlightenment/logout"); +strings[555] = str->add("e/icons/enlightenment/halt"); +strings[556] = str->add("e/icons/enlightenment/reboot"); +strings[557] = str->add("e/icons/enlightenment/suspend"); +strings[558] = str->add("e/icons/enlightenment/hibernate"); +strings[559] = str->add("e/icons/enlightenment/screen_setup"); +strings[560] = str->add("e/icons/enlightenment/themes"); +strings[561] = str->add("e/icons/enlightenment/colors"); +strings[562] = str->add("e/icons/enlightenment/windows"); +strings[563] = str->add("e/icons/enlightenment/lost_windows"); +strings[564] = str->add("e/icons/enlightenment/focus"); +strings[565] = str->add("e/icons/enlightenment/modules"); +strings[566] = str->add("e/icons/enlightenment/favorites"); +strings[567] = str->add("e/icons/enlightenment/desktops"); +strings[568] = str->add("e/icons/enlightenment/configuration"); +strings[569] = str->add("e/icons/enlightenment/intl"); +strings[570] = str->add("e/icons/enlightenment/system"); +strings[571] = str->add("e/icons/enlightenment/run"); +strings[572] = str->add("e/icons/enlightenment/directories"); +strings[573] = str->add("e/icons/enlightenment/fileman"); +strings[574] = str->add("e/icons/enlightenment/unknown"); +strings[575] = str->add("e/icons/widget/new_dialog"); +strings[576] = str->add("e/icons/widget/up_arrow"); +strings[577] = str->add("e/icons/widget/down_arrow"); +strings[578] = str->add("e/icons/widget/up_dir"); +strings[579] = str->add("e/icons/enlightenment/mouse"); +strings[580] = str->add("e/icons/enlightenment/mouse_left"); +strings[581] = str->add("e/icons/enlightenment/mouse_middle"); +strings[582] = str->add("e/icons/enlightenment/mouse_right"); +strings[583] = str->add("e/icons/enlightenment/mouse_extra"); +strings[584] = str->add("e/icons/enlightenment/mouse_wheel"); +strings[585] = str->add("e/icons/enlightenment/mouse_clean"); +strings[586] = str->add("e/icons/enlightenment/keys"); +strings[587] = str->add("e/icons/enlightenment/desklock"); +strings[588] = str->add("e/icons/enlightenment/desklock_menu"); +strings[589] = str->add("e/icons/enlightenment/regenerate_menus"); +strings[590] = str->add("e/icons/enlightenment/screen_resolution"); +strings[591] = str->add("e/icons/enlightenment/shelf"); +strings[592] = str->add("e/icons/enlightenment/fonts"); +strings[593] = str->add("e/icons/enlightenment/background"); +strings[594] = str->add("e/icons/enlightenment/icon_theme"); +strings[595] = str->add("e/icons/enlightenment/applications"); +strings[596] = str->add("e/icons/enlightenment/transitions"); +strings[597] = str->add("e/icons/enlightenment/performance"); +strings[598] = str->add("e/icons/enlightenment/startup"); +strings[599] = str->add("e/icons/enlightenment/winlist"); +strings[600] = str->add("e/icons/enlightenment/window_manipulation"); +strings[601] = str->add("e/icons/enlightenment/menus"); +strings[602] = str->add("e/icons/enlightenment/screen_normal"); +strings[603] = str->add("e/icons/enlightenment/screen_around"); +strings[604] = str->add("e/icons/enlightenment/screen_left"); +strings[605] = str->add("e/icons/enlightenment/screen_right"); +strings[606] = str->add("e/icons/enlightenment/screen_vflip"); +strings[607] = str->add("e/icons/enlightenment/screen_hflip"); +strings[608] = str->add("e/icons/enlightenment/shelf_position_bottom"); +strings[609] = str->add("e/icons/enlightenment/shelf_position_bottom_left"); +strings[610] = str->add("e/icons/enlightenment/shelf_position_bottom_right"); +strings[611] = str->add("e/icons/enlightenment/shelf_position_top"); +strings[612] = str->add("e/icons/enlightenment/shelf_position_top_left"); +strings[613] = str->add("e/icons/enlightenment/shelf_position_top_right"); +strings[614] = str->add("e/icons/enlightenment/shelf_position_left"); +strings[615] = str->add("e/icons/enlightenment/shelf_position_left_top"); +strings[616] = str->add("e/icons/enlightenment/shelf_position_left_bottom"); +strings[617] = str->add("e/icons/enlightenment/shelf_position_right"); +strings[618] = str->add("e/icons/enlightenment/shelf_position_right_top"); +strings[619] = str->add("e/icons/enlightenment/shelf_position_right_bottom"); +strings[620] = str->add("e/icons/enlightenment/shelf_bottom_desk"); +strings[621] = str->add("e/icons/enlightenment/shelf_custom"); +strings[622] = str->add("e/icons/enlightenment/shelf_dock"); +strings[623] = str->add("e/icons/enlightenment/shelf_menu_bar"); +strings[624] = str->add("e/icons/enlightenment/shelf_panel"); +strings[625] = str->add("e/icons/enlightenment/shelf_top_desk"); +strings[626] = str->add("e/icons/enlightenment/wallpaper_stretch"); +strings[627] = str->add("e/icons/enlightenment/wallpaper_tile"); +strings[628] = str->add("e/icons/enlightenment/wallpaper_center"); +strings[629] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in"); +strings[630] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out"); +strings[631] = str->add("e/icons/enlightenment/gradient_h"); +strings[632] = str->add("e/icons/enlightenment/gradient_v"); +strings[633] = str->add("e/icons/enlightenment/gradient_du"); +strings[634] = str->add("e/icons/enlightenment/gradient_dd"); +strings[635] = str->add("e/icons/enlightenment/gradient_rad"); +strings[636] = str->add("e/icons/enlightenment/advanced"); +strings[637] = str->add("e/icons/enlightenment/behavior"); +strings[638] = str->add("e/icons/enlightenment/appearance"); +strings[639] = str->add("e/icons/enlightenment/extensions"); +strings[640] = str->add("e/icons/enlightenment/imc"); +strings[641] = str->add("e/icons/enlightenment/file_icons"); +strings[642] = str->add("e/icons/enlightenment/menu_settings"); +strings[643] = str->add("e/icons/enlightenment/ibar_applications"); +strings[644] = str->add("e/icons/enlightenment/restart_applications"); +strings[645] = str->add("e/icons/enlightenment/startup_applications"); +strings[646] = str->add("e/icons/enlightenment/power_management"); +strings[647] = str->add("e/icons/enlightenment/screensaver"); +strings[648] = str->add("e/icons/enlightenment/window_remembers"); +strings[649] = str->add("e/pointer/enlightenment/default/color"); +strings[650] = str->add("e/pointer/enlightenment/default/mono"); +strings[651] = str->add("e/widgets/about/main"); +strings[652] = str->add("e/theme/about"); +strings[653] = str->add("e/widgets/entry"); +strings[654] = str->add("e/widgets/entry/text"); +strings[655] = str->add("e/widgets/entry/cursor"); +strings[656] = str->add("e/widgets/entry/selection"); +strings[657] = str->add("e/fileman/default/window/main"); +strings[658] = str->add("e/fileman/default/scrollframe"); +strings[659] = str->add("e/fileman/default/list/variable"); +strings[660] = str->add("e/fileman/default/list_odd/variable"); +strings[661] = str->add("e/fileman/default/list/fixed"); +strings[662] = str->add("e/fileman/default/list_odd/fixed"); +strings[663] = str->add("e/fileman/default/icon/fixed"); +strings[664] = str->add("e/fileman/default/icon/variable"); +strings[665] = str->add("e/fileman/default/overlay"); +strings[666] = str->add("e/fileman/default/list/drop_between"); +strings[667] = str->add("e/fileman/default/list/drop_in"); +strings[668] = str->add("e/fileman/desktop/scrollframe"); +strings[669] = str->add("e/fileman/desktop/icon/fixed"); +strings[670] = str->add("e/fileman/desktop/icon/variable"); +strings[671] = str->add("e/fileman/desktop/overlay"); +strings[672] = str->add("e/fileman/desktop/list/drop_between"); +strings[673] = str->add("e/fileman/desktop/list/drop_in"); +strings[674] = str->add("e/fileman/default/rubberband"); +strings[675] = str->add("e/icons/fileman/folder"); +strings[676] = str->add("e/icons/fileman/file"); +strings[677] = str->add("e/icons/fileman/home"); +strings[678] = str->add("e/icons/fileman/desktop"); +strings[679] = str->add("e/icons/fileman/hdd"); +strings[680] = str->add("e/icons/fileman/hd"); +strings[681] = str->add("e/icons/fileman/mime/application/pdf"); +strings[682] = str->add("e/icons/fileman/mime/text/x-csrc"); +strings[683] = str->add("e/icons/fileman/mime/text/x-chdr"); +strings[684] = str->add("e/icons/fileman/mime/application/x-object"); +strings[685] = str->add("e/icons/fileman/mime/application/x-shellscript"); +strings[686] = str->add("e/icons/fileman/mime/image/png"); +strings[687] = str->add("e/icons/fileman/mime/image/jpeg"); +strings[688] = str->add("e/icons/fileman/mime/video/x-msvideo"); +strings[689] = str->add("e/icons/fileman/mime/audio/mpeg"); +strings[690] = str->add("e/icons/fileman/mime/application/x-xcf"); +strings[691] = str->add("e/icons/fileman/mime/text/x-c++src"); +strings[692] = str->add("e/icons/fileman/mime/text/x-csharp"); +strings[693] = str->add("e/icons/fileman/mime/text/x-patch"); +strings[694] = str->add("e/icons/fileman/mime/application/msword"); +strings[695] = str->add("e/icons/fileman/mime/application/ogg"); +strings[696] = str->add("e/icons/fileman/mime/text/plain"); +strings[697] = str->add("e/icons/fileman/mime/application/x-bzip"); +strings[698] = str->add("e/icons/fileman/mime/application/x-deb"); +strings[699] = str->add("e/icons/fileman/mime/application/x-font-ttf"); +strings[700] = str->add("e/icons/fileman/mime/application/x-font-pcf"); +strings[701] = str->add("e/icons/fileman/mime/application/x-font-bdf"); +strings[702] = str->add("e/icons/fileman/mime/text/css"); +strings[703] = str->add("e/icons/fileman/mime/text/html"); +strings[703] = str->add(strings[703]); +strings[704] = str->add("e/icons/fileman/mime/application/zip"); +strings[705] = str->add("e/icons/fileman/mime/application/x-gzip"); +strings[706] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar"); +strings[707] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar"); +strings[708] = str->add("e/icons/fileman/mime/application/x-compressed-tar"); +strings[709] = str->add("e/icons/fileman/mime/application/x-tar"); +strings[710] = str->add("e/icons/fileman/mime/application/x-rar"); +strings[711] = str->add("e/icons/fileman/mime/video/mpeg"); +strings[712] = str->add("e/icons/fileman/mime/video"); +strings[713] = str->add("e/icons/fileman/mime/text"); +strings[714] = str->add("e/icons/fileman/mime/image"); +strings[715] = str->add("e/icons/fileman/mime/audio"); +strings[716] = str->add("e/fileman/default/button/open"); +strings[717] = str->add("e/fileman/default/button/copy"); +strings[718] = str->add("e/fileman/default/button/cut"); +strings[719] = str->add("e/fileman/default/button/paste"); +strings[720] = str->add("e/fileman/default/button/delete"); +strings[721] = str->add("e/fileman/default/button/rename"); +strings[722] = str->add("e/fileman/default/button/properties"); +strings[723] = str->add("e/fileman/default/button/arrange_name"); +strings[724] = str->add("e/fileman/default/button/arrange"); +strings[725] = str->add("e/fileman/default/button/arrange_time"); +strings[726] = str->add("e/fileman/default/button/new"); +strings[727] = str->add("e/fileman/default/button/new_dir"); +strings[728] = str->add("e/fileman/default/button/refresh"); +strings[729] = str->add("e/fileman/default/button/view_details"); +strings[730] = str->add("e/fileman/default/button/view_name"); +strings[731] = str->add("e/fileman/default/button/view"); +strings[732] = str->add("e/fileman/default/button/select"); +strings[733] = str->add("e/widgets/fileselector/main"); +strings[734] = str->add("e/widgets/check"); +strings[735] = str->add("e/widgets/check_icon"); +strings[736] = str->add("e/widgets/radio"); +strings[737] = str->add("e/widgets/radio_icon"); +strings[738] = str->add("e/widgets/frame"); +strings[739] = str->add("e/widgets/button"); +strings[740] = str->add("e/widgets/label"); +strings[741] = str->add("e/widgets/scrollframe"); +strings[742] = str->add("e/widgets/ilist"); +strings[743] = str->add("e/widgets/ilist_odd"); +strings[744] = str->add("e/widgets/ilist_header"); +strings[745] = str->add("e/widgets/tlist"); +strings[746] = str->add("e/widgets/tlist_odd"); +strings[747] = str->add("e/widgets/slider_vertical"); +strings[748] = str->add("e/widgets/slider_horizontal"); +strings[749] = str->add("e/widgets/exebuf/main"); +strings[750] = str->add("e/widgets/exebuf/item"); +strings[751] = str->add("e/desklock/background"); +strings[752] = str->add("e/desklock/login_box"); +strings[753] = str->add("e/widgets/textblock"); +strings[754] = str->add("e/shelf/default/base"); +strings[755] = str->add("e/shelf/default/inset"); +strings[756] = str->add("e/shelf/default/plain"); +strings[757] = str->add("e/shelf/alternate/base"); +strings[758] = str->add("e/shelf/alternate/inset"); +strings[759] = str->add("e/shelf/alternate/plain"); +strings[760] = str->add("e/shelf/invisible/base"); +strings[761] = str->add("e/shelf/invisible/inset"); +strings[762] = str->add("e/shelf/invisible/plain"); +strings[763] = str->add("e/widgets/preview"); +strings[764] = str->add("e/widgets/cslider"); +strings[765] = str->add("e/widgets/spectrum"); +strings[766] = str->add("e/widgets/color_well"); +strings[767] = str->add("e/sys/logout"); +strings[768] = str->add("e/sys/halt"); +strings[769] = str->add("e/sys/reboot"); +strings[770] = str->add("e/sys/suspend"); +strings[771] = str->add("e/sys/hibernate"); +strings[772] = str->add("e/widgets/deskpreview/desk"); +strings[773] = str->add("e/widgets/fontpreview"); +strings[774] = str->add("e/wizard/extra"); +strings[775] = str->add("e/wizard/main"); +strings[776] = str->add("e/toolbar/default/base"); +strings[777] = str->add("e/widgets/slidesel"); +strings[778] = str->add("e/modules/mixer/main"); +strings[779] = str->add("e/modules/connman/main"); +strings[780] = str->add("e/modules/connman/network"); +strings[781] = str->add("e/widgets/gradpreview"); +str->del(strings[481]); +str->del(strings[482]); +str->del(strings[483]); +str->del(strings[484]); +str->del(strings[485]); +str->del(strings[486]); +str->del(strings[487]); +str->del(strings[488]); +str->del(strings[489]); +str->del(strings[490]); +str->del(strings[491]); +str->del(strings[492]); +str->del(strings[493]); +str->del(strings[494]); +str->del(strings[495]); +str->del(strings[496]); +str->del(strings[497]); +str->del(strings[498]); +str->del(strings[499]); +str->del(strings[500]); +str->del(strings[501]); +str->del(strings[502]); +str->del(strings[503]); +str->del(strings[504]); +str->del(strings[505]); +str->del(strings[506]); +str->del(strings[507]); +str->del(strings[508]); +str->del(strings[509]); +str->del(strings[510]); +str->del(strings[511]); +str->del(strings[512]); +str->del(strings[513]); +str->del(strings[514]); +str->del(strings[515]); +str->del(strings[516]); +str->del(strings[517]); +str->del(strings[518]); +str->del(strings[519]); +str->del(strings[520]); +str->del(strings[521]); +str->del(strings[522]); +str->del(strings[523]); +str->del(strings[524]); +str->del(strings[525]); +str->del(strings[526]); +str->del(strings[527]); +str->del(strings[528]); +str->del(strings[529]); +str->del(strings[530]); +str->del(strings[531]); +str->del(strings[532]); +str->del(strings[533]); +str->del(strings[534]); +str->del(strings[535]); +str->del(strings[536]); +str->del(strings[537]); +str->del(strings[538]); +str->del(strings[539]); +str->del(strings[540]); +str->del(strings[541]); +str->del(strings[542]); +str->del(strings[543]); +str->del(strings[544]); +str->del(strings[545]); +str->del(strings[546]); +str->del(strings[547]); +str->del(strings[548]); +str->del(strings[549]); +str->del(strings[550]); +str->del(strings[551]); +str->del(strings[552]); +str->del(strings[553]); +str->del(strings[554]); +str->del(strings[555]); +str->del(strings[556]); +str->del(strings[557]); +str->del(strings[558]); +str->del(strings[559]); +str->del(strings[560]); +str->del(strings[561]); +str->del(strings[562]); +str->del(strings[563]); +str->del(strings[564]); +str->del(strings[565]); +str->del(strings[566]); +str->del(strings[567]); +str->del(strings[568]); +str->del(strings[569]); +str->del(strings[570]); +str->del(strings[571]); +str->del(strings[572]); +str->del(strings[573]); +str->del(strings[574]); +str->del(strings[575]); +str->del(strings[576]); +str->del(strings[577]); +str->del(strings[578]); +str->del(strings[579]); +str->del(strings[580]); +str->del(strings[581]); +str->del(strings[582]); +str->del(strings[583]); +str->del(strings[584]); +str->del(strings[585]); +str->del(strings[586]); +str->del(strings[587]); +str->del(strings[588]); +str->del(strings[589]); +str->del(strings[590]); +str->del(strings[591]); +str->del(strings[592]); +str->del(strings[593]); +str->del(strings[594]); +str->del(strings[595]); +str->del(strings[596]); +str->del(strings[597]); +str->del(strings[598]); +str->del(strings[599]); +str->del(strings[600]); +str->del(strings[601]); +str->del(strings[602]); +str->del(strings[603]); +str->del(strings[604]); +str->del(strings[605]); +str->del(strings[606]); +str->del(strings[607]); +str->del(strings[608]); +str->del(strings[609]); +str->del(strings[610]); +str->del(strings[611]); +str->del(strings[612]); +str->del(strings[613]); +str->del(strings[614]); +str->del(strings[615]); +str->del(strings[616]); +str->del(strings[617]); +str->del(strings[618]); +str->del(strings[619]); +str->del(strings[620]); +str->del(strings[621]); +str->del(strings[622]); +str->del(strings[623]); +str->del(strings[624]); +str->del(strings[625]); +str->del(strings[626]); +str->del(strings[627]); +str->del(strings[628]); +str->del(strings[629]); +str->del(strings[630]); +str->del(strings[631]); +str->del(strings[632]); +str->del(strings[633]); +str->del(strings[634]); +str->del(strings[635]); +str->del(strings[636]); +str->del(strings[637]); +str->del(strings[638]); +str->del(strings[639]); +str->del(strings[640]); +str->del(strings[641]); +str->del(strings[642]); +str->del(strings[643]); +str->del(strings[644]); +str->del(strings[645]); +str->del(strings[646]); +str->del(strings[647]); +str->del(strings[648]); +str->del(strings[649]); +str->del(strings[650]); +str->del(strings[651]); +str->del(strings[652]); +str->del(strings[653]); +str->del(strings[654]); +str->del(strings[655]); +str->del(strings[656]); +str->del(strings[657]); +str->del(strings[658]); +str->del(strings[659]); +str->del(strings[660]); +str->del(strings[661]); +str->del(strings[662]); +str->del(strings[663]); +str->del(strings[664]); +str->del(strings[665]); +str->del(strings[666]); +str->del(strings[667]); +str->del(strings[668]); +str->del(strings[669]); +str->del(strings[670]); +str->del(strings[671]); +str->del(strings[672]); +str->del(strings[673]); +str->del(strings[674]); +str->del(strings[675]); +str->del(strings[676]); +str->del(strings[677]); +str->del(strings[678]); +str->del(strings[679]); +str->del(strings[680]); +str->del(strings[681]); +str->del(strings[682]); +str->del(strings[683]); +str->del(strings[684]); +str->del(strings[685]); +str->del(strings[686]); +str->del(strings[687]); +str->del(strings[688]); +str->del(strings[689]); +str->del(strings[690]); +str->del(strings[691]); +str->del(strings[692]); +str->del(strings[693]); +str->del(strings[694]); +str->del(strings[695]); +str->del(strings[696]); +str->del(strings[697]); +str->del(strings[698]); +str->del(strings[699]); +str->del(strings[700]); +str->del(strings[701]); +str->del(strings[702]); +str->del(strings[703]); +str->del(strings[703]); +str->del(strings[704]); +str->del(strings[705]); +str->del(strings[706]); +str->del(strings[707]); +str->del(strings[708]); +str->del(strings[709]); +str->del(strings[710]); +str->del(strings[711]); +str->del(strings[712]); +str->del(strings[713]); +str->del(strings[714]); +str->del(strings[715]); +str->del(strings[716]); +str->del(strings[717]); +str->del(strings[718]); +str->del(strings[719]); +str->del(strings[720]); +str->del(strings[721]); +str->del(strings[722]); +str->del(strings[723]); +str->del(strings[724]); +str->del(strings[725]); +str->del(strings[726]); +str->del(strings[727]); +str->del(strings[728]); +str->del(strings[729]); +str->del(strings[730]); +str->del(strings[731]); +str->del(strings[732]); +str->del(strings[733]); +str->del(strings[734]); +str->del(strings[735]); +str->del(strings[736]); +str->del(strings[737]); +str->del(strings[738]); +str->del(strings[739]); +str->del(strings[740]); +str->del(strings[741]); +str->del(strings[742]); +str->del(strings[743]); +str->del(strings[744]); +str->del(strings[745]); +str->del(strings[746]); +str->del(strings[747]); +str->del(strings[748]); +str->del(strings[749]); +str->del(strings[750]); +str->del(strings[751]); +str->del(strings[752]); +str->del(strings[753]); +str->del(strings[754]); +str->del(strings[755]); +str->del(strings[756]); +str->del(strings[757]); +str->del(strings[758]); +str->del(strings[759]); +str->del(strings[760]); +str->del(strings[761]); +str->del(strings[762]); +str->del(strings[763]); +str->del(strings[764]); +str->del(strings[765]); +str->del(strings[766]); +str->del(strings[767]); +str->del(strings[768]); +str->del(strings[769]); +str->del(strings[770]); +str->del(strings[771]); +str->del(strings[772]); +str->del(strings[773]); +str->del(strings[774]); +str->del(strings[775]); +str->del(strings[776]); +str->del(strings[777]); +str->del(strings[778]); +str->del(strings[779]); +str->del(strings[780]); +str->del(strings[781]); +strings[782] = str->add("e/desktop/background"); +strings[783] = str->add("e/widgets/border/default/border"); +strings[784] = str->add("e/widgets/border/shaped/border"); +strings[785] = str->add("e/widgets/border/noresize/border"); +strings[786] = str->add("e/widgets/border/dialog/border"); +strings[787] = str->add("e/widgets/border/noresize_dialog/border"); +strings[788] = str->add("e/widgets/border/pixel/border"); +strings[789] = str->add("e/pointer/enlightenment/default/color"); +strings[790] = str->add("e/pointer/enlightenment/default/mono"); +strings[791] = str->add("e/widgets/menu/default/background"); +strings[792] = str->add("e/widgets/menu/default/separator"); +strings[793] = str->add("e/widgets/menu/default/item_bg"); +strings[794] = str->add("e/widgets/menu/default/icon"); +strings[795] = str->add("e/widgets/menu/default/label"); +strings[796] = str->add("e/widgets/menu/default/submenu"); +strings[797] = str->add("e/widgets/menu/default/check"); +strings[798] = str->add("e/widgets/menu/default/radio"); +strings[799] = str->add("e/shelf/default/base"); +strings[800] = str->add("e/shelf/default/inset"); +strings[801] = str->add("e/shelf/default/plain"); +strings[802] = str->add("e/shelf/invisible/base"); +strings[803] = str->add("e/shelf/invisible/inset"); +strings[804] = str->add("e/shelf/invisible/plain"); +strings[805] = str->add("e/shelf/alternate/base"); +strings[806] = str->add("e/shelf/alternate/inset"); +strings[807] = str->add("e/shelf/alternate/plain"); +strings[808] = str->add("e/modules/start/main"); +strings[809] = str->add("e/modules/pager/popup"); +strings[810] = str->add("e/modules/pager/desk"); +strings[811] = str->add("e/modules/pager/window"); +strings[812] = str->add("e/modules/battery/main"); +strings[813] = str->add("e/modules/temperature/main"); +strings[814] = str->add("e/modules/clock/main"); +strings[815] = str->add("e/modules/cpufreq/main"); +strings[816] = str->add("e/widgets/winlist/main"); +strings[817] = str->add("e/widgets/winlist/item"); +strings[818] = str->add("e/modules/mixer/main"); +strings[819] = str->add("e/sys/logout"); +strings[820] = str->add("e/widgets/dialog/main"); +strings[821] = str->add("e/widgets/dialog/text"); +strings[822] = str->add("e/widgets/configure/main"); +strings[823] = str->add("e/widgets/border/default/move"); +strings[824] = str->add("e/widgets/border/default/resize"); +strings[825] = str->add("e/transpreview/0"); +strings[826] = str->add("e/transpreview/1"); +strings[827] = str->add("e/transitions/crossfade"); +strings[828] = str->add("e/transitions/vswipe"); +strings[829] = str->add("e/widgets/check"); +strings[830] = str->add("e/widgets/check_icon"); +strings[831] = str->add("e/widgets/radio"); +strings[832] = str->add("e/widgets/radio_icon"); +strings[833] = str->add("e/widgets/button"); +strings[834] = str->add("e/widgets/scrollframe"); +strings[835] = str->add("e/widgets/ilist"); +strings[836] = str->add("e/widgets/ilist_odd"); +strings[837] = str->add("e/widgets/ilist_header"); +strings[838] = str->add("e/widgets/ilist_header_odd"); +strings[839] = str->add("e/widgets/entry"); +strings[840] = str->add("e/widgets/entry/text"); +strings[841] = str->add("e/widgets/entry/cursor"); +strings[842] = str->add("e/widgets/entry/selection"); +strings[843] = str->add("e/widgets/preview"); +strings[844] = str->add("e/widgets/deskpreview/desk"); +strings[845] = str->add("e/widgets/color_well"); +strings[846] = str->add("e/widgets/spectrum"); +strings[847] = str->add("e/widgets/cslider"); +strings[848] = str->add("e/widgets/slider_vertical"); +strings[849] = str->add("e/widgets/slider_horizontal"); +strings[850] = str->add("e/widgets/frame"); +strings[851] = str->add("e/widgets/label"); +strings[852] = str->add("e/widgets/fontpreview"); +strings[853] = str->add("e/widgets/textblock"); +strings[854] = str->add("e/widgets/menu/default/submenu_bg"); +strings[855] = str->add("e/sys/halt"); +strings[856] = str->add("e/sys/reboot"); +strings[857] = str->add("e/sys/suspend"); +strings[858] = str->add("e/sys/hibernate"); +strings[859] = str->add("e/widgets/gradpreview"); +strings[61] = str->add(strings[61]); +strings[860] = str->add("shaped"); +strings[861] = str->add("noresize"); +strings[862] = str->add("dialog"); +strings[863] = str->add("noresize_dialog"); +strings[864] = str->add("pixel"); +str->del(strings[782]); +str->del(strings[783]); +str->del(strings[784]); +str->del(strings[785]); +str->del(strings[786]); +str->del(strings[787]); +str->del(strings[788]); +str->del(strings[789]); +str->del(strings[790]); +str->del(strings[791]); +str->del(strings[792]); +str->del(strings[793]); +str->del(strings[794]); +str->del(strings[795]); +str->del(strings[796]); +str->del(strings[797]); +str->del(strings[798]); +str->del(strings[799]); +str->del(strings[800]); +str->del(strings[801]); +str->del(strings[802]); +str->del(strings[803]); +str->del(strings[804]); +str->del(strings[805]); +str->del(strings[806]); +str->del(strings[807]); +str->del(strings[808]); +str->del(strings[809]); +str->del(strings[810]); +str->del(strings[811]); +str->del(strings[812]); +str->del(strings[813]); +str->del(strings[814]); +str->del(strings[815]); +str->del(strings[816]); +str->del(strings[817]); +str->del(strings[818]); +str->del(strings[819]); +str->del(strings[820]); +str->del(strings[821]); +str->del(strings[822]); +str->del(strings[823]); +str->del(strings[824]); +str->del(strings[825]); +str->del(strings[826]); +str->del(strings[827]); +str->del(strings[828]); +str->del(strings[829]); +str->del(strings[830]); +str->del(strings[831]); +str->del(strings[832]); +str->del(strings[833]); +str->del(strings[834]); +str->del(strings[835]); +str->del(strings[836]); +str->del(strings[837]); +str->del(strings[838]); +str->del(strings[839]); +str->del(strings[840]); +str->del(strings[841]); +str->del(strings[842]); +str->del(strings[843]); +str->del(strings[844]); +str->del(strings[845]); +str->del(strings[846]); +str->del(strings[847]); +str->del(strings[848]); +str->del(strings[849]); +str->del(strings[850]); +str->del(strings[851]); +str->del(strings[852]); +str->del(strings[853]); +str->del(strings[854]); +str->del(strings[855]); +str->del(strings[856]); +str->del(strings[857]); +str->del(strings[858]); +str->del(strings[859]); +strings[865] = str->add("e/desktop/background"); +strings[866] = str->add("e/modules/battery/main"); +strings[867] = str->add("e/modules/battery/popup"); +strings[868] = str->add("e/widgets/border/default/border"); +strings[869] = str->add("e/widgets/border/shaped/border"); +strings[870] = str->add("e/widgets/border/noresize/border"); +strings[871] = str->add("e/widgets/border/dialog/border"); +strings[872] = str->add("e/widgets/border/noresize_dialog/border"); +strings[873] = str->add("e/widgets/border/pixel/border"); +strings[874] = str->add("e/widgets/border/default/close"); +strings[875] = str->add("e/widgets/border/default/minimize"); +strings[876] = str->add("e/widgets/border/default/maximize"); +strings[877] = str->add("e/widgets/border/default/shade"); +strings[878] = str->add("e/widgets/border/default/stick"); +strings[879] = str->add("e/widgets/border/default/kill"); +strings[880] = str->add("e/widgets/border/default/locks"); +strings[881] = str->add("e/widgets/border/default/locks_user"); +strings[882] = str->add("e/widgets/border/default/locks_application"); +strings[883] = str->add("e/widgets/border/default/borderless"); +strings[884] = str->add("e/widgets/border/default/fullscreen"); +strings[885] = str->add("e/widgets/border/default/remember"); +strings[886] = str->add("e/widgets/border/default/skip_winlist"); +strings[887] = str->add("e/widgets/border/default/skip"); +strings[888] = str->add("e/widgets/border/default/skip_pager"); +strings[889] = str->add("e/widgets/border/default/sendto"); +strings[890] = str->add("e/widgets/border/default/stacking"); +strings[891] = str->add("e/widgets/border/default/stack_on_top"); +strings[892] = str->add("e/widgets/border/default/stack_normal"); +strings[893] = str->add("e/widgets/border/default/stack_below"); +strings[894] = str->add("e/widgets/border/default/properties"); +strings[895] = str->add("e/modules/clock/main"); +strings[896] = str->add("e/gadman/control"); +strings[897] = str->add("e/gadman/popup"); +strings[898] = str->add("e/gadman/full_bg"); +strings[899] = str->add("e/gadman/frame"); +strings[900] = str->add("e/modules/ibar/icon"); +strings[901] = str->add("e/modules/ibar/icon_overlay"); +strings[902] = str->add("e/modules/ibar/drop"); +strings[903] = str->add("e/modules/ibar/drop_overlay"); +strings[904] = str->add("e/widgets/menu/default/background"); +strings[905] = str->add("e/widgets/menu/default/separator"); +strings[906] = str->add("e/widgets/menu/default/item_bg"); +strings[907] = str->add("e/widgets/menu/default/submenu_bg"); +strings[908] = str->add("e/widgets/menu/default/check"); +strings[909] = str->add("e/widgets/menu/default/radio"); +strings[910] = str->add("e/widgets/menu/default/icon"); +strings[911] = str->add("e/widgets/menu/default/label"); +strings[912] = str->add("e/widgets/menu/default/submenu"); +strings[913] = str->add("e/modules/pager/popup"); +strings[914] = str->add("e/modules/pager/desk"); +strings[915] = str->add("e/modules/pager/window"); +strings[916] = str->add("e/widgets/border/default/resize"); +strings[917] = str->add("e/widgets/border/default/move"); +strings[918] = str->add("e/modules/temperature/main"); +strings[919] = str->add("e/error/main"); +strings[920] = str->add("e/modules/cpufreq/main"); +strings[921] = str->add("e/modules/ibox/icon"); +strings[922] = str->add("e/modules/ibox/icon_overlay"); +strings[923] = str->add("e/modules/ibox/drop"); +strings[924] = str->add("e/modules/ibox/drop_overlay"); +strings[925] = str->add("e/modules/start/main"); +strings[926] = str->add("e/widgets/winlist/main"); +strings[927] = str->add("e/widgets/winlist/item"); +strings[928] = str->add("e/transpreview/0"); +strings[929] = str->add("e/transpreview/1"); +strings[930] = str->add("e/transitions/crossfade"); +strings[931] = str->add("e/transitions/vswipe"); +strings[932] = str->add("e/widgets/dialog/main"); +strings[933] = str->add("e/widgets/dialog/text"); +strings[934] = str->add("e/widgets/configure/main"); +strings[935] = str->add("e/icons/enlightenment/e"); +strings[936] = str->add("e/icons/enlightenment/reset"); +strings[937] = str->add("e/icons/enlightenment/exit"); +strings[938] = str->add("e/icons/enlightenment/logout"); +strings[939] = str->add("e/icons/enlightenment/halt"); +strings[940] = str->add("e/icons/enlightenment/reboot"); +strings[941] = str->add("e/icons/enlightenment/suspend"); +strings[942] = str->add("e/icons/enlightenment/hibernate"); +strings[943] = str->add("e/icons/enlightenment/screen_setup"); +strings[944] = str->add("e/icons/enlightenment/themes"); +strings[945] = str->add("e/icons/enlightenment/colors"); +strings[946] = str->add("e/icons/enlightenment/windows"); +strings[947] = str->add("e/icons/enlightenment/lost_windows"); +strings[948] = str->add("e/icons/enlightenment/focus"); +strings[949] = str->add("e/icons/enlightenment/modules"); +strings[950] = str->add("e/icons/enlightenment/favorites"); +strings[951] = str->add("e/icons/enlightenment/desktops"); +strings[952] = str->add("e/icons/enlightenment/configuration"); +strings[953] = str->add("e/icons/enlightenment/intl"); +strings[954] = str->add("e/icons/enlightenment/system"); +strings[955] = str->add("e/icons/enlightenment/run"); +strings[956] = str->add("e/icons/enlightenment/directories"); +strings[957] = str->add("e/icons/enlightenment/fileman"); +strings[958] = str->add("e/icons/enlightenment/unknown"); +strings[959] = str->add("e/icons/widget/new_dialog"); +strings[960] = str->add("e/icons/widget/up_arrow"); +strings[961] = str->add("e/icons/widget/down_arrow"); +strings[962] = str->add("e/icons/widget/up_dir"); +strings[963] = str->add("e/icons/enlightenment/mouse"); +strings[964] = str->add("e/icons/enlightenment/mouse_left"); +strings[965] = str->add("e/icons/enlightenment/mouse_middle"); +strings[966] = str->add("e/icons/enlightenment/mouse_right"); +strings[967] = str->add("e/icons/enlightenment/mouse_extra"); +strings[968] = str->add("e/icons/enlightenment/mouse_wheel"); +strings[969] = str->add("e/icons/enlightenment/mouse_clean"); +strings[970] = str->add("e/icons/enlightenment/keys"); +strings[971] = str->add("e/icons/enlightenment/desklock"); +strings[972] = str->add("e/icons/enlightenment/desklock_menu"); +strings[973] = str->add("e/icons/enlightenment/regenerate_menus"); +strings[974] = str->add("e/icons/enlightenment/screen_resolution"); +strings[975] = str->add("e/icons/enlightenment/shelf"); +strings[976] = str->add("e/icons/enlightenment/fonts"); +strings[977] = str->add("e/icons/enlightenment/background"); +strings[978] = str->add("e/icons/enlightenment/icon_theme"); +strings[979] = str->add("e/icons/enlightenment/applications"); +strings[980] = str->add("e/icons/enlightenment/transitions"); +strings[981] = str->add("e/icons/enlightenment/performance"); +strings[982] = str->add("e/icons/enlightenment/startup"); +strings[983] = str->add("e/icons/enlightenment/winlist"); +strings[984] = str->add("e/icons/enlightenment/window_manipulation"); +strings[985] = str->add("e/icons/enlightenment/menus"); +strings[986] = str->add("e/icons/enlightenment/screen_normal"); +strings[987] = str->add("e/icons/enlightenment/screen_around"); +strings[988] = str->add("e/icons/enlightenment/screen_left"); +strings[989] = str->add("e/icons/enlightenment/screen_right"); +strings[990] = str->add("e/icons/enlightenment/screen_vflip"); +strings[991] = str->add("e/icons/enlightenment/screen_hflip"); +strings[992] = str->add("e/icons/enlightenment/shelf_position_bottom"); +strings[993] = str->add("e/icons/enlightenment/shelf_position_bottom_left"); +strings[994] = str->add("e/icons/enlightenment/shelf_position_bottom_right"); +strings[995] = str->add("e/icons/enlightenment/shelf_position_top"); +strings[996] = str->add("e/icons/enlightenment/shelf_position_top_left"); +strings[997] = str->add("e/icons/enlightenment/shelf_position_top_right"); +strings[998] = str->add("e/icons/enlightenment/shelf_position_left"); +strings[999] = str->add("e/icons/enlightenment/shelf_position_left_top"); +strings[1000] = str->add("e/icons/enlightenment/shelf_position_left_bottom"); +strings[1001] = str->add("e/icons/enlightenment/shelf_position_right"); +strings[1002] = str->add("e/icons/enlightenment/shelf_position_right_top"); +strings[1003] = str->add("e/icons/enlightenment/shelf_position_right_bottom"); +strings[1004] = str->add("e/icons/enlightenment/shelf_bottom_desk"); +strings[1005] = str->add("e/icons/enlightenment/shelf_custom"); +strings[1006] = str->add("e/icons/enlightenment/shelf_dock"); +strings[1007] = str->add("e/icons/enlightenment/shelf_menu_bar"); +strings[1008] = str->add("e/icons/enlightenment/shelf_panel"); +strings[1009] = str->add("e/icons/enlightenment/shelf_top_desk"); +strings[1010] = str->add("e/icons/enlightenment/wallpaper_stretch"); +strings[1011] = str->add("e/icons/enlightenment/wallpaper_tile"); +strings[1012] = str->add("e/icons/enlightenment/wallpaper_center"); +strings[1013] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in"); +strings[1014] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out"); +strings[1015] = str->add("e/icons/enlightenment/gradient_h"); +strings[1016] = str->add("e/icons/enlightenment/gradient_v"); +strings[1017] = str->add("e/icons/enlightenment/gradient_du"); +strings[1018] = str->add("e/icons/enlightenment/gradient_dd"); +strings[1019] = str->add("e/icons/enlightenment/gradient_rad"); +strings[1020] = str->add("e/icons/enlightenment/advanced"); +strings[1021] = str->add("e/icons/enlightenment/behavior"); +strings[1022] = str->add("e/icons/enlightenment/appearance"); +strings[1023] = str->add("e/icons/enlightenment/extensions"); +strings[1024] = str->add("e/icons/enlightenment/imc"); +strings[1025] = str->add("e/icons/enlightenment/file_icons"); +strings[1026] = str->add("e/icons/enlightenment/menu_settings"); +strings[1027] = str->add("e/icons/enlightenment/ibar_applications"); +strings[1028] = str->add("e/icons/enlightenment/restart_applications"); +strings[1029] = str->add("e/icons/enlightenment/startup_applications"); +strings[1030] = str->add("e/icons/enlightenment/power_management"); +strings[1031] = str->add("e/icons/enlightenment/screensaver"); +strings[1032] = str->add("e/icons/enlightenment/window_remembers"); +strings[1033] = str->add("e/pointer/enlightenment/default/color"); +strings[1034] = str->add("e/pointer/enlightenment/default/mono"); +strings[1035] = str->add("e/widgets/about/main"); +strings[1036] = str->add("e/theme/about"); +strings[1037] = str->add("e/widgets/entry"); +strings[1038] = str->add("e/widgets/entry/text"); +strings[1039] = str->add("e/widgets/entry/cursor"); +strings[1040] = str->add("e/widgets/entry/selection"); +strings[1041] = str->add("e/fileman/default/window/main"); +strings[1042] = str->add("e/fileman/default/scrollframe"); +strings[1043] = str->add("e/fileman/default/list/variable"); +strings[1044] = str->add("e/fileman/default/list_odd/variable"); +strings[1045] = str->add("e/fileman/default/list/fixed"); +strings[1046] = str->add("e/fileman/default/list_odd/fixed"); +strings[1047] = str->add("e/fileman/default/icon/fixed"); +strings[1048] = str->add("e/fileman/default/icon/variable"); +strings[1049] = str->add("e/fileman/default/overlay"); +strings[1050] = str->add("e/fileman/default/list/drop_between"); +strings[1051] = str->add("e/fileman/default/list/drop_in"); +strings[1052] = str->add("e/fileman/desktop/scrollframe"); +strings[1053] = str->add("e/fileman/desktop/icon/fixed"); +strings[1054] = str->add("e/fileman/desktop/icon/variable"); +strings[1055] = str->add("e/fileman/desktop/overlay"); +strings[1056] = str->add("e/fileman/desktop/list/drop_between"); +strings[1057] = str->add("e/fileman/desktop/list/drop_in"); +strings[1058] = str->add("e/fileman/default/rubberband"); +strings[1059] = str->add("e/icons/fileman/folder"); +strings[1060] = str->add("e/icons/fileman/file"); +strings[1061] = str->add("e/icons/fileman/home"); +strings[1062] = str->add("e/icons/fileman/desktop"); +strings[1063] = str->add("e/icons/fileman/hdd"); +strings[1064] = str->add("e/icons/fileman/hd"); +strings[1065] = str->add("e/icons/fileman/mime/application/pdf"); +strings[1066] = str->add("e/icons/fileman/mime/text/x-csrc"); +strings[1067] = str->add("e/icons/fileman/mime/text/x-chdr"); +strings[1068] = str->add("e/icons/fileman/mime/application/x-object"); +strings[1069] = str->add("e/icons/fileman/mime/application/x-shellscript"); +strings[1070] = str->add("e/icons/fileman/mime/image/png"); +strings[1071] = str->add("e/icons/fileman/mime/image/jpeg"); +strings[1072] = str->add("e/icons/fileman/mime/video/x-msvideo"); +strings[1073] = str->add("e/icons/fileman/mime/audio/mpeg"); +strings[1074] = str->add("e/icons/fileman/mime/application/x-xcf"); +strings[1075] = str->add("e/icons/fileman/mime/text/x-c++src"); +strings[1076] = str->add("e/icons/fileman/mime/text/x-csharp"); +strings[1077] = str->add("e/icons/fileman/mime/text/x-patch"); +strings[1078] = str->add("e/icons/fileman/mime/application/msword"); +strings[1079] = str->add("e/icons/fileman/mime/application/ogg"); +strings[1080] = str->add("e/icons/fileman/mime/text/plain"); +strings[1081] = str->add("e/icons/fileman/mime/application/x-bzip"); +strings[1082] = str->add("e/icons/fileman/mime/application/x-deb"); +strings[1083] = str->add("e/icons/fileman/mime/application/x-font-ttf"); +strings[1084] = str->add("e/icons/fileman/mime/application/x-font-pcf"); +strings[1085] = str->add("e/icons/fileman/mime/application/x-font-bdf"); +strings[1086] = str->add("e/icons/fileman/mime/text/css"); +strings[1087] = str->add("e/icons/fileman/mime/text/html"); +strings[1087] = str->add(strings[1087]); +strings[1088] = str->add("e/icons/fileman/mime/application/zip"); +strings[1089] = str->add("e/icons/fileman/mime/application/x-gzip"); +strings[1090] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar"); +strings[1091] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar"); +strings[1092] = str->add("e/icons/fileman/mime/application/x-compressed-tar"); +strings[1093] = str->add("e/icons/fileman/mime/application/x-tar"); +strings[1094] = str->add("e/icons/fileman/mime/application/x-rar"); +strings[1095] = str->add("e/icons/fileman/mime/video/mpeg"); +strings[1096] = str->add("e/icons/fileman/mime/video"); +strings[1097] = str->add("e/icons/fileman/mime/text"); +strings[1098] = str->add("e/icons/fileman/mime/image"); +strings[1099] = str->add("e/icons/fileman/mime/audio"); +strings[1100] = str->add("e/fileman/default/button/open"); +strings[1101] = str->add("e/fileman/default/button/copy"); +strings[1102] = str->add("e/fileman/default/button/cut"); +strings[1103] = str->add("e/fileman/default/button/paste"); +strings[1104] = str->add("e/fileman/default/button/delete"); +strings[1105] = str->add("e/fileman/default/button/rename"); +strings[1106] = str->add("e/fileman/default/button/properties"); +strings[1107] = str->add("e/fileman/default/button/arrange_name"); +strings[1108] = str->add("e/fileman/default/button/arrange"); +strings[1109] = str->add("e/fileman/default/button/arrange_time"); +strings[1110] = str->add("e/fileman/default/button/new"); +strings[1111] = str->add("e/fileman/default/button/new_dir"); +strings[1112] = str->add("e/fileman/default/button/refresh"); +strings[1113] = str->add("e/fileman/default/button/view_details"); +strings[1114] = str->add("e/fileman/default/button/view_name"); +strings[1115] = str->add("e/fileman/default/button/view"); +strings[1116] = str->add("e/fileman/default/button/select"); +strings[1117] = str->add("e/widgets/fileselector/main"); +strings[1118] = str->add("e/widgets/check"); +strings[1119] = str->add("e/widgets/check_icon"); +strings[1120] = str->add("e/widgets/radio"); +strings[1121] = str->add("e/widgets/radio_icon"); +strings[1122] = str->add("e/widgets/frame"); +strings[1123] = str->add("e/widgets/button"); +strings[1124] = str->add("e/widgets/label"); +strings[1125] = str->add("e/widgets/scrollframe"); +strings[1126] = str->add("e/widgets/ilist"); +strings[1127] = str->add("e/widgets/ilist_odd"); +strings[1128] = str->add("e/widgets/ilist_header"); +strings[1129] = str->add("e/widgets/tlist"); +strings[1130] = str->add("e/widgets/tlist_odd"); +strings[1131] = str->add("e/widgets/slider_vertical"); +strings[1132] = str->add("e/widgets/slider_horizontal"); +strings[1133] = str->add("e/widgets/exebuf/main"); +strings[1134] = str->add("e/widgets/exebuf/item"); +strings[1135] = str->add("e/desklock/background"); +strings[1136] = str->add("e/desklock/login_box"); +strings[1137] = str->add("e/widgets/textblock"); +strings[1138] = str->add("e/shelf/default/base"); +strings[1139] = str->add("e/shelf/default/inset"); +strings[1140] = str->add("e/shelf/default/plain"); +strings[1141] = str->add("e/shelf/alternate/base"); +strings[1142] = str->add("e/shelf/alternate/inset"); +strings[1143] = str->add("e/shelf/alternate/plain"); +strings[1144] = str->add("e/shelf/invisible/base"); +strings[1145] = str->add("e/shelf/invisible/inset"); +strings[1146] = str->add("e/shelf/invisible/plain"); +strings[1147] = str->add("e/widgets/preview"); +strings[1148] = str->add("e/widgets/cslider"); +strings[1149] = str->add("e/widgets/spectrum"); +strings[1150] = str->add("e/widgets/color_well"); +strings[1151] = str->add("e/sys/logout"); +strings[1152] = str->add("e/sys/halt"); +strings[1153] = str->add("e/sys/reboot"); +strings[1154] = str->add("e/sys/suspend"); +strings[1155] = str->add("e/sys/hibernate"); +strings[1156] = str->add("e/widgets/deskpreview/desk"); +strings[1157] = str->add("e/widgets/fontpreview"); +strings[1158] = str->add("e/wizard/extra"); +strings[1159] = str->add("e/wizard/main"); +strings[1160] = str->add("e/toolbar/default/base"); +strings[1161] = str->add("e/widgets/slidesel"); +strings[1162] = str->add("e/modules/mixer/main"); +strings[1163] = str->add("e/modules/connman/main"); +strings[1164] = str->add("e/modules/connman/network"); +strings[1165] = str->add("e/widgets/gradpreview"); +str->del(strings[865]); +str->del(strings[866]); +str->del(strings[867]); +str->del(strings[868]); +str->del(strings[869]); +str->del(strings[870]); +str->del(strings[871]); +str->del(strings[872]); +str->del(strings[873]); +str->del(strings[874]); +str->del(strings[875]); +str->del(strings[876]); +str->del(strings[877]); +str->del(strings[878]); +str->del(strings[879]); +str->del(strings[880]); +str->del(strings[881]); +str->del(strings[882]); +str->del(strings[883]); +str->del(strings[884]); +str->del(strings[885]); +str->del(strings[886]); +str->del(strings[887]); +str->del(strings[888]); +str->del(strings[889]); +str->del(strings[890]); +str->del(strings[891]); +str->del(strings[892]); +str->del(strings[893]); +str->del(strings[894]); +str->del(strings[895]); +str->del(strings[896]); +str->del(strings[897]); +str->del(strings[898]); +str->del(strings[899]); +str->del(strings[900]); +str->del(strings[901]); +str->del(strings[902]); +str->del(strings[903]); +str->del(strings[904]); +str->del(strings[905]); +str->del(strings[906]); +str->del(strings[907]); +str->del(strings[908]); +str->del(strings[909]); +str->del(strings[910]); +str->del(strings[911]); +str->del(strings[912]); +str->del(strings[913]); +str->del(strings[914]); +str->del(strings[915]); +str->del(strings[916]); +str->del(strings[917]); +str->del(strings[918]); +str->del(strings[919]); +str->del(strings[920]); +str->del(strings[921]); +str->del(strings[922]); +str->del(strings[923]); +str->del(strings[924]); +str->del(strings[925]); +str->del(strings[926]); +str->del(strings[927]); +str->del(strings[928]); +str->del(strings[929]); +str->del(strings[930]); +str->del(strings[931]); +str->del(strings[932]); +str->del(strings[933]); +str->del(strings[934]); +str->del(strings[935]); +str->del(strings[936]); +str->del(strings[937]); +str->del(strings[938]); +str->del(strings[939]); +str->del(strings[940]); +str->del(strings[941]); +str->del(strings[942]); +str->del(strings[943]); +str->del(strings[944]); +str->del(strings[945]); +str->del(strings[946]); +str->del(strings[947]); +str->del(strings[948]); +str->del(strings[949]); +str->del(strings[950]); +str->del(strings[951]); +str->del(strings[952]); +str->del(strings[953]); +str->del(strings[954]); +str->del(strings[955]); +str->del(strings[956]); +str->del(strings[957]); +str->del(strings[958]); +str->del(strings[959]); +str->del(strings[960]); +str->del(strings[961]); +str->del(strings[962]); +str->del(strings[963]); +str->del(strings[964]); +str->del(strings[965]); +str->del(strings[966]); +str->del(strings[967]); +str->del(strings[968]); +str->del(strings[969]); +str->del(strings[970]); +str->del(strings[971]); +str->del(strings[972]); +str->del(strings[973]); +str->del(strings[974]); +str->del(strings[975]); +str->del(strings[976]); +str->del(strings[977]); +str->del(strings[978]); +str->del(strings[979]); +str->del(strings[980]); +str->del(strings[981]); +str->del(strings[982]); +str->del(strings[983]); +str->del(strings[984]); +str->del(strings[985]); +str->del(strings[986]); +str->del(strings[987]); +str->del(strings[988]); +str->del(strings[989]); +str->del(strings[990]); +str->del(strings[991]); +str->del(strings[992]); +str->del(strings[993]); +str->del(strings[994]); +str->del(strings[995]); +str->del(strings[996]); +str->del(strings[997]); +str->del(strings[998]); +str->del(strings[999]); +str->del(strings[1000]); +str->del(strings[1001]); +str->del(strings[1002]); +str->del(strings[1003]); +str->del(strings[1004]); +str->del(strings[1005]); +str->del(strings[1006]); +str->del(strings[1007]); +str->del(strings[1008]); +str->del(strings[1009]); +str->del(strings[1010]); +str->del(strings[1011]); +str->del(strings[1012]); +str->del(strings[1013]); +str->del(strings[1014]); +str->del(strings[1015]); +str->del(strings[1016]); +str->del(strings[1017]); +str->del(strings[1018]); +str->del(strings[1019]); +str->del(strings[1020]); +str->del(strings[1021]); +str->del(strings[1022]); +str->del(strings[1023]); +str->del(strings[1024]); +str->del(strings[1025]); +str->del(strings[1026]); +str->del(strings[1027]); +str->del(strings[1028]); +str->del(strings[1029]); +str->del(strings[1030]); +str->del(strings[1031]); +str->del(strings[1032]); +str->del(strings[1033]); +str->del(strings[1034]); +str->del(strings[1035]); +str->del(strings[1036]); +str->del(strings[1037]); +str->del(strings[1038]); +str->del(strings[1039]); +str->del(strings[1040]); +str->del(strings[1041]); +str->del(strings[1042]); +str->del(strings[1043]); +str->del(strings[1044]); +str->del(strings[1045]); +str->del(strings[1046]); +str->del(strings[1047]); +str->del(strings[1048]); +str->del(strings[1049]); +str->del(strings[1050]); +str->del(strings[1051]); +str->del(strings[1052]); +str->del(strings[1053]); +str->del(strings[1054]); +str->del(strings[1055]); +str->del(strings[1056]); +str->del(strings[1057]); +str->del(strings[1058]); +str->del(strings[1059]); +str->del(strings[1060]); +str->del(strings[1061]); +str->del(strings[1062]); +str->del(strings[1063]); +str->del(strings[1064]); +str->del(strings[1065]); +str->del(strings[1066]); +str->del(strings[1067]); +str->del(strings[1068]); +str->del(strings[1069]); +str->del(strings[1070]); +str->del(strings[1071]); +str->del(strings[1072]); +str->del(strings[1073]); +str->del(strings[1074]); +str->del(strings[1075]); +str->del(strings[1076]); +str->del(strings[1077]); +str->del(strings[1078]); +str->del(strings[1079]); +str->del(strings[1080]); +str->del(strings[1081]); +str->del(strings[1082]); +str->del(strings[1083]); +str->del(strings[1084]); +str->del(strings[1085]); +str->del(strings[1086]); +str->del(strings[1087]); +str->del(strings[1087]); +str->del(strings[1088]); +str->del(strings[1089]); +str->del(strings[1090]); +str->del(strings[1091]); +str->del(strings[1092]); +str->del(strings[1093]); +str->del(strings[1094]); +str->del(strings[1095]); +str->del(strings[1096]); +str->del(strings[1097]); +str->del(strings[1098]); +str->del(strings[1099]); +str->del(strings[1100]); +str->del(strings[1101]); +str->del(strings[1102]); +str->del(strings[1103]); +str->del(strings[1104]); +str->del(strings[1105]); +str->del(strings[1106]); +str->del(strings[1107]); +str->del(strings[1108]); +str->del(strings[1109]); +str->del(strings[1110]); +str->del(strings[1111]); +str->del(strings[1112]); +str->del(strings[1113]); +str->del(strings[1114]); +str->del(strings[1115]); +str->del(strings[1116]); +str->del(strings[1117]); +str->del(strings[1118]); +str->del(strings[1119]); +str->del(strings[1120]); +str->del(strings[1121]); +str->del(strings[1122]); +str->del(strings[1123]); +str->del(strings[1124]); +str->del(strings[1125]); +str->del(strings[1126]); +str->del(strings[1127]); +str->del(strings[1128]); +str->del(strings[1129]); +str->del(strings[1130]); +str->del(strings[1131]); +str->del(strings[1132]); +str->del(strings[1133]); +str->del(strings[1134]); +str->del(strings[1135]); +str->del(strings[1136]); +str->del(strings[1137]); +str->del(strings[1138]); +str->del(strings[1139]); +str->del(strings[1140]); +str->del(strings[1141]); +str->del(strings[1142]); +str->del(strings[1143]); +str->del(strings[1144]); +str->del(strings[1145]); +str->del(strings[1146]); +str->del(strings[1147]); +str->del(strings[1148]); +str->del(strings[1149]); +str->del(strings[1150]); +str->del(strings[1151]); +str->del(strings[1152]); +str->del(strings[1153]); +str->del(strings[1154]); +str->del(strings[1155]); +str->del(strings[1156]); +str->del(strings[1157]); +str->del(strings[1158]); +str->del(strings[1159]); +str->del(strings[1160]); +str->del(strings[1161]); +str->del(strings[1162]); +str->del(strings[1163]); +str->del(strings[1164]); +str->del(strings[1165]); +strings[1166] = str->add("e/desktop/background"); +strings[1167] = str->add("e/widgets/border/default/border"); +strings[1168] = str->add("e/widgets/border/shaped/border"); +strings[1169] = str->add("e/widgets/border/noresize/border"); +strings[1170] = str->add("e/widgets/border/dialog/border"); +strings[1171] = str->add("e/widgets/border/noresize_dialog/border"); +strings[1172] = str->add("e/widgets/border/pixel/border"); +strings[1173] = str->add("e/pointer/enlightenment/default/color"); +strings[1174] = str->add("e/pointer/enlightenment/default/mono"); +strings[1175] = str->add("e/widgets/menu/default/background"); +strings[1176] = str->add("e/widgets/menu/default/separator"); +strings[1177] = str->add("e/widgets/menu/default/item_bg"); +strings[1178] = str->add("e/widgets/menu/default/icon"); +strings[1179] = str->add("e/widgets/menu/default/label"); +strings[1180] = str->add("e/widgets/menu/default/submenu"); +strings[1181] = str->add("e/widgets/menu/default/check"); +strings[1182] = str->add("e/widgets/menu/default/radio"); +strings[1183] = str->add("e/shelf/default/base"); +strings[1184] = str->add("e/shelf/default/inset"); +strings[1185] = str->add("e/shelf/default/plain"); +strings[1186] = str->add("e/shelf/invisible/base"); +strings[1187] = str->add("e/shelf/invisible/inset"); +strings[1188] = str->add("e/shelf/invisible/plain"); +strings[1189] = str->add("e/shelf/alternate/base"); +strings[1190] = str->add("e/shelf/alternate/inset"); +strings[1191] = str->add("e/shelf/alternate/plain"); +strings[1192] = str->add("e/modules/start/main"); +strings[1193] = str->add("e/modules/pager/popup"); +strings[1194] = str->add("e/modules/pager/desk"); +strings[1195] = str->add("e/modules/pager/window"); +strings[1196] = str->add("e/modules/battery/main"); +strings[1197] = str->add("e/modules/temperature/main"); +strings[1198] = str->add("e/modules/clock/main"); +strings[1199] = str->add("e/modules/cpufreq/main"); +strings[1200] = str->add("e/widgets/winlist/main"); +strings[1201] = str->add("e/widgets/winlist/item"); +strings[1202] = str->add("e/modules/mixer/main"); +strings[1203] = str->add("e/sys/logout"); +strings[1204] = str->add("e/widgets/dialog/main"); +strings[1205] = str->add("e/widgets/dialog/text"); +strings[1206] = str->add("e/widgets/configure/main"); +strings[1207] = str->add("e/widgets/border/default/move"); +strings[1208] = str->add("e/widgets/border/default/resize"); +strings[1209] = str->add("e/transpreview/0"); +strings[1210] = str->add("e/transpreview/1"); +strings[1211] = str->add("e/transitions/crossfade"); +strings[1212] = str->add("e/transitions/vswipe"); +strings[1213] = str->add("e/widgets/check"); +strings[1214] = str->add("e/widgets/check_icon"); +strings[1215] = str->add("e/widgets/radio"); +strings[1216] = str->add("e/widgets/radio_icon"); +strings[1217] = str->add("e/widgets/button"); +strings[1218] = str->add("e/widgets/scrollframe"); +strings[1219] = str->add("e/widgets/ilist"); +strings[1220] = str->add("e/widgets/ilist_odd"); +strings[1221] = str->add("e/widgets/ilist_header"); +strings[1222] = str->add("e/widgets/ilist_header_odd"); +strings[1223] = str->add("e/widgets/entry"); +strings[1224] = str->add("e/widgets/entry/text"); +strings[1225] = str->add("e/widgets/entry/cursor"); +strings[1226] = str->add("e/widgets/entry/selection"); +strings[1227] = str->add("e/widgets/preview"); +strings[1228] = str->add("e/widgets/deskpreview/desk"); +strings[1229] = str->add("e/widgets/color_well"); +strings[1230] = str->add("e/widgets/spectrum"); +strings[1231] = str->add("e/widgets/cslider"); +strings[1232] = str->add("e/widgets/slider_vertical"); +strings[1233] = str->add("e/widgets/slider_horizontal"); +strings[1234] = str->add("e/widgets/frame"); +strings[1235] = str->add("e/widgets/label"); +strings[1236] = str->add("e/widgets/fontpreview"); +strings[1237] = str->add("e/widgets/textblock"); +strings[1238] = str->add("e/widgets/menu/default/submenu_bg"); +strings[1239] = str->add("e/sys/halt"); +strings[1240] = str->add("e/sys/reboot"); +strings[1241] = str->add("e/sys/suspend"); +strings[1242] = str->add("e/sys/hibernate"); +strings[1243] = str->add("e/widgets/gradpreview"); +strings[61] = str->add(strings[61]); +strings[1244] = str->add("invisible"); +strings[1245] = str->add("alternate"); +str->del(strings[1166]); +str->del(strings[1167]); +str->del(strings[1168]); +str->del(strings[1169]); +str->del(strings[1170]); +str->del(strings[1171]); +str->del(strings[1172]); +str->del(strings[1173]); +str->del(strings[1174]); +str->del(strings[1175]); +str->del(strings[1176]); +str->del(strings[1177]); +str->del(strings[1178]); +str->del(strings[1179]); +str->del(strings[1180]); +str->del(strings[1181]); +str->del(strings[1182]); +str->del(strings[1183]); +str->del(strings[1184]); +str->del(strings[1185]); +str->del(strings[1186]); +str->del(strings[1187]); +str->del(strings[1188]); +str->del(strings[1189]); +str->del(strings[1190]); +str->del(strings[1191]); +str->del(strings[1192]); +str->del(strings[1193]); +str->del(strings[1194]); +str->del(strings[1195]); +str->del(strings[1196]); +str->del(strings[1197]); +str->del(strings[1198]); +str->del(strings[1199]); +str->del(strings[1200]); +str->del(strings[1201]); +str->del(strings[1202]); +str->del(strings[1203]); +str->del(strings[1204]); +str->del(strings[1205]); +str->del(strings[1206]); +str->del(strings[1207]); +str->del(strings[1208]); +str->del(strings[1209]); +str->del(strings[1210]); +str->del(strings[1211]); +str->del(strings[1212]); +str->del(strings[1213]); +str->del(strings[1214]); +str->del(strings[1215]); +str->del(strings[1216]); +str->del(strings[1217]); +str->del(strings[1218]); +str->del(strings[1219]); +str->del(strings[1220]); +str->del(strings[1221]); +str->del(strings[1222]); +str->del(strings[1223]); +str->del(strings[1224]); +str->del(strings[1225]); +str->del(strings[1226]); +str->del(strings[1227]); +str->del(strings[1228]); +str->del(strings[1229]); +str->del(strings[1230]); +str->del(strings[1231]); +str->del(strings[1232]); +str->del(strings[1233]); +str->del(strings[1234]); +str->del(strings[1235]); +str->del(strings[1236]); +str->del(strings[1237]); +str->del(strings[1238]); +str->del(strings[1239]); +str->del(strings[1240]); +str->del(strings[1241]); +str->del(strings[1242]); +str->del(strings[1243]); +strings[1246] = str->add("e/desktop/background"); +strings[1247] = str->add("e/modules/battery/main"); +strings[1248] = str->add("e/modules/battery/popup"); +strings[1249] = str->add("e/widgets/border/default/border"); +strings[1250] = str->add("e/widgets/border/shaped/border"); +strings[1251] = str->add("e/widgets/border/noresize/border"); +strings[1252] = str->add("e/widgets/border/dialog/border"); +strings[1253] = str->add("e/widgets/border/noresize_dialog/border"); +strings[1254] = str->add("e/widgets/border/pixel/border"); +strings[1255] = str->add("e/widgets/border/default/close"); +strings[1256] = str->add("e/widgets/border/default/minimize"); +strings[1257] = str->add("e/widgets/border/default/maximize"); +strings[1258] = str->add("e/widgets/border/default/shade"); +strings[1259] = str->add("e/widgets/border/default/stick"); +strings[1260] = str->add("e/widgets/border/default/kill"); +strings[1261] = str->add("e/widgets/border/default/locks"); +strings[1262] = str->add("e/widgets/border/default/locks_user"); +strings[1263] = str->add("e/widgets/border/default/locks_application"); +strings[1264] = str->add("e/widgets/border/default/borderless"); +strings[1265] = str->add("e/widgets/border/default/fullscreen"); +strings[1266] = str->add("e/widgets/border/default/remember"); +strings[1267] = str->add("e/widgets/border/default/skip_winlist"); +strings[1268] = str->add("e/widgets/border/default/skip"); +strings[1269] = str->add("e/widgets/border/default/skip_pager"); +strings[1270] = str->add("e/widgets/border/default/sendto"); +strings[1271] = str->add("e/widgets/border/default/stacking"); +strings[1272] = str->add("e/widgets/border/default/stack_on_top"); +strings[1273] = str->add("e/widgets/border/default/stack_normal"); +strings[1274] = str->add("e/widgets/border/default/stack_below"); +strings[1275] = str->add("e/widgets/border/default/properties"); +strings[1276] = str->add("e/modules/clock/main"); +strings[1277] = str->add("e/gadman/control"); +strings[1278] = str->add("e/gadman/popup"); +strings[1279] = str->add("e/gadman/full_bg"); +strings[1280] = str->add("e/gadman/frame"); +strings[1281] = str->add("e/modules/ibar/icon"); +strings[1282] = str->add("e/modules/ibar/icon_overlay"); +strings[1283] = str->add("e/modules/ibar/drop"); +strings[1284] = str->add("e/modules/ibar/drop_overlay"); +strings[1285] = str->add("e/widgets/menu/default/background"); +strings[1286] = str->add("e/widgets/menu/default/separator"); +strings[1287] = str->add("e/widgets/menu/default/item_bg"); +strings[1288] = str->add("e/widgets/menu/default/submenu_bg"); +strings[1289] = str->add("e/widgets/menu/default/check"); +strings[1290] = str->add("e/widgets/menu/default/radio"); +strings[1291] = str->add("e/widgets/menu/default/icon"); +strings[1292] = str->add("e/widgets/menu/default/label"); +strings[1293] = str->add("e/widgets/menu/default/submenu"); +strings[1294] = str->add("e/modules/pager/popup"); +strings[1295] = str->add("e/modules/pager/desk"); +strings[1296] = str->add("e/modules/pager/window"); +strings[1297] = str->add("e/widgets/border/default/resize"); +strings[1298] = str->add("e/widgets/border/default/move"); +strings[1299] = str->add("e/modules/temperature/main"); +strings[1300] = str->add("e/error/main"); +strings[1301] = str->add("e/modules/cpufreq/main"); +strings[1302] = str->add("e/modules/ibox/icon"); +strings[1303] = str->add("e/modules/ibox/icon_overlay"); +strings[1304] = str->add("e/modules/ibox/drop"); +strings[1305] = str->add("e/modules/ibox/drop_overlay"); +strings[1306] = str->add("e/modules/start/main"); +strings[1307] = str->add("e/widgets/winlist/main"); +strings[1308] = str->add("e/widgets/winlist/item"); +strings[1309] = str->add("e/transpreview/0"); +strings[1310] = str->add("e/transpreview/1"); +strings[1311] = str->add("e/transitions/crossfade"); +strings[1312] = str->add("e/transitions/vswipe"); +strings[1313] = str->add("e/widgets/dialog/main"); +strings[1314] = str->add("e/widgets/dialog/text"); +strings[1315] = str->add("e/widgets/configure/main"); +strings[1316] = str->add("e/icons/enlightenment/e"); +strings[1317] = str->add("e/icons/enlightenment/reset"); +strings[1318] = str->add("e/icons/enlightenment/exit"); +strings[1319] = str->add("e/icons/enlightenment/logout"); +strings[1320] = str->add("e/icons/enlightenment/halt"); +strings[1321] = str->add("e/icons/enlightenment/reboot"); +strings[1322] = str->add("e/icons/enlightenment/suspend"); +strings[1323] = str->add("e/icons/enlightenment/hibernate"); +strings[1324] = str->add("e/icons/enlightenment/screen_setup"); +strings[1325] = str->add("e/icons/enlightenment/themes"); +strings[1326] = str->add("e/icons/enlightenment/colors"); +strings[1327] = str->add("e/icons/enlightenment/windows"); +strings[1328] = str->add("e/icons/enlightenment/lost_windows"); +strings[1329] = str->add("e/icons/enlightenment/focus"); +strings[1330] = str->add("e/icons/enlightenment/modules"); +strings[1331] = str->add("e/icons/enlightenment/favorites"); +strings[1332] = str->add("e/icons/enlightenment/desktops"); +strings[1333] = str->add("e/icons/enlightenment/configuration"); +strings[1334] = str->add("e/icons/enlightenment/intl"); +strings[1335] = str->add("e/icons/enlightenment/system"); +strings[1336] = str->add("e/icons/enlightenment/run"); +strings[1337] = str->add("e/icons/enlightenment/directories"); +strings[1338] = str->add("e/icons/enlightenment/fileman"); +strings[1339] = str->add("e/icons/enlightenment/unknown"); +strings[1340] = str->add("e/icons/widget/new_dialog"); +strings[1341] = str->add("e/icons/widget/up_arrow"); +strings[1342] = str->add("e/icons/widget/down_arrow"); +strings[1343] = str->add("e/icons/widget/up_dir"); +strings[1344] = str->add("e/icons/enlightenment/mouse"); +strings[1345] = str->add("e/icons/enlightenment/mouse_left"); +strings[1346] = str->add("e/icons/enlightenment/mouse_middle"); +strings[1347] = str->add("e/icons/enlightenment/mouse_right"); +strings[1348] = str->add("e/icons/enlightenment/mouse_extra"); +strings[1349] = str->add("e/icons/enlightenment/mouse_wheel"); +strings[1350] = str->add("e/icons/enlightenment/mouse_clean"); +strings[1351] = str->add("e/icons/enlightenment/keys"); +strings[1352] = str->add("e/icons/enlightenment/desklock"); +strings[1353] = str->add("e/icons/enlightenment/desklock_menu"); +strings[1354] = str->add("e/icons/enlightenment/regenerate_menus"); +strings[1355] = str->add("e/icons/enlightenment/screen_resolution"); +strings[1356] = str->add("e/icons/enlightenment/shelf"); +strings[1357] = str->add("e/icons/enlightenment/fonts"); +strings[1358] = str->add("e/icons/enlightenment/background"); +strings[1359] = str->add("e/icons/enlightenment/icon_theme"); +strings[1360] = str->add("e/icons/enlightenment/applications"); +strings[1361] = str->add("e/icons/enlightenment/transitions"); +strings[1362] = str->add("e/icons/enlightenment/performance"); +strings[1363] = str->add("e/icons/enlightenment/startup"); +strings[1364] = str->add("e/icons/enlightenment/winlist"); +strings[1365] = str->add("e/icons/enlightenment/window_manipulation"); +strings[1366] = str->add("e/icons/enlightenment/menus"); +strings[1367] = str->add("e/icons/enlightenment/screen_normal"); +strings[1368] = str->add("e/icons/enlightenment/screen_around"); +strings[1369] = str->add("e/icons/enlightenment/screen_left"); +strings[1370] = str->add("e/icons/enlightenment/screen_right"); +strings[1371] = str->add("e/icons/enlightenment/screen_vflip"); +strings[1372] = str->add("e/icons/enlightenment/screen_hflip"); +strings[1373] = str->add("e/icons/enlightenment/shelf_position_bottom"); +strings[1374] = str->add("e/icons/enlightenment/shelf_position_bottom_left"); +strings[1375] = str->add("e/icons/enlightenment/shelf_position_bottom_right"); +strings[1376] = str->add("e/icons/enlightenment/shelf_position_top"); +strings[1377] = str->add("e/icons/enlightenment/shelf_position_top_left"); +strings[1378] = str->add("e/icons/enlightenment/shelf_position_top_right"); +strings[1379] = str->add("e/icons/enlightenment/shelf_position_left"); +strings[1380] = str->add("e/icons/enlightenment/shelf_position_left_top"); +strings[1381] = str->add("e/icons/enlightenment/shelf_position_left_bottom"); +strings[1382] = str->add("e/icons/enlightenment/shelf_position_right"); +strings[1383] = str->add("e/icons/enlightenment/shelf_position_right_top"); +strings[1384] = str->add("e/icons/enlightenment/shelf_position_right_bottom"); +strings[1385] = str->add("e/icons/enlightenment/shelf_bottom_desk"); +strings[1386] = str->add("e/icons/enlightenment/shelf_custom"); +strings[1387] = str->add("e/icons/enlightenment/shelf_dock"); +strings[1388] = str->add("e/icons/enlightenment/shelf_menu_bar"); +strings[1389] = str->add("e/icons/enlightenment/shelf_panel"); +strings[1390] = str->add("e/icons/enlightenment/shelf_top_desk"); +strings[1391] = str->add("e/icons/enlightenment/wallpaper_stretch"); +strings[1392] = str->add("e/icons/enlightenment/wallpaper_tile"); +strings[1393] = str->add("e/icons/enlightenment/wallpaper_center"); +strings[1394] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in"); +strings[1395] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out"); +strings[1396] = str->add("e/icons/enlightenment/gradient_h"); +strings[1397] = str->add("e/icons/enlightenment/gradient_v"); +strings[1398] = str->add("e/icons/enlightenment/gradient_du"); +strings[1399] = str->add("e/icons/enlightenment/gradient_dd"); +strings[1400] = str->add("e/icons/enlightenment/gradient_rad"); +strings[1401] = str->add("e/icons/enlightenment/advanced"); +strings[1402] = str->add("e/icons/enlightenment/behavior"); +strings[1403] = str->add("e/icons/enlightenment/appearance"); +strings[1404] = str->add("e/icons/enlightenment/extensions"); +strings[1405] = str->add("e/icons/enlightenment/imc"); +strings[1406] = str->add("e/icons/enlightenment/file_icons"); +strings[1407] = str->add("e/icons/enlightenment/menu_settings"); +strings[1408] = str->add("e/icons/enlightenment/ibar_applications"); +strings[1409] = str->add("e/icons/enlightenment/restart_applications"); +strings[1410] = str->add("e/icons/enlightenment/startup_applications"); +strings[1411] = str->add("e/icons/enlightenment/power_management"); +strings[1412] = str->add("e/icons/enlightenment/screensaver"); +strings[1413] = str->add("e/icons/enlightenment/window_remembers"); +strings[1414] = str->add("e/pointer/enlightenment/default/color"); +strings[1415] = str->add("e/pointer/enlightenment/default/mono"); +strings[1416] = str->add("e/widgets/about/main"); +strings[1417] = str->add("e/theme/about"); +strings[1418] = str->add("e/widgets/entry"); +strings[1419] = str->add("e/widgets/entry/text"); +strings[1420] = str->add("e/widgets/entry/cursor"); +strings[1421] = str->add("e/widgets/entry/selection"); +strings[1422] = str->add("e/fileman/default/window/main"); +strings[1423] = str->add("e/fileman/default/scrollframe"); +strings[1424] = str->add("e/fileman/default/list/variable"); +strings[1425] = str->add("e/fileman/default/list_odd/variable"); +strings[1426] = str->add("e/fileman/default/list/fixed"); +strings[1427] = str->add("e/fileman/default/list_odd/fixed"); +strings[1428] = str->add("e/fileman/default/icon/fixed"); +strings[1429] = str->add("e/fileman/default/icon/variable"); +strings[1430] = str->add("e/fileman/default/overlay"); +strings[1431] = str->add("e/fileman/default/list/drop_between"); +strings[1432] = str->add("e/fileman/default/list/drop_in"); +strings[1433] = str->add("e/fileman/desktop/scrollframe"); +strings[1434] = str->add("e/fileman/desktop/icon/fixed"); +strings[1435] = str->add("e/fileman/desktop/icon/variable"); +strings[1436] = str->add("e/fileman/desktop/overlay"); +strings[1437] = str->add("e/fileman/desktop/list/drop_between"); +strings[1438] = str->add("e/fileman/desktop/list/drop_in"); +strings[1439] = str->add("e/fileman/default/rubberband"); +strings[1440] = str->add("e/icons/fileman/folder"); +strings[1441] = str->add("e/icons/fileman/file"); +strings[1442] = str->add("e/icons/fileman/home"); +strings[1443] = str->add("e/icons/fileman/desktop"); +strings[1444] = str->add("e/icons/fileman/hdd"); +strings[1445] = str->add("e/icons/fileman/hd"); +strings[1446] = str->add("e/icons/fileman/mime/application/pdf"); +strings[1447] = str->add("e/icons/fileman/mime/text/x-csrc"); +strings[1448] = str->add("e/icons/fileman/mime/text/x-chdr"); +strings[1449] = str->add("e/icons/fileman/mime/application/x-object"); +strings[1450] = str->add("e/icons/fileman/mime/application/x-shellscript"); +strings[1451] = str->add("e/icons/fileman/mime/image/png"); +strings[1452] = str->add("e/icons/fileman/mime/image/jpeg"); +strings[1453] = str->add("e/icons/fileman/mime/video/x-msvideo"); +strings[1454] = str->add("e/icons/fileman/mime/audio/mpeg"); +strings[1455] = str->add("e/icons/fileman/mime/application/x-xcf"); +strings[1456] = str->add("e/icons/fileman/mime/text/x-c++src"); +strings[1457] = str->add("e/icons/fileman/mime/text/x-csharp"); +strings[1458] = str->add("e/icons/fileman/mime/text/x-patch"); +strings[1459] = str->add("e/icons/fileman/mime/application/msword"); +strings[1460] = str->add("e/icons/fileman/mime/application/ogg"); +strings[1461] = str->add("e/icons/fileman/mime/text/plain"); +strings[1462] = str->add("e/icons/fileman/mime/application/x-bzip"); +strings[1463] = str->add("e/icons/fileman/mime/application/x-deb"); +strings[1464] = str->add("e/icons/fileman/mime/application/x-font-ttf"); +strings[1465] = str->add("e/icons/fileman/mime/application/x-font-pcf"); +strings[1466] = str->add("e/icons/fileman/mime/application/x-font-bdf"); +strings[1467] = str->add("e/icons/fileman/mime/text/css"); +strings[1468] = str->add("e/icons/fileman/mime/text/html"); +strings[1468] = str->add(strings[1468]); +strings[1469] = str->add("e/icons/fileman/mime/application/zip"); +strings[1470] = str->add("e/icons/fileman/mime/application/x-gzip"); +strings[1471] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar"); +strings[1472] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar"); +strings[1473] = str->add("e/icons/fileman/mime/application/x-compressed-tar"); +strings[1474] = str->add("e/icons/fileman/mime/application/x-tar"); +strings[1475] = str->add("e/icons/fileman/mime/application/x-rar"); +strings[1476] = str->add("e/icons/fileman/mime/video/mpeg"); +strings[1477] = str->add("e/icons/fileman/mime/video"); +strings[1478] = str->add("e/icons/fileman/mime/text"); +strings[1479] = str->add("e/icons/fileman/mime/image"); +strings[1480] = str->add("e/icons/fileman/mime/audio"); +strings[1481] = str->add("e/fileman/default/button/open"); +strings[1482] = str->add("e/fileman/default/button/copy"); +strings[1483] = str->add("e/fileman/default/button/cut"); +strings[1484] = str->add("e/fileman/default/button/paste"); +strings[1485] = str->add("e/fileman/default/button/delete"); +strings[1486] = str->add("e/fileman/default/button/rename"); +strings[1487] = str->add("e/fileman/default/button/properties"); +strings[1488] = str->add("e/fileman/default/button/arrange_name"); +strings[1489] = str->add("e/fileman/default/button/arrange"); +strings[1490] = str->add("e/fileman/default/button/arrange_time"); +strings[1491] = str->add("e/fileman/default/button/new"); +strings[1492] = str->add("e/fileman/default/button/new_dir"); +strings[1493] = str->add("e/fileman/default/button/refresh"); +strings[1494] = str->add("e/fileman/default/button/view_details"); +strings[1495] = str->add("e/fileman/default/button/view_name"); +strings[1496] = str->add("e/fileman/default/button/view"); +strings[1497] = str->add("e/fileman/default/button/select"); +strings[1498] = str->add("e/widgets/fileselector/main"); +strings[1499] = str->add("e/widgets/check"); +strings[1500] = str->add("e/widgets/check_icon"); +strings[1501] = str->add("e/widgets/radio"); +strings[1502] = str->add("e/widgets/radio_icon"); +strings[1503] = str->add("e/widgets/frame"); +strings[1504] = str->add("e/widgets/button"); +strings[1505] = str->add("e/widgets/label"); +strings[1506] = str->add("e/widgets/scrollframe"); +strings[1507] = str->add("e/widgets/ilist"); +strings[1508] = str->add("e/widgets/ilist_odd"); +strings[1509] = str->add("e/widgets/ilist_header"); +strings[1510] = str->add("e/widgets/tlist"); +strings[1511] = str->add("e/widgets/tlist_odd"); +strings[1512] = str->add("e/widgets/slider_vertical"); +strings[1513] = str->add("e/widgets/slider_horizontal"); +strings[1514] = str->add("e/widgets/exebuf/main"); +strings[1515] = str->add("e/widgets/exebuf/item"); +strings[1516] = str->add("e/desklock/background"); +strings[1517] = str->add("e/desklock/login_box"); +strings[1518] = str->add("e/widgets/textblock"); +strings[1519] = str->add("e/shelf/default/base"); +strings[1520] = str->add("e/shelf/default/inset"); +strings[1521] = str->add("e/shelf/default/plain"); +strings[1522] = str->add("e/shelf/alternate/base"); +strings[1523] = str->add("e/shelf/alternate/inset"); +strings[1524] = str->add("e/shelf/alternate/plain"); +strings[1525] = str->add("e/shelf/invisible/base"); +strings[1526] = str->add("e/shelf/invisible/inset"); +strings[1527] = str->add("e/shelf/invisible/plain"); +strings[1528] = str->add("e/widgets/preview"); +strings[1529] = str->add("e/widgets/cslider"); +strings[1530] = str->add("e/widgets/spectrum"); +strings[1531] = str->add("e/widgets/color_well"); +strings[1532] = str->add("e/sys/logout"); +strings[1533] = str->add("e/sys/halt"); +strings[1534] = str->add("e/sys/reboot"); +strings[1535] = str->add("e/sys/suspend"); +strings[1536] = str->add("e/sys/hibernate"); +strings[1537] = str->add("e/widgets/deskpreview/desk"); +strings[1538] = str->add("e/widgets/fontpreview"); +strings[1539] = str->add("e/wizard/extra"); +strings[1540] = str->add("e/wizard/main"); +strings[1541] = str->add("e/toolbar/default/base"); +strings[1542] = str->add("e/widgets/slidesel"); +strings[1543] = str->add("e/modules/mixer/main"); +strings[1544] = str->add("e/modules/connman/main"); +strings[1545] = str->add("e/modules/connman/network"); +strings[1546] = str->add("e/widgets/gradpreview"); +str->del(strings[1246]); +str->del(strings[1247]); +str->del(strings[1248]); +str->del(strings[1249]); +str->del(strings[1250]); +str->del(strings[1251]); +str->del(strings[1252]); +str->del(strings[1253]); +str->del(strings[1254]); +str->del(strings[1255]); +str->del(strings[1256]); +str->del(strings[1257]); +str->del(strings[1258]); +str->del(strings[1259]); +str->del(strings[1260]); +str->del(strings[1261]); +str->del(strings[1262]); +str->del(strings[1263]); +str->del(strings[1264]); +str->del(strings[1265]); +str->del(strings[1266]); +str->del(strings[1267]); +str->del(strings[1268]); +str->del(strings[1269]); +str->del(strings[1270]); +str->del(strings[1271]); +str->del(strings[1272]); +str->del(strings[1273]); +str->del(strings[1274]); +str->del(strings[1275]); +str->del(strings[1276]); +str->del(strings[1277]); +str->del(strings[1278]); +str->del(strings[1279]); +str->del(strings[1280]); +str->del(strings[1281]); +str->del(strings[1282]); +str->del(strings[1283]); +str->del(strings[1284]); +str->del(strings[1285]); +str->del(strings[1286]); +str->del(strings[1287]); +str->del(strings[1288]); +str->del(strings[1289]); +str->del(strings[1290]); +str->del(strings[1291]); +str->del(strings[1292]); +str->del(strings[1293]); +str->del(strings[1294]); +str->del(strings[1295]); +str->del(strings[1296]); +str->del(strings[1297]); +str->del(strings[1298]); +str->del(strings[1299]); +str->del(strings[1300]); +str->del(strings[1301]); +str->del(strings[1302]); +str->del(strings[1303]); +str->del(strings[1304]); +str->del(strings[1305]); +str->del(strings[1306]); +str->del(strings[1307]); +str->del(strings[1308]); +str->del(strings[1309]); +str->del(strings[1310]); +str->del(strings[1311]); +str->del(strings[1312]); +str->del(strings[1313]); +str->del(strings[1314]); +str->del(strings[1315]); +str->del(strings[1316]); +str->del(strings[1317]); +str->del(strings[1318]); +str->del(strings[1319]); +str->del(strings[1320]); +str->del(strings[1321]); +str->del(strings[1322]); +str->del(strings[1323]); +str->del(strings[1324]); +str->del(strings[1325]); +str->del(strings[1326]); +str->del(strings[1327]); +str->del(strings[1328]); +str->del(strings[1329]); +str->del(strings[1330]); +str->del(strings[1331]); +str->del(strings[1332]); +str->del(strings[1333]); +str->del(strings[1334]); +str->del(strings[1335]); +str->del(strings[1336]); +str->del(strings[1337]); +str->del(strings[1338]); +str->del(strings[1339]); +str->del(strings[1340]); +str->del(strings[1341]); +str->del(strings[1342]); +str->del(strings[1343]); +str->del(strings[1344]); +str->del(strings[1345]); +str->del(strings[1346]); +str->del(strings[1347]); +str->del(strings[1348]); +str->del(strings[1349]); +str->del(strings[1350]); +str->del(strings[1351]); +str->del(strings[1352]); +str->del(strings[1353]); +str->del(strings[1354]); +str->del(strings[1355]); +str->del(strings[1356]); +str->del(strings[1357]); +str->del(strings[1358]); +str->del(strings[1359]); +str->del(strings[1360]); +str->del(strings[1361]); +str->del(strings[1362]); +str->del(strings[1363]); +str->del(strings[1364]); +str->del(strings[1365]); +str->del(strings[1366]); +str->del(strings[1367]); +str->del(strings[1368]); +str->del(strings[1369]); +str->del(strings[1370]); +str->del(strings[1371]); +str->del(strings[1372]); +str->del(strings[1373]); +str->del(strings[1374]); +str->del(strings[1375]); +str->del(strings[1376]); +str->del(strings[1377]); +str->del(strings[1378]); +str->del(strings[1379]); +str->del(strings[1380]); +str->del(strings[1381]); +str->del(strings[1382]); +str->del(strings[1383]); +str->del(strings[1384]); +str->del(strings[1385]); +str->del(strings[1386]); +str->del(strings[1387]); +str->del(strings[1388]); +str->del(strings[1389]); +str->del(strings[1390]); +str->del(strings[1391]); +str->del(strings[1392]); +str->del(strings[1393]); +str->del(strings[1394]); +str->del(strings[1395]); +str->del(strings[1396]); +str->del(strings[1397]); +str->del(strings[1398]); +str->del(strings[1399]); +str->del(strings[1400]); +str->del(strings[1401]); +str->del(strings[1402]); +str->del(strings[1403]); +str->del(strings[1404]); +str->del(strings[1405]); +str->del(strings[1406]); +str->del(strings[1407]); +str->del(strings[1408]); +str->del(strings[1409]); +str->del(strings[1410]); +str->del(strings[1411]); +str->del(strings[1412]); +str->del(strings[1413]); +str->del(strings[1414]); +str->del(strings[1415]); +str->del(strings[1416]); +str->del(strings[1417]); +str->del(strings[1418]); +str->del(strings[1419]); +str->del(strings[1420]); +str->del(strings[1421]); +str->del(strings[1422]); +str->del(strings[1423]); +str->del(strings[1424]); +str->del(strings[1425]); +str->del(strings[1426]); +str->del(strings[1427]); +str->del(strings[1428]); +str->del(strings[1429]); +str->del(strings[1430]); +str->del(strings[1431]); +str->del(strings[1432]); +str->del(strings[1433]); +str->del(strings[1434]); +str->del(strings[1435]); +str->del(strings[1436]); +str->del(strings[1437]); +str->del(strings[1438]); +str->del(strings[1439]); +str->del(strings[1440]); +str->del(strings[1441]); +str->del(strings[1442]); +str->del(strings[1443]); +str->del(strings[1444]); +str->del(strings[1445]); +str->del(strings[1446]); +str->del(strings[1447]); +str->del(strings[1448]); +str->del(strings[1449]); +str->del(strings[1450]); +str->del(strings[1451]); +str->del(strings[1452]); +str->del(strings[1453]); +str->del(strings[1454]); +str->del(strings[1455]); +str->del(strings[1456]); +str->del(strings[1457]); +str->del(strings[1458]); +str->del(strings[1459]); +str->del(strings[1460]); +str->del(strings[1461]); +str->del(strings[1462]); +str->del(strings[1463]); +str->del(strings[1464]); +str->del(strings[1465]); +str->del(strings[1466]); +str->del(strings[1467]); +str->del(strings[1468]); +str->del(strings[1468]); +str->del(strings[1469]); +str->del(strings[1470]); +str->del(strings[1471]); +str->del(strings[1472]); +str->del(strings[1473]); +str->del(strings[1474]); +str->del(strings[1475]); +str->del(strings[1476]); +str->del(strings[1477]); +str->del(strings[1478]); +str->del(strings[1479]); +str->del(strings[1480]); +str->del(strings[1481]); +str->del(strings[1482]); +str->del(strings[1483]); +str->del(strings[1484]); +str->del(strings[1485]); +str->del(strings[1486]); +str->del(strings[1487]); +str->del(strings[1488]); +str->del(strings[1489]); +str->del(strings[1490]); +str->del(strings[1491]); +str->del(strings[1492]); +str->del(strings[1493]); +str->del(strings[1494]); +str->del(strings[1495]); +str->del(strings[1496]); +str->del(strings[1497]); +str->del(strings[1498]); +str->del(strings[1499]); +str->del(strings[1500]); +str->del(strings[1501]); +str->del(strings[1502]); +str->del(strings[1503]); +str->del(strings[1504]); +str->del(strings[1505]); +str->del(strings[1506]); +str->del(strings[1507]); +str->del(strings[1508]); +str->del(strings[1509]); +str->del(strings[1510]); +str->del(strings[1511]); +str->del(strings[1512]); +str->del(strings[1513]); +str->del(strings[1514]); +str->del(strings[1515]); +str->del(strings[1516]); +str->del(strings[1517]); +str->del(strings[1518]); +str->del(strings[1519]); +str->del(strings[1520]); +str->del(strings[1521]); +str->del(strings[1522]); +str->del(strings[1523]); +str->del(strings[1524]); +str->del(strings[1525]); +str->del(strings[1526]); +str->del(strings[1527]); +str->del(strings[1528]); +str->del(strings[1529]); +str->del(strings[1530]); +str->del(strings[1531]); +str->del(strings[1532]); +str->del(strings[1533]); +str->del(strings[1534]); +str->del(strings[1535]); +str->del(strings[1536]); +str->del(strings[1537]); +str->del(strings[1538]); +str->del(strings[1539]); +str->del(strings[1540]); +str->del(strings[1541]); +str->del(strings[1542]); +str->del(strings[1543]); +str->del(strings[1544]); +str->del(strings[1545]); +str->del(strings[1546]); +strings[1547] = str->add("/usr/devel/share/enlightenment/data/images/test.png"); +strings[1548] = str->add("/usr/devel/share/enlightenment/data/images/test.png//://(nil)"); +strings[1547] = str->add(strings[1547]); +str->del(strings[1547]); +strings[1549] = str->add("/usr/devel/share/enlightenment/data/images/test.jpg"); +strings[1550] = str->add("/usr/devel/share/enlightenment/data/images/test.jpg//://(nil)"); +strings[1549] = str->add(strings[1549]); +str->del(strings[1549]); +strings[1551] = str->add("/usr/devel/share/enlightenment/data/images/test.edj"); +strings[1552] = str->add("images/0"); +strings[1553] = str->add("/usr/devel/share/enlightenment/data/images/test.edj//://images/0"); +strings[1551] = str->add(strings[1551]); +strings[1552] = str->add(strings[1552]); +str->del(strings[1551]); +str->del(strings[1552]); +strings[373] = str->add(strings[373]); +strings[374] = str->add(strings[374]); +str->del(strings[373]); +str->del(strings[374]); +strings[1554] = str->add("en"); +strings[1555] = str->add("US"); +strings[1556] = str->add("UTF-8"); +strings[1554] = str->add(strings[1554]); +strings[1557] = str->add("AU"); +strings[1558] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1557]); +str->del(strings[1558]); +strings[1554] = str->add(strings[1554]); +strings[1559] = str->add("BW"); +strings[1560] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1559]); +str->del(strings[1560]); +strings[1554] = str->add(strings[1554]); +strings[1561] = str->add("CA"); +strings[1562] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1561]); +str->del(strings[1562]); +strings[1554] = str->add(strings[1554]); +strings[1563] = str->add("DK"); +strings[1564] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1563]); +str->del(strings[1564]); +strings[1554] = str->add(strings[1554]); +strings[1565] = str->add("GB"); +strings[1566] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1565]); +str->del(strings[1566]); +strings[1554] = str->add(strings[1554]); +strings[1567] = str->add("HK"); +strings[1568] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1567]); +str->del(strings[1568]); +strings[1554] = str->add(strings[1554]); +strings[1569] = str->add("IE"); +strings[1570] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1569]); +str->del(strings[1570]); +strings[1554] = str->add(strings[1554]); +strings[1571] = str->add("IN"); +str->del(strings[1554]); +str->del(strings[1571]); +strings[1554] = str->add(strings[1554]); +strings[1572] = str->add("NZ"); +strings[1573] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1572]); +str->del(strings[1573]); +strings[1554] = str->add(strings[1554]); +strings[1574] = str->add("PH"); +strings[1575] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1574]); +str->del(strings[1575]); +strings[1554] = str->add(strings[1554]); +strings[1576] = str->add("SG"); +strings[1577] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1576]); +str->del(strings[1577]); +strings[1554] = str->add(strings[1554]); +strings[1555] = str->add(strings[1555]); +strings[1578] = str->add("utf8"); +str->del(strings[1554]); +str->del(strings[1555]); +str->del(strings[1578]); +str->del(strings[1554]); +str->del(strings[1555]); +str->del(strings[1556]); +strings[1579] = str->add("en"); +strings[1580] = str->add("US"); +strings[1581] = str->add("UTF-8"); +str->del(strings[1579]); +str->del(strings[1580]); +str->del(strings[1581]); +strings[373] = str->add(strings[373]); +strings[374] = str->add(strings[374]); +str->del(strings[373]); +str->del(strings[374]); +strings[1582] = str->add("en"); +strings[1583] = str->add("US"); +strings[1584] = str->add("UTF-8"); +str->del(strings[1582]); +str->del(strings[1583]); +str->del(strings[1584]); +strings[1585] = str->add("Window : Actions"); +strings[1586] = str->add("Move"); +strings[67] = str->add(strings[67]); +strings[1587] = str->add("Resize"); +strings[69] = str->add(strings[69]); +strings[127] = str->add(strings[127]); +strings[1588] = str->add("Window Menu"); +strings[71] = str->add(strings[71]); +strings[1589] = str->add("Raise"); +strings[81] = str->add(strings[81]); +strings[1590] = str->add("Lower"); +strings[82] = str->add(strings[82]); +strings[1591] = str->add("Close"); +strings[84] = str->add(strings[84]); +strings[1592] = str->add("Kill"); +strings[86] = str->add(strings[86]); +strings[1593] = str->add("Window : State"); +strings[1594] = str->add("Sticky Mode Toggle"); +strings[89] = str->add(strings[89]); +strings[1595] = str->add("Iconic Mode Toggle"); +strings[91] = str->add(strings[91]); +strings[1596] = str->add("Fullscreen Mode Toggle"); +strings[1597] = str->add("window_fullscreen_toggle"); +strings[1598] = str->add("Maximize"); +strings[93] = str->add(strings[93]); +strings[1599] = str->add("Maximize Vertically"); +strings[93] = str->add(strings[93]); +strings[95] = str->add(strings[95]); +strings[1600] = str->add("Maximize Horizontally"); +strings[93] = str->add(strings[93]); +strings[96] = str->add(strings[96]); +strings[1601] = str->add("Maximize Fullscreen"); +strings[93] = str->add(strings[93]); +strings[1602] = str->add("fullscreen"); +strings[1603] = str->add("Maximize Mode \"Smart\""); +strings[93] = str->add(strings[93]); +strings[162] = str->add(strings[162]); +strings[1604] = str->add("Maximize Mode \"Expand\""); +strings[93] = str->add(strings[93]); +strings[163] = str->add(strings[163]); +strings[1605] = str->add("Maximize Mode \"Fill\""); +strings[93] = str->add(strings[93]); +strings[1606] = str->add("fill"); +strings[1607] = str->add("Shade Up Mode Toggle"); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[1608] = str->add("Shade Down Mode Toggle"); +strings[98] = str->add(strings[98]); +strings[1609] = str->add("down"); +strings[1610] = str->add("Shade Left Mode Toggle"); +strings[98] = str->add(strings[98]); +strings[1611] = str->add("left"); +strings[1612] = str->add("Shade Right Mode Toggle"); +strings[98] = str->add(strings[98]); +strings[1613] = str->add("right"); +strings[1614] = str->add("Shade Mode Toggle"); +strings[98] = str->add(strings[98]); +strings[1615] = str->add("Toggle Borderless State"); +strings[1616] = str->add("window_borderless_toggle"); +strings[1617] = str->add("Toggle Pinned State"); +strings[1618] = str->add("window_pinned_toggle"); +strings[1619] = str->add("Desktop"); +strings[1620] = str->add("Flip Desktop Left"); +strings[73] = str->add(strings[73]); +strings[74] = str->add(strings[74]); +strings[1621] = str->add("Flip Desktop Right"); +strings[73] = str->add(strings[73]); +strings[76] = str->add(strings[76]); +strings[1622] = str->add("Flip Desktop Up"); +strings[73] = str->add(strings[73]); +strings[78] = str->add(strings[78]); +strings[1623] = str->add("Flip Desktop Down"); +strings[73] = str->add(strings[73]); +strings[80] = str->add(strings[80]); +strings[1624] = str->add("Flip Desktop By..."); +strings[73] = str->add(strings[73]); +strings[1625] = str->add("syntax: X-offset Y-offset, example: -1 0"); +strings[1626] = str->add("Show The Desktop"); +strings[142] = str->add(strings[142]); +strings[1627] = str->add("Flip Desktop To..."); +strings[1628] = str->add("desk_flip_to"); +strings[1629] = str->add("syntax: X Y, example: 1 2"); +strings[1630] = str->add("Flip Desktop Linearly..."); +strings[99] = str->add(strings[99]); +strings[1631] = str->add("syntax: N-offset, example: -2"); +strings[1632] = str->add("Switch To Desktop 0"); +strings[103] = str->add(strings[103]); +strings[104] = str->add(strings[104]); +strings[1633] = str->add("Switch To Desktop 1"); +strings[103] = str->add(strings[103]); +strings[101] = str->add(strings[101]); +strings[1634] = str->add("Switch To Desktop 2"); +strings[103] = str->add(strings[103]); +strings[107] = str->add(strings[107]); +strings[1635] = str->add("Switch To Desktop 3"); +strings[103] = str->add(strings[103]); +strings[109] = str->add(strings[109]); +strings[1636] = str->add("Switch To Desktop 4"); +strings[103] = str->add(strings[103]); +strings[111] = str->add(strings[111]); +strings[1637] = str->add("Switch To Desktop 5"); +strings[103] = str->add(strings[103]); +strings[113] = str->add(strings[113]); +strings[1638] = str->add("Switch To Desktop 6"); +strings[103] = str->add(strings[103]); +strings[115] = str->add(strings[115]); +strings[1639] = str->add("Switch To Desktop 7"); +strings[103] = str->add(strings[103]); +strings[117] = str->add(strings[117]); +strings[1640] = str->add("Switch To Desktop 8"); +strings[103] = str->add(strings[103]); +strings[119] = str->add(strings[119]); +strings[1641] = str->add("Switch To Desktop 9"); +strings[103] = str->add(strings[103]); +strings[120] = str->add(strings[120]); +strings[1642] = str->add("Switch To Desktop 10"); +strings[103] = str->add(strings[103]); +strings[122] = str->add(strings[122]); +strings[1643] = str->add("Switch To Desktop 11"); +strings[103] = str->add(strings[103]); +strings[124] = str->add(strings[124]); +strings[1644] = str->add("Switch To Desktop..."); +strings[103] = str->add(strings[103]); +strings[1645] = str->add("syntax: N, example: 1"); +strings[1646] = str->add("Flip Desktop Left (All Screens)"); +strings[1647] = str->add("desk_flip_by_all"); +strings[74] = str->add(strings[74]); +strings[1648] = str->add("Flip Desktop Right (All Screens)"); +strings[1647] = str->add(strings[1647]); +strings[76] = str->add(strings[76]); +strings[1649] = str->add("Flip Desktop Up (All Screens)"); +strings[1647] = str->add(strings[1647]); +strings[78] = str->add(strings[78]); +strings[1650] = str->add("Flip Desktop Down (All Screens)"); +strings[1647] = str->add(strings[1647]); +strings[80] = str->add(strings[80]); +strings[1651] = str->add("Flip Desktop By... (All Screens)"); +strings[1647] = str->add(strings[1647]); +strings[1625] = str->add(strings[1625]); +strings[1652] = str->add("Flip Desktop To... (All Screens)"); +strings[1653] = str->add("desk_flip_to_all"); +strings[1629] = str->add(strings[1629]); +strings[1654] = str->add("Flip Desktop Linearly... (All Screens)"); +strings[1655] = str->add("desk_linear_flip_by_all"); +strings[1631] = str->add(strings[1631]); +strings[1656] = str->add("Switch To Desktop 0 (All Screens)"); +strings[1657] = str->add("desk_linear_flip_to_all"); +strings[104] = str->add(strings[104]); +strings[1658] = str->add("Switch To Desktop 1 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[101] = str->add(strings[101]); +strings[1659] = str->add("Switch To Desktop 2 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[107] = str->add(strings[107]); +strings[1660] = str->add("Switch To Desktop 3 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[109] = str->add(strings[109]); +strings[1661] = str->add("Switch To Desktop 4 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[111] = str->add(strings[111]); +strings[1662] = str->add("Switch To Desktop 5 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[113] = str->add(strings[113]); +strings[1663] = str->add("Switch To Desktop 6 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[115] = str->add(strings[115]); +strings[1664] = str->add("Switch To Desktop 7 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[117] = str->add(strings[117]); +strings[1665] = str->add("Switch To Desktop 8 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[119] = str->add(strings[119]); +strings[1666] = str->add("Switch To Desktop 9 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[120] = str->add(strings[120]); +strings[1667] = str->add("Switch To Desktop 10 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[122] = str->add(strings[122]); +strings[1668] = str->add("Switch To Desktop 11 (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[124] = str->add(strings[124]); +strings[1669] = str->add("Switch To Desktop... (All Screens)"); +strings[1657] = str->add(strings[1657]); +strings[1645] = str->add(strings[1645]); +strings[1670] = str->add("Screen"); +strings[1671] = str->add("Send Mouse To Screen 0"); +strings[144] = str->add(strings[144]); +strings[104] = str->add(strings[104]); +strings[1672] = str->add("Send Mouse To Screen 1"); +strings[144] = str->add(strings[144]); +strings[101] = str->add(strings[101]); +strings[1673] = str->add("Send Mouse To Screen..."); +strings[144] = str->add(strings[144]); +strings[1674] = str->add("syntax: N, example: 0"); +strings[1675] = str->add("Send Mouse Forward 1 Screen"); +strings[143] = str->add(strings[143]); +strings[101] = str->add(strings[101]); +strings[1676] = str->add("Send Mouse Back 1 Screen"); +strings[143] = str->add(strings[143]); +strings[100] = str->add(strings[100]); +strings[1677] = str->add("Send Mouse Forward/Back Screens..."); +strings[143] = str->add(strings[143]); +strings[1631] = str->add(strings[1631]); +strings[1678] = str->add("Move To..."); +strings[1679] = str->add("window_move_to"); +strings[1680] = str->add("syntax: [ ,-]X [ ,-]Y or * [ ,-]Y or [ , -]X *, example: -1 1"); +strings[1681] = str->add("Move By..."); +strings[1682] = str->add("window_move_by"); +strings[1625] = str->add(strings[1625]); +strings[1683] = str->add("Resize By..."); +strings[1684] = str->add("window_resize_by"); +strings[1685] = str->add("syntax: W H, example: 100 150"); +strings[1686] = str->add("Push in Direction..."); +strings[1687] = str->add("window_push"); +strings[1688] = str->add("syntax: direction, example: up, down, left, right"); +strings[1689] = str->add("Drag Icon..."); +strings[168] = str->add(strings[168]); +strings[1690] = str->add("Window : Moving"); +strings[1691] = str->add("To Next Desktop"); +strings[1692] = str->add("window_desk_move_by"); +strings[76] = str->add(strings[76]); +strings[1693] = str->add("To Previous Desktop"); +strings[1692] = str->add(strings[1692]); +strings[74] = str->add(strings[74]); +strings[1694] = str->add("By Desktop #..."); +strings[1692] = str->add(strings[1692]); +strings[1695] = str->add("syntax: X-offset Y-offset, example: -2 2"); +strings[1696] = str->add("To Desktop..."); +strings[1697] = str->add("window_desk_move_to"); +strings[1698] = str->add("syntax: X Y, example: 0 1"); +strings[1699] = str->add("Show Main Menu"); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[1700] = str->add("Show Favorites Menu"); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[1701] = str->add("Show All Applications Menu"); +strings[65] = str->add(strings[65]); +strings[1702] = str->add("all"); +strings[1703] = str->add("Show Clients Menu"); +strings[65] = str->add(strings[65]); +strings[68] = str->add(strings[68]); +strings[1704] = str->add("Show Menu..."); +strings[65] = str->add(strings[65]); +strings[1705] = str->add("syntax: MenuName, example: MyMenu"); +strings[1706] = str->add("Launch"); +strings[1707] = str->add("Defined Command"); +strings[129] = str->add(strings[129]); +strings[1708] = str->add("syntax: CommandName, example: /usr/bin/xmms"); +strings[1709] = str->add("Application"); +strings[1710] = str->add("app"); +strings[1711] = str->add("syntax: , example:"); +strings[1712] = str->add("Enlightenment"); +strings[1713] = str->add("Restart"); +strings[135] = str->add(strings[135]); +strings[1714] = str->add("Exit"); +strings[1715] = str->add("exit"); +strings[1716] = str->add("Log Out"); +strings[137] = str->add(strings[137]); +strings[1717] = str->add("Exit Immediately"); +strings[1718] = str->add("exit_now"); +strings[1719] = str->add("Shut Down Immediately"); +strings[1720] = str->add("halt_now"); +strings[1721] = str->add("System"); +strings[1722] = str->add("Shut Down"); +strings[1723] = str->add("halt"); +strings[1724] = str->add("Reboot"); +strings[1725] = str->add("reboot"); +strings[1726] = str->add("Suspend"); +strings[1727] = str->add("suspend"); +strings[1728] = str->add("Suspend to Disk"); +strings[1729] = str->add("hibernate"); +strings[1730] = str->add("Desktop Lock"); +strings[140] = str->add(strings[140]); +strings[1731] = str->add("Cleanup Windows"); +strings[1732] = str->add("cleanup_windows"); +strings[1733] = str->add("Generic : Actions"); +strings[1734] = str->add("Delayed Action"); +strings[1735] = str->add("delayed_action"); +strings[1736] = str->add("[0.0 exec xterm] [0.3 exec xev]"); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[67] = str->add(strings[67]); +strings[65] = str->add(strings[65]); +strings[68] = str->add(strings[68]); +strings[69] = str->add(strings[69]); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[71] = str->add(strings[71]); +strings[72] = str->add(strings[72]); +strings[73] = str->add(strings[73]); +strings[74] = str->add(strings[74]); +strings[75] = str->add(strings[75]); +strings[73] = str->add(strings[73]); +strings[76] = str->add(strings[76]); +strings[77] = str->add(strings[77]); +strings[73] = str->add(strings[73]); +strings[78] = str->add(strings[78]); +strings[79] = str->add(strings[79]); +strings[73] = str->add(strings[73]); +strings[80] = str->add(strings[80]); +strings[77] = str->add(strings[77]); +strings[81] = str->add(strings[81]); +strings[79] = str->add(strings[79]); +strings[82] = str->add(strings[82]); +strings[83] = str->add(strings[83]); +strings[84] = str->add(strings[84]); +strings[85] = str->add(strings[85]); +strings[86] = str->add(strings[86]); +strings[87] = str->add(strings[87]); +strings[71] = str->add(strings[71]); +strings[88] = str->add(strings[88]); +strings[89] = str->add(strings[89]); +strings[90] = str->add(strings[90]); +strings[91] = str->add(strings[91]); +strings[92] = str->add(strings[92]); +strings[93] = str->add(strings[93]); +strings[94] = str->add(strings[94]); +strings[93] = str->add(strings[93]); +strings[95] = str->add(strings[95]); +strings[94] = str->add(strings[94]); +strings[93] = str->add(strings[93]); +strings[96] = str->add(strings[96]); +strings[97] = str->add(strings[97]); +strings[98] = str->add(strings[98]); +strings[72] = str->add(strings[72]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[75] = str->add(strings[75]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[102] = str->add(strings[102]); +strings[103] = str->add(strings[103]); +strings[104] = str->add(strings[104]); +strings[105] = str->add(strings[105]); +strings[103] = str->add(strings[103]); +strings[101] = str->add(strings[101]); +strings[106] = str->add(strings[106]); +strings[103] = str->add(strings[103]); +strings[107] = str->add(strings[107]); +strings[108] = str->add(strings[108]); +strings[103] = str->add(strings[103]); +strings[109] = str->add(strings[109]); +strings[110] = str->add(strings[110]); +strings[103] = str->add(strings[103]); +strings[111] = str->add(strings[111]); +strings[112] = str->add(strings[112]); +strings[103] = str->add(strings[103]); +strings[113] = str->add(strings[113]); +strings[114] = str->add(strings[114]); +strings[103] = str->add(strings[103]); +strings[115] = str->add(strings[115]); +strings[116] = str->add(strings[116]); +strings[103] = str->add(strings[103]); +strings[117] = str->add(strings[117]); +strings[118] = str->add(strings[118]); +strings[103] = str->add(strings[103]); +strings[119] = str->add(strings[119]); +strings[94] = str->add(strings[94]); +strings[103] = str->add(strings[103]); +strings[120] = str->add(strings[120]); +strings[121] = str->add(strings[121]); +strings[103] = str->add(strings[103]); +strings[122] = str->add(strings[122]); +strings[123] = str->add(strings[123]); +strings[103] = str->add(strings[103]); +strings[124] = str->add(strings[124]); +strings[125] = str->add(strings[125]); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[126] = str->add(strings[126]); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[127] = str->add(strings[127]); +strings[65] = str->add(strings[65]); +strings[66] = str->add(strings[66]); +strings[127] = str->add(strings[127]); +strings[65] = str->add(strings[65]); +strings[68] = str->add(strings[68]); +strings[127] = str->add(strings[127]); +strings[65] = str->add(strings[65]); +strings[70] = str->add(strings[70]); +strings[128] = str->add(strings[128]); +strings[129] = str->add(strings[129]); +strings[130] = str->add(strings[130]); +strings[131] = str->add(strings[131]); +strings[49] = str->add(strings[49]); +strings[132] = str->add(strings[132]); +strings[131] = str->add(strings[131]); +strings[49] = str->add(strings[49]); +strings[133] = str->add(strings[133]); +strings[134] = str->add(strings[134]); +strings[135] = str->add(strings[135]); +strings[136] = str->add(strings[136]); +strings[137] = str->add(strings[137]); +strings[138] = str->add(strings[138]); +strings[50] = str->add(strings[50]); +strings[139] = str->add(strings[139]); +strings[140] = str->add(strings[140]); +strings[141] = str->add(strings[141]); +strings[142] = str->add(strings[142]); +strings[72] = str->add(strings[72]); +strings[143] = str->add(strings[143]); +strings[100] = str->add(strings[100]); +strings[75] = str->add(strings[75]); +strings[143] = str->add(strings[143]); +strings[101] = str->add(strings[101]); +strings[102] = str->add(strings[102]); +strings[144] = str->add(strings[144]); +strings[104] = str->add(strings[104]); +strings[105] = str->add(strings[105]); +strings[144] = str->add(strings[144]); +strings[101] = str->add(strings[101]); +strings[106] = str->add(strings[106]); +strings[144] = str->add(strings[144]); +strings[107] = str->add(strings[107]); +strings[108] = str->add(strings[108]); +strings[144] = str->add(strings[144]); +strings[109] = str->add(strings[109]); +strings[145] = str->add(strings[145]); +strings[146] = str->add(strings[146]); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[148] = str->add(strings[148]); +strings[146] = str->add(strings[146]); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[149] = str->add(strings[149]); +strings[146] = str->add(strings[146]); +strings[150] = str->add(strings[150]); +strings[151] = str->add(strings[151]); +strings[152] = str->add(strings[152]); +strings[146] = str->add(strings[146]); +strings[150] = str->add(strings[150]); +strings[153] = str->add(strings[153]); +strings[154] = str->add(strings[154]); +strings[146] = str->add(strings[146]); +strings[71] = str->add(strings[71]); +strings[155] = str->add(strings[155]); +strings[156] = str->add(strings[156]); +strings[71] = str->add(strings[71]); +strings[157] = str->add(strings[157]); +strings[158] = str->add(strings[158]); +strings[84] = str->add(strings[84]); +strings[154] = str->add(strings[154]); +strings[158] = str->add(strings[158]); +strings[86] = str->add(strings[86]); +strings[159] = str->add(strings[159]); +strings[160] = str->add(strings[160]); +strings[93] = str->add(strings[93]); +strings[161] = str->add(strings[161]); +strings[160] = str->add(strings[160]); +strings[93] = str->add(strings[93]); +strings[162] = str->add(strings[162]); +strings[154] = str->add(strings[154]); +strings[160] = str->add(strings[160]); +strings[93] = str->add(strings[93]); +strings[163] = str->add(strings[163]); +strings[155] = str->add(strings[155]); +strings[164] = str->add(strings[164]); +strings[91] = str->add(strings[91]); +strings[155] = str->add(strings[155]); +strings[165] = str->add(strings[165]); +strings[98] = str->add(strings[98]); +strings[147] = str->add(strings[147]); +strings[155] = str->add(strings[155]); +strings[166] = str->add(strings[166]); +strings[82] = str->add(strings[82]); +strings[167] = str->add(strings[167]); +strings[156] = str->add(strings[156]); +strings[168] = str->add(strings[168]); +strings[167] = str->add(strings[167]); +strings[146] = str->add(strings[146]); +strings[67] = str->add(strings[67]); +strings[169] = str->add(strings[169]); +strings[146] = str->add(strings[146]); +strings[67] = str->add(strings[67]); +strings[170] = str->add(strings[170]); +strings[167] = str->add(strings[167]); +strings[171] = str->add(strings[171]); +strings[69] = str->add(strings[69]); +strings[172] = str->add(strings[172]); +strings[1737] = str->add("mouse,in"); +strings[171] = str->add(strings[171]); +strings[1738] = str->add("pointer_resize_push"); +strings[1739] = str->add("resize_tl"); +strings[1740] = str->add("mouse,out"); +strings[171] = str->add(strings[171]); +strings[1741] = str->add("pointer_resize_pop"); +strings[1739] = str->add(strings[1739]); +strings[167] = str->add(strings[167]); +strings[173] = str->add(strings[173]); +strings[69] = str->add(strings[69]); +strings[174] = str->add(strings[174]); +strings[1737] = str->add(strings[1737]); +strings[173] = str->add(strings[173]); +strings[1738] = str->add(strings[1738]); +strings[1742] = str->add("resize_t"); +strings[1740] = str->add(strings[1740]); +strings[173] = str->add(strings[173]); +strings[1741] = str->add(strings[1741]); +strings[1742] = str->add(strings[1742]); +strings[167] = str->add(strings[167]); +strings[175] = str->add(strings[175]); +strings[69] = str->add(strings[69]); +strings[176] = str->add(strings[176]); +strings[1737] = str->add(strings[1737]); +strings[175] = str->add(strings[175]); +strings[1738] = str->add(strings[1738]); +strings[1743] = str->add("resize_tr"); +strings[1740] = str->add(strings[1740]); +strings[175] = str->add(strings[175]); +strings[1741] = str->add(strings[1741]); +strings[1743] = str->add(strings[1743]); +strings[167] = str->add(strings[167]); +strings[177] = str->add(strings[177]); +strings[69] = str->add(strings[69]); +strings[97] = str->add(strings[97]); +strings[1737] = str->add(strings[1737]); +strings[177] = str->add(strings[177]); +strings[1738] = str->add(strings[1738]); +strings[1744] = str->add("resize_r"); +strings[1740] = str->add(strings[1740]); +strings[177] = str->add(strings[177]); +strings[1741] = str->add(strings[1741]); +strings[1744] = str->add(strings[1744]); +strings[167] = str->add(strings[167]); +strings[178] = str->add(strings[178]); +strings[69] = str->add(strings[69]); +strings[179] = str->add(strings[179]); +strings[1737] = str->add(strings[1737]); +strings[178] = str->add(strings[178]); +strings[1738] = str->add(strings[1738]); +strings[1745] = str->add("resize_br"); +strings[1740] = str->add(strings[1740]); +strings[178] = str->add(strings[178]); +strings[1741] = str->add(strings[1741]); +strings[1745] = str->add(strings[1745]); +strings[167] = str->add(strings[167]); +strings[180] = str->add(strings[180]); +strings[69] = str->add(strings[69]); +strings[181] = str->add(strings[181]); +strings[1737] = str->add(strings[1737]); +strings[180] = str->add(strings[180]); +strings[1738] = str->add(strings[1738]); +strings[1746] = str->add("resize_b"); +strings[1740] = str->add(strings[1740]); +strings[180] = str->add(strings[180]); +strings[1741] = str->add(strings[1741]); +strings[1746] = str->add(strings[1746]); +strings[167] = str->add(strings[167]); +strings[182] = str->add(strings[182]); +strings[69] = str->add(strings[69]); +strings[183] = str->add(strings[183]); +strings[1737] = str->add(strings[1737]); +strings[182] = str->add(strings[182]); +strings[1738] = str->add(strings[1738]); +strings[1747] = str->add("resize_bl"); +strings[1740] = str->add(strings[1740]); +strings[182] = str->add(strings[182]); +strings[1741] = str->add(strings[1741]); +strings[1747] = str->add(strings[1747]); +strings[167] = str->add(strings[167]); +strings[184] = str->add(strings[184]); +strings[69] = str->add(strings[69]); +strings[139] = str->add(strings[139]); +strings[1737] = str->add(strings[1737]); +strings[184] = str->add(strings[184]); +strings[1738] = str->add(strings[1738]); +strings[1748] = str->add("resize_l"); +strings[1740] = str->add(strings[1740]); +strings[184] = str->add(strings[184]); +strings[1741] = str->add(strings[1741]); +strings[1748] = str->add(strings[1748]); +strings[169] = str->add(strings[169]); +strings[185] = str->add(strings[185]); +strings[69] = str->add(strings[69]); +strings[170] = str->add(strings[170]); +strings[186] = str->add(strings[186]); +strings[185] = str->add(strings[185]); +strings[67] = str->add(strings[67]); +strings[187] = str->add(strings[187]); +strings[185] = str->add(strings[185]); +strings[67] = str->add(strings[67]); +strings[170] = str->add(strings[170]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[101] = str->add(strings[101]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[99] = str->add(strings[99]); +strings[100] = str->add(strings[100]); +strings[1749] = str->add("Set As Background"); +strings[1750] = str->add("enlightenment/background"); +strings[7] = str->add(strings[7]); +strings[61] = str->add(strings[61]); +strings[1751] = str->add("resize"); +strings[1752] = str->add("show"); +strings[1753] = str->add("base/theme/pointer"); +str->del(strings[1751]); +str->del(strings[1752]); +strings[64] = str->add(strings[64]); +strings[1754] = str->add("e/pointer/enlightenment/default/mono"); +strings[1754] = str->add(strings[1754]); +strings[1755] = str->add("load"); +strings[64] = str->add(strings[64]); +strings[1756] = str->add("images/41"); +strings[1757] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/41"); +strings[64] = str->add(strings[64]); +strings[1756] = str->add(strings[1756]); +strings[61] = str->add(strings[61]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[1758] = str->add("Container 0"); +strings[1759] = str->add("Zone 0"); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[1760] = str->add("Desktop 0, 0"); +strings[1761] = str->add("Desktop 0, 1"); +strings[1762] = str->add("Desktop 1, 0"); +strings[1763] = str->add("Desktop 1, 1"); +strings[1764] = str->add("Desktop 2, 0"); +strings[1765] = str->add("Desktop 2, 1"); +strings[1766] = str->add("Desktop 3, 0"); +strings[1767] = str->add("Desktop 3, 1"); +strings[1768] = str->add("Desktop 4, 0"); +strings[1769] = str->add("Desktop 4, 1"); +strings[1770] = str->add("edje_cc"); +strings[1771] = str->add("logo_shad.png"); +strings[1772] = str->add("shad.png"); +strings[1773] = str->add("tex.png"); +strings[1774] = str->add("ref.png"); +strings[1775] = str->add("bar_l.png"); +strings[1776] = str->add("bar_r.png"); +strings[1777] = str->add("bar_l_sh.png"); +strings[1778] = str->add("bar_r_sh.png"); +strings[1779] = str->add("sm_loop_eintro_121.png"); +strings[1780] = str->add("sm_loop_eintro_123.png"); +strings[1781] = str->add("sm_loop_eintro_125.png"); +strings[1782] = str->add("sm_loop_eintro_127.png"); +strings[1783] = str->add("sm_loop_eintro_129.png"); +strings[1784] = str->add("sm_loop_eintro_131.png"); +strings[1785] = str->add("sm_loop_eintro_133.png"); +strings[1786] = str->add("sm_loop_eintro_135.png"); +strings[1787] = str->add("sm_loop_eintro_137.png"); +strings[1788] = str->add("sm_loop_eintro_139.png"); +strings[1789] = str->add("sm_loop_eintro_141.png"); +strings[1790] = str->add("sm_loop_eintro_143.png"); +strings[1791] = str->add("sm_loop_eintro_145.png"); +strings[1792] = str->add("sm_loop_eintro_147.png"); +strings[1793] = str->add("sm_loop_eintro_149.png"); +strings[1794] = str->add("sm_loop_eintro_151.png"); +strings[1795] = str->add("sm_loop_eintro_153.png"); +strings[1796] = str->add("sm_loop_eintro_155.png"); +strings[1797] = str->add("sm_loop_eintro_157.png"); +strings[1798] = str->add("sm_loop_eintro_159.png"); +strings[1799] = str->add("sm_loop_eintro_161.png"); +strings[1800] = str->add("sm_loop_eintro_163.png"); +strings[1801] = str->add("sm_loop_eintro_165.png"); +strings[1802] = str->add("sm_loop_eintro_167.png"); +strings[1803] = str->add("sm_loop_eintro_169.png"); +strings[1804] = str->add("sm_loop_eintro_171.png"); +strings[1805] = str->add("sm_loop_eintro_173.png"); +strings[1806] = str->add("sm_loop_eintro_175.png"); +strings[1807] = str->add("sm_loop_eintro_177.png"); +strings[1808] = str->add("sm_loop_eintro_179.png"); +strings[1809] = str->add("sm_loop_eintro_181.png"); +strings[1810] = str->add("sm_loop_eintro_183.png"); +strings[1811] = str->add("sm_loop_eintro_185.png"); +strings[1812] = str->add("sm_loop_eintro_187.png"); +strings[1813] = str->add("sm_loop_eintro_189.png"); +strings[1814] = str->add("sm_loop_eintro_191.png"); +strings[1815] = str->add("sm_loop_eintro_193.png"); +strings[1816] = str->add("sm_loop_eintro_195.png"); +strings[1817] = str->add("sm_loop_eintro_197.png"); +strings[1818] = str->add("sm_loop_eintro_199.png"); +strings[1819] = str->add("sm_loop_eintro_201.png"); +strings[1820] = str->add("sm_loop_eintro_203.png"); +strings[1821] = str->add("sm_loop_eintro_205.png"); +strings[1822] = str->add("sm_loop_eintro_207.png"); +strings[1823] = str->add("sm_loop_eintro_209.png"); +strings[1824] = str->add("sm_loop_eintro_211.png"); +strings[1825] = str->add("sm_loop_eintro_213.png"); +strings[1826] = str->add("sm_loop_eintro_215.png"); +strings[1827] = str->add("sm_loop_eintro_217.png"); +strings[1828] = str->add("sm_loop_eintro_219.png"); +strings[1829] = str->add("sm_loop_eintro_221.png"); +strings[1830] = str->add("sm_loop_eintro_223.png"); +strings[1831] = str->add("sm_loop_eintro_225.png"); +strings[1832] = str->add("sm_loop_eintro_227.png"); +strings[1833] = str->add("sm_loop_eintro_229.png"); +strings[1834] = str->add("sm_loop_eintro_231.png"); +strings[1835] = str->add("sm_loop_eintro_233.png"); +strings[1836] = str->add("sm_loop_eintro_235.png"); +strings[1837] = str->add("sm_loop_eintro_237.png"); +strings[1838] = str->add("sm_loop_eintro_239.png"); +strings[1839] = str->add("e/desktop/background"); +strings[7] = str->add(strings[7]); +strings[1839] = str->add(strings[1839]); +str->del(strings[1839]); +strings[7] = str->add(strings[7]); +strings[1839] = str->add(strings[1839]); +strings[1840] = str->add("ref1_1"); +strings[1841] = str->add("show"); +strings[1842] = str->add(""); +strings[1843] = str->add("default2"); +strings[1844] = str->add("ref1_2"); +strings[61] = str->add(strings[61]); +strings[1845] = str->add("ref2_1"); +strings[1841] = str->add(strings[1841]); +strings[1842] = str->add(strings[1842]); +strings[1843] = str->add(strings[1843]); +strings[1846] = str->add("ref2_2"); +strings[61] = str->add(strings[61]); +strings[1847] = str->add("ref3_1"); +strings[1841] = str->add(strings[1841]); +strings[1842] = str->add(strings[1842]); +strings[1843] = str->add(strings[1843]); +strings[1848] = str->add("ref3_2"); +strings[61] = str->add(strings[61]); +strings[1849] = str->add("ref4_1"); +strings[1841] = str->add(strings[1841]); +strings[1842] = str->add(strings[1842]); +strings[1843] = str->add(strings[1843]); +strings[1850] = str->add("ref4_2"); +strings[61] = str->add(strings[61]); +strings[1851] = str->add("logo_animate"); +strings[1841] = str->add(strings[1841]); +strings[1842] = str->add(strings[1842]); +strings[61] = str->add(strings[61]); +strings[1852] = str->add("background_image"); +strings[61] = str->add(strings[61]); +strings[1853] = str->add("shad"); +strings[61] = str->add(strings[61]); +strings[1854] = str->add("logo_shad"); +strings[61] = str->add(strings[61]); +strings[1855] = str->add("logo"); +strings[61] = str->add(strings[61]); +strings[1856] = str->add("bar_l_sh"); +strings[61] = str->add(strings[61]); +strings[1857] = str->add("bar_r_sh"); +strings[61] = str->add(strings[61]); +strings[1858] = str->add("bar_l1"); +strings[61] = str->add(strings[61]); +strings[1843] = str->add(strings[1843]); +strings[1859] = str->add("bar_l2"); +strings[61] = str->add(strings[61]); +strings[1843] = str->add(strings[1843]); +strings[1860] = str->add("bar_r1"); +strings[61] = str->add(strings[61]); +strings[1843] = str->add(strings[1843]); +strings[1861] = str->add("bar_r2"); +strings[61] = str->add(strings[61]); +strings[1843] = str->add(strings[1843]); +strings[1862] = str->add("bar_l"); +strings[61] = str->add(strings[61]); +strings[1863] = str->add("bar_r"); +strings[61] = str->add(strings[61]); +strings[1839] = str->add(strings[1839]); +strings[1755] = str->add(strings[1755]); +strings[1864] = str->add("resize"); +strings[1841] = str->add(strings[1841]); +strings[7] = str->add(strings[7]); +strings[1865] = str->add("images/2"); +strings[1866] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/2"); +strings[7] = str->add(strings[7]); +strings[1865] = str->add(strings[1865]); +strings[7] = str->add(strings[7]); +strings[1867] = str->add("images/1"); +strings[1868] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/1"); +strings[7] = str->add(strings[7]); +strings[1867] = str->add(strings[1867]); +strings[7] = str->add(strings[7]); +strings[1869] = str->add("images/67"); +strings[1870] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/67"); +strings[7] = str->add(strings[7]); +strings[1869] = str->add(strings[1869]); +strings[7] = str->add(strings[7]); +strings[1552] = str->add(strings[1552]); +strings[1871] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/0"); +strings[7] = str->add(strings[7]); +strings[1552] = str->add(strings[1552]); +strings[7] = str->add(strings[7]); +strings[1872] = str->add("images/4"); +strings[1873] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/4"); +strings[7] = str->add(strings[7]); +strings[1872] = str->add(strings[1872]); +strings[7] = str->add(strings[7]); +strings[1874] = str->add("images/6"); +strings[1875] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/6"); +strings[7] = str->add(strings[7]); +strings[1874] = str->add(strings[1874]); +strings[7] = str->add(strings[7]); +strings[1876] = str->add("images/5"); +strings[1877] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/5"); +strings[7] = str->add(strings[7]); +strings[1876] = str->add(strings[1876]); +strings[7] = str->add(strings[7]); +strings[1878] = str->add("images/7"); +strings[1879] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/7"); +strings[7] = str->add(strings[7]); +strings[1878] = str->add(strings[1878]); +strings[7] = str->add(strings[7]); +strings[1880] = str->add("images/3"); +strings[1881] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/3"); +strings[7] = str->add(strings[7]); +strings[1880] = str->add(strings[1880]); +strings[7] = str->add(strings[7]); +strings[1880] = str->add(strings[1880]); +strings[7] = str->add(strings[7]); +strings[1880] = str->add(strings[1880]); +strings[7] = str->add(strings[7]); +strings[1880] = str->add(strings[1880]); +strings[1882] = str->add("/home/cedric/.e/e/applications/startup/.order"); +str->del(strings[1882]); +strings[1883] = str->add("/usr/devel/lib/enlightenment/modules/start/linux-gnu-x86_64/module.so"); +strings[1883] = str->add(strings[1883]); +strings[59] = str->add(strings[59]); +strings[1884] = str->add("/usr/devel/lib/enlightenment/modules/start"); +str->del(strings[1883]); +strings[1885] = str->add("/usr/devel/lib/enlightenment/modules/ibar/linux-gnu-x86_64/module.so"); +strings[1885] = str->add(strings[1885]); +strings[58] = str->add(strings[58]); +strings[1886] = str->add("/usr/devel/lib/enlightenment/modules/ibar"); +str->del(strings[1885]); +strings[104] = str->add(strings[104]); +strings[61] = str->add(strings[61]); +strings[339] = str->add(strings[339]); +strings[339] = str->add(strings[339]); +strings[61] = str->add(strings[61]); +strings[1887] = str->add("/usr/devel/lib/enlightenment/modules/ibox/linux-gnu-x86_64/module.so"); +strings[1887] = str->add(strings[1887]); +strings[57] = str->add(strings[57]); +strings[1888] = str->add("/usr/devel/lib/enlightenment/modules/ibox"); +str->del(strings[1887]); +strings[104] = str->add(strings[104]); +strings[338] = str->add(strings[338]); +strings[1889] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/linux-gnu-x86_64/module.so"); +strings[1889] = str->add(strings[1889]); +strings[56] = str->add(strings[56]); +strings[1890] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow"); +str->del(strings[1889]); +strings[1891] = str->add("appearance"); +strings[1892] = str->add("Appearance"); +strings[1893] = str->add("enlightenment/appearance"); +strings[56] = str->add(strings[56]); +strings[1894] = str->add("Dropshadow"); +strings[1895] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/e-module-dropshadow.edj"); +strings[1896] = str->add("/usr/devel/lib/enlightenment/modules/clock/linux-gnu-x86_64/module.so"); +strings[1896] = str->add(strings[1896]); +strings[55] = str->add(strings[55]); +strings[1897] = str->add("/usr/devel/lib/enlightenment/modules/clock"); +str->del(strings[1896]); +strings[1898] = str->add("/usr/devel/lib/enlightenment/modules/battery/linux-gnu-x86_64/module.so"); +strings[1898] = str->add(strings[1898]); +strings[54] = str->add(strings[54]); +strings[1899] = str->add("/usr/devel/lib/enlightenment/modules/battery"); +str->del(strings[1898]); +strings[1900] = str->add("advanced"); +strings[1901] = str->add("Advanced"); +strings[1902] = str->add("enlightenment/advanced"); +strings[54] = str->add(strings[54]); +strings[1903] = str->add("Battery Meter"); +strings[1904] = str->add("/usr/devel/lib/enlightenment/modules/battery/e-module-battery.edj"); +strings[1905] = str->add("/usr/devel/lib/enlightenment/modules/cpufreq/linux-gnu-x86_64/module.so"); +strings[1905] = str->add(strings[1905]); +strings[53] = str->add(strings[53]); +strings[1906] = str->add("/usr/devel/lib/enlightenment/modules/cpufreq"); +str->del(strings[1905]); +strings[1907] = str->add("/usr/devel/lib/enlightenment/modules/temperature/linux-gnu-x86_64/module.so"); +strings[1907] = str->add(strings[1907]); +strings[52] = str->add(strings[52]); +strings[1908] = str->add("/usr/devel/lib/enlightenment/modules/temperature"); +str->del(strings[1907]); +strings[340] = str->add(strings[340]); +strings[1909] = str->add("/usr/devel/lib/enlightenment/modules/pager/linux-gnu-x86_64/module.so"); +strings[1909] = str->add(strings[1909]); +strings[51] = str->add(strings[51]); +strings[1910] = str->add("/usr/devel/lib/enlightenment/modules/pager"); +str->del(strings[1909]); +strings[51] = str->add(strings[51]); +strings[1911] = str->add("Pager"); +strings[1912] = str->add("enlightenment/pager"); +strings[1911] = str->add(strings[1911]); +strings[1913] = str->add("Show Pager Popup"); +strings[1914] = str->add("pager_show"); +strings[1915] = str->add(""); +strings[1916] = str->add("Popup Desk Right"); +strings[1917] = str->add("pager_switch"); +strings[1613] = str->add(strings[1613]); +strings[1918] = str->add("Popup Desk Left"); +strings[1917] = str->add(strings[1917]); +strings[1611] = str->add(strings[1611]); +strings[1919] = str->add("Popup Desk Up"); +strings[1917] = str->add(strings[1917]); +strings[147] = str->add(strings[147]); +strings[1920] = str->add("Popup Desk Down"); +strings[1917] = str->add(strings[1917]); +strings[1609] = str->add(strings[1609]); +strings[50] = str->add(strings[50]); +strings[49] = str->add(strings[49]); +strings[48] = str->add(strings[48]); +strings[47] = str->add(strings[47]); +strings[46] = str->add(strings[46]); +strings[45] = str->add(strings[45]); +strings[44] = str->add(strings[44]); +strings[43] = str->add(strings[43]); +strings[42] = str->add(strings[42]); +strings[41] = str->add(strings[41]); +strings[40] = str->add(strings[40]); +strings[39] = str->add(strings[39]); +strings[38] = str->add(strings[38]); +strings[37] = str->add(strings[37]); +strings[36] = str->add(strings[36]); +strings[35] = str->add(strings[35]); +strings[34] = str->add(strings[34]); +strings[33] = str->add(strings[33]); +strings[32] = str->add(strings[32]); +strings[31] = str->add(strings[31]); +strings[30] = str->add(strings[30]); +strings[29] = str->add(strings[29]); +strings[28] = str->add(strings[28]); +strings[27] = str->add(strings[27]); +strings[26] = str->add(strings[26]); +strings[25] = str->add(strings[25]); +strings[24] = str->add(strings[24]); +strings[23] = str->add(strings[23]); +strings[22] = str->add(strings[22]); +strings[21] = str->add(strings[21]); +strings[20] = str->add(strings[20]); +strings[19] = str->add(strings[19]); +strings[18] = str->add(strings[18]); +strings[17] = str->add(strings[17]); +strings[16] = str->add(strings[16]); +strings[15] = str->add(strings[15]); +strings[14] = str->add(strings[14]); +strings[13] = str->add(strings[13]); +strings[12] = str->add(strings[12]); +strings[11] = str->add(strings[11]); +strings[1921] = str->add("/usr/devel/lib/enlightenment/modules/note/linux-gnu-x86_64/module.so"); +strings[1921] = str->add(strings[1921]); +strings[10] = str->add(strings[10]); +strings[1922] = str->add("/usr/devel/lib/enlightenment/modules/note"); +str->del(strings[1921]); +strings[1923] = str->add("/usr/devel/lib/enlightenment/modules/gadman/linux-gnu-x86_64/module.so"); +strings[1923] = str->add(strings[1923]); +strings[60] = str->add(strings[60]); +strings[1924] = str->add("/usr/devel/lib/enlightenment/modules/gadman"); +str->del(strings[1923]); +strings[60] = str->add(strings[60]); +strings[1925] = str->add("Gadgets"); +strings[1926] = str->add("/usr/devel/lib/enlightenment/modules/gadman/e-module-gadman.edj"); +strings[60] = str->add(strings[60]); +strings[344] = str->add(strings[344]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[1927] = str->add("base/theme/gadman"); +strings[64] = str->add(strings[64]); +strings[1928] = str->add("e/gadman/full_bg"); +str->del(strings[64]); +str->del(strings[1928]); +strings[469] = str->add(strings[469]); +strings[1929] = str->add("e/gadman/full_bg"); +strings[1929] = str->add(strings[1929]); +strings[1755] = str->add(strings[1755]); +strings[1930] = str->add("mouse,down,*"); +strings[1931] = str->add("bg"); +strings[1932] = str->add("program,stop"); +strings[1933] = str->add("hide"); +strings[1864] = str->add(strings[1864]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1934] = str->add("e/gadman/control"); +str->del(strings[64]); +str->del(strings[1934]); +strings[469] = str->add(strings[469]); +strings[1935] = str->add("e/gadman/control"); +strings[1935] = str->add(strings[1935]); +strings[1755] = str->add(strings[1755]); +strings[167] = str->add(strings[167]); +strings[1936] = str->add("overlay"); +strings[169] = str->add(strings[169]); +strings[1936] = str->add(strings[1936]); +strings[186] = str->add(strings[186]); +strings[1936] = str->add(strings[1936]); +strings[167] = str->add(strings[167]); +strings[1937] = str->add("h1"); +strings[169] = str->add(strings[169]); +strings[1937] = str->add(strings[1937]); +strings[167] = str->add(strings[167]); +strings[1938] = str->add("v2"); +strings[169] = str->add(strings[169]); +strings[1938] = str->add(strings[1938]); +strings[167] = str->add(strings[167]); +strings[1939] = str->add("h2"); +strings[169] = str->add(strings[169]); +strings[1939] = str->add(strings[1939]); +strings[167] = str->add(strings[167]); +strings[1940] = str->add("v1"); +strings[169] = str->add(strings[169]); +strings[1940] = str->add(strings[1940]); +strings[1864] = str->add(strings[1864]); +strings[469] = str->add(strings[469]); +strings[1935] = str->add(strings[1935]); +strings[1755] = str->add(strings[1755]); +strings[167] = str->add(strings[167]); +strings[1936] = str->add(strings[1936]); +strings[169] = str->add(strings[169]); +strings[1936] = str->add(strings[1936]); +strings[186] = str->add(strings[186]); +strings[1936] = str->add(strings[1936]); +strings[167] = str->add(strings[167]); +strings[1937] = str->add(strings[1937]); +strings[169] = str->add(strings[169]); +strings[1937] = str->add(strings[1937]); +strings[167] = str->add(strings[167]); +strings[1938] = str->add(strings[1938]); +strings[169] = str->add(strings[169]); +strings[1938] = str->add(strings[1938]); +strings[167] = str->add(strings[167]); +strings[1939] = str->add(strings[1939]); +strings[169] = str->add(strings[169]); +strings[1939] = str->add(strings[1939]); +strings[167] = str->add(strings[167]); +strings[1940] = str->add(strings[1940]); +strings[169] = str->add(strings[169]); +strings[1940] = str->add(strings[1940]); +strings[1864] = str->add(strings[1864]); +strings[1926] = str->add(strings[1926]); +strings[1925] = str->add(strings[1925]); +strings[1941] = str->add("Show/hide gadgets"); +strings[1942] = str->add("gadman_toggle"); +strings[1943] = str->add("g"); +strings[1942] = str->add(strings[1942]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[61] = str->add(strings[61]); +strings[335] = str->add(strings[335]); +strings[1864] = str->add(strings[1864]); +strings[1944] = str->add("base/theme/shelf"); +str->del(strings[1864]); +strings[64] = str->add(strings[64]); +strings[1945] = str->add("e/shelf/default/base"); +strings[1945] = str->add(strings[1945]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[335] = str->add(strings[335]); +strings[1946] = str->add("e.swallow.content"); +strings[1947] = str->add("size_request"); +strings[1948] = str->add("min_size_request"); +strings[64] = str->add(strings[64]); +strings[1949] = str->add("images/42"); +strings[1950] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/42"); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[1951] = str->add("e,state,orientation,top"); +strings[1952] = str->add("e"); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1951]); +str->del(strings[1952]); +strings[1953] = str->add("e,state,orientation,bottom_left"); +strings[1954] = str->add("e"); +str->del(strings[1953]); +str->del(strings[1954]); +strings[1864] = str->add(strings[1864]); +strings[1955] = str->add("base/theme/modules/start"); +strings[1956] = str->add("base/theme/modules"); +strings[64] = str->add(strings[64]); +strings[1957] = str->add("e/modules/start/main"); +strings[1957] = str->add(strings[1957]); +strings[1755] = str->add(strings[1755]); +strings[1958] = str->add("e,state,unfocused"); +strings[1959] = str->add("e"); +strings[59] = str->add(strings[59]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add("e/shelf/default/plain"); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add("e,state,orientation,bottom_left"); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[1962] = str->add("base/theme/modules/pager"); +strings[64] = str->add(strings[64]); +strings[1963] = str->add("e/modules/pager/desk"); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1760] = str->add(strings[1760]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add("images/63"); +strings[1965] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/63"); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add("images/62"); +strings[1967] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/62"); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add("images/64"); +strings[1969] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/64"); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add("images/66"); +strings[1971] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/66"); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1972] = str->add("Sans:style=Bold"); +strings[1973] = str->add("Edje-Vera-Bold"); +strings[1974] = str->add("Bitstream"); +strings[1975] = str->add("Bitstream Vera Sans"); +strings[1976] = str->add("bold"); +strings[90] = str->add(strings[90]); +strings[1977] = str->add("normal"); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add("p"); +strings[104] = str->add(strings[104]); +strings[1979] = str->add("ascii"); +strings[104] = str->add(strings[104]); +strings[1980] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraBI.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add("fcd8859"); +strings[1982] = str->add("15"); +strings[1980] = str->add(strings[1980]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add("iso8859"); +strings[101] = str->add(strings[101]); +strings[1980] = str->add(strings[1980]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1980] = str->add(strings[1980]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1980] = str->add(strings[1980]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add("medium"); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1985] = str->add("/usr/devel/share/enlightenment/data/fonts/Vera.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1985] = str->add(strings[1985]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1985] = str->add(strings[1985]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1985] = str->add(strings[1985]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1985] = str->add(strings[1985]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1986] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraBd.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1986] = str->add(strings[1986]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1986] = str->add(strings[1986]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1986] = str->add(strings[1986]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1986] = str->add(strings[1986]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1987] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraIt.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1987] = str->add(strings[1987]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1987] = str->add(strings[1987]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1987] = str->add(strings[1987]); +strings[1974] = str->add(strings[1974]); +strings[1975] = str->add(strings[1975]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1987] = str->add(strings[1987]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add("Bitstream Vera Sans Mono"); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1989] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoBI.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1989] = str->add(strings[1989]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1989] = str->add(strings[1989]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1989] = str->add(strings[1989]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1989] = str->add(strings[1989]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1990] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoBd.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1990] = str->add(strings[1990]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1990] = str->add(strings[1990]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1990] = str->add(strings[1990]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1990] = str->add(strings[1990]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1991] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoIt.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1991] = str->add(strings[1991]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1991] = str->add(strings[1991]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1991] = str->add(strings[1991]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[90] = str->add(strings[90]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1991] = str->add(strings[1991]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1992] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMono.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1992] = str->add(strings[1992]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1992] = str->add(strings[1992]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1992] = str->add(strings[1992]); +strings[1974] = str->add(strings[1974]); +strings[1988] = str->add(strings[1988]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[125] = str->add(strings[125]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1992] = str->add(strings[1992]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add("Bitstream Vera Serif"); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1994] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraSe.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1994] = str->add(strings[1994]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1994] = str->add(strings[1994]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1994] = str->add(strings[1994]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1984] = str->add(strings[1984]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1994] = str->add(strings[1994]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1979] = str->add(strings[1979]); +strings[104] = str->add(strings[104]); +strings[1995] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraSeBd.ttf"); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1981] = str->add(strings[1981]); +strings[1982] = str->add(strings[1982]); +strings[1995] = str->add(strings[1995]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[101] = str->add(strings[101]); +strings[1995] = str->add(strings[1995]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[1982] = str->add(strings[1982]); +strings[1995] = str->add(strings[1995]); +strings[1974] = str->add(strings[1974]); +strings[1993] = str->add(strings[1993]); +strings[1976] = str->add(strings[1976]); +strings[97] = str->add(strings[97]); +strings[1977] = str->add(strings[1977]); +strings[1842] = str->add(strings[1842]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[104] = str->add(strings[104]); +strings[1978] = str->add(strings[1978]); +strings[104] = str->add(strings[104]); +strings[1983] = str->add(strings[1983]); +strings[120] = str->add(strings[120]); +strings[1995] = str->add(strings[1995]); +strings[62] = str->add(strings[62]); +strings[1985] = str->add(strings[1985]); +strings[1996] = str->add("VeraBI"); +strings[1980] = str->add(strings[1980]); +strings[1997] = str->add("VeraBd"); +strings[1986] = str->add(strings[1986]); +strings[1998] = str->add("VeraIt"); +strings[1987] = str->add(strings[1987]); +strings[1999] = str->add("VeraMoBI"); +strings[1989] = str->add(strings[1989]); +strings[2000] = str->add("VeraMoBd"); +strings[1990] = str->add(strings[1990]); +strings[2001] = str->add("VeraMoIt"); +strings[1991] = str->add(strings[1991]); +strings[2002] = str->add("VeraMono"); +strings[1992] = str->add(strings[1992]); +strings[2003] = str->add("VeraSe"); +strings[1994] = str->add(strings[1994]); +strings[2004] = str->add("VeraSeBd"); +strings[1995] = str->add(strings[1995]); +strings[2005] = str->add("Vera-Bold-Italic"); +strings[2006] = str->add("Vera-Normal"); +strings[2007] = str->add("Vera-Bold"); +strings[2008] = str->add("Vera-Italic"); +strings[2009] = str->add("Vera-Mono-Bold-Italic"); +strings[2010] = str->add("Vera-Mono-Bold"); +strings[2011] = str->add("Vera-Mono-Italic"); +strings[2012] = str->add("Vera-Mono"); +strings[2013] = str->add("Vera-Serif"); +strings[2014] = str->add("Vera-Serif-Bold"); +strings[62] = str->add(strings[62]); +str->del(strings[1972]); +str->del(strings[1973]); +strings[2015] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Bold.ttf"); +strings[2016] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Bold-Oblique.ttf"); +strings[2017] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-ExtraLight.ttf"); +strings[2018] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans.ttf"); +strings[2019] = str->add("/var/lib/defoma/fontconfig.d/N/NimbusSanL-Bold.pfb"); +strings[2020] = str->add("/var/lib/defoma/fontconfig.d/K/KochiGothic-Regular.ttf"); +strings[2021] = str->add("/var/lib/defoma/fontconfig.d/D/Dotum-Regular.ttf"); +strings[2022] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSans-Bold.ttf"); +strings[2023] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSans-Medium.ttf"); +strings[2024] = str->add("/var/lib/defoma/fontconfig.d/L/Loma-Bold.ttf"); +strings[2025] = str->add("/var/lib/defoma/fontconfig.d/O/Ouhod.ttf"); +strings[2026] = str->add("/var/lib/defoma/fontconfig.d/N/Norasi-Bold.ttf"); +strings[2027] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Mono-Bold.ttf"); +strings[2028] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Serif-Bold.ttf"); +strings[2029] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSerif-Bold.ttf"); +strings[2030] = str->add("/var/lib/defoma/fontconfig.d/F/FreeMono-Bold.ttf"); +strings[2031] = str->add("/usr/share/fonts/truetype/ttf-gujarati-fonts/padmaa-Bold.1.1.ttf"); +strings[2032] = str->add("/var/lib/defoma/fontconfig.d/B/Batang-Bold.ttf"); +strings[2033] = str->add("/var/lib/defoma/fontconfig.d/K/Kedage.ttf"); +strings[2034] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Bold.ttf"); +strings[2035] = str->add("/var/lib/defoma/fontconfig.d/P/Purisa.ttf"); +strings[2036] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSerif-Medium.ttf"); +strings[2037] = str->add("/var/lib/defoma/fontconfig.d/P/Pothana2000.ttf"); +strings[2038] = str->add("/var/lib/defoma/fontconfig.d/F/FreeMono-Medium.ttf"); +strings[2039] = str->add("/usr/share/fonts/truetype/ttf-devanagari-fonts/chandas1-2.ttf"); +strings[2040] = str->add("/usr/share/fonts/truetype/openoffice/opens___.ttf"); +strings[2041] = str->add("/var/lib/defoma/fontconfig.d/G/Gentium-Italic.ttf"); +strings[2042] = str->add("/var/lib/defoma/fontconfig.d/L/Lohit-Kannada.ttf"); +strings[2043] = str->add("/var/lib/defoma/fontconfig.d/L/Lohit-Oriya.ttf"); +strings[2044] = str->add("/var/lib/defoma/fontconfig.d/T/TAMuKadambri-Regular.ttf"); +strings[2045] = str->add("/var/lib/defoma/fontconfig.d/T/TAMuKalyani-Regular.ttf"); +strings[2046] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuComic-Normal.ttf"); +strings[2047] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Regular.ttf"); +strings[2048] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_gu.ttf"); +strings[2049] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf"); +strings[2050] = str->add("/var/lib/defoma/fontconfig.d/A/AnjaliOldLipi.ttf"); +strings[2051] = str->add("/usr/share/fonts/truetype/arphic/ukai.ttf"); +strings[2052] = str->add("/usr/share/fonts/truetype/arphic/uming.ttf"); +strings[2053] = str->add("/var/lib/defoma/fontconfig.d/K/KochiMincho-Regular.ttf"); +strings[2054] = str->add("/usr/share/fonts/truetype/ttf-malayalam-fonts/Rachana_w01.ttf"); +strings[2055] = str->add("/usr/share/fonts/truetype/unfonts/UnBatang.ttf"); +strings[2056] = str->add("/var/lib/defoma/fontconfig.d/S/StandardSymL.pfb"); +strings[2057] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Italic.ttf"); +strings[379] = str->add(strings[379]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1760]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add("images/65"); +strings[2059] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/65"); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2060] = str->add("e,state,selected"); +strings[1959] = str->add(strings[1959]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1761] = str->add(strings[1761]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1761]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1762] = str->add(strings[1762]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1762]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1763] = str->add(strings[1763]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1763]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1764] = str->add(strings[1764]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1764]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1765] = str->add(strings[1765]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1765]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1766] = str->add(strings[1766]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1766]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1767] = str->add(strings[1767]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1767]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1768] = str->add(strings[1768]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1768]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[1769] = str->add(strings[1769]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1769]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[51] = str->add(strings[51]); +strings[64] = str->add(strings[64]); +strings[2061] = str->add("e/shelf/default/inset"); +strings[2061] = str->add(strings[2061]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[337] = str->add(strings[337]); +strings[64] = str->add(strings[64]); +strings[2062] = str->add("images/54"); +strings[2063] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/54"); +strings[64] = str->add(strings[64]); +strings[2062] = str->add(strings[2062]); +strings[1841] = str->add(strings[1841]); +str->del(strings[337]); +strings[337] = str->add(strings[337]); +strings[57] = str->add(strings[57]); +strings[64] = str->add(strings[64]); +strings[2061] = str->add(strings[2061]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[337] = str->add(strings[337]); +strings[64] = str->add(strings[64]); +strings[2062] = str->add(strings[2062]); +strings[1841] = str->add(strings[1841]); +str->del(strings[337]); +strings[337] = str->add(strings[337]); +strings[2064] = str->add("/home/cedric/.e/e/applications/bar/default/.order"); +strings[2065] = str->add("base/theme/modules/ibar"); +strings[64] = str->add(strings[64]); +strings[2066] = str->add("e/modules/ibar/icon"); +str->del(strings[64]); +str->del(strings[2066]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add("e/modules/ibar/icon"); +strings[2067] = str->add(strings[2067]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2068] = str->add("e/modules/ibar/icon_overlay"); +str->del(strings[64]); +str->del(strings[2068]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add("e/modules/ibar/icon_overlay"); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[2070] = str->add("/usr/devel/share/enlightenment/data/icons/xterm.png"); +strings[2071] = str->add("/usr/devel/share/enlightenment/data/icons/xterm.png//://(nil)//@/0/0.00000/64x64"); +strings[2070] = str->add(strings[2070]); +strings[2070] = str->add(strings[2070]); +strings[471] = str->add(strings[471]); +strings[471] = str->add(strings[471]); +strings[2072] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj/fonts/Edje-Vera-Bold"); +str->del(strings[471]); +strings[471] = str->add(strings[471]); +strings[469] = str->add(strings[469]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2073] = str->add("XTerm"); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[2074] = str->add("/usr/devel/share/enlightenment/data/icons/web_browser.png"); +strings[2075] = str->add("/usr/devel/share/enlightenment/data/icons/web_browser.png//://(nil)//@/0/0.00000/64x64"); +strings[2074] = str->add(strings[2074]); +strings[2074] = str->add(strings[2074]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2076] = str->add("Firefox"); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[2077] = str->add("/usr/devel/share/enlightenment/data/icons/audio_player.png"); +strings[2078] = str->add("/usr/devel/share/enlightenment/data/icons/audio_player.png//://(nil)//@/0/0.00000/64x64"); +strings[2077] = str->add(strings[2077]); +strings[2077] = str->add(strings[2077]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2079] = str->add("XMMS"); +strings[58] = str->add(strings[58]); +strings[64] = str->add(strings[64]); +strings[2061] = str->add(strings[2061]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[337] = str->add(strings[337]); +strings[64] = str->add(strings[64]); +strings[2062] = str->add(strings[2062]); +strings[1841] = str->add(strings[1841]); +str->del(strings[337]); +strings[337] = str->add(strings[337]); +strings[2080] = str->add("base/theme/modules/temperature"); +strings[64] = str->add(strings[64]); +strings[2081] = str->add("e/modules/temperature/main"); +strings[2081] = str->add(strings[2081]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[52] = str->add(strings[52]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[2082] = str->add("base/theme/modules/cpufreq"); +strings[64] = str->add(strings[64]); +strings[2083] = str->add("e/modules/cpufreq/main"); +strings[2083] = str->add(strings[2083]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[2084] = str->add("e,action,governor,next"); +strings[2085] = str->add("*"); +strings[2086] = str->add("e,action,frequency,increase"); +strings[2085] = str->add(strings[2085]); +strings[2087] = str->add("e,action,frequency,decrease"); +strings[2085] = str->add(strings[2085]); +strings[53] = str->add(strings[53]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[2088] = str->add("e,state,enabled"); +strings[1959] = str->add(strings[1959]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[2089] = str->add("base/theme/modules/battery"); +strings[64] = str->add(strings[64]); +strings[2090] = str->add("e/modules/battery/main"); +strings[2090] = str->add(strings[2090]); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[1755] = str->add(strings[1755]); +strings[54] = str->add(strings[54]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2091] = str->add("images/75"); +strings[2092] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/75"); +strings[64] = str->add(strings[64]); +strings[2091] = str->add(strings[2091]); +strings[64] = str->add(strings[64]); +strings[2093] = str->add("images/76"); +strings[2094] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/76"); +strings[64] = str->add(strings[64]); +strings[2093] = str->add(strings[2093]); +strings[64] = str->add(strings[64]); +strings[2095] = str->add("images/69"); +strings[2096] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/69"); +strings[64] = str->add(strings[64]); +strings[2095] = str->add(strings[2095]); +strings[64] = str->add(strings[64]); +strings[2097] = str->add("images/70"); +strings[2098] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/70"); +strings[64] = str->add(strings[64]); +strings[2097] = str->add(strings[2097]); +strings[64] = str->add(strings[64]); +strings[2099] = str->add("images/71"); +strings[2100] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/71"); +strings[64] = str->add(strings[64]); +strings[2099] = str->add(strings[2099]); +strings[64] = str->add(strings[64]); +strings[2101] = str->add("images/72"); +strings[2102] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/72"); +strings[64] = str->add(strings[64]); +strings[2101] = str->add(strings[2101]); +strings[64] = str->add(strings[64]); +strings[2103] = str->add("images/73"); +strings[2104] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/73"); +strings[64] = str->add(strings[64]); +strings[2103] = str->add(strings[2103]); +strings[64] = str->add(strings[64]); +strings[2105] = str->add("images/74"); +strings[2106] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/74"); +strings[64] = str->add(strings[64]); +strings[2105] = str->add(strings[2105]); +strings[64] = str->add(strings[64]); +strings[2107] = str->add("images/77"); +strings[2108] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/77"); +strings[64] = str->add(strings[64]); +strings[2107] = str->add(strings[2107]); +strings[64] = str->add(strings[64]); +strings[2109] = str->add("images/78"); +strings[2110] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/78"); +strings[64] = str->add(strings[64]); +strings[2109] = str->add(strings[2109]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[2111] = str->add("base/theme/modules/clock"); +strings[64] = str->add(strings[64]); +strings[2112] = str->add("e/modules/clock/main"); +strings[2112] = str->add(strings[2112]); +strings[1755] = str->add(strings[1755]); +strings[1841] = str->add(strings[1841]); +strings[55] = str->add(strings[55]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[341] = str->add(strings[341]); +strings[2113] = str->add("/usr/devel/lib/enlightenment/modules/note/e-module-note.edj"); +strings[2114] = str->add("modules/note/main"); +strings[2113] = str->add(strings[2113]); +strings[379] = str->add(strings[379]); +strings[2115] = str->add("module_normal"); +strings[2116] = str->add("align=left color=#000000 wrap=word"); +strings[382] = str->add(strings[382]); +strings[2114] = str->add(strings[2114]); +strings[1755] = str->add(strings[1755]); +strings[10] = str->add(strings[10]); +strings[64] = str->add(strings[64]); +strings[1960] = str->add(strings[1960]); +strings[1755] = str->add(strings[1755]); +strings[1961] = str->add(strings[1961]); +strings[1959] = str->add(strings[1959]); +str->del(strings[1755]); +strings[336] = str->add(strings[336]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +str->del(strings[336]); +strings[336] = str->add(strings[336]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +strings[1864] = str->add(strings[1864]); +str->del(strings[1755]); +str->del(strings[1755]); +str->del(strings[1864]); +strings[2117] = str->add("program,start"); +strings[1840] = str->add(strings[1840]); +strings[2117] = str->add(strings[2117]); +strings[1845] = str->add(strings[1845]); +strings[2117] = str->add(strings[2117]); +strings[1847] = str->add(strings[1847]); +strings[2117] = str->add(strings[2117]); +strings[1849] = str->add(strings[1849]); +strings[2117] = str->add(strings[2117]); +strings[1851] = str->add(strings[1851]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1864]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1864]); +str->del(strings[1755]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1755]); +strings[2117] = str->add(strings[2117]); +strings[2118] = str->add("off"); +str->del(strings[1958]); +str->del(strings[1959]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +strings[2117] = str->add(strings[2117]); +strings[2119] = str->add("on"); +str->del(strings[2060]); +str->del(strings[1959]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1841]); +strings[2120] = str->add("2.4"); +strings[2117] = str->add(strings[2117]); +strings[2121] = str->add("enabled"); +strings[1932] = str->add(strings[1932]); +strings[2121] = str->add(strings[2121]); +str->del(strings[2088]); +str->del(strings[1959]); +str->del(strings[1755]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1841]); +strings[2117] = str->add(strings[2117]); +strings[2122] = str->add("init"); +strings[1932] = str->add(strings[1932]); +strings[2122] = str->add(strings[2122]); +str->del(strings[1755]); +str->del(strings[1841]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1755]); +str->del(strings[1961]); +str->del(strings[1959]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[1864]); +str->del(strings[2117]); +str->del(strings[1840]); +str->del(strings[2117]); +str->del(strings[1845]); +str->del(strings[2117]); +str->del(strings[1847]); +str->del(strings[2117]); +str->del(strings[1849]); +str->del(strings[2117]); +str->del(strings[1851]); +str->del(strings[2117]); +str->del(strings[2118]); +str->del(strings[2117]); +str->del(strings[2119]); +str->del(strings[2117]); +str->del(strings[2121]); +str->del(strings[1932]); +str->del(strings[2121]); +str->del(strings[2117]); +str->del(strings[2122]); +str->del(strings[1932]); +str->del(strings[2122]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add("load"); +strings[1760] = str->add(strings[1760]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1760]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2124] = str->add("e,state,selected"); +strings[2125] = str->add("e"); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1761] = str->add(strings[1761]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1761]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1762] = str->add(strings[1762]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1762]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1763] = str->add(strings[1763]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1763]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1764] = str->add(strings[1764]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1764]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1765] = str->add(strings[1765]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1765]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1766] = str->add(strings[1766]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1766]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1767] = str->add(strings[1767]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1767]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1768] = str->add(strings[1768]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1768]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1769] = str->add(strings[1769]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1769]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2126] = str->add("resize"); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[64] = str->add(strings[64]); +strings[2127] = str->add("e/modules/pager/popup"); +strings[2127] = str->add(strings[2127]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1760] = str->add(strings[1760]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[2128] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/3"); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[2129] = str->add("Sans:style=Bold"); +strings[2130] = str->add("Edje-Vera-Bold"); +str->del(strings[2129]); +str->del(strings[2130]); +strings[379] = str->add(strings[379]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +strings[2131] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/5"); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[2132] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/6"); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[2126] = str->add(strings[2126]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1761]); +str->del(strings[1761]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1762]); +str->del(strings[1762]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1763]); +str->del(strings[1763]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1764]); +str->del(strings[1764]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1765]); +str->del(strings[1765]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1766]); +str->del(strings[1766]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1767]); +str->del(strings[1767]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1768]); +str->del(strings[1768]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1769]); +str->del(strings[1769]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1760] = str->add(strings[1760]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1760]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2124] = str->add(strings[2124]); +strings[2125] = str->add(strings[2125]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1761] = str->add(strings[1761]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1761]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1762] = str->add(strings[1762]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1762]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1763] = str->add(strings[1763]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1763]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1764] = str->add(strings[1764]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1764]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1765] = str->add(strings[1765]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1765]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1766] = str->add(strings[1766]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1766]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1767] = str->add(strings[1767]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1767]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1768] = str->add(strings[1768]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1768]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1769] = str->add(strings[1769]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1769]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2126] = str->add(strings[2126]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2124]); +str->del(strings[2125]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1761]); +str->del(strings[1761]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1762]); +str->del(strings[1762]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1763]); +str->del(strings[1763]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1764]); +str->del(strings[1764]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1765]); +str->del(strings[1765]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1766]); +str->del(strings[1766]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1767]); +str->del(strings[1767]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1768]); +str->del(strings[1768]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[1933]); +str->del(strings[1769]); +str->del(strings[1769]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[1963]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1760] = str->add(strings[1760]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2124] = str->add(strings[2124]); +strings[2125] = str->add(strings[2125]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1761] = str->add(strings[1761]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1762] = str->add(strings[1762]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1763] = str->add(strings[1763]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1764] = str->add(strings[1764]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1765] = str->add(strings[1765]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1766] = str->add(strings[1766]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1767] = str->add(strings[1767]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1768] = str->add(strings[1768]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[64] = str->add(strings[64]); +strings[1963] = str->add(strings[1963]); +strings[64] = str->add(strings[64]); +strings[2123] = str->add(strings[2123]); +strings[1769] = str->add(strings[1769]); +strings[2126] = str->add(strings[2126]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1964] = str->add(strings[1964]); +strings[64] = str->add(strings[64]); +strings[1966] = str->add(strings[1966]); +strings[64] = str->add(strings[64]); +strings[1968] = str->add(strings[1968]); +strings[64] = str->add(strings[64]); +strings[1970] = str->add(strings[1970]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[64] = str->add(strings[64]); +strings[2058] = str->add(strings[2058]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[469]); +str->del(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2070] = str->add(strings[2070]); +strings[2070] = str->add(strings[2070]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2074] = str->add(strings[2074]); +strings[2074] = str->add(strings[2074]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2077] = str->add(strings[2077]); +strings[2077] = str->add(strings[2077]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[469]); +str->del(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2070] = str->add(strings[2070]); +strings[2070] = str->add(strings[2070]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2074] = str->add(strings[2074]); +strings[2074] = str->add(strings[2074]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2077] = str->add(strings[2077]); +strings[2077] = str->add(strings[2077]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[2073]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[2076]); +str->del(strings[469]); +str->del(strings[2069]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2067]); +strings[1933] = str->add(strings[1933]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[2079]); +str->del(strings[469]); +str->del(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2070] = str->add(strings[2070]); +strings[2070] = str->add(strings[2070]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2074] = str->add(strings[2074]); +strings[2074] = str->add(strings[2074]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[469] = str->add(strings[469]); +strings[2067] = str->add(strings[2067]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2069] = str->add(strings[2069]); +strings[469] = str->add(strings[469]); +strings[2123] = str->add(strings[2123]); +strings[1841] = str->add(strings[1841]); +strings[2077] = str->add(strings[2077]); +strings[2077] = str->add(strings[2077]); +strings[471] = str->add(strings[471]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[2133] = str->add("e,action,mouse,move"); +strings[2125] = str->add(strings[2125]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2133] = str->add(strings[2133]); +strings[2125] = str->add(strings[2125]); +strings[2134] = str->add(strings[2134]); +strings[1853] = str->add(strings[1853]); +strings[2135] = str->add("e,state,known"); +strings[1842] = str->add(strings[1842]); +strings[2136] = str->add("40°C"); +strings[2137] = str->add("e,state,discharging"); +strings[2125] = str->add(strings[2125]); +strings[2138] = str->add("0%"); +str->del(strings[2138]); +strings[2139] = str->add("N/A"); +strings[2140] = str->add("0:00"); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[2123]); +str->del(strings[1841]); +strings[2141] = str->add("program,start"); +strings[2142] = str->add("on"); +str->del(strings[2124]); +str->del(strings[2125]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2126]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[1841]); +strings[2141] = str->add(strings[2141]); +strings[2142] = str->add(strings[2142]); +str->del(strings[2124]); +str->del(strings[2125]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[2126]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2123]); +str->del(strings[1841]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[1737]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2133]); +str->del(strings[2125]); +str->del(strings[2134]); +str->del(strings[1853]); +str->del(strings[2135]); +str->del(strings[1842]); +strings[2143] = str->add("drag,set"); +strings[2144] = str->add("temp_top"); +strings[2141] = str->add(strings[2141]); +strings[2145] = str->add("discharge"); +strings[1932] = str->add(strings[1932]); +strings[2145] = str->add(strings[2145]); +strings[2141] = str->add(strings[2141]); +strings[2146] = str->add("discharge2"); +strings[1932] = str->add(strings[1932]); +strings[2146] = str->add(strings[2146]); +str->del(strings[2137]); +str->del(strings[2125]); +strings[2147] = str->add("custom"); +strings[2147] = str->add(strings[2147]); +strings[2147] = str->add(strings[2147]); +strings[2147] = str->add(strings[2147]); +str->del(strings[2141]); +str->del(strings[2142]); +str->del(strings[2141]); +str->del(strings[2142]); +str->del(strings[2143]); +str->del(strings[2144]); +str->del(strings[2141]); +str->del(strings[2145]); +str->del(strings[1932]); +str->del(strings[2145]); +str->del(strings[2141]); +str->del(strings[2146]); +str->del(strings[1932]); +str->del(strings[2146]); +str->del(strings[1760]); +strings[1760] = str->add(strings[1760]); +str->del(strings[1760]); +strings[1760] = str->add(strings[1760]); +str->del(strings[1760]); +strings[1760] = str->add(strings[1760]); +str->del(strings[1760]); +strings[1760] = str->add(strings[1760]); +str->del(strings[1761]); +strings[1761] = str->add(strings[1761]); +str->del(strings[1761]); +strings[1761] = str->add(strings[1761]); +str->del(strings[1762]); +strings[1762] = str->add(strings[1762]); +str->del(strings[1762]); +strings[1762] = str->add(strings[1762]); +str->del(strings[1763]); +strings[1763] = str->add(strings[1763]); +str->del(strings[1763]); +strings[1763] = str->add(strings[1763]); +str->del(strings[1764]); +strings[1764] = str->add(strings[1764]); +str->del(strings[1764]); +strings[1764] = str->add(strings[1764]); +str->del(strings[1765]); +strings[1765] = str->add(strings[1765]); +str->del(strings[1765]); +strings[1765] = str->add(strings[1765]); +str->del(strings[1766]); +strings[1766] = str->add(strings[1766]); +str->del(strings[1766]); +strings[1766] = str->add(strings[1766]); +str->del(strings[1767]); +strings[1767] = str->add(strings[1767]); +str->del(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[64] = str->add(strings[64]); +strings[2148] = str->add("images/60"); +strings[2149] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/60"); +strings[64] = str->add(strings[64]); +strings[2148] = str->add(strings[2148]); +strings[64] = str->add(strings[64]); +strings[2150] = str->add("images/61"); +strings[2151] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/61"); +strings[64] = str->add(strings[64]); +strings[2150] = str->add(strings[2150]); +strings[2152] = str->add("resize"); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[2152] = str->add(strings[2152]); +strings[64] = str->add(strings[64]); +strings[2153] = str->add("images/79"); +strings[2154] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/79"); +strings[64] = str->add(strings[64]); +strings[2153] = str->add(strings[2153]); +strings[64] = str->add(strings[64]); +strings[2155] = str->add("images/80"); +strings[2156] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/80"); +strings[64] = str->add(strings[64]); +strings[2155] = str->add(strings[2155]); +strings[64] = str->add(strings[64]); +strings[2157] = str->add("images/81"); +strings[2158] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/81"); +strings[64] = str->add(strings[64]); +strings[2157] = str->add(strings[2157]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[2136] = str->add(strings[2136]); +strings[2136] = str->add(strings[2136]); +strings[2136] = str->add(strings[2136]); +strings[2152] = str->add(strings[2152]); +strings[64] = str->add(strings[64]); +strings[2159] = str->add("images/204"); +strings[2160] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/204"); +strings[64] = str->add(strings[64]); +strings[2159] = str->add(strings[2159]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[2161] = str->add("Sans:style=Bold"); +strings[2162] = str->add("Edje-Vera-Bold"); +str->del(strings[2161]); +str->del(strings[2162]); +strings[379] = str->add(strings[379]); +strings[2120] = str->add(strings[2120]); +strings[2120] = str->add(strings[2120]); +strings[2120] = str->add(strings[2120]); +strings[64] = str->add(strings[64]); +strings[2163] = str->add("images/205"); +strings[2164] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/205"); +strings[64] = str->add(strings[64]); +strings[2163] = str->add(strings[2163]); +strings[64] = str->add(strings[64]); +strings[2165] = str->add("images/83"); +strings[2166] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/83"); +strings[64] = str->add(strings[64]); +strings[2165] = str->add(strings[2165]); +strings[2152] = str->add(strings[2152]); +strings[2139] = str->add(strings[2139]); +str->del(strings[1842]); +strings[2139] = str->add(strings[2139]); +str->del(strings[1842]); +strings[2139] = str->add(strings[2139]); +strings[2140] = str->add(strings[2140]); +str->del(strings[1842]); +strings[2140] = str->add(strings[2140]); +str->del(strings[1842]); +strings[2140] = str->add(strings[2140]); +strings[2152] = str->add(strings[2152]); +strings[64] = str->add(strings[64]); +strings[2167] = str->add("images/82"); +strings[2168] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/82"); +strings[64] = str->add(strings[64]); +strings[2167] = str->add(strings[2167]); +strings[64] = str->add(strings[64]); +strings[2169] = str->add("images/115"); +strings[2170] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/115"); +strings[64] = str->add(strings[64]); +strings[2169] = str->add(strings[2169]); +strings[64] = str->add(strings[64]); +strings[2171] = str->add("images/201"); +strings[2172] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/201"); +strings[64] = str->add(strings[64]); +strings[2171] = str->add(strings[2171]); +strings[64] = str->add(strings[64]); +strings[2165] = str->add(strings[2165]); +strings[2152] = str->add(strings[2152]); +strings[2113] = str->add(strings[2113]); +strings[1552] = str->add(strings[1552]); +strings[2173] = str->add("/usr/devel/lib/enlightenment/modules/note/e-module-note.edj//://images/0"); +strings[2113] = str->add(strings[2113]); +strings[1552] = str->add(strings[1552]); +strings[2152] = str->add(strings[2152]); +str->del(strings[1760]); +strings[1760] = str->add(strings[1760]); +strings[1760] = str->add(strings[1760]); +str->del(strings[1760]); +strings[2174] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2174]); +str->del(strings[1761]); +strings[1761] = str->add(strings[1761]); +strings[1761] = str->add(strings[1761]); +str->del(strings[1761]); +strings[2175] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2175]); +str->del(strings[1762]); +strings[1762] = str->add(strings[1762]); +strings[1762] = str->add(strings[1762]); +str->del(strings[1762]); +strings[2176] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2176]); +str->del(strings[1763]); +strings[1763] = str->add(strings[1763]); +strings[1763] = str->add(strings[1763]); +str->del(strings[1763]); +strings[2177] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2177]); +str->del(strings[1764]); +strings[1764] = str->add(strings[1764]); +strings[1764] = str->add(strings[1764]); +str->del(strings[1764]); +strings[2178] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2178]); +str->del(strings[1765]); +strings[1765] = str->add(strings[1765]); +strings[1765] = str->add(strings[1765]); +str->del(strings[1765]); +strings[2179] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2179]); +str->del(strings[1766]); +strings[1766] = str->add(strings[1766]); +strings[1766] = str->add(strings[1766]); +str->del(strings[1766]); +strings[2180] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2180]); +str->del(strings[1767]); +strings[1767] = str->add(strings[1767]); +strings[1767] = str->add(strings[1767]); +str->del(strings[1767]); +strings[2181] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2181]); +str->del(strings[1768]); +strings[1768] = str->add(strings[1768]); +strings[1768] = str->add(strings[1768]); +str->del(strings[1768]); +strings[2182] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2182]); +str->del(strings[1769]); +strings[1769] = str->add(strings[1769]); +strings[1769] = str->add(strings[1769]); +str->del(strings[1769]); +strings[2183] = str->add("D..."); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[2183]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +str->del(strings[1842]); +strings[2073] = str->add(strings[2073]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +str->del(strings[1842]); +strings[2076] = str->add(strings[2076]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +str->del(strings[1842]); +strings[2079] = str->add(strings[2079]); +strings[469] = str->add(strings[469]); +strings[2184] = str->add("images/249"); +strings[2185] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/249"); +strings[469] = str->add(strings[469]); +strings[2184] = str->add(strings[2184]); +strings[469] = str->add(strings[469]); +strings[2186] = str->add("images/250"); +strings[2187] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/250"); +strings[469] = str->add(strings[469]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[2188] = str->add("images/243"); +strings[2189] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/243"); +strings[469] = str->add(strings[469]); +strings[2188] = str->add(strings[2188]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add("images/240"); +strings[2191] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/240"); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2188] = str->add(strings[2188]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add("images/241"); +strings[2193] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/241"); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2194] = str->add("images/247"); +strings[2195] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/247"); +strings[469] = str->add(strings[469]); +strings[2194] = str->add(strings[2194]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add("images/242"); +strings[2197] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/242"); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2194] = str->add(strings[2194]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add("images/239"); +strings[2199] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/239"); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2200] = str->add("images/245"); +strings[2201] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/245"); +strings[469] = str->add(strings[469]); +strings[2200] = str->add(strings[2200]); +strings[469] = str->add(strings[469]); +strings[2200] = str->add(strings[2200]); +strings[469] = str->add(strings[469]); +strings[2202] = str->add("images/246"); +strings[2203] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/246"); +strings[469] = str->add(strings[469]); +strings[2202] = str->add(strings[2202]); +strings[469] = str->add(strings[469]); +strings[2202] = str->add(strings[2202]); +strings[469] = str->add(strings[469]); +strings[2184] = str->add(strings[2184]); +strings[469] = str->add(strings[469]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[2188] = str->add(strings[2188]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2188] = str->add(strings[2188]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2194] = str->add(strings[2194]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2194] = str->add(strings[2194]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2200] = str->add(strings[2200]); +strings[469] = str->add(strings[469]); +strings[2200] = str->add(strings[2200]); +strings[469] = str->add(strings[469]); +strings[2202] = str->add(strings[2202]); +strings[469] = str->add(strings[469]); +strings[2202] = str->add(strings[2202]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[2152]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[2163]); +strings[64] = str->add(strings[64]); +strings[2204] = str->add("images/220"); +strings[2205] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/220"); +strings[64] = str->add(strings[64]); +strings[2204] = str->add(strings[2204]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[2070]); +str->del(strings[2070]); +str->del(strings[2073]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2074]); +str->del(strings[2074]); +str->del(strings[2076]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2077]); +str->del(strings[2077]); +str->del(strings[2079]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2070]); +str->del(strings[2070]); +str->del(strings[2073]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2074]); +str->del(strings[2074]); +str->del(strings[2076]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2077]); +str->del(strings[2077]); +str->del(strings[2079]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2070]); +str->del(strings[2070]); +str->del(strings[2073]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2074]); +str->del(strings[2074]); +str->del(strings[2076]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[2077]); +str->del(strings[2077]); +str->del(strings[2079]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[7]); +str->del(strings[1869]); +strings[7] = str->add(strings[7]); +strings[2206] = str->add("images/10"); +strings[2207] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/10"); +strings[7] = str->add(strings[7]); +strings[2206] = str->add(strings[2206]); +strings[1932] = str->add(strings[1932]); +strings[2208] = str->add("on"); +strings[1932] = str->add(strings[1932]); +strings[2208] = str->add(strings[2208]); +str->del(strings[1932]); +str->del(strings[2208]); +str->del(strings[1932]); +str->del(strings[2208]); +strings[2209] = str->add("/usr/devel/lib/enlightenment/modules/exebuf/linux-gnu-x86_64/module.so"); +strings[2209] = str->add(strings[2209]); +strings[50] = str->add(strings[50]); +strings[2210] = str->add("/usr/devel/lib/enlightenment/modules/exebuf"); +str->del(strings[2209]); +strings[2211] = str->add("Run Command Dialog"); +strings[50] = str->add(strings[50]); +str->del(strings[50]); +strings[1932] = str->add(strings[1932]); +strings[2212] = str->add("off"); +str->del(strings[1932]); +str->del(strings[2212]); +str->del(strings[7]); +str->del(strings[2206]); +strings[7] = str->add(strings[7]); +strings[2213] = str->add("images/11"); +strings[2214] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/11"); +strings[7] = str->add(strings[7]); +strings[2213] = str->add(strings[2213]); +strings[2215] = str->add("/usr/devel/lib/enlightenment/modules/winlist/linux-gnu-x86_64/module.so"); +strings[2215] = str->add(strings[2215]); +strings[49] = str->add(strings[49]); +strings[2216] = str->add("/usr/devel/lib/enlightenment/modules/winlist"); +str->del(strings[2215]); +strings[2217] = str->add("Window : List"); +strings[2218] = str->add("Next Window"); +strings[49] = str->add(strings[49]); +strings[132] = str->add(strings[132]); +strings[2219] = str->add("Previous Window"); +strings[49] = str->add(strings[49]); +strings[133] = str->add(strings[133]); +str->del(strings[49]); +str->del(strings[7]); +str->del(strings[2213]); +strings[7] = str->add(strings[7]); +strings[2220] = str->add("images/12"); +strings[2221] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/12"); +strings[7] = str->add(strings[7]); +strings[2220] = str->add(strings[2220]); +strings[2222] = str->add("/usr/devel/lib/enlightenment/modules/conf/linux-gnu-x86_64/module.so"); +strings[2222] = str->add(strings[2222]); +strings[48] = str->add(strings[48]); +strings[2223] = str->add("/usr/devel/lib/enlightenment/modules/conf"); +str->del(strings[2222]); +strings[2224] = str->add("Configuration Panel"); +strings[2225] = str->add("configuration"); +str->del(strings[48]); +str->del(strings[7]); +str->del(strings[2220]); +strings[7] = str->add(strings[7]); +strings[2226] = str->add("images/13"); +strings[2227] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/13"); +strings[7] = str->add(strings[7]); +strings[2226] = str->add(strings[2226]); +strings[2228] = str->add("/usr/devel/lib/enlightenment/modules/conf_applications/linux-gnu-x86_64/module.so"); +strings[2228] = str->add(strings[2228]); +strings[47] = str->add(strings[47]); +strings[2229] = str->add("/usr/devel/lib/enlightenment/modules/conf_applications"); +str->del(strings[2228]); +strings[2230] = str->add("applications"); +strings[2231] = str->add("Applications"); +strings[2232] = str->add("enlightenment/applications"); +strings[2233] = str->add("new_application"); +strings[2234] = str->add("New Application"); +strings[2235] = str->add("enlightenment/add_application"); +strings[2236] = str->add("ibar_applications"); +strings[2237] = str->add("IBar Applications"); +strings[2238] = str->add("enlightenment/ibar_applications"); +strings[2239] = str->add("restart_applications"); +strings[2240] = str->add("Restart Applications"); +strings[2241] = str->add("enlightenment/restart_applications"); +strings[2242] = str->add("startup_applications"); +strings[2243] = str->add("Startup Applications"); +strings[2244] = str->add("enlightenment/startup_applications"); +strings[2245] = str->add("internal"); +strings[2246] = str->add("Internal"); +strings[2247] = str->add("enlightenment/internal"); +strings[2248] = str->add("ibar_other"); +strings[2249] = str->add("IBar Other"); +strings[2250] = str->add("enlightenment/windows"); +strings[2251] = str->add("menus"); +strings[2252] = str->add("Menus"); +strings[2253] = str->add("enlightenment/menus"); +strings[2254] = str->add("favorites_menu"); +strings[2255] = str->add("Favorites Menu"); +strings[2256] = str->add("enlightenment/favorites"); +str->del(strings[47]); +str->del(strings[7]); +str->del(strings[2226]); +strings[7] = str->add(strings[7]); +strings[2257] = str->add("images/14"); +strings[2258] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/14"); +strings[7] = str->add(strings[7]); +strings[2257] = str->add(strings[2257]); +strings[2259] = str->add("/usr/devel/lib/enlightenment/modules/conf_borders/linux-gnu-x86_64/module.so"); +strings[2259] = str->add(strings[2259]); +strings[46] = str->add(strings[46]); +strings[2260] = str->add("/usr/devel/lib/enlightenment/modules/conf_borders"); +str->del(strings[2259]); +strings[2261] = str->add("borders"); +strings[2262] = str->add("Borders"); +strings[2250] = str->add(strings[2250]); +strings[2263] = str->add("borders_border"); +strings[2264] = str->add("Border"); +strings[2250] = str->add(strings[2250]); +str->del(strings[46]); +strings[2265] = str->add("/usr/devel/lib/enlightenment/modules/conf_clientlist/linux-gnu-x86_64/module.so"); +strings[2265] = str->add(strings[2265]); +strings[45] = str->add(strings[45]); +strings[2266] = str->add("/usr/devel/lib/enlightenment/modules/conf_clientlist"); +str->del(strings[2265]); +strings[2267] = str->add("client_list_menu"); +strings[2268] = str->add("Client List Menu"); +strings[2269] = str->add("enlightenment/winlist"); +str->del(strings[45]); +str->del(strings[7]); +str->del(strings[2257]); +strings[7] = str->add(strings[7]); +strings[2270] = str->add("images/15"); +strings[2271] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/15"); +strings[7] = str->add(strings[7]); +strings[2270] = str->add(strings[2270]); +strings[2272] = str->add("/usr/devel/lib/enlightenment/modules/conf_colors/linux-gnu-x86_64/module.so"); +strings[2272] = str->add(strings[2272]); +strings[44] = str->add(strings[44]); +strings[2273] = str->add("/usr/devel/lib/enlightenment/modules/conf_colors"); +str->del(strings[2272]); +strings[2274] = str->add("colors"); +strings[215] = str->add(strings[215]); +strings[2275] = str->add("enlightenment/colors"); +str->del(strings[44]); +str->del(strings[7]); +str->del(strings[2270]); +strings[7] = str->add(strings[7]); +strings[2276] = str->add("images/16"); +strings[2277] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/16"); +strings[7] = str->add(strings[7]); +strings[2276] = str->add(strings[2276]); +strings[2278] = str->add("/usr/devel/lib/enlightenment/modules/conf_desk/linux-gnu-x86_64/module.so"); +strings[2278] = str->add(strings[2278]); +strings[43] = str->add(strings[43]); +strings[2279] = str->add("/usr/devel/lib/enlightenment/modules/conf_desk"); +str->del(strings[2278]); +strings[2280] = str->add("desk"); +strings[2281] = str->add("Desk"); +strings[2250] = str->add(strings[2250]); +str->del(strings[43]); +strings[2282] = str->add("/usr/devel/lib/enlightenment/modules/conf_desklock/linux-gnu-x86_64/module.so"); +strings[2282] = str->add(strings[2282]); +strings[42] = str->add(strings[42]); +strings[2283] = str->add("/usr/devel/lib/enlightenment/modules/conf_desklock"); +str->del(strings[2282]); +strings[2284] = str->add("screen"); +strings[1670] = str->add(strings[1670]); +strings[2285] = str->add("enlightenment/screen_setup"); +strings[2286] = str->add("screen_lock"); +strings[2287] = str->add("Screen Lock"); +strings[2288] = str->add("enlightenment/desklock"); +str->del(strings[42]); +strings[2289] = str->add("e,action,mouse,move"); +strings[2290] = str->add("e"); +strings[2291] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +strings[2289] = str->add(strings[2289]); +strings[2290] = str->add(strings[2290]); +strings[2291] = str->add(strings[2291]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[2289]); +str->del(strings[2290]); +str->del(strings[2291]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2276]); +strings[7] = str->add(strings[7]); +strings[2292] = str->add("images/18"); +strings[2293] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/18"); +strings[7] = str->add(strings[7]); +strings[2292] = str->add(strings[2292]); +strings[2294] = str->add("/usr/devel/lib/enlightenment/modules/conf_desks/linux-gnu-x86_64/module.so"); +strings[2294] = str->add(strings[2294]); +strings[41] = str->add(strings[41]); +strings[2295] = str->add("/usr/devel/lib/enlightenment/modules/conf_desks"); +str->del(strings[2294]); +strings[2296] = str->add("virtual_desktops"); +strings[2297] = str->add("Virtual Desktops"); +strings[2298] = str->add("enlightenment/desktops"); +str->del(strings[41]); +strings[2299] = str->add("e,action,mouse,move"); +strings[2300] = str->add("e"); +strings[2301] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2299] = str->add(strings[2299]); +strings[2300] = str->add(strings[2300]); +strings[2301] = str->add(strings[2301]); +strings[1853] = str->add(strings[1853]); +strings[2299] = str->add(strings[2299]); +strings[2300] = str->add(strings[2300]); +strings[2301] = str->add(strings[2301]); +strings[1853] = str->add(strings[1853]); +strings[2299] = str->add(strings[2299]); +strings[2300] = str->add(strings[2300]); +strings[2301] = str->add(strings[2301]); +strings[1853] = str->add(strings[1853]); +strings[2299] = str->add(strings[2299]); +strings[2300] = str->add(strings[2300]); +strings[2301] = str->add(strings[2301]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2299]); +str->del(strings[2300]); +str->del(strings[2301]); +str->del(strings[1853]); +str->del(strings[2299]); +str->del(strings[2300]); +str->del(strings[2301]); +str->del(strings[1853]); +str->del(strings[2299]); +str->del(strings[2300]); +str->del(strings[2301]); +str->del(strings[1853]); +str->del(strings[2299]); +str->del(strings[2300]); +str->del(strings[2301]); +str->del(strings[1853]); +str->del(strings[2299]); +str->del(strings[2300]); +str->del(strings[2301]); +str->del(strings[1853]); +strings[2302] = str->add("/usr/devel/lib/enlightenment/modules/conf_dialogs/linux-gnu-x86_64/module.so"); +strings[2302] = str->add(strings[2302]); +strings[40] = str->add(strings[40]); +strings[2303] = str->add("/usr/devel/lib/enlightenment/modules/conf_dialogs"); +str->del(strings[2302]); +strings[2304] = str->add("dialogs"); +strings[2305] = str->add("Dialogs"); +strings[2306] = str->add("enlightenment/configuration"); +str->del(strings[40]); +strings[2307] = str->add("e,action,mouse,move"); +strings[2308] = str->add("e"); +strings[2309] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +strings[2307] = str->add(strings[2307]); +strings[2308] = str->add(strings[2308]); +strings[2309] = str->add(strings[2309]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[2307]); +str->del(strings[2308]); +str->del(strings[2309]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2292]); +strings[7] = str->add(strings[7]); +strings[2310] = str->add("images/19"); +strings[2311] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/19"); +strings[7] = str->add(strings[7]); +strings[2310] = str->add(strings[2310]); +strings[2312] = str->add("/usr/devel/lib/enlightenment/modules/conf_display/linux-gnu-x86_64/module.so"); +strings[2312] = str->add(strings[2312]); +strings[39] = str->add(strings[39]); +strings[2313] = str->add("/usr/devel/lib/enlightenment/modules/conf_display"); +str->del(strings[2312]); +strings[2314] = str->add("screen_resolution"); +strings[2315] = str->add("Screen Resolution"); +strings[2316] = str->add("enlightenment/screen_resolution"); +str->del(strings[39]); +strings[2317] = str->add("e,action,mouse,move"); +strings[2318] = str->add("e"); +strings[2319] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +strings[2317] = str->add(strings[2317]); +strings[2318] = str->add(strings[2318]); +strings[2319] = str->add(strings[2319]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[2317]); +str->del(strings[2318]); +str->del(strings[2319]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2310]); +strings[7] = str->add(strings[7]); +strings[2320] = str->add("images/21"); +strings[2321] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/21"); +strings[7] = str->add(strings[7]); +strings[2320] = str->add(strings[2320]); +strings[2322] = str->add("/usr/devel/lib/enlightenment/modules/conf_dpms/linux-gnu-x86_64/module.so"); +strings[2322] = str->add(strings[2322]); +strings[38] = str->add(strings[38]); +strings[2323] = str->add("/usr/devel/lib/enlightenment/modules/conf_dpms"); +str->del(strings[2322]); +strings[2324] = str->add("power_management"); +strings[2325] = str->add("Power Management"); +strings[2326] = str->add("enlightenment/power_management"); +str->del(strings[38]); +strings[2327] = str->add("e,action,mouse,move"); +strings[2328] = str->add("e"); +strings[2329] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +strings[2327] = str->add(strings[2327]); +strings[2328] = str->add(strings[2328]); +strings[2329] = str->add(strings[2329]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +str->del(strings[2327]); +str->del(strings[2328]); +str->del(strings[2329]); +str->del(strings[1853]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[64]); +str->del(strings[2127]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[1760]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1761]); +str->del(strings[1761]); +str->del(strings[1761]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1762]); +str->del(strings[1762]); +str->del(strings[1762]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1763]); +str->del(strings[1763]); +str->del(strings[1763]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1764]); +str->del(strings[1764]); +str->del(strings[1764]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1765]); +str->del(strings[1765]); +str->del(strings[1765]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1766]); +str->del(strings[1766]); +str->del(strings[1766]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1767]); +str->del(strings[1767]); +str->del(strings[1767]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1768]); +str->del(strings[1768]); +str->del(strings[1768]); +str->del(strings[64]); +str->del(strings[1963]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1769]); +str->del(strings[1769]); +str->del(strings[1769]); +str->del(strings[64]); +str->del(strings[1963]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[1760]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1760]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1761]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1762]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1763]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1764]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1765]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1766]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1767]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1768]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[64]); +str->del(strings[1964]); +str->del(strings[64]); +str->del(strings[1966]); +str->del(strings[64]); +str->del(strings[1970]); +str->del(strings[1769]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[2058]); +str->del(strings[64]); +str->del(strings[1968]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[7]); +str->del(strings[2320]); +strings[7] = str->add(strings[7]); +strings[2330] = str->add("images/22"); +strings[2331] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/22"); +strings[7] = str->add(strings[7]); +strings[2330] = str->add(strings[2330]); +strings[2332] = str->add("e,action,mouse,move"); +strings[2333] = str->add("e"); +strings[2334] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[2332]); +str->del(strings[2333]); +str->del(strings[2334]); +str->del(strings[1853]); +strings[2335] = str->add("/usr/devel/lib/enlightenment/modules/conf_exebuf/linux-gnu-x86_64/module.so"); +strings[2335] = str->add(strings[2335]); +strings[37] = str->add(strings[37]); +strings[2336] = str->add("/usr/devel/lib/enlightenment/modules/conf_exebuf"); +str->del(strings[2335]); +strings[2337] = str->add("run_command"); +strings[2338] = str->add("Run Command"); +strings[2339] = str->add("enlightenment/run"); +str->del(strings[37]); +strings[2340] = str->add("e,action,mouse,move"); +strings[2341] = str->add("e"); +strings[2342] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +strings[2340] = str->add(strings[2340]); +strings[2341] = str->add(strings[2341]); +strings[2342] = str->add(strings[2342]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[2340]); +str->del(strings[2341]); +str->del(strings[2342]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2330]); +strings[7] = str->add(strings[7]); +strings[2343] = str->add("images/23"); +strings[2344] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/23"); +strings[7] = str->add(strings[7]); +strings[2343] = str->add(strings[2343]); +strings[2345] = str->add("/usr/devel/lib/enlightenment/modules/conf_fonts/linux-gnu-x86_64/module.so"); +strings[2345] = str->add(strings[2345]); +strings[36] = str->add(strings[36]); +strings[2346] = str->add("/usr/devel/lib/enlightenment/modules/conf_fonts"); +str->del(strings[2345]); +strings[2347] = str->add("fonts"); +strings[2348] = str->add("Fonts"); +strings[2349] = str->add("enlightenment/fonts"); +str->del(strings[36]); +strings[2350] = str->add("e,action,mouse,move"); +strings[2351] = str->add("e"); +strings[2352] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2350] = str->add(strings[2350]); +strings[2351] = str->add(strings[2351]); +strings[2352] = str->add(strings[2352]); +strings[1853] = str->add(strings[1853]); +strings[2350] = str->add(strings[2350]); +strings[2351] = str->add(strings[2351]); +strings[2352] = str->add(strings[2352]); +strings[1853] = str->add(strings[1853]); +strings[2350] = str->add(strings[2350]); +strings[2351] = str->add(strings[2351]); +strings[2352] = str->add(strings[2352]); +strings[1853] = str->add(strings[1853]); +strings[2350] = str->add(strings[2350]); +strings[2351] = str->add(strings[2351]); +strings[2352] = str->add(strings[2352]); +strings[1853] = str->add(strings[1853]); +strings[2350] = str->add(strings[2350]); +strings[2351] = str->add(strings[2351]); +strings[2352] = str->add(strings[2352]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[2350]); +str->del(strings[2351]); +str->del(strings[2352]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2343]); +strings[7] = str->add(strings[7]); +strings[2353] = str->add("images/24"); +strings[2354] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/24"); +strings[7] = str->add(strings[7]); +strings[2353] = str->add(strings[2353]); +strings[2355] = str->add("/usr/devel/lib/enlightenment/modules/conf_icon_theme/linux-gnu-x86_64/module.so"); +strings[2355] = str->add(strings[2355]); +strings[35] = str->add(strings[35]); +strings[2356] = str->add("/usr/devel/lib/enlightenment/modules/conf_icon_theme"); +str->del(strings[2355]); +strings[2357] = str->add("icon_theme"); +strings[2358] = str->add("Icon Theme"); +strings[2359] = str->add("enlightenment/icon_theme"); +str->del(strings[35]); +strings[2360] = str->add("e,action,mouse,move"); +strings[2361] = str->add("e"); +strings[2362] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2360] = str->add(strings[2360]); +strings[2361] = str->add(strings[2361]); +strings[2362] = str->add(strings[2362]); +strings[1853] = str->add(strings[1853]); +strings[2360] = str->add(strings[2360]); +strings[2361] = str->add(strings[2361]); +strings[2362] = str->add(strings[2362]); +strings[1853] = str->add(strings[1853]); +strings[2360] = str->add(strings[2360]); +strings[2361] = str->add(strings[2361]); +strings[2362] = str->add(strings[2362]); +strings[1853] = str->add(strings[1853]); +strings[2360] = str->add(strings[2360]); +strings[2361] = str->add(strings[2361]); +strings[2362] = str->add(strings[2362]); +strings[1853] = str->add(strings[1853]); +strings[2360] = str->add(strings[2360]); +strings[2361] = str->add(strings[2361]); +strings[2362] = str->add(strings[2362]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[2360]); +str->del(strings[2361]); +str->del(strings[2362]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2353]); +strings[7] = str->add(strings[7]); +strings[2363] = str->add("images/25"); +strings[2364] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/25"); +strings[7] = str->add(strings[7]); +strings[2363] = str->add(strings[2363]); +strings[2365] = str->add("/usr/devel/lib/enlightenment/modules/conf_imc/linux-gnu-x86_64/module.so"); +strings[2365] = str->add(strings[2365]); +strings[34] = str->add(strings[34]); +strings[2366] = str->add("/usr/devel/lib/enlightenment/modules/conf_imc"); +str->del(strings[2365]); +strings[2367] = str->add("language"); +strings[2368] = str->add("Language"); +strings[2369] = str->add("enlightenment/intl"); +strings[2370] = str->add("input_method_settings"); +strings[2371] = str->add("Input Method Settings"); +strings[2372] = str->add("enlightenment/imc"); +str->del(strings[34]); +strings[2373] = str->add("e,action,mouse,move"); +strings[2374] = str->add("e"); +strings[2375] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2373] = str->add(strings[2373]); +strings[2374] = str->add(strings[2374]); +strings[2375] = str->add(strings[2375]); +strings[1853] = str->add(strings[1853]); +strings[2373] = str->add(strings[2373]); +strings[2374] = str->add(strings[2374]); +strings[2375] = str->add(strings[2375]); +strings[1853] = str->add(strings[1853]); +strings[2373] = str->add(strings[2373]); +strings[2374] = str->add(strings[2374]); +strings[2375] = str->add(strings[2375]); +strings[1853] = str->add(strings[1853]); +strings[2373] = str->add(strings[2373]); +strings[2374] = str->add(strings[2374]); +strings[2375] = str->add(strings[2375]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2373]); +str->del(strings[2374]); +str->del(strings[2375]); +str->del(strings[1853]); +str->del(strings[2373]); +str->del(strings[2374]); +str->del(strings[2375]); +str->del(strings[1853]); +str->del(strings[2373]); +str->del(strings[2374]); +str->del(strings[2375]); +str->del(strings[1853]); +str->del(strings[2373]); +str->del(strings[2374]); +str->del(strings[2375]); +str->del(strings[1853]); +str->del(strings[2373]); +str->del(strings[2374]); +str->del(strings[2375]); +str->del(strings[1853]); +strings[2376] = str->add("/usr/devel/lib/enlightenment/modules/conf_intl/linux-gnu-x86_64/module.so"); +strings[2376] = str->add(strings[2376]); +strings[33] = str->add(strings[33]); +strings[2377] = str->add("/usr/devel/lib/enlightenment/modules/conf_intl"); +str->del(strings[2376]); +strings[2378] = str->add("language_settings"); +strings[2379] = str->add("Language Settings"); +strings[2369] = str->add(strings[2369]); +str->del(strings[33]); +strings[2380] = str->add("e,action,mouse,move"); +strings[2381] = str->add("e"); +strings[2382] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2380] = str->add(strings[2380]); +strings[2381] = str->add(strings[2381]); +strings[2382] = str->add(strings[2382]); +strings[1853] = str->add(strings[1853]); +strings[2380] = str->add(strings[2380]); +strings[2381] = str->add(strings[2381]); +strings[2382] = str->add(strings[2382]); +strings[1853] = str->add(strings[1853]); +strings[2380] = str->add(strings[2380]); +strings[2381] = str->add(strings[2381]); +strings[2382] = str->add(strings[2382]); +strings[1853] = str->add(strings[1853]); +strings[2380] = str->add(strings[2380]); +strings[2381] = str->add(strings[2381]); +strings[2382] = str->add(strings[2382]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2380]); +str->del(strings[2381]); +str->del(strings[2382]); +str->del(strings[1853]); +str->del(strings[2380]); +str->del(strings[2381]); +str->del(strings[2382]); +str->del(strings[1853]); +str->del(strings[2380]); +str->del(strings[2381]); +str->del(strings[2382]); +str->del(strings[1853]); +str->del(strings[2380]); +str->del(strings[2381]); +str->del(strings[2382]); +str->del(strings[1853]); +str->del(strings[2380]); +str->del(strings[2381]); +str->del(strings[2382]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2363]); +strings[7] = str->add(strings[7]); +strings[2383] = str->add("images/26"); +strings[2384] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/26"); +strings[7] = str->add(strings[7]); +strings[2383] = str->add(strings[2383]); +strings[2385] = str->add("/usr/devel/lib/enlightenment/modules/conf_keybindings/linux-gnu-x86_64/module.so"); +strings[2385] = str->add(strings[2385]); +strings[32] = str->add(strings[32]); +strings[2386] = str->add("/usr/devel/lib/enlightenment/modules/conf_keybindings"); +str->del(strings[2385]); +strings[2387] = str->add("keyboard_and_mouse"); +strings[2388] = str->add("Keyboard & Mouse"); +strings[2389] = str->add("enlightenment/behavior"); +strings[2390] = str->add("key_bindings"); +strings[2391] = str->add("Key Bindings"); +strings[2392] = str->add("enlightenment/keys"); +str->del(strings[32]); +strings[2393] = str->add("e,action,mouse,move"); +strings[2394] = str->add("e"); +strings[2395] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2393] = str->add(strings[2393]); +strings[2394] = str->add(strings[2394]); +strings[2395] = str->add(strings[2395]); +strings[1853] = str->add(strings[1853]); +strings[2393] = str->add(strings[2393]); +strings[2394] = str->add(strings[2394]); +strings[2395] = str->add(strings[2395]); +strings[1853] = str->add(strings[1853]); +strings[2393] = str->add(strings[2393]); +strings[2394] = str->add(strings[2394]); +strings[2395] = str->add(strings[2395]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2393]); +str->del(strings[2394]); +str->del(strings[2395]); +str->del(strings[1853]); +str->del(strings[2393]); +str->del(strings[2394]); +str->del(strings[2395]); +str->del(strings[1853]); +str->del(strings[2393]); +str->del(strings[2394]); +str->del(strings[2395]); +str->del(strings[1853]); +str->del(strings[2393]); +str->del(strings[2394]); +str->del(strings[2395]); +str->del(strings[1853]); +strings[2396] = str->add("/usr/devel/lib/enlightenment/modules/conf_menus/linux-gnu-x86_64/module.so"); +strings[2396] = str->add(strings[2396]); +strings[31] = str->add(strings[31]); +strings[2397] = str->add("/usr/devel/lib/enlightenment/modules/conf_menus"); +str->del(strings[2396]); +strings[2398] = str->add("menu_settings"); +strings[2399] = str->add("Menu Settings"); +strings[2400] = str->add("enlightenment/menu_settings"); +str->del(strings[31]); +strings[2401] = str->add("e,action,mouse,move"); +strings[2402] = str->add("e"); +strings[2403] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +strings[2401] = str->add(strings[2401]); +strings[2402] = str->add(strings[2402]); +strings[2403] = str->add(strings[2403]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[2401]); +str->del(strings[2402]); +str->del(strings[2403]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2383]); +strings[7] = str->add(strings[7]); +strings[2404] = str->add("images/27"); +strings[2405] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/27"); +strings[7] = str->add(strings[7]); +strings[2404] = str->add(strings[2404]); +strings[2406] = str->add("/usr/devel/lib/enlightenment/modules/conf_mime/linux-gnu-x86_64/module.so"); +strings[2406] = str->add(strings[2406]); +strings[30] = str->add(strings[30]); +strings[2407] = str->add("/usr/devel/lib/enlightenment/modules/conf_mime"); +str->del(strings[2406]); +strings[12] = str->add(strings[12]); +strings[2408] = str->add("File Manager"); +strings[2409] = str->add("enlightenment/fileman"); +strings[2410] = str->add("file_icons"); +strings[2411] = str->add("File Icons"); +strings[2412] = str->add("enlightenment/file_icons"); +str->del(strings[30]); +strings[2413] = str->add("e,action,mouse,move"); +strings[2414] = str->add("e"); +strings[2415] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2413] = str->add(strings[2413]); +strings[2414] = str->add(strings[2414]); +strings[2415] = str->add(strings[2415]); +strings[1853] = str->add(strings[1853]); +strings[2413] = str->add(strings[2413]); +strings[2414] = str->add(strings[2414]); +strings[2415] = str->add(strings[2415]); +strings[1853] = str->add(strings[1853]); +strings[2413] = str->add(strings[2413]); +strings[2414] = str->add(strings[2414]); +strings[2415] = str->add(strings[2415]); +strings[1853] = str->add(strings[1853]); +strings[2413] = str->add(strings[2413]); +strings[2414] = str->add(strings[2414]); +strings[2415] = str->add(strings[2415]); +strings[1853] = str->add(strings[1853]); +strings[2413] = str->add(strings[2413]); +strings[2414] = str->add(strings[2414]); +strings[2415] = str->add(strings[2415]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[2413]); +str->del(strings[2414]); +str->del(strings[2415]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2404]); +strings[7] = str->add(strings[7]); +strings[2416] = str->add("images/28"); +strings[2417] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/28"); +strings[7] = str->add(strings[7]); +strings[2416] = str->add(strings[2416]); +strings[2418] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse/linux-gnu-x86_64/module.so"); +strings[2418] = str->add(strings[2418]); +strings[29] = str->add(strings[29]); +strings[2419] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse"); +str->del(strings[2418]); +strings[2420] = str->add("mouse_acceleration"); +strings[2421] = str->add("Mouse Acceleration"); +strings[2422] = str->add("enlightenment/mouse_clean"); +str->del(strings[29]); +strings[2423] = str->add("e,action,mouse,move"); +strings[2424] = str->add("e"); +strings[2425] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +strings[2423] = str->add(strings[2423]); +strings[2424] = str->add(strings[2424]); +strings[2425] = str->add(strings[2425]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[2423]); +str->del(strings[2424]); +str->del(strings[2425]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2416]); +strings[7] = str->add(strings[7]); +strings[2426] = str->add("images/29"); +strings[2427] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/29"); +strings[7] = str->add(strings[7]); +strings[2426] = str->add(strings[2426]); +strings[2428] = str->add("/usr/devel/lib/enlightenment/modules/conf_mousebindings/linux-gnu-x86_64/module.so"); +strings[2428] = str->add(strings[2428]); +strings[28] = str->add(strings[28]); +strings[2429] = str->add("/usr/devel/lib/enlightenment/modules/conf_mousebindings"); +str->del(strings[2428]); +strings[2430] = str->add("mouse_bindings"); +strings[2431] = str->add("Mouse Bindings"); +strings[2422] = str->add(strings[2422]); +str->del(strings[28]); +strings[2432] = str->add("e,action,mouse,move"); +strings[2433] = str->add("e"); +strings[2434] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +strings[2432] = str->add(strings[2432]); +strings[2433] = str->add(strings[2433]); +strings[2434] = str->add(strings[2434]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[2432]); +str->del(strings[2433]); +str->del(strings[2434]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2426]); +strings[7] = str->add(strings[7]); +strings[2435] = str->add("images/30"); +strings[2436] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/30"); +strings[7] = str->add(strings[7]); +strings[2435] = str->add(strings[2435]); +strings[2437] = str->add("e,action,mouse,move"); +strings[2438] = str->add("e"); +strings[2439] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[2437]); +str->del(strings[2438]); +str->del(strings[2439]); +str->del(strings[1853]); +strings[2440] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse_cursor/linux-gnu-x86_64/module.so"); +strings[2440] = str->add(strings[2440]); +strings[27] = str->add(strings[27]); +strings[2441] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse_cursor"); +str->del(strings[2440]); +strings[2442] = str->add("mouse_cursor"); +strings[2443] = str->add("Mouse Cursor"); +strings[2444] = str->add("enlightenment/mouse"); +str->del(strings[27]); +strings[2445] = str->add("e,action,mouse,move"); +strings[2446] = str->add("e"); +strings[2447] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2445] = str->add(strings[2445]); +strings[2446] = str->add(strings[2446]); +strings[2447] = str->add(strings[2447]); +strings[1853] = str->add(strings[1853]); +strings[2445] = str->add(strings[2445]); +strings[2446] = str->add(strings[2446]); +strings[2447] = str->add(strings[2447]); +strings[1853] = str->add(strings[1853]); +strings[2445] = str->add(strings[2445]); +strings[2446] = str->add(strings[2446]); +strings[2447] = str->add(strings[2447]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2445]); +str->del(strings[2446]); +str->del(strings[2447]); +str->del(strings[1853]); +str->del(strings[2445]); +str->del(strings[2446]); +str->del(strings[2447]); +str->del(strings[1853]); +str->del(strings[2445]); +str->del(strings[2446]); +str->del(strings[2447]); +str->del(strings[1853]); +str->del(strings[2445]); +str->del(strings[2446]); +str->del(strings[2447]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2435]); +strings[7] = str->add(strings[7]); +strings[2448] = str->add("images/31"); +strings[2449] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/31"); +strings[7] = str->add(strings[7]); +strings[2448] = str->add(strings[2448]); +strings[2450] = str->add("/usr/devel/lib/enlightenment/modules/conf_paths/linux-gnu-x86_64/module.so"); +strings[2450] = str->add(strings[2450]); +strings[26] = str->add(strings[26]); +strings[2451] = str->add("/usr/devel/lib/enlightenment/modules/conf_paths"); +str->del(strings[2450]); +strings[2452] = str->add("search_directories"); +strings[2453] = str->add("Search Directories"); +strings[2454] = str->add("enlightenment/directories"); +str->del(strings[26]); +strings[2455] = str->add("e,action,mouse,move"); +strings[2456] = str->add("e"); +strings[2457] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +strings[2455] = str->add(strings[2455]); +strings[2456] = str->add(strings[2456]); +strings[2457] = str->add(strings[2457]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +str->del(strings[2455]); +str->del(strings[2456]); +str->del(strings[2457]); +str->del(strings[1853]); +strings[2458] = str->add("/usr/devel/lib/enlightenment/modules/conf_performance/linux-gnu-x86_64/module.so"); +strings[2458] = str->add(strings[2458]); +strings[25] = str->add(strings[25]); +strings[2459] = str->add("/usr/devel/lib/enlightenment/modules/conf_performance"); +str->del(strings[2458]); +strings[2460] = str->add("performance"); +strings[2461] = str->add("Performance"); +strings[2462] = str->add("enlightenment/performance"); +str->del(strings[25]); +strings[2463] = str->add("e,action,mouse,move"); +strings[2464] = str->add("e"); +strings[2465] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2463] = str->add(strings[2463]); +strings[2464] = str->add(strings[2464]); +strings[2465] = str->add(strings[2465]); +strings[1853] = str->add(strings[1853]); +strings[2463] = str->add(strings[2463]); +strings[2464] = str->add(strings[2464]); +strings[2465] = str->add(strings[2465]); +strings[1853] = str->add(strings[1853]); +strings[2463] = str->add(strings[2463]); +strings[2464] = str->add(strings[2464]); +strings[2465] = str->add(strings[2465]); +strings[1853] = str->add(strings[1853]); +strings[2463] = str->add(strings[2463]); +strings[2464] = str->add(strings[2464]); +strings[2465] = str->add(strings[2465]); +strings[1853] = str->add(strings[1853]); +str->del(strings[2463]); +str->del(strings[2464]); +str->del(strings[2465]); +str->del(strings[1853]); +str->del(strings[2463]); +str->del(strings[2464]); +str->del(strings[2465]); +str->del(strings[1853]); +str->del(strings[2463]); +str->del(strings[2464]); +str->del(strings[2465]); +str->del(strings[1853]); +str->del(strings[2463]); +str->del(strings[2464]); +str->del(strings[2465]); +str->del(strings[1853]); +str->del(strings[2463]); +str->del(strings[2464]); +str->del(strings[2465]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2448]); +strings[7] = str->add(strings[7]); +strings[2466] = str->add("images/32"); +strings[2467] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/32"); +strings[7] = str->add(strings[7]); +strings[2466] = str->add(strings[2466]); +strings[2468] = str->add("e,action,mouse,move"); +strings[2469] = str->add("e"); +strings[2470] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[2468]); +str->del(strings[2469]); +str->del(strings[2470]); +str->del(strings[1853]); +strings[2471] = str->add("/usr/devel/lib/enlightenment/modules/conf_profiles/linux-gnu-x86_64/module.so"); +strings[2471] = str->add(strings[2471]); +strings[24] = str->add(strings[24]); +strings[2472] = str->add("/usr/devel/lib/enlightenment/modules/conf_profiles"); +str->del(strings[2471]); +strings[2473] = str->add("profiles"); +strings[2474] = str->add("Profiles"); +strings[2475] = str->add("enlightenment/profiles"); +str->del(strings[24]); +strings[2476] = str->add("e,action,mouse,move"); +strings[2477] = str->add("e"); +strings[2478] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[2476] = str->add(strings[2476]); +strings[2477] = str->add(strings[2477]); +strings[2478] = str->add(strings[2478]); +strings[1853] = str->add(strings[1853]); +strings[2476] = str->add(strings[2476]); +strings[2477] = str->add(strings[2477]); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +strings[2476] = str->add(strings[2476]); +strings[2477] = str->add(strings[2477]); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1862] = str->add(strings[1862]); +strings[2476] = str->add(strings[2476]); +strings[2477] = str->add(strings[2477]); +strings[2478] = str->add(strings[2478]); +strings[1862] = str->add(strings[1862]); +strings[2476] = str->add(strings[2476]); +strings[2477] = str->add(strings[2477]); +strings[2478] = str->add(strings[2478]); +strings[1862] = str->add(strings[1862]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[2478]); +str->del(strings[1853]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[2478]); +str->del(strings[1853]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[1737]); +str->del(strings[1856]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1862]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[2478]); +str->del(strings[1862]); +str->del(strings[2476]); +str->del(strings[2477]); +str->del(strings[2478]); +str->del(strings[1862]); +str->del(strings[7]); +str->del(strings[2466]); +strings[7] = str->add(strings[7]); +strings[2479] = str->add("images/33"); +strings[2480] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/33"); +strings[7] = str->add(strings[7]); +strings[2479] = str->add(strings[2479]); +strings[2481] = str->add("/usr/devel/lib/enlightenment/modules/conf_screensaver/linux-gnu-x86_64/module.so"); +strings[2481] = str->add(strings[2481]); +strings[23] = str->add(strings[23]); +strings[2482] = str->add("/usr/devel/lib/enlightenment/modules/conf_screensaver"); +str->del(strings[2481]); +strings[2483] = str->add("screen_saver"); +strings[2484] = str->add("Screen Saver"); +strings[2485] = str->add("enlightenment/screensaver"); +str->del(strings[23]); +strings[2486] = str->add("e,action,mouse,move"); +strings[2487] = str->add("e"); +strings[2488] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +strings[2486] = str->add(strings[2486]); +strings[2487] = str->add(strings[2487]); +strings[2488] = str->add(strings[2488]); +strings[1862] = str->add(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[2486]); +str->del(strings[2487]); +str->del(strings[2488]); +str->del(strings[1862]); +str->del(strings[7]); +str->del(strings[2479]); +strings[7] = str->add(strings[7]); +strings[2489] = str->add("images/34"); +strings[2490] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/34"); +strings[7] = str->add(strings[7]); +strings[2489] = str->add(strings[2489]); +strings[2491] = str->add("/usr/devel/lib/enlightenment/modules/conf_shelves/linux-gnu-x86_64/module.so"); +strings[2491] = str->add(strings[2491]); +strings[22] = str->add(strings[22]); +strings[2492] = str->add("/usr/devel/lib/enlightenment/modules/conf_shelves"); +str->del(strings[2491]); +strings[2493] = str->add("shelves"); +strings[2494] = str->add("Shelves"); +strings[2495] = str->add("enlightenment/shelf"); +str->del(strings[22]); +strings[2496] = str->add("e,action,mouse,move"); +strings[2497] = str->add("e"); +strings[2498] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +strings[2496] = str->add(strings[2496]); +strings[2497] = str->add(strings[2497]); +strings[2498] = str->add(strings[2498]); +strings[1862] = str->add(strings[1862]); +strings[2496] = str->add(strings[2496]); +strings[2497] = str->add(strings[2497]); +strings[2498] = str->add(strings[2498]); +strings[1862] = str->add(strings[1862]); +strings[2496] = str->add(strings[2496]); +strings[2497] = str->add(strings[2497]); +strings[1740] = str->add(strings[1740]); +strings[1862] = str->add(strings[1862]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +strings[2496] = str->add(strings[2496]); +strings[2497] = str->add(strings[2497]); +strings[2498] = str->add(strings[2498]); +strings[1856] = str->add(strings[1856]); +strings[2496] = str->add(strings[2496]); +strings[2497] = str->add(strings[2497]); +strings[2498] = str->add(strings[2498]); +strings[1856] = str->add(strings[1856]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[2498]); +str->del(strings[1862]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[2498]); +str->del(strings[1862]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[2498]); +str->del(strings[1862]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[1740]); +str->del(strings[1862]); +str->del(strings[1737]); +str->del(strings[1856]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[2498]); +str->del(strings[1856]); +str->del(strings[2496]); +str->del(strings[2497]); +str->del(strings[2498]); +str->del(strings[1856]); +strings[2499] = str->add("/usr/devel/lib/enlightenment/modules/conf_startup/linux-gnu-x86_64/module.so"); +strings[2499] = str->add(strings[2499]); +strings[21] = str->add(strings[21]); +strings[2500] = str->add("/usr/devel/lib/enlightenment/modules/conf_startup"); +str->del(strings[2499]); +strings[2501] = str->add("startup"); +strings[2502] = str->add("Startup"); +strings[2503] = str->add("enlightenment/startup"); +str->del(strings[21]); +strings[2504] = str->add("e,action,mouse,move"); +strings[2505] = str->add("e"); +strings[2506] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2506] = str->add(strings[2506]); +strings[1856] = str->add(strings[1856]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2506] = str->add(strings[2506]); +strings[1856] = str->add(strings[1856]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2506] = str->add(strings[2506]); +strings[1853] = str->add(strings[1853]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2506] = str->add(strings[2506]); +strings[1853] = str->add(strings[1853]); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +strings[2507] = str->add("e,state,focused"); +strings[2505] = str->add(strings[2505]); +strings[2504] = str->add(strings[2504]); +strings[2505] = str->add(strings[2505]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2506]); +str->del(strings[1856]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2506]); +str->del(strings[1856]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2506]); +str->del(strings[1856]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1853]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2506]); +str->del(strings[1853]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2506]); +str->del(strings[1853]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[2507]); +str->del(strings[2505]); +str->del(strings[2504]); +str->del(strings[2505]); +str->del(strings[7]); +str->del(strings[2489]); +strings[7] = str->add(strings[7]); +strings[2508] = str->add("images/35"); +strings[2509] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/35"); +strings[7] = str->add(strings[7]); +strings[2508] = str->add(strings[2508]); +strings[2510] = str->add("e,action,mouse,move"); +strings[2511] = str->add("e"); +str->del(strings[2510]); +str->del(strings[2511]); +strings[2512] = str->add("/usr/devel/lib/enlightenment/modules/conf_theme/linux-gnu-x86_64/module.so"); +strings[2512] = str->add(strings[2512]); +strings[20] = str->add(strings[20]); +strings[2513] = str->add("/usr/devel/lib/enlightenment/modules/conf_theme"); +str->del(strings[2512]); +strings[63] = str->add(strings[63]); +strings[2514] = str->add("Theme"); +strings[376] = str->add(strings[376]); +str->del(strings[20]); +strings[2515] = str->add("e,action,mouse,move"); +strings[2516] = str->add("e"); +strings[1737] = str->add(strings[1737]); +strings[377] = str->add(strings[377]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[2515] = str->add(strings[2515]); +strings[2516] = str->add(strings[2516]); +strings[2517] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +strings[2515] = str->add(strings[2515]); +strings[2516] = str->add(strings[2516]); +strings[2517] = str->add(strings[2517]); +strings[377] = str->add(strings[377]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +strings[2515] = str->add(strings[2515]); +strings[2516] = str->add(strings[2516]); +strings[2517] = str->add(strings[2517]); +strings[377] = str->add(strings[377]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +strings[2517] = str->add(strings[2517]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2515]); +str->del(strings[2516]); +str->del(strings[1737]); +str->del(strings[377]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[2515]); +str->del(strings[2516]); +str->del(strings[2517]); +str->del(strings[377]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[2515]); +str->del(strings[2516]); +str->del(strings[2517]); +str->del(strings[377]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[2515]); +str->del(strings[2516]); +str->del(strings[2517]); +str->del(strings[377]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[2517]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2508]); +strings[7] = str->add(strings[7]); +strings[2518] = str->add("images/36"); +strings[2519] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/36"); +strings[7] = str->add(strings[7]); +strings[2518] = str->add(strings[2518]); +strings[2520] = str->add("e,action,mouse,move"); +strings[2521] = str->add("e"); +strings[2522] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2522] = str->add(strings[2522]); +strings[1946] = str->add(strings[1946]); +strings[2522] = str->add(strings[2522]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2520]); +str->del(strings[2521]); +str->del(strings[2522]); +str->del(strings[377]); +str->del(strings[2522]); +str->del(strings[1946]); +str->del(strings[2522]); +str->del(strings[1946]); +strings[2523] = str->add("/usr/devel/lib/enlightenment/modules/conf_transitions/linux-gnu-x86_64/module.so"); +strings[2523] = str->add(strings[2523]); +strings[19] = str->add(strings[19]); +strings[2524] = str->add("/usr/devel/lib/enlightenment/modules/conf_transitions"); +str->del(strings[2523]); +strings[2525] = str->add("transitions"); +strings[2526] = str->add("Transitions"); +strings[2527] = str->add("enlightenment/transitions"); +str->del(strings[19]); +strings[2528] = str->add("e,action,mouse,move"); +strings[2529] = str->add("e"); +strings[2530] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2528] = str->add(strings[2528]); +strings[2529] = str->add(strings[2529]); +strings[2530] = str->add(strings[2530]); +strings[377] = str->add(strings[377]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2528] = str->add(strings[2528]); +strings[2529] = str->add(strings[2529]); +strings[2530] = str->add(strings[2530]); +strings[377] = str->add(strings[377]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2528] = str->add(strings[2528]); +strings[2529] = str->add(strings[2529]); +strings[2530] = str->add(strings[2530]); +strings[377] = str->add(strings[377]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2528] = str->add(strings[2528]); +strings[2529] = str->add(strings[2529]); +strings[2530] = str->add(strings[2530]); +strings[377] = str->add(strings[377]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +strings[2530] = str->add(strings[2530]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2528]); +str->del(strings[2529]); +str->del(strings[2530]); +str->del(strings[377]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2528]); +str->del(strings[2529]); +str->del(strings[2530]); +str->del(strings[377]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2528]); +str->del(strings[2529]); +str->del(strings[2530]); +str->del(strings[377]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2528]); +str->del(strings[2529]); +str->del(strings[2530]); +str->del(strings[377]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2528]); +str->del(strings[2529]); +str->del(strings[2530]); +str->del(strings[377]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[2530]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2518]); +strings[7] = str->add(strings[7]); +strings[2531] = str->add("images/37"); +strings[2532] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/37"); +strings[7] = str->add(strings[7]); +strings[2531] = str->add(strings[2531]); +strings[2533] = str->add("/usr/devel/lib/enlightenment/modules/conf_wallpaper/linux-gnu-x86_64/module.so"); +strings[2533] = str->add(strings[2533]); +strings[18] = str->add(strings[18]); +strings[2534] = str->add("/usr/devel/lib/enlightenment/modules/conf_wallpaper"); +str->del(strings[2533]); +strings[2535] = str->add("wallpaper"); +strings[2536] = str->add("Wallpaper"); +strings[1750] = str->add(strings[1750]); +strings[2537] = str->add("wallpaper_desk"); +strings[2536] = str->add(strings[2536]); +strings[2250] = str->add(strings[2250]); +strings[1749] = str->add(strings[1749]); +strings[1750] = str->add(strings[1750]); +str->del(strings[18]); +strings[2538] = str->add("e,action,mouse,move"); +strings[2539] = str->add("e"); +strings[2540] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2538] = str->add(strings[2538]); +strings[2539] = str->add(strings[2539]); +strings[2540] = str->add(strings[2540]); +strings[377] = str->add(strings[377]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +strings[2540] = str->add(strings[2540]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2538]); +str->del(strings[2539]); +str->del(strings[2540]); +str->del(strings[377]); +str->del(strings[2540]); +str->del(strings[1946]); +str->del(strings[2540]); +str->del(strings[1946]); +strings[2541] = str->add("e,action,mouse,move"); +strings[2542] = str->add("e"); +strings[2543] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2543] = str->add(strings[2543]); +strings[1946] = str->add(strings[1946]); +strings[2543] = str->add(strings[2543]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2541]); +str->del(strings[2542]); +str->del(strings[2543]); +str->del(strings[377]); +str->del(strings[2543]); +str->del(strings[1946]); +str->del(strings[2543]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2531]); +strings[7] = str->add(strings[7]); +strings[2544] = str->add("images/38"); +strings[2545] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/38"); +strings[7] = str->add(strings[7]); +strings[2544] = str->add(strings[2544]); +strings[2546] = str->add("e,action,mouse,move"); +strings[2547] = str->add("e"); +strings[2548] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2548] = str->add(strings[2548]); +strings[1946] = str->add(strings[1946]); +strings[2548] = str->add(strings[2548]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2546]); +str->del(strings[2547]); +str->del(strings[2548]); +str->del(strings[377]); +str->del(strings[2548]); +str->del(strings[1946]); +str->del(strings[2548]); +str->del(strings[1946]); +strings[2549] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_display/linux-gnu-x86_64/module.so"); +strings[2549] = str->add(strings[2549]); +strings[17] = str->add(strings[17]); +strings[2550] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_display"); +str->del(strings[2549]); +strings[2551] = str->add("windows"); +strings[2552] = str->add("Windows"); +strings[2250] = str->add(strings[2250]); +strings[2553] = str->add("window_display"); +strings[2554] = str->add("Window Display"); +strings[2250] = str->add(strings[2250]); +str->del(strings[17]); +strings[2555] = str->add("e,action,mouse,move"); +strings[2556] = str->add("e"); +strings[2557] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2557] = str->add(strings[2557]); +strings[1946] = str->add(strings[1946]); +strings[2557] = str->add(strings[2557]); +strings[1946] = str->add(strings[1946]); +strings[2555] = str->add(strings[2555]); +strings[2556] = str->add(strings[2556]); +strings[2557] = str->add(strings[2557]); +strings[377] = str->add(strings[377]); +strings[2557] = str->add(strings[2557]); +strings[1946] = str->add(strings[1946]); +strings[2557] = str->add(strings[2557]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2555]); +str->del(strings[2556]); +str->del(strings[2557]); +str->del(strings[377]); +str->del(strings[2557]); +str->del(strings[1946]); +str->del(strings[2557]); +str->del(strings[1946]); +str->del(strings[2555]); +str->del(strings[2556]); +str->del(strings[2557]); +str->del(strings[377]); +str->del(strings[2557]); +str->del(strings[1946]); +str->del(strings[2557]); +str->del(strings[1946]); +strings[2558] = str->add("e,action,mouse,move"); +strings[2559] = str->add("e"); +strings[2560] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[2560] = str->add(strings[2560]); +strings[1946] = str->add(strings[1946]); +strings[2560] = str->add(strings[2560]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2558]); +str->del(strings[2559]); +str->del(strings[2560]); +str->del(strings[377]); +str->del(strings[2560]); +str->del(strings[1946]); +str->del(strings[2560]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2544]); +strings[7] = str->add(strings[7]); +strings[2561] = str->add("images/39"); +strings[2562] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/39"); +strings[7] = str->add(strings[7]); +strings[2561] = str->add(strings[2561]); +strings[2563] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_focus/linux-gnu-x86_64/module.so"); +strings[2563] = str->add(strings[2563]); +strings[16] = str->add(strings[16]); +strings[2564] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_focus"); +str->del(strings[2563]); +strings[2565] = str->add("window_focus"); +strings[2566] = str->add("Window Focus"); +strings[2567] = str->add("enlightenment/focus"); +str->del(strings[16]); +strings[2568] = str->add("e,action,mouse,move"); +strings[2569] = str->add("e"); +strings[2570] = str->add("e,action,mouse,down"); +strings[2569] = str->add(strings[2569]); +strings[167] = str->add(strings[167]); +strings[377] = str->add(strings[377]); +strings[2571] = str->add("Main"); +strings[66] = str->add(strings[66]); +strings[2572] = str->add("Favorite Applications"); +strings[2573] = str->add("base/theme/icons"); +strings[1839] = str->add(strings[1839]); +strings[2574] = str->add("e/widgets/border/default/border"); +strings[2575] = str->add("e/widgets/border/shaped/border"); +strings[2576] = str->add("e/widgets/border/noresize/border"); +strings[2577] = str->add("e/widgets/border/dialog/border"); +strings[2578] = str->add("e/widgets/border/noresize_dialog/border"); +strings[2579] = str->add("e/widgets/border/pixel/border"); +strings[2580] = str->add("e/pointer/enlightenment/default/color"); +strings[1754] = str->add(strings[1754]); +strings[2581] = str->add("e/widgets/menu/default/background"); +strings[2582] = str->add("e/widgets/menu/default/separator"); +strings[2583] = str->add("e/widgets/menu/default/item_bg"); +strings[2584] = str->add("e/widgets/menu/default/icon"); +strings[2585] = str->add("e/widgets/menu/default/label"); +strings[2586] = str->add("e/widgets/menu/default/submenu"); +strings[2587] = str->add("e/widgets/menu/default/check"); +strings[2588] = str->add("e/widgets/menu/default/radio"); +strings[1945] = str->add(strings[1945]); +strings[2061] = str->add(strings[2061]); +strings[1960] = str->add(strings[1960]); +strings[2589] = str->add("e/shelf/invisible/base"); +strings[2590] = str->add("e/shelf/invisible/inset"); +strings[2591] = str->add("e/shelf/invisible/plain"); +strings[2592] = str->add("e/shelf/alternate/base"); +strings[2593] = str->add("e/shelf/alternate/inset"); +strings[2594] = str->add("e/shelf/alternate/plain"); +strings[1957] = str->add(strings[1957]); +strings[2127] = str->add(strings[2127]); +strings[1963] = str->add(strings[1963]); +strings[2595] = str->add("e/modules/pager/window"); +strings[2090] = str->add(strings[2090]); +strings[2081] = str->add(strings[2081]); +strings[2112] = str->add(strings[2112]); +strings[2083] = str->add(strings[2083]); +strings[2596] = str->add("e/widgets/winlist/main"); +strings[2597] = str->add("e/widgets/winlist/item"); +strings[2598] = str->add("e/modules/mixer/main"); +strings[2599] = str->add("e/sys/logout"); +strings[2600] = str->add("e/widgets/dialog/main"); +strings[2601] = str->add("e/widgets/dialog/text"); +strings[2602] = str->add("e/widgets/configure/main"); +strings[2603] = str->add("e/widgets/border/default/move"); +strings[2604] = str->add("e/widgets/border/default/resize"); +strings[2605] = str->add("e/transpreview/0"); +strings[2606] = str->add("e/transpreview/1"); +strings[2607] = str->add("e/transitions/crossfade"); +strings[2608] = str->add("e/transitions/vswipe"); +strings[2609] = str->add("e/widgets/check"); +strings[2610] = str->add("e/widgets/check_icon"); +strings[2611] = str->add("e/widgets/radio"); +strings[2612] = str->add("e/widgets/radio_icon"); +strings[2613] = str->add("e/widgets/button"); +strings[2614] = str->add("e/widgets/scrollframe"); +strings[2615] = str->add("e/widgets/ilist"); +strings[2616] = str->add("e/widgets/ilist_odd"); +strings[2617] = str->add("e/widgets/ilist_header"); +strings[2618] = str->add("e/widgets/ilist_header_odd"); +strings[2619] = str->add("e/widgets/entry"); +strings[2620] = str->add("e/widgets/entry/text"); +strings[2621] = str->add("e/widgets/entry/cursor"); +strings[2622] = str->add("e/widgets/entry/selection"); +strings[2623] = str->add("e/widgets/preview"); +strings[2624] = str->add("e/widgets/deskpreview/desk"); +strings[2625] = str->add("e/widgets/color_well"); +strings[2626] = str->add("e/widgets/spectrum"); +strings[2627] = str->add("e/widgets/cslider"); +strings[2628] = str->add("e/widgets/slider_vertical"); +strings[2629] = str->add("e/widgets/slider_horizontal"); +strings[2630] = str->add("e/widgets/frame"); +strings[2631] = str->add("e/widgets/label"); +strings[2632] = str->add("e/widgets/fontpreview"); +strings[2633] = str->add("e/widgets/textblock"); +strings[2634] = str->add("e/widgets/menu/default/submenu_bg"); +strings[2635] = str->add("e/sys/halt"); +strings[2636] = str->add("e/sys/reboot"); +strings[2637] = str->add("e/sys/suspend"); +strings[2638] = str->add("e/sys/hibernate"); +strings[2639] = str->add("e/widgets/gradpreview"); +strings[1839] = str->add(strings[1839]); +strings[2574] = str->add(strings[2574]); +strings[2575] = str->add(strings[2575]); +strings[2576] = str->add(strings[2576]); +strings[2577] = str->add(strings[2577]); +strings[2578] = str->add(strings[2578]); +strings[2579] = str->add(strings[2579]); +strings[2580] = str->add(strings[2580]); +strings[1754] = str->add(strings[1754]); +strings[2581] = str->add(strings[2581]); +strings[2582] = str->add(strings[2582]); +strings[2583] = str->add(strings[2583]); +strings[2584] = str->add(strings[2584]); +strings[2585] = str->add(strings[2585]); +strings[2586] = str->add(strings[2586]); +strings[2587] = str->add(strings[2587]); +strings[2588] = str->add(strings[2588]); +strings[1945] = str->add(strings[1945]); +strings[2061] = str->add(strings[2061]); +strings[1960] = str->add(strings[1960]); +strings[2589] = str->add(strings[2589]); +strings[2590] = str->add(strings[2590]); +strings[2591] = str->add(strings[2591]); +strings[2592] = str->add(strings[2592]); +strings[2593] = str->add(strings[2593]); +strings[2594] = str->add(strings[2594]); +strings[1957] = str->add(strings[1957]); +strings[2127] = str->add(strings[2127]); +strings[1963] = str->add(strings[1963]); +strings[2595] = str->add(strings[2595]); +strings[2090] = str->add(strings[2090]); +strings[2081] = str->add(strings[2081]); +strings[2112] = str->add(strings[2112]); +strings[2083] = str->add(strings[2083]); +strings[2596] = str->add(strings[2596]); +strings[2597] = str->add(strings[2597]); +strings[2598] = str->add(strings[2598]); +strings[2599] = str->add(strings[2599]); +strings[2600] = str->add(strings[2600]); +strings[2601] = str->add(strings[2601]); +strings[2602] = str->add(strings[2602]); +strings[2603] = str->add(strings[2603]); +strings[2604] = str->add(strings[2604]); +strings[2605] = str->add(strings[2605]); +strings[2606] = str->add(strings[2606]); +strings[2607] = str->add(strings[2607]); +strings[2608] = str->add(strings[2608]); +strings[2609] = str->add(strings[2609]); +strings[2610] = str->add(strings[2610]); +strings[2611] = str->add(strings[2611]); +strings[2612] = str->add(strings[2612]); +strings[2613] = str->add(strings[2613]); +strings[2614] = str->add(strings[2614]); +strings[2615] = str->add(strings[2615]); +strings[2616] = str->add(strings[2616]); +strings[2617] = str->add(strings[2617]); +strings[2618] = str->add(strings[2618]); +strings[2619] = str->add(strings[2619]); +strings[2620] = str->add(strings[2620]); +strings[2621] = str->add(strings[2621]); +strings[2622] = str->add(strings[2622]); +strings[2623] = str->add(strings[2623]); +strings[2624] = str->add(strings[2624]); +strings[2625] = str->add(strings[2625]); +strings[2626] = str->add(strings[2626]); +strings[2627] = str->add(strings[2627]); +strings[2628] = str->add(strings[2628]); +strings[2629] = str->add(strings[2629]); +strings[2630] = str->add(strings[2630]); +strings[2631] = str->add(strings[2631]); +strings[2632] = str->add(strings[2632]); +strings[2633] = str->add(strings[2633]); +strings[2634] = str->add(strings[2634]); +strings[2635] = str->add(strings[2635]); +strings[2636] = str->add(strings[2636]); +strings[2637] = str->add(strings[2637]); +strings[2638] = str->add(strings[2638]); +strings[2639] = str->add(strings[2639]); +str->del(strings[1839]); +str->del(strings[2574]); +str->del(strings[2575]); +str->del(strings[2576]); +str->del(strings[2577]); +str->del(strings[2578]); +str->del(strings[2579]); +str->del(strings[2580]); +str->del(strings[1754]); +str->del(strings[2581]); +str->del(strings[2582]); +str->del(strings[2583]); +str->del(strings[2584]); +str->del(strings[2585]); +str->del(strings[2586]); +str->del(strings[2587]); +str->del(strings[2588]); +str->del(strings[1945]); +str->del(strings[2061]); +str->del(strings[1960]); +str->del(strings[2589]); +str->del(strings[2590]); +str->del(strings[2591]); +str->del(strings[2592]); +str->del(strings[2593]); +str->del(strings[2594]); +str->del(strings[1957]); +str->del(strings[2127]); +str->del(strings[1963]); +str->del(strings[2595]); +str->del(strings[2090]); +str->del(strings[2081]); +str->del(strings[2112]); +str->del(strings[2083]); +str->del(strings[2596]); +str->del(strings[2597]); +str->del(strings[2598]); +str->del(strings[2599]); +str->del(strings[2600]); +str->del(strings[2601]); +str->del(strings[2602]); +str->del(strings[2603]); +str->del(strings[2604]); +str->del(strings[2605]); +str->del(strings[2606]); +str->del(strings[2607]); +str->del(strings[2608]); +str->del(strings[2609]); +str->del(strings[2610]); +str->del(strings[2611]); +str->del(strings[2612]); +str->del(strings[2613]); +str->del(strings[2614]); +str->del(strings[2615]); +str->del(strings[2616]); +str->del(strings[2617]); +str->del(strings[2618]); +str->del(strings[2619]); +str->del(strings[2620]); +str->del(strings[2621]); +str->del(strings[2622]); +str->del(strings[2623]); +str->del(strings[2624]); +str->del(strings[2625]); +str->del(strings[2626]); +str->del(strings[2627]); +str->del(strings[2628]); +str->del(strings[2629]); +str->del(strings[2630]); +str->del(strings[2631]); +str->del(strings[2632]); +str->del(strings[2633]); +str->del(strings[2634]); +str->del(strings[2635]); +str->del(strings[2636]); +str->del(strings[2637]); +str->del(strings[2638]); +str->del(strings[2639]); +strings[1839] = str->add(strings[1839]); +strings[2090] = str->add(strings[2090]); +strings[2640] = str->add("e/modules/battery/popup"); +strings[2574] = str->add(strings[2574]); +strings[2575] = str->add(strings[2575]); +strings[2576] = str->add(strings[2576]); +strings[2577] = str->add(strings[2577]); +strings[2578] = str->add(strings[2578]); +strings[2579] = str->add(strings[2579]); +strings[2641] = str->add("e/widgets/border/default/close"); +strings[2642] = str->add("e/widgets/border/default/minimize"); +strings[2643] = str->add("e/widgets/border/default/maximize"); +strings[2644] = str->add("e/widgets/border/default/shade"); +strings[2645] = str->add("e/widgets/border/default/stick"); +strings[2646] = str->add("e/widgets/border/default/kill"); +strings[2647] = str->add("e/widgets/border/default/locks"); +strings[2648] = str->add("e/widgets/border/default/locks_user"); +strings[2649] = str->add("e/widgets/border/default/locks_application"); +strings[2650] = str->add("e/widgets/border/default/borderless"); +strings[2651] = str->add("e/widgets/border/default/fullscreen"); +strings[2652] = str->add("e/widgets/border/default/remember"); +strings[2653] = str->add("e/widgets/border/default/skip_winlist"); +strings[2654] = str->add("e/widgets/border/default/skip"); +strings[2655] = str->add("e/widgets/border/default/skip_pager"); +strings[2656] = str->add("e/widgets/border/default/sendto"); +strings[2657] = str->add("e/widgets/border/default/stacking"); +strings[2658] = str->add("e/widgets/border/default/stack_on_top"); +strings[2659] = str->add("e/widgets/border/default/stack_normal"); +strings[2660] = str->add("e/widgets/border/default/stack_below"); +strings[2661] = str->add("e/widgets/border/default/properties"); +strings[2112] = str->add(strings[2112]); +strings[1935] = str->add(strings[1935]); +strings[2662] = str->add("e/gadman/popup"); +strings[1929] = str->add(strings[1929]); +strings[2663] = str->add("e/gadman/frame"); +strings[2067] = str->add(strings[2067]); +strings[2069] = str->add(strings[2069]); +strings[2664] = str->add("e/modules/ibar/drop"); +strings[2665] = str->add("e/modules/ibar/drop_overlay"); +strings[2581] = str->add(strings[2581]); +strings[2582] = str->add(strings[2582]); +strings[2583] = str->add(strings[2583]); +strings[2634] = str->add(strings[2634]); +strings[2587] = str->add(strings[2587]); +strings[2588] = str->add(strings[2588]); +strings[2584] = str->add(strings[2584]); +strings[2585] = str->add(strings[2585]); +strings[2586] = str->add(strings[2586]); +strings[2127] = str->add(strings[2127]); +strings[1963] = str->add(strings[1963]); +strings[2595] = str->add(strings[2595]); +strings[2604] = str->add(strings[2604]); +strings[2603] = str->add(strings[2603]); +strings[2081] = str->add(strings[2081]); +strings[2666] = str->add("e/error/main"); +strings[2083] = str->add(strings[2083]); +strings[2667] = str->add("e/modules/ibox/icon"); +strings[2668] = str->add("e/modules/ibox/icon_overlay"); +strings[2669] = str->add("e/modules/ibox/drop"); +strings[2670] = str->add("e/modules/ibox/drop_overlay"); +strings[1957] = str->add(strings[1957]); +strings[2596] = str->add(strings[2596]); +strings[2597] = str->add(strings[2597]); +strings[2605] = str->add(strings[2605]); +strings[2606] = str->add(strings[2606]); +strings[2607] = str->add(strings[2607]); +strings[2608] = str->add(strings[2608]); +strings[2600] = str->add(strings[2600]); +strings[2601] = str->add(strings[2601]); +strings[2602] = str->add(strings[2602]); +strings[2671] = str->add("e/icons/enlightenment/e"); +strings[2672] = str->add("e/icons/enlightenment/reset"); +strings[2673] = str->add("e/icons/enlightenment/exit"); +strings[2674] = str->add("e/icons/enlightenment/logout"); +strings[2675] = str->add("e/icons/enlightenment/halt"); +strings[2676] = str->add("e/icons/enlightenment/reboot"); +strings[2677] = str->add("e/icons/enlightenment/suspend"); +strings[2678] = str->add("e/icons/enlightenment/hibernate"); +strings[2679] = str->add("e/icons/enlightenment/screen_setup"); +strings[2680] = str->add("e/icons/enlightenment/themes"); +strings[2681] = str->add("e/icons/enlightenment/colors"); +strings[2682] = str->add("e/icons/enlightenment/windows"); +strings[2683] = str->add("e/icons/enlightenment/lost_windows"); +strings[2684] = str->add("e/icons/enlightenment/focus"); +strings[2685] = str->add("e/icons/enlightenment/modules"); +strings[2686] = str->add("e/icons/enlightenment/favorites"); +strings[2687] = str->add("e/icons/enlightenment/desktops"); +strings[2688] = str->add("e/icons/enlightenment/configuration"); +strings[2689] = str->add("e/icons/enlightenment/intl"); +strings[2690] = str->add("e/icons/enlightenment/system"); +strings[2691] = str->add("e/icons/enlightenment/run"); +strings[2692] = str->add("e/icons/enlightenment/directories"); +strings[2693] = str->add("e/icons/enlightenment/fileman"); +strings[2694] = str->add("e/icons/enlightenment/unknown"); +strings[2695] = str->add("e/icons/widget/new_dialog"); +strings[2696] = str->add("e/icons/widget/up_arrow"); +strings[2697] = str->add("e/icons/widget/down_arrow"); +strings[2698] = str->add("e/icons/widget/up_dir"); +strings[2699] = str->add("e/icons/enlightenment/mouse"); +strings[2700] = str->add("e/icons/enlightenment/mouse_left"); +strings[2701] = str->add("e/icons/enlightenment/mouse_middle"); +strings[2702] = str->add("e/icons/enlightenment/mouse_right"); +strings[2703] = str->add("e/icons/enlightenment/mouse_extra"); +strings[2704] = str->add("e/icons/enlightenment/mouse_wheel"); +strings[2705] = str->add("e/icons/enlightenment/mouse_clean"); +strings[2706] = str->add("e/icons/enlightenment/keys"); +strings[2707] = str->add("e/icons/enlightenment/desklock"); +strings[2708] = str->add("e/icons/enlightenment/desklock_menu"); +strings[2709] = str->add("e/icons/enlightenment/regenerate_menus"); +strings[2710] = str->add("e/icons/enlightenment/screen_resolution"); +strings[2711] = str->add("e/icons/enlightenment/shelf"); +strings[2712] = str->add("e/icons/enlightenment/fonts"); +strings[2713] = str->add("e/icons/enlightenment/background"); +strings[2714] = str->add("e/icons/enlightenment/icon_theme"); +strings[2715] = str->add("e/icons/enlightenment/applications"); +strings[2716] = str->add("e/icons/enlightenment/transitions"); +strings[2717] = str->add("e/icons/enlightenment/performance"); +strings[2718] = str->add("e/icons/enlightenment/startup"); +strings[2719] = str->add("e/icons/enlightenment/winlist"); +strings[2720] = str->add("e/icons/enlightenment/window_manipulation"); +strings[2721] = str->add("e/icons/enlightenment/menus"); +strings[2722] = str->add("e/icons/enlightenment/screen_normal"); +strings[2723] = str->add("e/icons/enlightenment/screen_around"); +strings[2724] = str->add("e/icons/enlightenment/screen_left"); +strings[2725] = str->add("e/icons/enlightenment/screen_right"); +strings[2726] = str->add("e/icons/enlightenment/screen_vflip"); +strings[2727] = str->add("e/icons/enlightenment/screen_hflip"); +strings[2728] = str->add("e/icons/enlightenment/shelf_position_bottom"); +strings[2729] = str->add("e/icons/enlightenment/shelf_position_bottom_left"); +strings[2730] = str->add("e/icons/enlightenment/shelf_position_bottom_right"); +strings[2731] = str->add("e/icons/enlightenment/shelf_position_top"); +strings[2732] = str->add("e/icons/enlightenment/shelf_position_top_left"); +strings[2733] = str->add("e/icons/enlightenment/shelf_position_top_right"); +strings[2734] = str->add("e/icons/enlightenment/shelf_position_left"); +strings[2735] = str->add("e/icons/enlightenment/shelf_position_left_top"); +strings[2736] = str->add("e/icons/enlightenment/shelf_position_left_bottom"); +strings[2737] = str->add("e/icons/enlightenment/shelf_position_right"); +strings[2738] = str->add("e/icons/enlightenment/shelf_position_right_top"); +strings[2739] = str->add("e/icons/enlightenment/shelf_position_right_bottom"); +strings[2740] = str->add("e/icons/enlightenment/shelf_bottom_desk"); +strings[2741] = str->add("e/icons/enlightenment/shelf_custom"); +strings[2742] = str->add("e/icons/enlightenment/shelf_dock"); +strings[2743] = str->add("e/icons/enlightenment/shelf_menu_bar"); +strings[2744] = str->add("e/icons/enlightenment/shelf_panel"); +strings[2745] = str->add("e/icons/enlightenment/shelf_top_desk"); +strings[2746] = str->add("e/icons/enlightenment/wallpaper_stretch"); +strings[2747] = str->add("e/icons/enlightenment/wallpaper_tile"); +strings[2748] = str->add("e/icons/enlightenment/wallpaper_center"); +strings[2749] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in"); +strings[2750] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out"); +strings[2751] = str->add("e/icons/enlightenment/gradient_h"); +strings[2752] = str->add("e/icons/enlightenment/gradient_v"); +strings[2753] = str->add("e/icons/enlightenment/gradient_du"); +strings[2754] = str->add("e/icons/enlightenment/gradient_dd"); +strings[2755] = str->add("e/icons/enlightenment/gradient_rad"); +strings[2756] = str->add("e/icons/enlightenment/advanced"); +strings[2757] = str->add("e/icons/enlightenment/behavior"); +strings[2758] = str->add("e/icons/enlightenment/appearance"); +strings[2759] = str->add("e/icons/enlightenment/extensions"); +strings[2760] = str->add("e/icons/enlightenment/imc"); +strings[2761] = str->add("e/icons/enlightenment/file_icons"); +strings[2762] = str->add("e/icons/enlightenment/menu_settings"); +strings[2763] = str->add("e/icons/enlightenment/ibar_applications"); +strings[2764] = str->add("e/icons/enlightenment/restart_applications"); +strings[2765] = str->add("e/icons/enlightenment/startup_applications"); +strings[2766] = str->add("e/icons/enlightenment/power_management"); +strings[2767] = str->add("e/icons/enlightenment/screensaver"); +strings[2768] = str->add("e/icons/enlightenment/window_remembers"); +strings[2580] = str->add(strings[2580]); +strings[1754] = str->add(strings[1754]); +strings[2769] = str->add("e/widgets/about/main"); +strings[2770] = str->add("e/theme/about"); +strings[2619] = str->add(strings[2619]); +strings[2620] = str->add(strings[2620]); +strings[2621] = str->add(strings[2621]); +strings[2622] = str->add(strings[2622]); +strings[2771] = str->add("e/fileman/default/window/main"); +strings[2772] = str->add("e/fileman/default/scrollframe"); +strings[2773] = str->add("e/fileman/default/list/variable"); +strings[2774] = str->add("e/fileman/default/list_odd/variable"); +strings[2775] = str->add("e/fileman/default/list/fixed"); +strings[2776] = str->add("e/fileman/default/list_odd/fixed"); +strings[2777] = str->add("e/fileman/default/icon/fixed"); +strings[2778] = str->add("e/fileman/default/icon/variable"); +strings[2779] = str->add("e/fileman/default/overlay"); +strings[2780] = str->add("e/fileman/default/list/drop_between"); +strings[2781] = str->add("e/fileman/default/list/drop_in"); +strings[2782] = str->add("e/fileman/desktop/scrollframe"); +strings[2783] = str->add("e/fileman/desktop/icon/fixed"); +strings[2784] = str->add("e/fileman/desktop/icon/variable"); +strings[2785] = str->add("e/fileman/desktop/overlay"); +strings[2786] = str->add("e/fileman/desktop/list/drop_between"); +strings[2787] = str->add("e/fileman/desktop/list/drop_in"); +strings[2788] = str->add("e/fileman/default/rubberband"); +strings[2789] = str->add("e/icons/fileman/folder"); +strings[2790] = str->add("e/icons/fileman/file"); +strings[2791] = str->add("e/icons/fileman/home"); +strings[2792] = str->add("e/icons/fileman/desktop"); +strings[2793] = str->add("e/icons/fileman/hdd"); +strings[2794] = str->add("e/icons/fileman/hd"); +strings[2795] = str->add("e/icons/fileman/mime/application/pdf"); +strings[2796] = str->add("e/icons/fileman/mime/text/x-csrc"); +strings[2797] = str->add("e/icons/fileman/mime/text/x-chdr"); +strings[2798] = str->add("e/icons/fileman/mime/application/x-object"); +strings[2799] = str->add("e/icons/fileman/mime/application/x-shellscript"); +strings[2800] = str->add("e/icons/fileman/mime/image/png"); +strings[2801] = str->add("e/icons/fileman/mime/image/jpeg"); +strings[2802] = str->add("e/icons/fileman/mime/video/x-msvideo"); +strings[2803] = str->add("e/icons/fileman/mime/audio/mpeg"); +strings[2804] = str->add("e/icons/fileman/mime/application/x-xcf"); +strings[2805] = str->add("e/icons/fileman/mime/text/x-c++src"); +strings[2806] = str->add("e/icons/fileman/mime/text/x-csharp"); +strings[2807] = str->add("e/icons/fileman/mime/text/x-patch"); +strings[2808] = str->add("e/icons/fileman/mime/application/msword"); +strings[2809] = str->add("e/icons/fileman/mime/application/ogg"); +strings[2810] = str->add("e/icons/fileman/mime/text/plain"); +strings[2811] = str->add("e/icons/fileman/mime/application/x-bzip"); +strings[2812] = str->add("e/icons/fileman/mime/application/x-deb"); +strings[2813] = str->add("e/icons/fileman/mime/application/x-font-ttf"); +strings[2814] = str->add("e/icons/fileman/mime/application/x-font-pcf"); +strings[2815] = str->add("e/icons/fileman/mime/application/x-font-bdf"); +strings[2816] = str->add("e/icons/fileman/mime/text/css"); +strings[2817] = str->add("e/icons/fileman/mime/text/html"); +strings[2817] = str->add(strings[2817]); +strings[2818] = str->add("e/icons/fileman/mime/application/zip"); +strings[2819] = str->add("e/icons/fileman/mime/application/x-gzip"); +strings[2820] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar"); +strings[2821] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar"); +strings[2822] = str->add("e/icons/fileman/mime/application/x-compressed-tar"); +strings[2823] = str->add("e/icons/fileman/mime/application/x-tar"); +strings[2824] = str->add("e/icons/fileman/mime/application/x-rar"); +strings[2825] = str->add("e/icons/fileman/mime/video/mpeg"); +strings[2826] = str->add("e/icons/fileman/mime/video"); +strings[2827] = str->add("e/icons/fileman/mime/text"); +strings[2828] = str->add("e/icons/fileman/mime/image"); +strings[2829] = str->add("e/icons/fileman/mime/audio"); +strings[2830] = str->add("e/fileman/default/button/open"); +strings[2831] = str->add("e/fileman/default/button/copy"); +strings[2832] = str->add("e/fileman/default/button/cut"); +strings[2833] = str->add("e/fileman/default/button/paste"); +strings[2834] = str->add("e/fileman/default/button/delete"); +strings[2835] = str->add("e/fileman/default/button/rename"); +strings[2836] = str->add("e/fileman/default/button/properties"); +strings[2837] = str->add("e/fileman/default/button/arrange_name"); +strings[2838] = str->add("e/fileman/default/button/arrange"); +strings[2839] = str->add("e/fileman/default/button/arrange_time"); +strings[2840] = str->add("e/fileman/default/button/new"); +strings[2841] = str->add("e/fileman/default/button/new_dir"); +strings[2842] = str->add("e/fileman/default/button/refresh"); +strings[2843] = str->add("e/fileman/default/button/view_details"); +strings[2844] = str->add("e/fileman/default/button/view_name"); +strings[2845] = str->add("e/fileman/default/button/view"); +strings[2846] = str->add("e/fileman/default/button/select"); +strings[2847] = str->add("e/widgets/fileselector/main"); +strings[2609] = str->add(strings[2609]); +strings[2610] = str->add(strings[2610]); +strings[2611] = str->add(strings[2611]); +strings[2612] = str->add(strings[2612]); +strings[2630] = str->add(strings[2630]); +strings[2613] = str->add(strings[2613]); +strings[2631] = str->add(strings[2631]); +strings[2614] = str->add(strings[2614]); +strings[2615] = str->add(strings[2615]); +strings[2616] = str->add(strings[2616]); +strings[2617] = str->add(strings[2617]); +strings[2848] = str->add("e/widgets/tlist"); +strings[2849] = str->add("e/widgets/tlist_odd"); +strings[2628] = str->add(strings[2628]); +strings[2629] = str->add(strings[2629]); +strings[2850] = str->add("e/widgets/exebuf/main"); +strings[2851] = str->add("e/widgets/exebuf/item"); +strings[2852] = str->add("e/desklock/background"); +strings[2853] = str->add("e/desklock/login_box"); +strings[2633] = str->add(strings[2633]); +strings[1945] = str->add(strings[1945]); +strings[2061] = str->add(strings[2061]); +strings[1960] = str->add(strings[1960]); +strings[2592] = str->add(strings[2592]); +strings[2593] = str->add(strings[2593]); +strings[2594] = str->add(strings[2594]); +strings[2589] = str->add(strings[2589]); +strings[2590] = str->add(strings[2590]); +strings[2591] = str->add(strings[2591]); +strings[2623] = str->add(strings[2623]); +strings[2627] = str->add(strings[2627]); +strings[2626] = str->add(strings[2626]); +strings[2625] = str->add(strings[2625]); +strings[2599] = str->add(strings[2599]); +strings[2635] = str->add(strings[2635]); +strings[2636] = str->add(strings[2636]); +strings[2637] = str->add(strings[2637]); +strings[2638] = str->add(strings[2638]); +strings[2624] = str->add(strings[2624]); +strings[2632] = str->add(strings[2632]); +strings[2854] = str->add("e/wizard/extra"); +strings[2855] = str->add("e/wizard/main"); +strings[2856] = str->add("e/toolbar/default/base"); +strings[2857] = str->add("e/widgets/slidesel"); +strings[2598] = str->add(strings[2598]); +strings[2858] = str->add("e/modules/connman/main"); +strings[2859] = str->add("e/modules/connman/network"); +strings[2639] = str->add(strings[2639]); +strings[1839] = str->add(strings[1839]); +strings[2090] = str->add(strings[2090]); +strings[2640] = str->add(strings[2640]); +strings[2574] = str->add(strings[2574]); +strings[2575] = str->add(strings[2575]); +strings[2576] = str->add(strings[2576]); +strings[2577] = str->add(strings[2577]); +strings[2578] = str->add(strings[2578]); +strings[2579] = str->add(strings[2579]); +strings[2641] = str->add(strings[2641]); +strings[2642] = str->add(strings[2642]); +strings[2643] = str->add(strings[2643]); +strings[2644] = str->add(strings[2644]); +strings[2645] = str->add(strings[2645]); +strings[2646] = str->add(strings[2646]); +strings[2647] = str->add(strings[2647]); +strings[2648] = str->add(strings[2648]); +strings[2649] = str->add(strings[2649]); +strings[2650] = str->add(strings[2650]); +strings[2651] = str->add(strings[2651]); +strings[2652] = str->add(strings[2652]); +strings[2653] = str->add(strings[2653]); +strings[2654] = str->add(strings[2654]); +strings[2655] = str->add(strings[2655]); +strings[2656] = str->add(strings[2656]); +strings[2657] = str->add(strings[2657]); +strings[2658] = str->add(strings[2658]); +strings[2659] = str->add(strings[2659]); +strings[2660] = str->add(strings[2660]); +strings[2661] = str->add(strings[2661]); +strings[2112] = str->add(strings[2112]); +strings[1935] = str->add(strings[1935]); +strings[2662] = str->add(strings[2662]); +strings[1929] = str->add(strings[1929]); +strings[2663] = str->add(strings[2663]); +strings[2067] = str->add(strings[2067]); +strings[2069] = str->add(strings[2069]); +strings[2664] = str->add(strings[2664]); +strings[2665] = str->add(strings[2665]); +strings[2581] = str->add(strings[2581]); +strings[2582] = str->add(strings[2582]); +strings[2583] = str->add(strings[2583]); +strings[2634] = str->add(strings[2634]); +strings[2587] = str->add(strings[2587]); +strings[2588] = str->add(strings[2588]); +strings[2584] = str->add(strings[2584]); +strings[2585] = str->add(strings[2585]); +strings[2586] = str->add(strings[2586]); +strings[2127] = str->add(strings[2127]); +strings[1963] = str->add(strings[1963]); +strings[2595] = str->add(strings[2595]); +strings[2604] = str->add(strings[2604]); +strings[2603] = str->add(strings[2603]); +strings[2081] = str->add(strings[2081]); +strings[2666] = str->add(strings[2666]); +strings[2083] = str->add(strings[2083]); +strings[2667] = str->add(strings[2667]); +strings[2668] = str->add(strings[2668]); +strings[2669] = str->add(strings[2669]); +strings[2670] = str->add(strings[2670]); +strings[1957] = str->add(strings[1957]); +strings[2596] = str->add(strings[2596]); +strings[2597] = str->add(strings[2597]); +strings[2605] = str->add(strings[2605]); +strings[2606] = str->add(strings[2606]); +strings[2607] = str->add(strings[2607]); +strings[2608] = str->add(strings[2608]); +strings[2600] = str->add(strings[2600]); +strings[2601] = str->add(strings[2601]); +strings[2602] = str->add(strings[2602]); +strings[2671] = str->add(strings[2671]); +strings[2672] = str->add(strings[2672]); +strings[2673] = str->add(strings[2673]); +strings[2674] = str->add(strings[2674]); +strings[2675] = str->add(strings[2675]); +strings[2676] = str->add(strings[2676]); +strings[2677] = str->add(strings[2677]); +strings[2678] = str->add(strings[2678]); +strings[2679] = str->add(strings[2679]); +strings[2680] = str->add(strings[2680]); +strings[2681] = str->add(strings[2681]); +strings[2682] = str->add(strings[2682]); +strings[2683] = str->add(strings[2683]); +strings[2684] = str->add(strings[2684]); +strings[2685] = str->add(strings[2685]); +strings[2686] = str->add(strings[2686]); +strings[2687] = str->add(strings[2687]); +strings[2688] = str->add(strings[2688]); +strings[2689] = str->add(strings[2689]); +strings[2690] = str->add(strings[2690]); +strings[2691] = str->add(strings[2691]); +strings[2692] = str->add(strings[2692]); +strings[2693] = str->add(strings[2693]); +strings[2694] = str->add(strings[2694]); +strings[2695] = str->add(strings[2695]); +strings[2696] = str->add(strings[2696]); +strings[2697] = str->add(strings[2697]); +strings[2698] = str->add(strings[2698]); +strings[2699] = str->add(strings[2699]); +strings[2700] = str->add(strings[2700]); +strings[2701] = str->add(strings[2701]); +strings[2702] = str->add(strings[2702]); +strings[2703] = str->add(strings[2703]); +strings[2704] = str->add(strings[2704]); +strings[2705] = str->add(strings[2705]); +strings[2706] = str->add(strings[2706]); +strings[2707] = str->add(strings[2707]); +strings[2708] = str->add(strings[2708]); +strings[2709] = str->add(strings[2709]); +strings[2710] = str->add(strings[2710]); +strings[2711] = str->add(strings[2711]); +strings[2712] = str->add(strings[2712]); +strings[2713] = str->add(strings[2713]); +strings[2714] = str->add(strings[2714]); +strings[2715] = str->add(strings[2715]); +strings[2716] = str->add(strings[2716]); +strings[2717] = str->add(strings[2717]); +strings[2718] = str->add(strings[2718]); +strings[2719] = str->add(strings[2719]); +strings[2720] = str->add(strings[2720]); +strings[2721] = str->add(strings[2721]); +strings[2722] = str->add(strings[2722]); +strings[2723] = str->add(strings[2723]); +strings[2724] = str->add(strings[2724]); +strings[2725] = str->add(strings[2725]); +strings[2726] = str->add(strings[2726]); +strings[2727] = str->add(strings[2727]); +strings[2728] = str->add(strings[2728]); +strings[2729] = str->add(strings[2729]); +strings[2730] = str->add(strings[2730]); +strings[2731] = str->add(strings[2731]); +strings[2732] = str->add(strings[2732]); +strings[2733] = str->add(strings[2733]); +strings[2734] = str->add(strings[2734]); +strings[2735] = str->add(strings[2735]); +strings[2736] = str->add(strings[2736]); +strings[2737] = str->add(strings[2737]); +strings[2738] = str->add(strings[2738]); +strings[2739] = str->add(strings[2739]); +strings[2740] = str->add(strings[2740]); +strings[2741] = str->add(strings[2741]); +strings[2742] = str->add(strings[2742]); +strings[2743] = str->add(strings[2743]); +strings[2744] = str->add(strings[2744]); +strings[2745] = str->add(strings[2745]); +strings[2746] = str->add(strings[2746]); +strings[2747] = str->add(strings[2747]); +strings[2748] = str->add(strings[2748]); +strings[2749] = str->add(strings[2749]); +strings[2750] = str->add(strings[2750]); +strings[2751] = str->add(strings[2751]); +strings[2752] = str->add(strings[2752]); +strings[2753] = str->add(strings[2753]); +strings[2754] = str->add(strings[2754]); +strings[2755] = str->add(strings[2755]); +strings[2756] = str->add(strings[2756]); +strings[2757] = str->add(strings[2757]); +strings[2758] = str->add(strings[2758]); +strings[2759] = str->add(strings[2759]); +strings[2760] = str->add(strings[2760]); +strings[2761] = str->add(strings[2761]); +strings[2762] = str->add(strings[2762]); +strings[2763] = str->add(strings[2763]); +strings[2764] = str->add(strings[2764]); +strings[2765] = str->add(strings[2765]); +strings[2766] = str->add(strings[2766]); +strings[2767] = str->add(strings[2767]); +strings[2768] = str->add(strings[2768]); +strings[2580] = str->add(strings[2580]); +strings[1754] = str->add(strings[1754]); +strings[2769] = str->add(strings[2769]); +strings[2770] = str->add(strings[2770]); +strings[2619] = str->add(strings[2619]); +strings[2620] = str->add(strings[2620]); +strings[2621] = str->add(strings[2621]); +strings[2622] = str->add(strings[2622]); +strings[2771] = str->add(strings[2771]); +strings[2772] = str->add(strings[2772]); +strings[2773] = str->add(strings[2773]); +strings[2774] = str->add(strings[2774]); +strings[2775] = str->add(strings[2775]); +strings[2776] = str->add(strings[2776]); +strings[2777] = str->add(strings[2777]); +strings[2778] = str->add(strings[2778]); +strings[2779] = str->add(strings[2779]); +strings[2780] = str->add(strings[2780]); +strings[2781] = str->add(strings[2781]); +strings[2782] = str->add(strings[2782]); +strings[2783] = str->add(strings[2783]); +strings[2784] = str->add(strings[2784]); +strings[2785] = str->add(strings[2785]); +strings[2786] = str->add(strings[2786]); +strings[2787] = str->add(strings[2787]); +strings[2788] = str->add(strings[2788]); +strings[2789] = str->add(strings[2789]); +strings[2790] = str->add(strings[2790]); +strings[2791] = str->add(strings[2791]); +strings[2792] = str->add(strings[2792]); +strings[2793] = str->add(strings[2793]); +strings[2794] = str->add(strings[2794]); +strings[2795] = str->add(strings[2795]); +strings[2796] = str->add(strings[2796]); +strings[2797] = str->add(strings[2797]); +strings[2798] = str->add(strings[2798]); +strings[2799] = str->add(strings[2799]); +strings[2800] = str->add(strings[2800]); +strings[2801] = str->add(strings[2801]); +strings[2802] = str->add(strings[2802]); +strings[2803] = str->add(strings[2803]); +strings[2804] = str->add(strings[2804]); +strings[2805] = str->add(strings[2805]); +strings[2806] = str->add(strings[2806]); +strings[2807] = str->add(strings[2807]); +strings[2808] = str->add(strings[2808]); +strings[2809] = str->add(strings[2809]); +strings[2810] = str->add(strings[2810]); +strings[2811] = str->add(strings[2811]); +strings[2812] = str->add(strings[2812]); +strings[2813] = str->add(strings[2813]); +strings[2814] = str->add(strings[2814]); +strings[2815] = str->add(strings[2815]); +strings[2816] = str->add(strings[2816]); +strings[2817] = str->add(strings[2817]); +strings[2817] = str->add(strings[2817]); +strings[2818] = str->add(strings[2818]); +strings[2819] = str->add(strings[2819]); +strings[2820] = str->add(strings[2820]); +strings[2821] = str->add(strings[2821]); +strings[2822] = str->add(strings[2822]); +strings[2823] = str->add(strings[2823]); +strings[2824] = str->add(strings[2824]); +strings[2825] = str->add(strings[2825]); +strings[2826] = str->add(strings[2826]); +strings[2827] = str->add(strings[2827]); +strings[2828] = str->add(strings[2828]); +strings[2829] = str->add(strings[2829]); +strings[2830] = str->add(strings[2830]); +strings[2831] = str->add(strings[2831]); +strings[2832] = str->add(strings[2832]); +strings[2833] = str->add(strings[2833]); +strings[2834] = str->add(strings[2834]); +strings[2835] = str->add(strings[2835]); +strings[2836] = str->add(strings[2836]); +strings[2837] = str->add(strings[2837]); +strings[2838] = str->add(strings[2838]); +strings[2839] = str->add(strings[2839]); +strings[2840] = str->add(strings[2840]); +strings[2841] = str->add(strings[2841]); +strings[2842] = str->add(strings[2842]); +strings[2843] = str->add(strings[2843]); +strings[2844] = str->add(strings[2844]); +strings[2845] = str->add(strings[2845]); +strings[2846] = str->add(strings[2846]); +strings[2847] = str->add(strings[2847]); +strings[2609] = str->add(strings[2609]); +strings[2610] = str->add(strings[2610]); +strings[2611] = str->add(strings[2611]); +strings[2612] = str->add(strings[2612]); +strings[2630] = str->add(strings[2630]); +strings[2613] = str->add(strings[2613]); +strings[2631] = str->add(strings[2631]); +strings[2614] = str->add(strings[2614]); +strings[2615] = str->add(strings[2615]); +strings[2616] = str->add(strings[2616]); +strings[2617] = str->add(strings[2617]); +strings[2848] = str->add(strings[2848]); +strings[2849] = str->add(strings[2849]); +strings[2628] = str->add(strings[2628]); +strings[2629] = str->add(strings[2629]); +strings[2850] = str->add(strings[2850]); +strings[2851] = str->add(strings[2851]); +strings[2852] = str->add(strings[2852]); +strings[2853] = str->add(strings[2853]); +strings[2633] = str->add(strings[2633]); +strings[1945] = str->add(strings[1945]); +strings[2061] = str->add(strings[2061]); +strings[1960] = str->add(strings[1960]); +strings[2592] = str->add(strings[2592]); +strings[2593] = str->add(strings[2593]); +strings[2594] = str->add(strings[2594]); +strings[2589] = str->add(strings[2589]); +strings[2590] = str->add(strings[2590]); +strings[2591] = str->add(strings[2591]); +strings[2623] = str->add(strings[2623]); +strings[2627] = str->add(strings[2627]); +strings[2626] = str->add(strings[2626]); +strings[2625] = str->add(strings[2625]); +strings[2599] = str->add(strings[2599]); +strings[2635] = str->add(strings[2635]); +strings[2636] = str->add(strings[2636]); +strings[2637] = str->add(strings[2637]); +strings[2638] = str->add(strings[2638]); +strings[2624] = str->add(strings[2624]); +strings[2632] = str->add(strings[2632]); +strings[2854] = str->add(strings[2854]); +strings[2855] = str->add(strings[2855]); +strings[2856] = str->add(strings[2856]); +strings[2857] = str->add(strings[2857]); +strings[2598] = str->add(strings[2598]); +strings[2858] = str->add(strings[2858]); +strings[2859] = str->add(strings[2859]); +strings[2639] = str->add(strings[2639]); +str->del(strings[1839]); +str->del(strings[2090]); +str->del(strings[2640]); +str->del(strings[2574]); +str->del(strings[2575]); +str->del(strings[2576]); +str->del(strings[2577]); +str->del(strings[2578]); +str->del(strings[2579]); +str->del(strings[2641]); +str->del(strings[2642]); +str->del(strings[2643]); +str->del(strings[2644]); +str->del(strings[2645]); +str->del(strings[2646]); +str->del(strings[2647]); +str->del(strings[2648]); +str->del(strings[2649]); +str->del(strings[2650]); +str->del(strings[2651]); +str->del(strings[2652]); +str->del(strings[2653]); +str->del(strings[2654]); +str->del(strings[2655]); +str->del(strings[2656]); +str->del(strings[2657]); +str->del(strings[2658]); +str->del(strings[2659]); +str->del(strings[2660]); +str->del(strings[2661]); +str->del(strings[2112]); +str->del(strings[1935]); +str->del(strings[2662]); +str->del(strings[1929]); +str->del(strings[2663]); +str->del(strings[2067]); +str->del(strings[2069]); +str->del(strings[2664]); +str->del(strings[2665]); +str->del(strings[2581]); +str->del(strings[2582]); +str->del(strings[2583]); +str->del(strings[2634]); +str->del(strings[2587]); +str->del(strings[2588]); +str->del(strings[2584]); +str->del(strings[2585]); +str->del(strings[2586]); +str->del(strings[2127]); +str->del(strings[1963]); +str->del(strings[2595]); +str->del(strings[2604]); +str->del(strings[2603]); +str->del(strings[2081]); +str->del(strings[2666]); +str->del(strings[2083]); +str->del(strings[2667]); +str->del(strings[2668]); +str->del(strings[2669]); +str->del(strings[2670]); +str->del(strings[1957]); +str->del(strings[2596]); +str->del(strings[2597]); +str->del(strings[2605]); +str->del(strings[2606]); +str->del(strings[2607]); +str->del(strings[2608]); +str->del(strings[2600]); +str->del(strings[2601]); +str->del(strings[2602]); +str->del(strings[2671]); +str->del(strings[2672]); +str->del(strings[2673]); +str->del(strings[2674]); +str->del(strings[2675]); +str->del(strings[2676]); +str->del(strings[2677]); +str->del(strings[2678]); +str->del(strings[2679]); +str->del(strings[2680]); +str->del(strings[2681]); +str->del(strings[2682]); +str->del(strings[2683]); +str->del(strings[2684]); +str->del(strings[2685]); +str->del(strings[2686]); +str->del(strings[2687]); +str->del(strings[2688]); +str->del(strings[2689]); +str->del(strings[2690]); +str->del(strings[2691]); +str->del(strings[2692]); +str->del(strings[2693]); +str->del(strings[2694]); +str->del(strings[2695]); +str->del(strings[2696]); +str->del(strings[2697]); +str->del(strings[2698]); +str->del(strings[2699]); +str->del(strings[2700]); +str->del(strings[2701]); +str->del(strings[2702]); +str->del(strings[2703]); +str->del(strings[2704]); +str->del(strings[2705]); +str->del(strings[2706]); +str->del(strings[2707]); +str->del(strings[2708]); +str->del(strings[2709]); +str->del(strings[2710]); +str->del(strings[2711]); +str->del(strings[2712]); +str->del(strings[2713]); +str->del(strings[2714]); +str->del(strings[2715]); +str->del(strings[2716]); +str->del(strings[2717]); +str->del(strings[2718]); +str->del(strings[2719]); +str->del(strings[2720]); +str->del(strings[2721]); +str->del(strings[2722]); +str->del(strings[2723]); +str->del(strings[2724]); +str->del(strings[2725]); +str->del(strings[2726]); +str->del(strings[2727]); +str->del(strings[2728]); +str->del(strings[2729]); +str->del(strings[2730]); +str->del(strings[2731]); +str->del(strings[2732]); +str->del(strings[2733]); +str->del(strings[2734]); +str->del(strings[2735]); +str->del(strings[2736]); +str->del(strings[2737]); +str->del(strings[2738]); +str->del(strings[2739]); +str->del(strings[2740]); +str->del(strings[2741]); +str->del(strings[2742]); +str->del(strings[2743]); +str->del(strings[2744]); +str->del(strings[2745]); +str->del(strings[2746]); +str->del(strings[2747]); +str->del(strings[2748]); +str->del(strings[2749]); +str->del(strings[2750]); +str->del(strings[2751]); +str->del(strings[2752]); +str->del(strings[2753]); +str->del(strings[2754]); +str->del(strings[2755]); +str->del(strings[2756]); +str->del(strings[2757]); +str->del(strings[2758]); +str->del(strings[2759]); +str->del(strings[2760]); +str->del(strings[2761]); +str->del(strings[2762]); +str->del(strings[2763]); +str->del(strings[2764]); +str->del(strings[2765]); +str->del(strings[2766]); +str->del(strings[2767]); +str->del(strings[2768]); +str->del(strings[2580]); +str->del(strings[1754]); +str->del(strings[2769]); +str->del(strings[2770]); +str->del(strings[2619]); +str->del(strings[2620]); +str->del(strings[2621]); +str->del(strings[2622]); +str->del(strings[2771]); +str->del(strings[2772]); +str->del(strings[2773]); +str->del(strings[2774]); +str->del(strings[2775]); +str->del(strings[2776]); +str->del(strings[2777]); +str->del(strings[2778]); +str->del(strings[2779]); +str->del(strings[2780]); +str->del(strings[2781]); +str->del(strings[2782]); +str->del(strings[2783]); +str->del(strings[2784]); +str->del(strings[2785]); +str->del(strings[2786]); +str->del(strings[2787]); +str->del(strings[2788]); +str->del(strings[2789]); +str->del(strings[2790]); +str->del(strings[2791]); +str->del(strings[2792]); +str->del(strings[2793]); +str->del(strings[2794]); +str->del(strings[2795]); +str->del(strings[2796]); +str->del(strings[2797]); +str->del(strings[2798]); +str->del(strings[2799]); +str->del(strings[2800]); +str->del(strings[2801]); +str->del(strings[2802]); +str->del(strings[2803]); +str->del(strings[2804]); +str->del(strings[2805]); +str->del(strings[2806]); +str->del(strings[2807]); +str->del(strings[2808]); +str->del(strings[2809]); +str->del(strings[2810]); +str->del(strings[2811]); +str->del(strings[2812]); +str->del(strings[2813]); +str->del(strings[2814]); +str->del(strings[2815]); +str->del(strings[2816]); +str->del(strings[2817]); +str->del(strings[2817]); +str->del(strings[2818]); +str->del(strings[2819]); +str->del(strings[2820]); +str->del(strings[2821]); +str->del(strings[2822]); +str->del(strings[2823]); +str->del(strings[2824]); +str->del(strings[2825]); +str->del(strings[2826]); +str->del(strings[2827]); +str->del(strings[2828]); +str->del(strings[2829]); +str->del(strings[2830]); +str->del(strings[2831]); +str->del(strings[2832]); +str->del(strings[2833]); +str->del(strings[2834]); +str->del(strings[2835]); +str->del(strings[2836]); +str->del(strings[2837]); +str->del(strings[2838]); +str->del(strings[2839]); +str->del(strings[2840]); +str->del(strings[2841]); +str->del(strings[2842]); +str->del(strings[2843]); +str->del(strings[2844]); +str->del(strings[2845]); +str->del(strings[2846]); +str->del(strings[2847]); +str->del(strings[2609]); +str->del(strings[2610]); +str->del(strings[2611]); +str->del(strings[2612]); +str->del(strings[2630]); +str->del(strings[2613]); +str->del(strings[2631]); +str->del(strings[2614]); +str->del(strings[2615]); +str->del(strings[2616]); +str->del(strings[2617]); +str->del(strings[2848]); +str->del(strings[2849]); +str->del(strings[2628]); +str->del(strings[2629]); +str->del(strings[2850]); +str->del(strings[2851]); +str->del(strings[2852]); +str->del(strings[2853]); +str->del(strings[2633]); +str->del(strings[1945]); +str->del(strings[2061]); +str->del(strings[1960]); +str->del(strings[2592]); +str->del(strings[2593]); +str->del(strings[2594]); +str->del(strings[2589]); +str->del(strings[2590]); +str->del(strings[2591]); +str->del(strings[2623]); +str->del(strings[2627]); +str->del(strings[2626]); +str->del(strings[2625]); +str->del(strings[2599]); +str->del(strings[2635]); +str->del(strings[2636]); +str->del(strings[2637]); +str->del(strings[2638]); +str->del(strings[2624]); +str->del(strings[2632]); +str->del(strings[2854]); +str->del(strings[2855]); +str->del(strings[2856]); +str->del(strings[2857]); +str->del(strings[2598]); +str->del(strings[2858]); +str->del(strings[2859]); +str->del(strings[2639]); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[2231] = str->add(strings[2231]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[2338] = str->add(strings[2338]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[2860] = str->add("Virtual"); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[2861] = str->add("Show/Hide All Windows"); +strings[1619] = str->add(strings[1619]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2552] = str->add(strings[2552]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[1712] = str->add(strings[1712]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[2862] = str->add("About"); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[1713] = str->add(strings[1713]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[1714] = str->add(strings[1714]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[2863] = str->add("Configuration"); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[1721] = str->add(strings[1721]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[2864] = str->add("resize"); +strings[2865] = str->add("base/theme/menus"); +str->del(strings[2864]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[2866] = str->add("load"); +strings[2571] = str->add(strings[2571]); +strings[2867] = str->add("e,action,show,title"); +strings[2569] = str->add(strings[2569]); +str->del(strings[2866]); +strings[2868] = str->add("program,start"); +strings[2869] = str->add("on"); +strings[1932] = str->add(strings[1932]); +strings[2869] = str->add(strings[2869]); +str->del(strings[2867]); +str->del(strings[2569]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[2571] = str->add(strings[2571]); +strings[2571] = str->add(strings[2571]); +strings[2571] = str->add(strings[2571]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[2686] = str->add(strings[2686]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2871] = str->add("images/322"); +strings[2872] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/322"); +strings[469] = str->add(strings[469]); +strings[2871] = str->add(strings[2871]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add("resize"); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[2572] = str->add(strings[2572]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2874] = str->add("Sans"); +strings[2875] = str->add("Edje-Vera"); +str->del(strings[2874]); +str->del(strings[2875]); +strings[2876] = str->add("/var/lib/defoma/fontconfig.d/N/NimbusSanL-Regu.pfb"); +strings[2877] = str->add("/var/lib/defoma/fontconfig.d/L/Loma.ttf"); +strings[2878] = str->add("/var/lib/defoma/fontconfig.d/P/PadmaaMedium.ttf"); +strings[2879] = str->add("/var/lib/defoma/fontconfig.d/P/Padmaa.ttf"); +strings[2880] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/utkal.ttf"); +strings[2881] = str->add("/var/lib/defoma/fontconfig.d/A/AlArabiya.ttf"); +strings[2882] = str->add("/var/lib/defoma/fontconfig.d/B/Batang-Regular.ttf"); +strings[2883] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Mono.ttf"); +strings[2884] = str->add("/var/lib/defoma/fontconfig.d/G/Gentium.ttf"); +strings[2885] = str->add("/var/lib/defoma/fontconfig.d/N/Nakula.ttf"); +strings[385] = str->add(strings[385]); +strings[2572] = str->add(strings[2572]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add("images/44"); +strings[2887] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/44"); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add("images/45"); +strings[2889] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/45"); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[2715] = str->add(strings[2715]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2890] = str->add("images/340"); +strings[2891] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/340"); +strings[469] = str->add(strings[469]); +strings[2890] = str->add(strings[2890]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[2231] = str->add(strings[2231]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[2583] = str->add(strings[2583]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[2691] = str->add(strings[2691]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2892] = str->add("images/326"); +strings[2893] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/326"); +strings[469] = str->add(strings[469]); +strings[2892] = str->add(strings[2892]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[2338] = str->add(strings[2338]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2338] = str->add(strings[2338]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[2582] = str->add(strings[2582]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2687] = str->add(strings[2687]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2894] = str->add("images/323"); +strings[2895] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/323"); +strings[469] = str->add(strings[469]); +strings[2894] = str->add(strings[2894]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[1619] = str->add(strings[1619]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[2682] = str->add(strings[2682]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add("images/319"); +strings[2897] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/319"); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[2552] = str->add(strings[2552]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[2671] = str->add(strings[2671]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add("images/314"); +strings[2899] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/314"); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add("images/315"); +strings[2901] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/315"); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[1712] = str->add(strings[1712]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[2688] = str->add(strings[2688]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add("images/324"); +strings[2903] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/324"); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[2863] = str->add(strings[2863]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2863] = str->add(strings[2863]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[2690] = str->add(strings[2690]); +strings[2870] = str->add(strings[2870]); +strings[469] = str->add(strings[469]); +strings[2904] = str->add("images/327"); +strings[2905] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/327"); +strings[469] = str->add(strings[469]); +strings[2904] = str->add(strings[2904]); +strings[1841] = str->add(strings[1841]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[2870] = str->add(strings[2870]); +strings[1721] = str->add(strings[1721]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[2870] = str->add(strings[2870]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2873] = str->add(strings[2873]); +strings[2906] = str->add("e,state,focused"); +strings[2569] = str->add(strings[2569]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +str->del(strings[2568]); +str->del(strings[2569]); +str->del(strings[2570]); +str->del(strings[2569]); +str->del(strings[167]); +str->del(strings[377]); +str->del(strings[2868]); +str->del(strings[2869]); +str->del(strings[1932]); +str->del(strings[2869]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2870]); +str->del(strings[1841]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +str->del(strings[2873]); +strings[2907] = str->add("program,start"); +strings[2908] = str->add("on"); +str->del(strings[2906]); +str->del(strings[2569]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[2907]); +str->del(strings[2908]); +strings[2909] = str->add("e,action,mouse,move"); +strings[2910] = str->add("e"); +strings[2909] = str->add(strings[2909]); +strings[2910] = str->add(strings[2910]); +strings[169] = str->add(strings[169]); +strings[377] = str->add(strings[377]); +strings[159] = str->add(strings[159]); +strings[377] = str->add(strings[377]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[377] = str->add(strings[377]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[2909] = str->add(strings[2909]); +strings[2910] = str->add(strings[2910]); +strings[2911] = str->add("e,action,mouse,up"); +strings[2910] = str->add(strings[2910]); +str->del(strings[2909]); +str->del(strings[2910]); +str->del(strings[2909]); +str->del(strings[2910]); +str->del(strings[169]); +str->del(strings[377]); +str->del(strings[159]); +str->del(strings[377]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[377]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[2909]); +str->del(strings[2910]); +str->del(strings[2911]); +str->del(strings[2910]); +str->del(strings[2571]); +strings[2571] = str->add(strings[2571]); +str->del(strings[2571]); +strings[2571] = str->add(strings[2571]); +strings[2912] = str->add("resize"); +strings[2572] = str->add(strings[2572]); +strings[2572] = str->add(strings[2572]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add("images/46"); +strings[2914] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/46"); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[2912] = str->add(strings[2912]); +strings[2231] = str->add(strings[2231]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[2912] = str->add(strings[2912]); +strings[2338] = str->add(strings[2338]); +strings[2338] = str->add(strings[2338]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add("images/43"); +strings[2916] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/43"); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2912] = str->add(strings[2912]); +strings[1619] = str->add(strings[1619]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[2912] = str->add(strings[2912]); +strings[2552] = str->add(strings[2552]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2912] = str->add(strings[2912]); +strings[1712] = str->add(strings[1712]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2912] = str->add(strings[2912]); +strings[2863] = str->add(strings[2863]); +strings[2863] = str->add(strings[2863]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2912] = str->add(strings[2912]); +strings[1721] = str->add(strings[1721]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[2912]); +str->del(strings[7]); +str->del(strings[2561]); +strings[7] = str->add(strings[7]); +strings[2915] = str->add(strings[2915]); +strings[2917] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/43"); +strings[7] = str->add(strings[7]); +strings[2915] = str->add(strings[2915]); +strings[2918] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_manipulation/linux-gnu-x86_64/module.so"); +strings[2918] = str->add(strings[2918]); +strings[15] = str->add(strings[15]); +strings[2919] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_manipulation"); +str->del(strings[2918]); +strings[2920] = str->add("window_manipulation"); +strings[197] = str->add(strings[197]); +strings[2921] = str->add("enlightenment/window_manipulation"); +str->del(strings[15]); +str->del(strings[7]); +str->del(strings[2915]); +strings[7] = str->add(strings[7]); +strings[2886] = str->add(strings[2886]); +strings[2922] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/44"); +strings[7] = str->add(strings[7]); +strings[2886] = str->add(strings[2886]); +strings[2923] = str->add("/usr/devel/lib/enlightenment/modules/conf_winlist/linux-gnu-x86_64/module.so"); +strings[2923] = str->add(strings[2923]); +strings[14] = str->add(strings[14]); +strings[2924] = str->add("/usr/devel/lib/enlightenment/modules/conf_winlist"); +str->del(strings[2923]); +strings[2925] = str->add("window_list"); +strings[2926] = str->add("Window List"); +strings[2269] = str->add(strings[2269]); +str->del(strings[14]); +str->del(strings[7]); +str->del(strings[2886]); +strings[7] = str->add(strings[7]); +strings[2888] = str->add(strings[2888]); +strings[2927] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/45"); +strings[7] = str->add(strings[7]); +strings[2888] = str->add(strings[2888]); +strings[2928] = str->add("/usr/devel/lib/enlightenment/modules/conf_engine/linux-gnu-x86_64/module.so"); +strings[2928] = str->add(strings[2928]); +strings[13] = str->add(strings[13]); +strings[2929] = str->add("/usr/devel/lib/enlightenment/modules/conf_engine"); +str->del(strings[2928]); +strings[2930] = str->add("engine"); +strings[2931] = str->add("Engine"); +strings[2932] = str->add("enlightenment/engine"); +str->del(strings[13]); +strings[1932] = str->add(strings[1932]); +strings[2933] = str->add("on"); +str->del(strings[1932]); +str->del(strings[2933]); +str->del(strings[7]); +str->del(strings[2888]); +strings[7] = str->add(strings[7]); +strings[2913] = str->add(strings[2913]); +strings[2934] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/46"); +strings[7] = str->add(strings[7]); +strings[2913] = str->add(strings[2913]); +strings[2935] = str->add("/usr/devel/lib/enlightenment/modules/fileman/linux-gnu-x86_64/module.so"); +strings[2935] = str->add(strings[2935]); +strings[12] = str->add(strings[12]); +strings[2936] = str->add("/usr/devel/lib/enlightenment/modules/fileman"); +str->del(strings[2935]); +strings[12] = str->add(strings[12]); +strings[2408] = str->add(strings[2408]); +strings[2409] = str->add(strings[2409]); +strings[2408] = str->add(strings[2408]); +strings[12] = str->add(strings[12]); +strings[2937] = str->add("base/theme/fileman"); +strings[64] = str->add(strings[64]); +strings[2780] = str->add(strings[2780]); +str->del(strings[64]); +str->del(strings[2780]); +strings[469] = str->add(strings[469]); +strings[2780] = str->add(strings[2780]); +strings[2780] = str->add(strings[2780]); +strings[2938] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2781] = str->add(strings[2781]); +str->del(strings[64]); +str->del(strings[2781]); +strings[469] = str->add(strings[469]); +strings[2781] = str->add(strings[2781]); +strings[2781] = str->add(strings[2781]); +strings[2938] = str->add(strings[2938]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2779] = str->add(strings[2779]); +str->del(strings[64]); +str->del(strings[2779]); +strings[469] = str->add(strings[469]); +strings[2779] = str->add(strings[2779]); +strings[2779] = str->add(strings[2779]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +strings[2938] = str->add(strings[2938]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2788] = str->add(strings[2788]); +str->del(strings[64]); +str->del(strings[2788]); +strings[469] = str->add(strings[469]); +strings[2788] = str->add(strings[2788]); +strings[2788] = str->add(strings[2788]); +strings[2938] = str->add(strings[2938]); +strings[2939] = str->add("desktop"); +str->del(strings[2938]); +str->del(strings[1841]); +str->del(strings[469]); +str->del(strings[2780]); +strings[64] = str->add(strings[64]); +strings[2786] = str->add(strings[2786]); +str->del(strings[64]); +str->del(strings[2786]); +strings[469] = str->add(strings[469]); +strings[2786] = str->add(strings[2786]); +strings[2786] = str->add(strings[2786]); +strings[2938] = str->add(strings[2938]); +str->del(strings[2938]); +str->del(strings[1841]); +str->del(strings[469]); +str->del(strings[2781]); +strings[64] = str->add(strings[64]); +strings[2787] = str->add(strings[2787]); +str->del(strings[64]); +str->del(strings[2787]); +strings[469] = str->add(strings[469]); +strings[2787] = str->add(strings[2787]); +strings[2787] = str->add(strings[2787]); +strings[2938] = str->add(strings[2938]); +str->del(strings[2938]); +str->del(strings[1841]); +str->del(strings[469]); +str->del(strings[2779]); +strings[64] = str->add(strings[64]); +strings[2785] = str->add(strings[2785]); +str->del(strings[64]); +str->del(strings[2785]); +strings[469] = str->add(strings[469]); +strings[2785] = str->add(strings[2785]); +strings[2785] = str->add(strings[2785]); +strings[2938] = str->add(strings[2938]); +strings[2940] = str->add("dir_changed"); +strings[2941] = str->add("dir_deleted"); +strings[2942] = str->add("selected"); +strings[2943] = str->add("selection_change"); +strings[2944] = str->add("base/theme/widgets"); +strings[64] = str->add(strings[64]); +strings[2614] = str->add(strings[2614]); +strings[2614] = str->add(strings[2614]); +strings[2938] = str->add(strings[2938]); +strings[2945] = str->add("drag*"); +strings[2946] = str->add("e.dragable.vbar"); +strings[2945] = str->add(strings[2945]); +strings[2947] = str->add("e.dragable.hbar"); +str->del(strings[2938]); +str->del(strings[64]); +str->del(strings[2614]); +strings[64] = str->add(strings[64]); +strings[2782] = str->add(strings[2782]); +str->del(strings[64]); +str->del(strings[2782]); +strings[469] = str->add(strings[469]); +strings[2782] = str->add(strings[2782]); +strings[2782] = str->add(strings[2782]); +strings[2938] = str->add(strings[2938]); +strings[2948] = str->add("changed"); +strings[2949] = str->add("pan_changed"); +strings[469] = str->add(strings[469]); +strings[2950] = str->add("images/422"); +strings[2951] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/422"); +strings[469] = str->add(strings[469]); +strings[2950] = str->add(strings[2950]); +strings[469] = str->add(strings[469]); +strings[2952] = str->add("images/420"); +strings[2953] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/420"); +strings[469] = str->add(strings[469]); +strings[2952] = str->add(strings[2952]); +strings[469] = str->add(strings[469]); +strings[2954] = str->add("images/433"); +strings[2955] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/433"); +strings[469] = str->add(strings[469]); +strings[2954] = str->add(strings[2954]); +strings[469] = str->add(strings[469]); +strings[2956] = str->add("images/430"); +strings[2957] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/430"); +strings[469] = str->add(strings[469]); +strings[2956] = str->add(strings[2956]); +strings[469] = str->add(strings[469]); +strings[2958] = str->add("images/435"); +strings[2959] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/435"); +strings[469] = str->add(strings[469]); +strings[2958] = str->add(strings[2958]); +strings[469] = str->add(strings[469]); +strings[2960] = str->add("images/424"); +strings[2961] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/424"); +strings[469] = str->add(strings[469]); +strings[2960] = str->add(strings[2960]); +strings[469] = str->add(strings[469]); +strings[2962] = str->add("images/426"); +strings[2963] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/426"); +strings[469] = str->add(strings[469]); +strings[2962] = str->add(strings[2962]); +strings[469] = str->add(strings[469]); +strings[2964] = str->add("images/432"); +strings[2965] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/432"); +strings[469] = str->add(strings[469]); +strings[2964] = str->add(strings[2964]); +strings[469] = str->add(strings[469]); +strings[2966] = str->add("images/428"); +strings[2967] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/428"); +strings[469] = str->add(strings[469]); +strings[2966] = str->add(strings[2966]); +strings[469] = str->add(strings[469]); +strings[2968] = str->add("images/434"); +strings[2969] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/434"); +strings[469] = str->add(strings[469]); +strings[2968] = str->add(strings[2968]); +strings[2970] = str->add("resize"); +strings[2970] = str->add(strings[2970]); +strings[1841] = str->add(strings[1841]); +strings[2971] = str->add("/home/cedric/Desktop"); +strings[2939] = str->add(strings[2939]); +strings[347] = str->add(strings[347]); +strings[2972] = str->add("e,state,typebuf,stop"); +strings[2973] = str->add("e"); +strings[2974] = str->add("e,action,hide,hbar"); +strings[2973] = str->add(strings[2973]); +str->del(strings[2938]); +str->del(strings[2970]); +str->del(strings[1841]); +strings[2975] = str->add("program,start"); +strings[2976] = str->add("sb_hbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[2976] = str->add(strings[2976]); +str->del(strings[2974]); +str->del(strings[2973]); +strings[2970] = str->add(strings[2970]); +strings[2977] = str->add("e,action,hide,vbar"); +strings[2973] = str->add(strings[2973]); +str->del(strings[2975]); +str->del(strings[2976]); +str->del(strings[1932]); +str->del(strings[2976]); +strings[2978] = str->add("program,start"); +strings[2979] = str->add("sb_vbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[2979] = str->add(strings[2979]); +str->del(strings[2977]); +str->del(strings[2973]); +strings[2970] = str->add(strings[2970]); +str->del(strings[12]); +str->del(strings[2938]); +str->del(strings[2938]); +str->del(strings[2938]); +str->del(strings[2938]); +str->del(strings[2970]); +str->del(strings[2972]); +str->del(strings[2973]); +str->del(strings[2970]); +str->del(strings[2978]); +str->del(strings[2979]); +str->del(strings[1932]); +str->del(strings[2979]); +str->del(strings[2970]); +strings[2980] = str->add("e,action,mouse,move"); +strings[2981] = str->add("e"); +strings[2980] = str->add(strings[2980]); +strings[2981] = str->add(strings[2981]); +strings[2980] = str->add(strings[2980]); +strings[2981] = str->add(strings[2981]); +strings[2980] = str->add(strings[2980]); +strings[2981] = str->add(strings[2981]); +strings[2980] = str->add(strings[2980]); +strings[2981] = str->add(strings[2981]); +strings[2980] = str->add(strings[2980]); +strings[2981] = str->add(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +str->del(strings[2980]); +str->del(strings[2981]); +strings[2982] = str->add("e,action,mouse,move"); +strings[2983] = str->add("e"); +str->del(strings[2982]); +str->del(strings[2983]); +strings[2984] = str->add("e,action,mouse,move"); +strings[2985] = str->add("e"); +str->del(strings[2984]); +str->del(strings[2985]); +strings[469] = str->add(strings[469]); +strings[2986] = str->add("images/251"); +strings[2987] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/251"); +strings[469] = str->add(strings[469]); +strings[2986] = str->add(strings[2986]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2986] = str->add(strings[2986]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2192] = str->add(strings[2192]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2190] = str->add(strings[2190]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2198] = str->add(strings[2198]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2196] = str->add(strings[2196]); +strings[469] = str->add(strings[469]); +strings[2988] = str->add("images/448"); +strings[2989] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/448"); +strings[469] = str->add(strings[469]); +strings[2988] = str->add(strings[2988]); +str->del(strings[7]); +str->del(strings[2913]); +strings[7] = str->add(strings[7]); +strings[2990] = str->add("images/51"); +strings[2991] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/51"); +strings[7] = str->add(strings[7]); +strings[2990] = str->add(strings[2990]); +str->del(strings[469]); +str->del(strings[469]); +strings[2992] = str->add("e,action,mouse,move"); +strings[2993] = str->add("e"); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +strings[2992] = str->add(strings[2992]); +strings[2993] = str->add(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +str->del(strings[2992]); +str->del(strings[2993]); +strings[2994] = str->add("/usr/devel/lib/enlightenment/modules/conf_interaction/linux-gnu-x86_64/module.so"); +strings[2994] = str->add(strings[2994]); +strings[11] = str->add(strings[11]); +strings[2995] = str->add("/usr/devel/lib/enlightenment/modules/conf_interaction"); +str->del(strings[2994]); +strings[2996] = str->add("interaction"); +strings[2997] = str->add("Interaction"); +strings[2306] = str->add(strings[2306]); +str->del(strings[11]); +strings[2998] = str->add("e,action,mouse,move"); +strings[2999] = str->add("e"); +strings[2998] = str->add(strings[2998]); +strings[2999] = str->add(strings[2999]); +strings[2998] = str->add(strings[2998]); +strings[2999] = str->add(strings[2999]); +strings[2998] = str->add(strings[2998]); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add("e,state,selected"); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add(strings[3000]); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add(strings[3000]); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add(strings[3000]); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add(strings[3000]); +strings[2999] = str->add(strings[2999]); +strings[3000] = str->add(strings[3000]); +strings[2999] = str->add(strings[2999]); +strings[3001] = str->add("Lock Screen"); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[1726] = str->add(strings[1726]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[3002] = str->add("Hibernate"); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[1724] = str->add(strings[1724]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[1722] = str->add(strings[1722]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[3003] = str->add("Logout"); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +strings[2998] = str->add(strings[2998]); +strings[2999] = str->add(strings[2999]); +strings[2998] = str->add(strings[2998]); +strings[2999] = str->add(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +strings[3004] = str->add("program,start"); +strings[3005] = str->add("sel"); +str->del(strings[3000]); +str->del(strings[2999]); +str->del(strings[3000]); +str->del(strings[2999]); +strings[3004] = str->add(strings[3004]); +strings[3005] = str->add(strings[3005]); +str->del(strings[3000]); +str->del(strings[2999]); +strings[3004] = str->add(strings[3004]); +strings[3005] = str->add(strings[3005]); +strings[1932] = str->add(strings[1932]); +strings[3005] = str->add(strings[3005]); +str->del(strings[3000]); +str->del(strings[2999]); +str->del(strings[3000]); +str->del(strings[2999]); +str->del(strings[3000]); +str->del(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +str->del(strings[2998]); +str->del(strings[2999]); +str->del(strings[3004]); +str->del(strings[3005]); +str->del(strings[3004]); +str->del(strings[3005]); +str->del(strings[3004]); +str->del(strings[3005]); +str->del(strings[1932]); +str->del(strings[3005]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3006] = str->add("resize"); +str->del(strings[3006]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[2708] = str->add(strings[2708]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3008] = str->add("images/396"); +strings[3009] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/396"); +strings[469] = str->add(strings[469]); +strings[3008] = str->add(strings[3008]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add("resize"); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[3001] = str->add(strings[3001]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3001] = str->add(strings[3001]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[2677] = str->add(strings[2677]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3011] = str->add("images/386"); +strings[3012] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/386"); +strings[469] = str->add(strings[469]); +strings[3011] = str->add(strings[3011]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[1726] = str->add(strings[1726]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1726] = str->add(strings[1726]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[2678] = str->add(strings[2678]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3013] = str->add("images/385"); +strings[3014] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/385"); +strings[469] = str->add(strings[469]); +strings[3013] = str->add(strings[3013]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[3002] = str->add(strings[3002]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3002] = str->add(strings[3002]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[2676] = str->add(strings[2676]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3015] = str->add("images/388"); +strings[3016] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/388"); +strings[469] = str->add(strings[469]); +strings[3015] = str->add(strings[3015]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[1724] = str->add(strings[1724]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1724] = str->add(strings[1724]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[2675] = str->add(strings[2675]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3017] = str->add("images/387"); +strings[3018] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/387"); +strings[469] = str->add(strings[469]); +strings[3017] = str->add(strings[3017]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[1722] = str->add(strings[1722]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3007] = str->add(strings[3007]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +strings[2674] = str->add(strings[2674]); +strings[3007] = str->add(strings[3007]); +strings[469] = str->add(strings[469]); +strings[3019] = str->add("images/384"); +strings[3020] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/384"); +strings[469] = str->add(strings[469]); +strings[3019] = str->add(strings[3019]); +strings[1841] = str->add(strings[1841]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3007] = str->add(strings[3007]); +strings[3003] = str->add(strings[3003]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3003] = str->add(strings[3003]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +strings[3010] = str->add(strings[3010]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3010] = str->add(strings[3010]); +strings[3001] = str->add(strings[3001]); +strings[3001] = str->add(strings[3001]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3010] = str->add(strings[3010]); +strings[1726] = str->add(strings[1726]); +strings[1726] = str->add(strings[1726]); +strings[3010] = str->add(strings[3010]); +strings[3002] = str->add(strings[3002]); +strings[3002] = str->add(strings[3002]); +strings[3010] = str->add(strings[3010]); +strings[1724] = str->add(strings[1724]); +strings[1724] = str->add(strings[1724]); +strings[3010] = str->add(strings[3010]); +strings[1722] = str->add(strings[1722]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3010] = str->add(strings[3010]); +strings[3003] = str->add(strings[3003]); +strings[3003] = str->add(strings[3003]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add("images/47"); +strings[3022] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/47"); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3007]); +str->del(strings[1841]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +str->del(strings[3010]); +strings[3023] = str->add("e,action,mouse,move"); +strings[3024] = str->add("e"); +strings[3023] = str->add(strings[3023]); +strings[3024] = str->add(strings[3024]); +str->del(strings[3023]); +str->del(strings[3024]); +str->del(strings[3023]); +str->del(strings[3024]); +strings[3025] = str->add("e,action,mouse,move"); +strings[3026] = str->add("e"); +str->del(strings[3025]); +str->del(strings[3026]); +str->del(strings[7]); +str->del(strings[2990]); +strings[7] = str->add(strings[7]); +strings[3027] = str->add("images/52"); +strings[3028] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/52"); +strings[7] = str->add(strings[7]); +strings[3027] = str->add(strings[3027]); +strings[3029] = str->add("e,action,mouse,move"); +strings[3030] = str->add("e"); +strings[3029] = str->add(strings[3029]); +strings[3030] = str->add(strings[3030]); +str->del(strings[3029]); +str->del(strings[3030]); +str->del(strings[3029]); +str->del(strings[3030]); +strings[3031] = str->add("e,action,mouse,move"); +strings[3032] = str->add("e"); +strings[3031] = str->add(strings[3031]); +strings[3032] = str->add(strings[3032]); +str->del(strings[3031]); +str->del(strings[3032]); +str->del(strings[3031]); +str->del(strings[3032]); +str->del(strings[7]); +str->del(strings[3027]); +strings[7] = str->add(strings[7]); +strings[3033] = str->add("images/53"); +strings[3034] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/53"); +strings[7] = str->add(strings[7]); +strings[3033] = str->add(strings[3033]); +strings[3035] = str->add("e,action,mouse,move"); +strings[3036] = str->add("e"); +str->del(strings[3035]); +str->del(strings[3036]); +strings[3037] = str->add("e,state,busy,start"); +strings[3038] = str->add("e"); +strings[3039] = str->add("print.pdf"); +strings[3040] = str->add("application/pdf"); +strings[64] = str->add(strings[64]); +strings[2784] = str->add(strings[2784]); +str->del(strings[64]); +str->del(strings[2784]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3041] = str->add("load"); +strings[3039] = str->add(strings[3039]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add("images/419"); +strings[3043] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/419"); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3039] = str->add(strings[3039]); +strings[3039] = str->add(strings[3039]); +strings[3039] = str->add(strings[3039]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[3044] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/52"); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add("images/418"); +strings[3046] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/418"); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +strings[3047] = str->add("3899_001.pdf"); +strings[3040] = str->add(strings[3040]); +str->del(strings[3039]); +strings[3047] = str->add(strings[3047]); +str->del(strings[3039]); +strings[3047] = str->add(strings[3047]); +strings[3048] = str->add("ACCORD EDF MR BAIL.pdf"); +strings[3040] = str->add(strings[3040]); +str->del(strings[3047]); +strings[3048] = str->add(strings[3048]); +str->del(strings[3047]); +strings[3048] = str->add(strings[3048]); +strings[3049] = str->add("3817_001.pdf"); +strings[3040] = str->add(strings[3040]); +str->del(strings[3048]); +strings[3049] = str->add(strings[3049]); +str->del(strings[3048]); +strings[3049] = str->add(strings[3049]); +strings[3050] = str->add("NVIDIA-Linux-x86_64-173.14.12-pkg2.run"); +str->del(strings[3049]); +strings[3050] = str->add(strings[3050]); +str->del(strings[3049]); +strings[3050] = str->add(strings[3050]); +str->del(strings[3037]); +str->del(strings[3038]); +str->del(strings[3041]); +strings[3051] = str->add("e,action,mouse,move"); +strings[3052] = str->add("e"); +strings[3051] = str->add(strings[3051]); +strings[3052] = str->add(strings[3052]); +str->del(strings[3051]); +str->del(strings[3052]); +str->del(strings[3051]); +str->del(strings[3052]); +str->del(strings[3039]); +strings[3050] = str->add(strings[3050]); +str->del(strings[3039]); +strings[3050] = str->add(strings[3050]); +strings[3053] = str->add("e,action,mouse,move"); +strings[3054] = str->add("e"); +strings[3053] = str->add(strings[3053]); +strings[3054] = str->add(strings[3054]); +strings[3053] = str->add(strings[3053]); +strings[3054] = str->add(strings[3054]); +str->del(strings[3053]); +str->del(strings[3054]); +str->del(strings[3053]); +str->del(strings[3054]); +str->del(strings[3053]); +str->del(strings[3054]); +strings[3055] = str->add("e,state,busy,stop"); +strings[3056] = str->add("e"); +str->del(strings[3050]); +str->del(strings[3050]); +str->del(strings[3050]); +str->del(strings[469]); +str->del(strings[2784]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3057] = str->add("load"); +strings[3049] = str->add(strings[3049]); +strings[3058] = str->add("resize"); +strings[1839] = str->add(strings[1839]); +strings[2090] = str->add(strings[2090]); +strings[2640] = str->add(strings[2640]); +strings[2574] = str->add(strings[2574]); +strings[2575] = str->add(strings[2575]); +strings[2576] = str->add(strings[2576]); +strings[2577] = str->add(strings[2577]); +strings[2578] = str->add(strings[2578]); +strings[2579] = str->add(strings[2579]); +strings[2641] = str->add(strings[2641]); +strings[2642] = str->add(strings[2642]); +strings[2643] = str->add(strings[2643]); +strings[2644] = str->add(strings[2644]); +strings[2645] = str->add(strings[2645]); +strings[2646] = str->add(strings[2646]); +strings[2647] = str->add(strings[2647]); +strings[2648] = str->add(strings[2648]); +strings[2649] = str->add(strings[2649]); +strings[2650] = str->add(strings[2650]); +strings[2651] = str->add(strings[2651]); +strings[2652] = str->add(strings[2652]); +strings[2653] = str->add(strings[2653]); +strings[2654] = str->add(strings[2654]); +strings[2655] = str->add(strings[2655]); +strings[2656] = str->add(strings[2656]); +strings[2657] = str->add(strings[2657]); +strings[2658] = str->add(strings[2658]); +strings[2659] = str->add(strings[2659]); +strings[2660] = str->add(strings[2660]); +strings[2661] = str->add(strings[2661]); +strings[2112] = str->add(strings[2112]); +strings[1935] = str->add(strings[1935]); +strings[2662] = str->add(strings[2662]); +strings[1929] = str->add(strings[1929]); +strings[2663] = str->add(strings[2663]); +strings[2067] = str->add(strings[2067]); +strings[2069] = str->add(strings[2069]); +strings[2664] = str->add(strings[2664]); +strings[2665] = str->add(strings[2665]); +strings[2581] = str->add(strings[2581]); +strings[2582] = str->add(strings[2582]); +strings[2583] = str->add(strings[2583]); +strings[2634] = str->add(strings[2634]); +strings[2587] = str->add(strings[2587]); +strings[2588] = str->add(strings[2588]); +strings[2584] = str->add(strings[2584]); +strings[2585] = str->add(strings[2585]); +strings[2586] = str->add(strings[2586]); +strings[2127] = str->add(strings[2127]); +strings[1963] = str->add(strings[1963]); +strings[2595] = str->add(strings[2595]); +strings[2604] = str->add(strings[2604]); +strings[2603] = str->add(strings[2603]); +strings[2081] = str->add(strings[2081]); +strings[2666] = str->add(strings[2666]); +strings[2083] = str->add(strings[2083]); +strings[2667] = str->add(strings[2667]); +strings[2668] = str->add(strings[2668]); +strings[2669] = str->add(strings[2669]); +strings[2670] = str->add(strings[2670]); +strings[1957] = str->add(strings[1957]); +strings[2596] = str->add(strings[2596]); +strings[2597] = str->add(strings[2597]); +strings[2605] = str->add(strings[2605]); +strings[2606] = str->add(strings[2606]); +strings[2607] = str->add(strings[2607]); +strings[2608] = str->add(strings[2608]); +strings[2600] = str->add(strings[2600]); +strings[2601] = str->add(strings[2601]); +strings[2602] = str->add(strings[2602]); +strings[2671] = str->add(strings[2671]); +strings[2672] = str->add(strings[2672]); +strings[2673] = str->add(strings[2673]); +strings[2674] = str->add(strings[2674]); +strings[2675] = str->add(strings[2675]); +strings[2676] = str->add(strings[2676]); +strings[2677] = str->add(strings[2677]); +strings[2678] = str->add(strings[2678]); +strings[2679] = str->add(strings[2679]); +strings[2680] = str->add(strings[2680]); +strings[2681] = str->add(strings[2681]); +strings[2682] = str->add(strings[2682]); +strings[2683] = str->add(strings[2683]); +strings[2684] = str->add(strings[2684]); +strings[2685] = str->add(strings[2685]); +strings[2686] = str->add(strings[2686]); +strings[2687] = str->add(strings[2687]); +strings[2688] = str->add(strings[2688]); +strings[2689] = str->add(strings[2689]); +strings[2690] = str->add(strings[2690]); +strings[2691] = str->add(strings[2691]); +strings[2692] = str->add(strings[2692]); +strings[2693] = str->add(strings[2693]); +strings[2694] = str->add(strings[2694]); +strings[2695] = str->add(strings[2695]); +strings[2696] = str->add(strings[2696]); +strings[2697] = str->add(strings[2697]); +strings[2698] = str->add(strings[2698]); +strings[2699] = str->add(strings[2699]); +strings[2700] = str->add(strings[2700]); +strings[2701] = str->add(strings[2701]); +strings[2702] = str->add(strings[2702]); +strings[2703] = str->add(strings[2703]); +strings[2704] = str->add(strings[2704]); +strings[2705] = str->add(strings[2705]); +strings[2706] = str->add(strings[2706]); +strings[2707] = str->add(strings[2707]); +strings[2708] = str->add(strings[2708]); +strings[2709] = str->add(strings[2709]); +strings[2710] = str->add(strings[2710]); +strings[2711] = str->add(strings[2711]); +strings[2712] = str->add(strings[2712]); +strings[2713] = str->add(strings[2713]); +strings[2714] = str->add(strings[2714]); +strings[2715] = str->add(strings[2715]); +strings[2716] = str->add(strings[2716]); +strings[2717] = str->add(strings[2717]); +strings[2718] = str->add(strings[2718]); +strings[2719] = str->add(strings[2719]); +strings[2720] = str->add(strings[2720]); +strings[2721] = str->add(strings[2721]); +strings[2722] = str->add(strings[2722]); +strings[2723] = str->add(strings[2723]); +strings[2724] = str->add(strings[2724]); +strings[2725] = str->add(strings[2725]); +strings[2726] = str->add(strings[2726]); +strings[2727] = str->add(strings[2727]); +strings[2728] = str->add(strings[2728]); +strings[2729] = str->add(strings[2729]); +strings[2730] = str->add(strings[2730]); +strings[2731] = str->add(strings[2731]); +strings[2732] = str->add(strings[2732]); +strings[2733] = str->add(strings[2733]); +strings[2734] = str->add(strings[2734]); +strings[2735] = str->add(strings[2735]); +strings[2736] = str->add(strings[2736]); +strings[2737] = str->add(strings[2737]); +strings[2738] = str->add(strings[2738]); +strings[2739] = str->add(strings[2739]); +strings[2740] = str->add(strings[2740]); +strings[2741] = str->add(strings[2741]); +strings[2742] = str->add(strings[2742]); +strings[2743] = str->add(strings[2743]); +strings[2744] = str->add(strings[2744]); +strings[2745] = str->add(strings[2745]); +strings[2746] = str->add(strings[2746]); +strings[2747] = str->add(strings[2747]); +strings[2748] = str->add(strings[2748]); +strings[2749] = str->add(strings[2749]); +strings[2750] = str->add(strings[2750]); +strings[2751] = str->add(strings[2751]); +strings[2752] = str->add(strings[2752]); +strings[2753] = str->add(strings[2753]); +strings[2754] = str->add(strings[2754]); +strings[2755] = str->add(strings[2755]); +strings[2756] = str->add(strings[2756]); +strings[2757] = str->add(strings[2757]); +strings[2758] = str->add(strings[2758]); +strings[2759] = str->add(strings[2759]); +strings[2760] = str->add(strings[2760]); +strings[2761] = str->add(strings[2761]); +strings[2762] = str->add(strings[2762]); +strings[2763] = str->add(strings[2763]); +strings[2764] = str->add(strings[2764]); +strings[2765] = str->add(strings[2765]); +strings[2766] = str->add(strings[2766]); +strings[2767] = str->add(strings[2767]); +strings[2768] = str->add(strings[2768]); +strings[2580] = str->add(strings[2580]); +strings[1754] = str->add(strings[1754]); +strings[2769] = str->add(strings[2769]); +strings[2770] = str->add(strings[2770]); +strings[2619] = str->add(strings[2619]); +strings[2620] = str->add(strings[2620]); +strings[2621] = str->add(strings[2621]); +strings[2622] = str->add(strings[2622]); +strings[2771] = str->add(strings[2771]); +strings[2772] = str->add(strings[2772]); +strings[2773] = str->add(strings[2773]); +strings[2774] = str->add(strings[2774]); +strings[2775] = str->add(strings[2775]); +strings[2776] = str->add(strings[2776]); +strings[2777] = str->add(strings[2777]); +strings[2778] = str->add(strings[2778]); +strings[2779] = str->add(strings[2779]); +strings[2780] = str->add(strings[2780]); +strings[2781] = str->add(strings[2781]); +strings[2782] = str->add(strings[2782]); +strings[2783] = str->add(strings[2783]); +strings[2784] = str->add(strings[2784]); +strings[2785] = str->add(strings[2785]); +strings[2786] = str->add(strings[2786]); +strings[2787] = str->add(strings[2787]); +strings[2788] = str->add(strings[2788]); +strings[2789] = str->add(strings[2789]); +strings[2790] = str->add(strings[2790]); +strings[2791] = str->add(strings[2791]); +strings[2792] = str->add(strings[2792]); +strings[2793] = str->add(strings[2793]); +strings[2794] = str->add(strings[2794]); +strings[2795] = str->add(strings[2795]); +strings[2796] = str->add(strings[2796]); +strings[2797] = str->add(strings[2797]); +strings[2798] = str->add(strings[2798]); +strings[2799] = str->add(strings[2799]); +strings[2800] = str->add(strings[2800]); +strings[2801] = str->add(strings[2801]); +strings[2802] = str->add(strings[2802]); +strings[2803] = str->add(strings[2803]); +strings[2804] = str->add(strings[2804]); +strings[2805] = str->add(strings[2805]); +strings[2806] = str->add(strings[2806]); +strings[2807] = str->add(strings[2807]); +strings[2808] = str->add(strings[2808]); +strings[2809] = str->add(strings[2809]); +strings[2810] = str->add(strings[2810]); +strings[2811] = str->add(strings[2811]); +strings[2812] = str->add(strings[2812]); +strings[2813] = str->add(strings[2813]); +strings[2814] = str->add(strings[2814]); +strings[2815] = str->add(strings[2815]); +strings[2816] = str->add(strings[2816]); +strings[2817] = str->add(strings[2817]); +strings[2817] = str->add(strings[2817]); +strings[2818] = str->add(strings[2818]); +strings[2819] = str->add(strings[2819]); +strings[2820] = str->add(strings[2820]); +strings[2821] = str->add(strings[2821]); +strings[2822] = str->add(strings[2822]); +strings[2823] = str->add(strings[2823]); +strings[2824] = str->add(strings[2824]); +strings[2825] = str->add(strings[2825]); +strings[2826] = str->add(strings[2826]); +strings[2827] = str->add(strings[2827]); +strings[2828] = str->add(strings[2828]); +strings[2829] = str->add(strings[2829]); +strings[2830] = str->add(strings[2830]); +strings[2831] = str->add(strings[2831]); +strings[2832] = str->add(strings[2832]); +strings[2833] = str->add(strings[2833]); +strings[2834] = str->add(strings[2834]); +strings[2835] = str->add(strings[2835]); +strings[2836] = str->add(strings[2836]); +strings[2837] = str->add(strings[2837]); +strings[2838] = str->add(strings[2838]); +strings[2839] = str->add(strings[2839]); +strings[2840] = str->add(strings[2840]); +strings[2841] = str->add(strings[2841]); +strings[2842] = str->add(strings[2842]); +strings[2843] = str->add(strings[2843]); +strings[2844] = str->add(strings[2844]); +strings[2845] = str->add(strings[2845]); +strings[2846] = str->add(strings[2846]); +strings[2847] = str->add(strings[2847]); +strings[2609] = str->add(strings[2609]); +strings[2610] = str->add(strings[2610]); +strings[2611] = str->add(strings[2611]); +strings[2612] = str->add(strings[2612]); +strings[2630] = str->add(strings[2630]); +strings[2613] = str->add(strings[2613]); +strings[2631] = str->add(strings[2631]); +strings[2614] = str->add(strings[2614]); +strings[2615] = str->add(strings[2615]); +strings[2616] = str->add(strings[2616]); +strings[2617] = str->add(strings[2617]); +strings[2848] = str->add(strings[2848]); +strings[2849] = str->add(strings[2849]); +strings[2628] = str->add(strings[2628]); +strings[2629] = str->add(strings[2629]); +strings[2850] = str->add(strings[2850]); +strings[2851] = str->add(strings[2851]); +strings[2852] = str->add(strings[2852]); +strings[2853] = str->add(strings[2853]); +strings[2633] = str->add(strings[2633]); +strings[1945] = str->add(strings[1945]); +strings[2061] = str->add(strings[2061]); +strings[1960] = str->add(strings[1960]); +strings[2592] = str->add(strings[2592]); +strings[2593] = str->add(strings[2593]); +strings[2594] = str->add(strings[2594]); +strings[2589] = str->add(strings[2589]); +strings[2590] = str->add(strings[2590]); +strings[2591] = str->add(strings[2591]); +strings[2623] = str->add(strings[2623]); +strings[2627] = str->add(strings[2627]); +strings[2626] = str->add(strings[2626]); +strings[2625] = str->add(strings[2625]); +strings[2599] = str->add(strings[2599]); +strings[2635] = str->add(strings[2635]); +strings[2636] = str->add(strings[2636]); +strings[2637] = str->add(strings[2637]); +strings[2638] = str->add(strings[2638]); +strings[2624] = str->add(strings[2624]); +strings[2632] = str->add(strings[2632]); +strings[2854] = str->add(strings[2854]); +strings[2855] = str->add(strings[2855]); +strings[2856] = str->add(strings[2856]); +strings[2857] = str->add(strings[2857]); +strings[2598] = str->add(strings[2598]); +strings[2858] = str->add(strings[2858]); +strings[2859] = str->add(strings[2859]); +strings[2639] = str->add(strings[2639]); +str->del(strings[1839]); +str->del(strings[2090]); +str->del(strings[2640]); +str->del(strings[2574]); +str->del(strings[2575]); +str->del(strings[2576]); +str->del(strings[2577]); +str->del(strings[2578]); +str->del(strings[2579]); +str->del(strings[2641]); +str->del(strings[2642]); +str->del(strings[2643]); +str->del(strings[2644]); +str->del(strings[2645]); +str->del(strings[2646]); +str->del(strings[2647]); +str->del(strings[2648]); +str->del(strings[2649]); +str->del(strings[2650]); +str->del(strings[2651]); +str->del(strings[2652]); +str->del(strings[2653]); +str->del(strings[2654]); +str->del(strings[2655]); +str->del(strings[2656]); +str->del(strings[2657]); +str->del(strings[2658]); +str->del(strings[2659]); +str->del(strings[2660]); +str->del(strings[2661]); +str->del(strings[2112]); +str->del(strings[1935]); +str->del(strings[2662]); +str->del(strings[1929]); +str->del(strings[2663]); +str->del(strings[2067]); +str->del(strings[2069]); +str->del(strings[2664]); +str->del(strings[2665]); +str->del(strings[2581]); +str->del(strings[2582]); +str->del(strings[2583]); +str->del(strings[2634]); +str->del(strings[2587]); +str->del(strings[2588]); +str->del(strings[2584]); +str->del(strings[2585]); +str->del(strings[2586]); +str->del(strings[2127]); +str->del(strings[1963]); +str->del(strings[2595]); +str->del(strings[2604]); +str->del(strings[2603]); +str->del(strings[2081]); +str->del(strings[2666]); +str->del(strings[2083]); +str->del(strings[2667]); +str->del(strings[2668]); +str->del(strings[2669]); +str->del(strings[2670]); +str->del(strings[1957]); +str->del(strings[2596]); +str->del(strings[2597]); +str->del(strings[2605]); +str->del(strings[2606]); +str->del(strings[2607]); +str->del(strings[2608]); +str->del(strings[2600]); +str->del(strings[2601]); +str->del(strings[2602]); +str->del(strings[2671]); +str->del(strings[2672]); +str->del(strings[2673]); +str->del(strings[2674]); +str->del(strings[2675]); +str->del(strings[2676]); +str->del(strings[2677]); +str->del(strings[2678]); +str->del(strings[2679]); +str->del(strings[2680]); +str->del(strings[2681]); +str->del(strings[2682]); +str->del(strings[2683]); +str->del(strings[2684]); +str->del(strings[2685]); +str->del(strings[2686]); +str->del(strings[2687]); +str->del(strings[2688]); +str->del(strings[2689]); +str->del(strings[2690]); +str->del(strings[2691]); +str->del(strings[2692]); +str->del(strings[2693]); +str->del(strings[2694]); +str->del(strings[2695]); +str->del(strings[2696]); +str->del(strings[2697]); +str->del(strings[2698]); +str->del(strings[2699]); +str->del(strings[2700]); +str->del(strings[2701]); +str->del(strings[2702]); +str->del(strings[2703]); +str->del(strings[2704]); +str->del(strings[2705]); +str->del(strings[2706]); +str->del(strings[2707]); +str->del(strings[2708]); +str->del(strings[2709]); +str->del(strings[2710]); +str->del(strings[2711]); +str->del(strings[2712]); +str->del(strings[2713]); +str->del(strings[2714]); +str->del(strings[2715]); +str->del(strings[2716]); +str->del(strings[2717]); +str->del(strings[2718]); +str->del(strings[2719]); +str->del(strings[2720]); +str->del(strings[2721]); +str->del(strings[2722]); +str->del(strings[2723]); +str->del(strings[2724]); +str->del(strings[2725]); +str->del(strings[2726]); +str->del(strings[2727]); +str->del(strings[2728]); +str->del(strings[2729]); +str->del(strings[2730]); +str->del(strings[2731]); +str->del(strings[2732]); +str->del(strings[2733]); +str->del(strings[2734]); +str->del(strings[2735]); +str->del(strings[2736]); +str->del(strings[2737]); +str->del(strings[2738]); +str->del(strings[2739]); +str->del(strings[2740]); +str->del(strings[2741]); +str->del(strings[2742]); +str->del(strings[2743]); +str->del(strings[2744]); +str->del(strings[2745]); +str->del(strings[2746]); +str->del(strings[2747]); +str->del(strings[2748]); +str->del(strings[2749]); +str->del(strings[2750]); +str->del(strings[2751]); +str->del(strings[2752]); +str->del(strings[2753]); +str->del(strings[2754]); +str->del(strings[2755]); +str->del(strings[2756]); +str->del(strings[2757]); +str->del(strings[2758]); +str->del(strings[2759]); +str->del(strings[2760]); +str->del(strings[2761]); +str->del(strings[2762]); +str->del(strings[2763]); +str->del(strings[2764]); +str->del(strings[2765]); +str->del(strings[2766]); +str->del(strings[2767]); +str->del(strings[2768]); +str->del(strings[2580]); +str->del(strings[1754]); +str->del(strings[2769]); +str->del(strings[2770]); +str->del(strings[2619]); +str->del(strings[2620]); +str->del(strings[2621]); +str->del(strings[2622]); +str->del(strings[2771]); +str->del(strings[2772]); +str->del(strings[2773]); +str->del(strings[2774]); +str->del(strings[2775]); +str->del(strings[2776]); +str->del(strings[2777]); +str->del(strings[2778]); +str->del(strings[2779]); +str->del(strings[2780]); +str->del(strings[2781]); +str->del(strings[2782]); +str->del(strings[2783]); +str->del(strings[2784]); +str->del(strings[2785]); +str->del(strings[2786]); +str->del(strings[2787]); +str->del(strings[2788]); +str->del(strings[2789]); +str->del(strings[2790]); +str->del(strings[2791]); +str->del(strings[2792]); +str->del(strings[2793]); +str->del(strings[2794]); +str->del(strings[2795]); +str->del(strings[2796]); +str->del(strings[2797]); +str->del(strings[2798]); +str->del(strings[2799]); +str->del(strings[2800]); +str->del(strings[2801]); +str->del(strings[2802]); +str->del(strings[2803]); +str->del(strings[2804]); +str->del(strings[2805]); +str->del(strings[2806]); +str->del(strings[2807]); +str->del(strings[2808]); +str->del(strings[2809]); +str->del(strings[2810]); +str->del(strings[2811]); +str->del(strings[2812]); +str->del(strings[2813]); +str->del(strings[2814]); +str->del(strings[2815]); +str->del(strings[2816]); +str->del(strings[2817]); +str->del(strings[2817]); +str->del(strings[2818]); +str->del(strings[2819]); +str->del(strings[2820]); +str->del(strings[2821]); +str->del(strings[2822]); +str->del(strings[2823]); +str->del(strings[2824]); +str->del(strings[2825]); +str->del(strings[2826]); +str->del(strings[2827]); +str->del(strings[2828]); +str->del(strings[2829]); +str->del(strings[2830]); +str->del(strings[2831]); +str->del(strings[2832]); +str->del(strings[2833]); +str->del(strings[2834]); +str->del(strings[2835]); +str->del(strings[2836]); +str->del(strings[2837]); +str->del(strings[2838]); +str->del(strings[2839]); +str->del(strings[2840]); +str->del(strings[2841]); +str->del(strings[2842]); +str->del(strings[2843]); +str->del(strings[2844]); +str->del(strings[2845]); +str->del(strings[2846]); +str->del(strings[2847]); +str->del(strings[2609]); +str->del(strings[2610]); +str->del(strings[2611]); +str->del(strings[2612]); +str->del(strings[2630]); +str->del(strings[2613]); +str->del(strings[2631]); +str->del(strings[2614]); +str->del(strings[2615]); +str->del(strings[2616]); +str->del(strings[2617]); +str->del(strings[2848]); +str->del(strings[2849]); +str->del(strings[2628]); +str->del(strings[2629]); +str->del(strings[2850]); +str->del(strings[2851]); +str->del(strings[2852]); +str->del(strings[2853]); +str->del(strings[2633]); +str->del(strings[1945]); +str->del(strings[2061]); +str->del(strings[1960]); +str->del(strings[2592]); +str->del(strings[2593]); +str->del(strings[2594]); +str->del(strings[2589]); +str->del(strings[2590]); +str->del(strings[2591]); +str->del(strings[2623]); +str->del(strings[2627]); +str->del(strings[2626]); +str->del(strings[2625]); +str->del(strings[2599]); +str->del(strings[2635]); +str->del(strings[2636]); +str->del(strings[2637]); +str->del(strings[2638]); +str->del(strings[2624]); +str->del(strings[2632]); +str->del(strings[2854]); +str->del(strings[2855]); +str->del(strings[2856]); +str->del(strings[2857]); +str->del(strings[2598]); +str->del(strings[2858]); +str->del(strings[2859]); +str->del(strings[2639]); +strings[2795] = str->add(strings[2795]); +strings[469] = str->add(strings[469]); +strings[2795] = str->add(strings[2795]); +strings[2795] = str->add(strings[2795]); +strings[3057] = str->add(strings[3057]); +strings[469] = str->add(strings[469]); +strings[3059] = str->add("images/457"); +strings[3060] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/457"); +strings[469] = str->add(strings[469]); +strings[3059] = str->add(strings[3059]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3057] = str->add(strings[3057]); +strings[3047] = str->add(strings[3047]); +strings[3058] = str->add(strings[3058]); +strings[469] = str->add(strings[469]); +strings[2795] = str->add(strings[2795]); +strings[3057] = str->add(strings[3057]); +strings[469] = str->add(strings[469]); +strings[3059] = str->add(strings[3059]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3057] = str->add(strings[3057]); +strings[3048] = str->add(strings[3048]); +strings[3058] = str->add(strings[3058]); +strings[469] = str->add(strings[469]); +strings[2795] = str->add(strings[2795]); +strings[3057] = str->add(strings[3057]); +strings[469] = str->add(strings[469]); +strings[3059] = str->add(strings[3059]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3057] = str->add(strings[3057]); +strings[3050] = str->add(strings[3050]); +strings[3058] = str->add(strings[3058]); +strings[64] = str->add(strings[64]); +strings[2790] = str->add(strings[2790]); +str->del(strings[64]); +str->del(strings[2790]); +strings[469] = str->add(strings[469]); +strings[2790] = str->add(strings[2790]); +strings[2790] = str->add(strings[2790]); +strings[3057] = str->add(strings[3057]); +strings[469] = str->add(strings[469]); +strings[3061] = str->add("images/451"); +strings[3062] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/451"); +strings[469] = str->add(strings[469]); +strings[3061] = str->add(strings[3061]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2784] = str->add(strings[2784]); +strings[469] = str->add(strings[469]); +strings[3057] = str->add(strings[3057]); +strings[3039] = str->add(strings[3039]); +strings[3058] = str->add(strings[3058]); +strings[469] = str->add(strings[469]); +strings[2795] = str->add(strings[2795]); +strings[3057] = str->add(strings[3057]); +strings[469] = str->add(strings[469]); +strings[3059] = str->add(strings[3059]); +strings[1841] = str->add(strings[1841]); +strings[1841] = str->add(strings[1841]); +str->del(strings[3055]); +str->del(strings[3056]); +str->del(strings[3057]); +str->del(strings[3058]); +str->del(strings[3057]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[3057]); +str->del(strings[3058]); +str->del(strings[3057]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[3057]); +str->del(strings[3058]); +str->del(strings[3057]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[3057]); +str->del(strings[3058]); +str->del(strings[3057]); +str->del(strings[1841]); +str->del(strings[1841]); +str->del(strings[3057]); +str->del(strings[3058]); +str->del(strings[3057]); +str->del(strings[1841]); +str->del(strings[1841]); +strings[3063] = str->add("e,action,mouse,move"); +strings[3064] = str->add("e"); +strings[3065] = str->add("e,state,unselected"); +strings[3064] = str->add(strings[3064]); +strings[3065] = str->add(strings[3065]); +strings[3064] = str->add(strings[3064]); +strings[3065] = str->add(strings[3065]); +strings[3064] = str->add(strings[3064]); +strings[3065] = str->add(strings[3065]); +strings[3064] = str->add(strings[3064]); +strings[3065] = str->add(strings[3065]); +strings[3064] = str->add(strings[3064]); +strings[3065] = str->add(strings[3065]); +strings[3064] = str->add(strings[3064]); +strings[3063] = str->add(strings[3063]); +strings[3064] = str->add(strings[3064]); +strings[3063] = str->add(strings[3063]); +strings[3064] = str->add(strings[3064]); +str->del(strings[3063]); +str->del(strings[3064]); +strings[1932] = str->add(strings[1932]); +strings[3066] = str->add("sel"); +strings[3067] = str->add("program,start"); +strings[3068] = str->add("unsel"); +str->del(strings[3065]); +str->del(strings[3064]); +str->del(strings[3065]); +str->del(strings[3064]); +strings[1932] = str->add(strings[1932]); +strings[3066] = str->add(strings[3066]); +strings[3067] = str->add(strings[3067]); +strings[3068] = str->add(strings[3068]); +str->del(strings[3065]); +str->del(strings[3064]); +strings[3067] = str->add(strings[3067]); +strings[3068] = str->add(strings[3068]); +strings[1932] = str->add(strings[1932]); +strings[3068] = str->add(strings[3068]); +str->del(strings[3065]); +str->del(strings[3064]); +str->del(strings[3065]); +str->del(strings[3064]); +str->del(strings[3065]); +str->del(strings[3064]); +str->del(strings[3063]); +str->del(strings[3064]); +str->del(strings[3063]); +str->del(strings[3064]); +str->del(strings[1932]); +str->del(strings[3066]); +str->del(strings[3067]); +str->del(strings[3068]); +str->del(strings[1932]); +str->del(strings[3066]); +str->del(strings[3067]); +str->del(strings[3068]); +str->del(strings[3067]); +str->del(strings[3068]); +str->del(strings[1932]); +str->del(strings[3068]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +strings[3069] = str->add("resize"); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3049] = str->add(strings[3049]); +strings[3049] = str->add(strings[3049]); +str->del(strings[3049]); +strings[3070] = str->add("3817_001...."); +str->del(strings[3070]); +strings[3071] = str->add("3817_001..."); +strings[3071] = str->add(strings[3071]); +strings[3069] = str->add(strings[3069]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +str->del(strings[3071]); +strings[3049] = str->add(strings[3049]); +str->del(strings[3049]); +strings[3071] = str->add(strings[3071]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +strings[3069] = str->add(strings[3069]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3047] = str->add(strings[3047]); +strings[3047] = str->add(strings[3047]); +str->del(strings[3047]); +strings[3072] = str->add("3899_001...."); +str->del(strings[3072]); +strings[3073] = str->add("3899_001..."); +strings[3073] = str->add(strings[3073]); +strings[3069] = str->add(strings[3069]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +str->del(strings[3073]); +strings[3047] = str->add(strings[3047]); +str->del(strings[3047]); +strings[3073] = str->add(strings[3073]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +strings[3069] = str->add(strings[3069]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3048] = str->add(strings[3048]); +strings[3048] = str->add(strings[3048]); +str->del(strings[3048]); +strings[3074] = str->add("ACCORD E..."); +strings[3074] = str->add(strings[3074]); +strings[3069] = str->add(strings[3069]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +str->del(strings[3074]); +strings[3048] = str->add(strings[3048]); +str->del(strings[3048]); +strings[3074] = str->add(strings[3074]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +strings[3069] = str->add(strings[3069]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3050] = str->add(strings[3050]); +strings[3050] = str->add(strings[3050]); +str->del(strings[3050]); +strings[3075] = str->add("NVIDIA-Lin..."); +str->del(strings[3075]); +strings[3076] = str->add("NVIDIA-Li..."); +strings[3076] = str->add(strings[3076]); +strings[3069] = str->add(strings[3069]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +str->del(strings[3076]); +strings[3050] = str->add(strings[3050]); +str->del(strings[3050]); +strings[3076] = str->add(strings[3076]); +strings[469] = str->add(strings[469]); +strings[3042] = str->add(strings[3042]); +strings[3069] = str->add(strings[3069]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3039] = str->add(strings[3039]); +strings[3039] = str->add(strings[3039]); +strings[3039] = str->add(strings[3039]); +strings[3069] = str->add(strings[3069]); +strings[469] = str->add(strings[469]); +strings[3027] = str->add(strings[3027]); +strings[469] = str->add(strings[469]); +strings[3045] = str->add(strings[3045]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +str->del(strings[3069]); +strings[3077] = str->add("e,action,mouse,move"); +strings[3078] = str->add("e"); +str->del(strings[3077]); +str->del(strings[3078]); +str->del(strings[7]); +str->del(strings[3033]); +strings[7] = str->add(strings[7]); +strings[2062] = str->add(strings[2062]); +strings[3079] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/54"); +strings[7] = str->add(strings[7]); +strings[2062] = str->add(strings[2062]); +str->del(strings[469]); +str->del(strings[3042]); +str->del(strings[469]); +str->del(strings[3027]); +str->del(strings[469]); +str->del(strings[3045]); +str->del(strings[3050]); +str->del(strings[379]); +strings[3080] = str->add("e,action,mouse,move"); +strings[3081] = str->add("e"); +strings[3082] = str->add("e,state,selected"); +strings[3081] = str->add(strings[3081]); +strings[3082] = str->add(strings[3082]); +strings[3081] = str->add(strings[3081]); +strings[3082] = str->add(strings[3082]); +strings[3081] = str->add(strings[3081]); +strings[3082] = str->add(strings[3082]); +strings[3081] = str->add(strings[3081]); +strings[3082] = str->add(strings[3082]); +strings[3081] = str->add(strings[3081]); +strings[3082] = str->add(strings[3082]); +strings[3081] = str->add(strings[3081]); +strings[2224] = str->add(strings[2224]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[4] = str->add(strings[4]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[1925] = str->add(strings[1925]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add("icon"); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[2536] = str->add(strings[2536]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[3080] = str->add(strings[3080]); +strings[3081] = str->add(strings[3081]); +strings[3080] = str->add(strings[3080]); +strings[3081] = str->add(strings[3081]); +strings[3080] = str->add(strings[3080]); +strings[3081] = str->add(strings[3081]); +str->del(strings[3080]); +str->del(strings[3081]); +strings[3084] = str->add("program,start"); +strings[3085] = str->add("sel"); +str->del(strings[3082]); +str->del(strings[3081]); +str->del(strings[3082]); +str->del(strings[3081]); +strings[3084] = str->add(strings[3084]); +strings[3085] = str->add(strings[3085]); +str->del(strings[3082]); +str->del(strings[3081]); +strings[3084] = str->add(strings[3084]); +strings[3085] = str->add(strings[3085]); +strings[1932] = str->add(strings[1932]); +strings[3085] = str->add(strings[3085]); +str->del(strings[3082]); +str->del(strings[3081]); +str->del(strings[3082]); +str->del(strings[3081]); +str->del(strings[3082]); +str->del(strings[3081]); +str->del(strings[3080]); +str->del(strings[3081]); +str->del(strings[3080]); +str->del(strings[3081]); +str->del(strings[3080]); +str->del(strings[3081]); +str->del(strings[3084]); +str->del(strings[3085]); +str->del(strings[3084]); +str->del(strings[3085]); +str->del(strings[3084]); +str->del(strings[3085]); +str->del(strings[1932]); +str->del(strings[3085]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3086] = str->add("resize"); +str->del(strings[3086]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[3087] = str->add(strings[3087]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add("resize"); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[2224] = str->add(strings[2224]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[2685] = str->add(strings[2685]); +strings[3087] = str->add(strings[3087]); +strings[469] = str->add(strings[469]); +strings[3089] = str->add("images/321"); +strings[3090] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/321"); +strings[469] = str->add(strings[469]); +strings[3089] = str->add(strings[3089]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[4] = str->add(strings[4]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4] = str->add(strings[4]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[3087] = str->add(strings[3087]); +strings[1926] = str->add(strings[1926]); +strings[1552] = str->add(strings[1552]); +strings[3091] = str->add("/usr/devel/lib/enlightenment/modules/gadman/e-module-gadman.edj//://images/0"); +strings[1926] = str->add(strings[1926]); +strings[1552] = str->add(strings[1552]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[1925] = str->add(strings[1925]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1925] = str->add(strings[1925]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[2711] = str->add(strings[2711]); +strings[3087] = str->add(strings[3087]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add("images/335"); +strings[3093] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/335"); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[2680] = str->add(strings[2680]); +strings[3087] = str->add(strings[3087]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add("images/317"); +strings[3095] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/317"); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3087] = str->add(strings[3087]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[2713] = str->add(strings[2713]); +strings[3087] = str->add(strings[3087]); +strings[469] = str->add(strings[469]); +strings[3096] = str->add("images/330"); +strings[3097] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/330"); +strings[469] = str->add(strings[469]); +strings[3096] = str->add(strings[3096]); +strings[1841] = str->add(strings[1841]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3087] = str->add(strings[3087]); +strings[2536] = str->add(strings[2536]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[3088] = str->add(strings[3088]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2708]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3001]); +str->del(strings[3001]); +str->del(strings[3001]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2677]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2678]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3002]); +str->del(strings[3002]); +str->del(strings[3002]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2676]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2675]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2674]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3003]); +str->del(strings[3003]); +str->del(strings[3003]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3008]); +str->del(strings[3001]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3011]); +str->del(strings[1726]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3013]); +str->del(strings[3002]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3015]); +str->del(strings[1724]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3017]); +str->del(strings[1722]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3019]); +str->del(strings[3003]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3088] = str->add(strings[3088]); +strings[2224] = str->add(strings[2224]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3088] = str->add(strings[3088]); +strings[4] = str->add(strings[4]); +strings[4] = str->add(strings[4]); +strings[3088] = str->add(strings[3088]); +strings[1925] = str->add(strings[1925]); +strings[1925] = str->add(strings[1925]); +strings[3088] = str->add(strings[3088]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[3088] = str->add(strings[3088]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[3088] = str->add(strings[3088]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3087]); +str->del(strings[1841]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +str->del(strings[3088]); +strings[3098] = str->add("e,action,mouse,move"); +strings[3099] = str->add("e"); +strings[3098] = str->add(strings[3098]); +strings[3099] = str->add(strings[3099]); +strings[3098] = str->add(strings[3098]); +strings[3099] = str->add(strings[3099]); +strings[3098] = str->add(strings[3098]); +strings[3099] = str->add(strings[3099]); +strings[3098] = str->add(strings[3098]); +strings[3099] = str->add(strings[3099]); +str->del(strings[3098]); +str->del(strings[3099]); +str->del(strings[3098]); +str->del(strings[3099]); +str->del(strings[3098]); +str->del(strings[3099]); +str->del(strings[3098]); +str->del(strings[3099]); +str->del(strings[3098]); +str->del(strings[3099]); +str->del(strings[7]); +str->del(strings[2062]); +strings[7] = str->add(strings[7]); +strings[3100] = str->add("images/55"); +strings[3101] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/55"); +strings[7] = str->add(strings[7]); +strings[3100] = str->add(strings[3100]); +strings[3102] = str->add("e,action,mouse,move"); +strings[3103] = str->add("e"); +str->del(strings[3102]); +str->del(strings[3103]); +strings[3104] = str->add("e,action,mouse,move"); +strings[3105] = str->add("e"); +strings[3104] = str->add(strings[3104]); +strings[3105] = str->add(strings[3105]); +str->del(strings[3104]); +str->del(strings[3105]); +str->del(strings[3104]); +str->del(strings[3105]); +strings[1932] = str->add(strings[1932]); +strings[3106] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3106]); +strings[3107] = str->add("e,action,mouse,move"); +strings[3108] = str->add("e"); +strings[3107] = str->add(strings[3107]); +strings[3108] = str->add(strings[3108]); +str->del(strings[3107]); +str->del(strings[3108]); +str->del(strings[3107]); +str->del(strings[3108]); +strings[3109] = str->add("e,action,mouse,move"); +strings[3110] = str->add("e"); +strings[3109] = str->add(strings[3109]); +strings[3110] = str->add(strings[3110]); +str->del(strings[3109]); +str->del(strings[3110]); +str->del(strings[3109]); +str->del(strings[3110]); +str->del(strings[7]); +str->del(strings[3100]); +strings[7] = str->add(strings[7]); +strings[3111] = str->add("images/56"); +strings[3112] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/56"); +strings[7] = str->add(strings[7]); +strings[3111] = str->add(strings[3111]); +strings[3113] = str->add("e,action,mouse,move"); +strings[3114] = str->add("e"); +strings[3115] = str->add("e,state,unselected"); +strings[3114] = str->add(strings[3114]); +strings[3115] = str->add(strings[3115]); +strings[3114] = str->add(strings[3114]); +strings[3115] = str->add(strings[3115]); +strings[3114] = str->add(strings[3114]); +strings[3115] = str->add(strings[3115]); +strings[3114] = str->add(strings[3114]); +strings[3115] = str->add(strings[3115]); +strings[3114] = str->add(strings[3114]); +strings[3115] = str->add(strings[3115]); +strings[3114] = str->add(strings[3114]); +strings[3113] = str->add(strings[3113]); +strings[3114] = str->add(strings[3114]); +str->del(strings[3113]); +str->del(strings[3114]); +strings[1932] = str->add(strings[1932]); +strings[3116] = str->add("sel"); +strings[3117] = str->add("program,start"); +strings[3118] = str->add("unsel"); +str->del(strings[3115]); +str->del(strings[3114]); +str->del(strings[3115]); +str->del(strings[3114]); +strings[1932] = str->add(strings[1932]); +strings[3116] = str->add(strings[3116]); +strings[3117] = str->add(strings[3117]); +strings[3118] = str->add(strings[3118]); +str->del(strings[3115]); +str->del(strings[3114]); +strings[3117] = str->add(strings[3117]); +strings[3118] = str->add(strings[3118]); +strings[1932] = str->add(strings[1932]); +strings[3118] = str->add(strings[3118]); +str->del(strings[3115]); +str->del(strings[3114]); +str->del(strings[3115]); +str->del(strings[3114]); +str->del(strings[3115]); +str->del(strings[3114]); +str->del(strings[3113]); +str->del(strings[3114]); +str->del(strings[1932]); +str->del(strings[3116]); +str->del(strings[3117]); +str->del(strings[3118]); +str->del(strings[1932]); +str->del(strings[3116]); +str->del(strings[3117]); +str->del(strings[3118]); +str->del(strings[3117]); +str->del(strings[3118]); +str->del(strings[1932]); +str->del(strings[3118]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3119] = str->add("e,action,mouse,move"); +strings[3120] = str->add("e"); +strings[3119] = str->add(strings[3119]); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add("e,state,selected"); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add(strings[3121]); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add(strings[3121]); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add(strings[3121]); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add(strings[3121]); +strings[3120] = str->add(strings[3120]); +strings[3121] = str->add(strings[3121]); +strings[3120] = str->add(strings[3120]); +str->del(strings[3119]); +str->del(strings[3120]); +str->del(strings[3119]); +str->del(strings[3120]); +strings[3122] = str->add("program,start"); +strings[3123] = str->add("sel"); +str->del(strings[3121]); +str->del(strings[3120]); +str->del(strings[3121]); +str->del(strings[3120]); +strings[3122] = str->add(strings[3122]); +strings[3123] = str->add(strings[3123]); +str->del(strings[3121]); +str->del(strings[3120]); +strings[3122] = str->add(strings[3122]); +strings[3123] = str->add(strings[3123]); +strings[1932] = str->add(strings[1932]); +strings[3123] = str->add(strings[3123]); +str->del(strings[3121]); +str->del(strings[3120]); +strings[3122] = str->add(strings[3122]); +strings[3124] = str->add("e_in"); +str->del(strings[3121]); +str->del(strings[3120]); +str->del(strings[3121]); +str->del(strings[3120]); +str->del(strings[3122]); +str->del(strings[3123]); +str->del(strings[3122]); +str->del(strings[3123]); +str->del(strings[3122]); +str->del(strings[3123]); +str->del(strings[1932]); +str->del(strings[3123]); +str->del(strings[3122]); +str->del(strings[3124]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[3125] = str->add("e,action,mouse,move"); +strings[3126] = str->add("e"); +str->del(strings[3125]); +str->del(strings[3126]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3127] = str->add("resize"); +str->del(strings[3127]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3128] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[3128] = str->add(strings[3128]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[3129] = str->add("resize"); +strings[3129] = str->add(strings[3129]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3128] = str->add(strings[3128]); +strings[2862] = str->add(strings[2862]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2862] = str->add(strings[2862]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[3128] = str->add(strings[3128]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3128] = str->add(strings[3128]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[2672] = str->add(strings[2672]); +strings[3128] = str->add(strings[3128]); +strings[469] = str->add(strings[469]); +strings[3130] = str->add("images/383"); +strings[3131] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/383"); +strings[469] = str->add(strings[469]); +strings[3130] = str->add(strings[3130]); +strings[1841] = str->add(strings[1841]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3128] = str->add(strings[3128]); +strings[1713] = str->add(strings[1713]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1713] = str->add(strings[1713]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3128] = str->add(strings[3128]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[2673] = str->add(strings[2673]); +strings[3128] = str->add(strings[3128]); +strings[469] = str->add(strings[469]); +strings[3132] = str->add("images/382"); +strings[3133] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/382"); +strings[469] = str->add(strings[469]); +strings[3132] = str->add(strings[3132]); +strings[1841] = str->add(strings[1841]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3128] = str->add(strings[3128]); +strings[1714] = str->add(strings[1714]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1714] = str->add(strings[1714]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[3129] = str->add(strings[3129]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2685]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1926]); +str->del(strings[3083]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2713]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[2224]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3089]); +str->del(strings[4]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1926]); +str->del(strings[1552]); +str->del(strings[1925]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3096]); +str->del(strings[2536]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3129] = str->add(strings[3129]); +strings[2862] = str->add(strings[2862]); +strings[2862] = str->add(strings[2862]); +strings[3129] = str->add(strings[3129]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3129] = str->add(strings[3129]); +strings[1713] = str->add(strings[1713]); +strings[1713] = str->add(strings[1713]); +strings[3129] = str->add(strings[3129]); +strings[1714] = str->add(strings[1714]); +strings[1714] = str->add(strings[1714]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3128]); +str->del(strings[1841]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +str->del(strings[3129]); +strings[3134] = str->add("e,action,mouse,move"); +strings[3135] = str->add("e"); +strings[3134] = str->add(strings[3134]); +strings[3135] = str->add(strings[3135]); +strings[3134] = str->add(strings[3134]); +strings[3135] = str->add(strings[3135]); +strings[3134] = str->add(strings[3134]); +strings[3135] = str->add(strings[3135]); +str->del(strings[3134]); +str->del(strings[3135]); +str->del(strings[3134]); +str->del(strings[3135]); +str->del(strings[3134]); +str->del(strings[3135]); +str->del(strings[3134]); +str->del(strings[3135]); +str->del(strings[7]); +str->del(strings[3111]); +strings[7] = str->add(strings[7]); +strings[3136] = str->add("images/57"); +strings[3137] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/57"); +strings[7] = str->add(strings[7]); +strings[3136] = str->add(strings[3136]); +strings[3138] = str->add("e,action,mouse,move"); +strings[3139] = str->add("e"); +str->del(strings[3138]); +str->del(strings[3139]); +strings[3140] = str->add("e,action,mouse,move"); +strings[3141] = str->add("e"); +strings[3140] = str->add(strings[3140]); +strings[3141] = str->add(strings[3141]); +str->del(strings[3140]); +str->del(strings[3141]); +str->del(strings[3140]); +str->del(strings[3141]); +strings[3142] = str->add("e,action,mouse,move"); +strings[3143] = str->add("e"); +str->del(strings[3142]); +str->del(strings[3143]); +strings[3144] = str->add("e,action,mouse,move"); +strings[3145] = str->add("e"); +strings[3146] = str->add("e,state,unselected"); +strings[3145] = str->add(strings[3145]); +strings[3146] = str->add(strings[3146]); +strings[3145] = str->add(strings[3145]); +strings[3146] = str->add(strings[3146]); +strings[3145] = str->add(strings[3145]); +strings[3146] = str->add(strings[3146]); +strings[3145] = str->add(strings[3145]); +strings[3146] = str->add(strings[3146]); +strings[3145] = str->add(strings[3145]); +strings[3146] = str->add(strings[3146]); +strings[3145] = str->add(strings[3145]); +str->del(strings[3144]); +str->del(strings[3145]); +strings[1932] = str->add(strings[1932]); +strings[3147] = str->add("sel"); +strings[3148] = str->add("program,start"); +strings[3149] = str->add("unsel"); +str->del(strings[3146]); +str->del(strings[3145]); +str->del(strings[3146]); +str->del(strings[3145]); +strings[1932] = str->add(strings[1932]); +strings[3147] = str->add(strings[3147]); +strings[3148] = str->add(strings[3148]); +strings[3149] = str->add(strings[3149]); +str->del(strings[3146]); +str->del(strings[3145]); +strings[3148] = str->add(strings[3148]); +strings[3149] = str->add(strings[3149]); +strings[1932] = str->add(strings[1932]); +strings[3149] = str->add(strings[3149]); +str->del(strings[3146]); +str->del(strings[3145]); +strings[1932] = str->add(strings[1932]); +strings[3150] = str->add("e_in"); +strings[3148] = str->add(strings[3148]); +strings[3151] = str->add("e_out"); +str->del(strings[3146]); +str->del(strings[3145]); +str->del(strings[3146]); +str->del(strings[3145]); +str->del(strings[1932]); +str->del(strings[3147]); +str->del(strings[3148]); +str->del(strings[3149]); +str->del(strings[1932]); +str->del(strings[3147]); +str->del(strings[3148]); +str->del(strings[3149]); +str->del(strings[3148]); +str->del(strings[3149]); +str->del(strings[1932]); +str->del(strings[3149]); +str->del(strings[1932]); +str->del(strings[3150]); +str->del(strings[3148]); +str->del(strings[3151]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3152] = str->add("e,action,mouse,move"); +strings[3153] = str->add("e"); +strings[3154] = str->add("e,state,selected"); +strings[3153] = str->add(strings[3153]); +strings[3154] = str->add(strings[3154]); +strings[3153] = str->add(strings[3153]); +strings[3154] = str->add(strings[3154]); +strings[3153] = str->add(strings[3153]); +strings[3154] = str->add(strings[3154]); +strings[3153] = str->add(strings[3153]); +strings[3154] = str->add(strings[3154]); +strings[3153] = str->add(strings[3153]); +strings[3154] = str->add(strings[3154]); +strings[3153] = str->add(strings[3153]); +strings[3152] = str->add(strings[3152]); +strings[3153] = str->add(strings[3153]); +strings[3155] = str->add("(No Windows)"); +strings[1731] = str->add(strings[1731]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[3156] = str->add("Lost Windows"); +strings[469] = str->add(strings[469]); +strings[2683] = str->add(strings[2683]); +str->del(strings[3152]); +str->del(strings[3153]); +strings[3157] = str->add("program,start"); +strings[3158] = str->add("sel"); +str->del(strings[3154]); +str->del(strings[3153]); +str->del(strings[3154]); +str->del(strings[3153]); +strings[3157] = str->add(strings[3157]); +strings[3158] = str->add(strings[3158]); +str->del(strings[3154]); +str->del(strings[3153]); +strings[3157] = str->add(strings[3157]); +strings[3158] = str->add(strings[3158]); +strings[1932] = str->add(strings[1932]); +strings[3158] = str->add(strings[3158]); +str->del(strings[3154]); +str->del(strings[3153]); +str->del(strings[3154]); +str->del(strings[3153]); +str->del(strings[3154]); +str->del(strings[3153]); +str->del(strings[3152]); +str->del(strings[3153]); +str->del(strings[3157]); +str->del(strings[3158]); +str->del(strings[3157]); +str->del(strings[3158]); +str->del(strings[3157]); +str->del(strings[3158]); +str->del(strings[1932]); +str->del(strings[3158]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3159] = str->add("resize"); +str->del(strings[3159]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3160] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3160] = str->add(strings[3160]); +strings[3155] = str->add(strings[3155]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3155] = str->add(strings[3155]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[3160] = str->add(strings[3160]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[3161] = str->add("resize"); +strings[3161] = str->add(strings[3161]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3160] = str->add(strings[3160]); +strings[1731] = str->add(strings[1731]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1731] = str->add(strings[1731]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2683] = str->add(strings[2683]); +strings[2683] = str->add(strings[2683]); +strings[3160] = str->add(strings[3160]); +strings[469] = str->add(strings[469]); +strings[3162] = str->add("images/320"); +strings[3163] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/320"); +strings[469] = str->add(strings[469]); +strings[3162] = str->add(strings[3162]); +strings[1841] = str->add(strings[1841]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3160] = str->add(strings[3160]); +strings[3156] = str->add(strings[3156]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3156] = str->add(strings[3156]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3160] = str->add(strings[3160]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[3161] = str->add(strings[3161]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2862]); +str->del(strings[2862]); +str->del(strings[2862]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2672]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2673]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[2862]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3130]); +str->del(strings[1713]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3132]); +str->del(strings[1714]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3155] = str->add(strings[3155]); +strings[3155] = str->add(strings[3155]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3161] = str->add(strings[3161]); +strings[1731] = str->add(strings[1731]); +strings[1731] = str->add(strings[1731]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3161] = str->add(strings[3161]); +strings[3156] = str->add(strings[3156]); +strings[3156] = str->add(strings[3156]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[1932] = str->add(strings[1932]); +strings[3164] = str->add("unsel"); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3160]); +str->del(strings[1841]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[3161]); +str->del(strings[1932]); +str->del(strings[3164]); +strings[3165] = str->add("e,action,mouse,move"); +strings[3166] = str->add("e"); +str->del(strings[3165]); +str->del(strings[3166]); +str->del(strings[7]); +str->del(strings[3136]); +strings[7] = str->add(strings[7]); +strings[3167] = str->add("images/58"); +strings[3168] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/58"); +strings[7] = str->add(strings[7]); +strings[3167] = str->add(strings[3167]); +strings[3169] = str->add("e,action,mouse,move"); +strings[3170] = str->add("e"); +str->del(strings[3169]); +str->del(strings[3170]); +strings[3171] = str->add("e,action,mouse,move"); +strings[3172] = str->add("e"); +str->del(strings[3171]); +str->del(strings[3172]); +strings[3173] = str->add("e,action,mouse,move"); +strings[3174] = str->add("e"); +str->del(strings[3173]); +str->del(strings[3174]); +strings[3175] = str->add("e,action,mouse,move"); +strings[3176] = str->add("e"); +str->del(strings[3175]); +str->del(strings[3176]); +strings[1932] = str->add(strings[1932]); +strings[3177] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3177]); +strings[3178] = str->add("e,action,mouse,move"); +strings[3179] = str->add("e"); +strings[3180] = str->add("e,state,unselected"); +strings[3179] = str->add(strings[3179]); +strings[3180] = str->add(strings[3180]); +strings[3179] = str->add(strings[3179]); +strings[3180] = str->add(strings[3180]); +strings[3179] = str->add(strings[3179]); +strings[3180] = str->add(strings[3180]); +strings[3179] = str->add(strings[3179]); +strings[3180] = str->add(strings[3180]); +strings[3179] = str->add(strings[3179]); +strings[3180] = str->add(strings[3180]); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add("e,state,selected"); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add(strings[3181]); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add(strings[3181]); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add(strings[3181]); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add(strings[3181]); +strings[3179] = str->add(strings[3179]); +strings[3181] = str->add(strings[3181]); +strings[3179] = str->add(strings[3179]); +str->del(strings[3178]); +str->del(strings[3179]); +strings[1932] = str->add(strings[1932]); +strings[3182] = str->add("sel"); +strings[3183] = str->add("program,start"); +strings[3184] = str->add("unsel"); +str->del(strings[3180]); +str->del(strings[3179]); +str->del(strings[3180]); +str->del(strings[3179]); +strings[1932] = str->add(strings[1932]); +strings[3182] = str->add(strings[3182]); +strings[3183] = str->add(strings[3183]); +strings[3184] = str->add(strings[3184]); +str->del(strings[3180]); +str->del(strings[3179]); +strings[3183] = str->add(strings[3183]); +strings[3184] = str->add(strings[3184]); +strings[1932] = str->add(strings[1932]); +strings[3184] = str->add(strings[3184]); +str->del(strings[3180]); +str->del(strings[3179]); +str->del(strings[3180]); +str->del(strings[3179]); +str->del(strings[3180]); +str->del(strings[3179]); +strings[3183] = str->add(strings[3183]); +strings[3182] = str->add(strings[3182]); +str->del(strings[3181]); +str->del(strings[3179]); +str->del(strings[3181]); +str->del(strings[3179]); +strings[3183] = str->add(strings[3183]); +strings[3182] = str->add(strings[3182]); +str->del(strings[3181]); +str->del(strings[3179]); +strings[3183] = str->add(strings[3183]); +strings[3182] = str->add(strings[3182]); +strings[1932] = str->add(strings[1932]); +strings[3182] = str->add(strings[3182]); +str->del(strings[3181]); +str->del(strings[3179]); +str->del(strings[3181]); +str->del(strings[3179]); +str->del(strings[3181]); +str->del(strings[3179]); +str->del(strings[1932]); +str->del(strings[3182]); +str->del(strings[3183]); +str->del(strings[3184]); +str->del(strings[1932]); +str->del(strings[3182]); +str->del(strings[3183]); +str->del(strings[3184]); +str->del(strings[3183]); +str->del(strings[3184]); +str->del(strings[1932]); +str->del(strings[3184]); +str->del(strings[3183]); +str->del(strings[3182]); +str->del(strings[3183]); +str->del(strings[3182]); +str->del(strings[3183]); +str->del(strings[3182]); +str->del(strings[1932]); +str->del(strings[3182]); +strings[3185] = str->add("e,action,mouse,move"); +strings[3186] = str->add("e"); +str->del(strings[3185]); +str->del(strings[3186]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3187] = str->add("resize"); +str->del(strings[3187]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3188] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[3188] = str->add(strings[3188]); +strings[469] = str->add(strings[469]); +strings[2894] = str->add(strings[2894]); +strings[1841] = str->add(strings[1841]); +strings[3189] = str->add("resize"); +strings[3189] = str->add(strings[3189]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3188] = str->add(strings[3188]); +strings[2860] = str->add(strings[2860]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2860] = str->add(strings[2860]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[3188] = str->add(strings[3188]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3188] = str->add(strings[3188]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3188] = str->add(strings[3188]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3188] = str->add(strings[3188]); +strings[2861] = str->add(strings[2861]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2861] = str->add(strings[2861]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[3189] = str->add(strings[3189]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3155]); +str->del(strings[3155]); +str->del(strings[3155]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2682]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1731]); +str->del(strings[1731]); +str->del(strings[1731]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2683]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3156]); +str->del(strings[3156]); +str->del(strings[3156]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3155]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2896]); +str->del(strings[1731]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3162]); +str->del(strings[3156]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3189] = str->add(strings[3189]); +strings[2860] = str->add(strings[2860]); +strings[2860] = str->add(strings[2860]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3189] = str->add(strings[3189]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2861] = str->add(strings[2861]); +strings[2861] = str->add(strings[2861]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3188]); +str->del(strings[1841]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[3189]); +str->del(strings[7]); +str->del(strings[3167]); +strings[7] = str->add(strings[7]); +strings[3190] = str->add("images/59"); +strings[3191] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/59"); +strings[7] = str->add(strings[7]); +strings[3190] = str->add(strings[3190]); +strings[3192] = str->add("e,action,mouse,move"); +strings[3193] = str->add("e"); +strings[3192] = str->add(strings[3192]); +strings[3193] = str->add(strings[3193]); +str->del(strings[3192]); +str->del(strings[3193]); +str->del(strings[3192]); +str->del(strings[3193]); +strings[3194] = str->add("e,action,mouse,move"); +strings[3195] = str->add("e"); +str->del(strings[3194]); +str->del(strings[3195]); +strings[1932] = str->add(strings[1932]); +strings[1847] = str->add(strings[1847]); +strings[3196] = str->add("program,start"); +strings[1848] = str->add(strings[1848]); +strings[1932] = str->add(strings[1932]); +strings[1848] = str->add(strings[1848]); +strings[3196] = str->add(strings[3196]); +strings[1847] = str->add(strings[1847]); +strings[1932] = str->add(strings[1932]); +strings[3197] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[1847]); +str->del(strings[3196]); +str->del(strings[1848]); +str->del(strings[1932]); +str->del(strings[1848]); +str->del(strings[3196]); +str->del(strings[1847]); +str->del(strings[1932]); +str->del(strings[3197]); +strings[3198] = str->add("e,action,mouse,move"); +strings[3199] = str->add("e"); +str->del(strings[3198]); +str->del(strings[3199]); +strings[3200] = str->add("e,action,mouse,move"); +strings[3201] = str->add("e"); +strings[3200] = str->add(strings[3200]); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add("e,state,unselected"); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add(strings[3202]); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add(strings[3202]); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add(strings[3202]); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add(strings[3202]); +strings[3201] = str->add(strings[3201]); +strings[3202] = str->add(strings[3202]); +strings[3201] = str->add(strings[3201]); +str->del(strings[3200]); +str->del(strings[3201]); +str->del(strings[3200]); +str->del(strings[3201]); +strings[1932] = str->add(strings[1932]); +strings[3203] = str->add("sel"); +strings[3204] = str->add("program,start"); +strings[3205] = str->add("unsel"); +str->del(strings[3202]); +str->del(strings[3201]); +str->del(strings[3202]); +str->del(strings[3201]); +strings[1932] = str->add(strings[1932]); +strings[3203] = str->add(strings[3203]); +strings[3204] = str->add(strings[3204]); +strings[3205] = str->add(strings[3205]); +str->del(strings[3202]); +str->del(strings[3201]); +strings[3204] = str->add(strings[3204]); +strings[3205] = str->add(strings[3205]); +strings[1932] = str->add(strings[1932]); +strings[3205] = str->add(strings[3205]); +str->del(strings[3202]); +str->del(strings[3201]); +str->del(strings[3202]); +str->del(strings[3201]); +str->del(strings[3202]); +str->del(strings[3201]); +str->del(strings[1932]); +str->del(strings[3203]); +str->del(strings[3204]); +str->del(strings[3205]); +str->del(strings[1932]); +str->del(strings[3203]); +str->del(strings[3204]); +str->del(strings[3205]); +str->del(strings[3204]); +str->del(strings[3205]); +str->del(strings[1932]); +str->del(strings[3205]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3206] = str->add("e,action,mouse,move"); +strings[3207] = str->add("e"); +strings[3208] = str->add("e,state,selected"); +strings[3207] = str->add(strings[3207]); +strings[3208] = str->add(strings[3208]); +strings[3207] = str->add(strings[3207]); +strings[3208] = str->add(strings[3208]); +strings[3207] = str->add(strings[3207]); +strings[3208] = str->add(strings[3208]); +strings[3207] = str->add(strings[3207]); +strings[3208] = str->add(strings[3208]); +strings[3207] = str->add(strings[3207]); +strings[3206] = str->add(strings[3206]); +strings[3207] = str->add(strings[3207]); +str->del(strings[3206]); +str->del(strings[3207]); +strings[3209] = str->add("program,start"); +strings[3210] = str->add("sel"); +str->del(strings[3208]); +str->del(strings[3207]); +str->del(strings[3208]); +str->del(strings[3207]); +strings[3209] = str->add(strings[3209]); +strings[3210] = str->add(strings[3210]); +str->del(strings[3208]); +str->del(strings[3207]); +str->del(strings[3208]); +str->del(strings[3207]); +str->del(strings[3208]); +str->del(strings[3207]); +str->del(strings[3206]); +str->del(strings[3207]); +str->del(strings[3209]); +str->del(strings[3210]); +str->del(strings[3209]); +str->del(strings[3210]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2687]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2860]); +str->del(strings[2860]); +str->del(strings[2860]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2861]); +str->del(strings[2861]); +str->del(strings[2861]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2894]); +str->del(strings[2860]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[2861]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[3211] = str->add("e,action,mouse,move"); +strings[3212] = str->add("e"); +str->del(strings[3211]); +str->del(strings[3212]); +str->del(strings[7]); +str->del(strings[3190]); +strings[7] = str->add(strings[7]); +strings[2148] = str->add(strings[2148]); +strings[3213] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/60"); +strings[7] = str->add(strings[7]); +strings[2148] = str->add(strings[2148]); +strings[3214] = str->add("e,action,mouse,move"); +strings[3215] = str->add("e"); +str->del(strings[3214]); +str->del(strings[3215]); +strings[3216] = str->add("e,action,mouse,move"); +strings[3217] = str->add("e"); +strings[3218] = str->add("e,state,unselected"); +strings[3217] = str->add(strings[3217]); +strings[3218] = str->add(strings[3218]); +strings[3217] = str->add(strings[3217]); +strings[3218] = str->add(strings[3218]); +strings[3217] = str->add(strings[3217]); +strings[3218] = str->add(strings[3218]); +strings[3217] = str->add(strings[3217]); +strings[3218] = str->add(strings[3218]); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add("e,state,selected"); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add(strings[3219]); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add(strings[3219]); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add(strings[3219]); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add(strings[3219]); +strings[3217] = str->add(strings[3217]); +strings[3219] = str->add(strings[3219]); +strings[3217] = str->add(strings[3217]); +strings[3216] = str->add(strings[3216]); +strings[3217] = str->add(strings[3217]); +strings[3220] = str->add("Accessories"); +strings[3221] = str->add("Development"); +strings[3222] = str->add("Games"); +strings[3223] = str->add("Graphics"); +strings[3224] = str->add("/usr/share/icons/Tango/24x24/categories/package_graphics.png"); +strings[3225] = str->add("Internet"); +strings[3226] = str->add("Multimedia"); +strings[3227] = str->add("Office"); +strings[3228] = str->add("Other"); +strings[1721] = str->add(strings[1721]); +strings[3229] = str->add("System Settings"); +str->del(strings[3216]); +str->del(strings[3217]); +strings[1932] = str->add(strings[1932]); +strings[3230] = str->add("sel"); +strings[3231] = str->add("program,start"); +strings[3232] = str->add("unsel"); +str->del(strings[3218]); +str->del(strings[3217]); +str->del(strings[3218]); +str->del(strings[3217]); +strings[1932] = str->add(strings[1932]); +strings[3230] = str->add(strings[3230]); +strings[3231] = str->add(strings[3231]); +strings[3232] = str->add(strings[3232]); +str->del(strings[3218]); +str->del(strings[3217]); +str->del(strings[3218]); +str->del(strings[3217]); +str->del(strings[3218]); +str->del(strings[3217]); +strings[3231] = str->add(strings[3231]); +strings[3230] = str->add(strings[3230]); +str->del(strings[3219]); +str->del(strings[3217]); +str->del(strings[3219]); +str->del(strings[3217]); +strings[3231] = str->add(strings[3231]); +strings[3230] = str->add(strings[3230]); +str->del(strings[3219]); +str->del(strings[3217]); +strings[3231] = str->add(strings[3231]); +strings[3230] = str->add(strings[3230]); +strings[1932] = str->add(strings[1932]); +strings[3230] = str->add(strings[3230]); +str->del(strings[3219]); +str->del(strings[3217]); +str->del(strings[3219]); +str->del(strings[3217]); +str->del(strings[3219]); +str->del(strings[3217]); +str->del(strings[3216]); +str->del(strings[3217]); +str->del(strings[1932]); +str->del(strings[3230]); +str->del(strings[3231]); +str->del(strings[3232]); +str->del(strings[1932]); +str->del(strings[3230]); +str->del(strings[3231]); +str->del(strings[3232]); +str->del(strings[3231]); +str->del(strings[3230]); +str->del(strings[3231]); +str->del(strings[3230]); +str->del(strings[3231]); +str->del(strings[3230]); +str->del(strings[1932]); +str->del(strings[3230]); +strings[3233] = str->add("e,action,mouse,move"); +strings[3234] = str->add("e"); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add("e,state,unselected"); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add("e,state,selected"); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3237] = str->add("Firefox (Web Browser)"); +strings[2074] = str->add(strings[2074]); +strings[3238] = str->add("XMMS (Music Player)"); +strings[2077] = str->add(strings[2077]); +strings[3239] = str->add("XTerm (Terminal)"); +strings[2070] = str->add(strings[2070]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3235] = str->add(strings[3235]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3236] = str->add(strings[3236]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +strings[3233] = str->add(strings[3233]); +strings[3234] = str->add(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add("sel"); +strings[3241] = str->add("program,start"); +strings[3242] = str->add("unsel"); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add(strings[3240]); +strings[3241] = str->add(strings[3241]); +strings[3242] = str->add(strings[3242]); +str->del(strings[3235]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3242] = str->add(strings[3242]); +strings[1932] = str->add(strings[1932]); +strings[3242] = str->add(strings[3242]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add(strings[3240]); +strings[3241] = str->add(strings[3241]); +strings[3242] = str->add(strings[3242]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add(strings[3240]); +strings[3241] = str->add(strings[3241]); +strings[3242] = str->add(strings[3242]); +str->del(strings[3235]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3242] = str->add(strings[3242]); +strings[1932] = str->add(strings[1932]); +strings[3242] = str->add(strings[3242]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3235]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3242] = str->add(strings[3242]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +strings[1932] = str->add(strings[1932]); +strings[3242] = str->add(strings[3242]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +strings[3241] = str->add(strings[3241]); +strings[3240] = str->add(strings[3240]); +strings[1932] = str->add(strings[1932]); +strings[3240] = str->add(strings[3240]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3236]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[3233]); +str->del(strings[3234]); +str->del(strings[1932]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[1932]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[1932]); +str->del(strings[3242]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[1932]); +str->del(strings[3240]); +str->del(strings[1932]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[1932]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[3241]); +str->del(strings[3242]); +str->del(strings[1932]); +str->del(strings[3242]); +str->del(strings[1932]); +str->del(strings[3242]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[1932]); +str->del(strings[3242]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[3241]); +str->del(strings[3240]); +str->del(strings[1932]); +str->del(strings[3240]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3243] = str->add("resize"); +str->del(strings[3243]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3220] = str->add(strings[3220]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3220] = str->add(strings[3220]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3221] = str->add(strings[3221]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3221] = str->add(strings[3221]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3222] = str->add(strings[3222]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3222] = str->add(strings[3222]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[3224] = str->add(strings[3224]); +strings[3245] = str->add("/usr/share/icons/Tango/24x24/categories/package_graphics.png//://(nil)//@/0/0.00000/64x64"); +strings[3224] = str->add(strings[3224]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3223] = str->add(strings[3223]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3223] = str->add(strings[3223]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3225] = str->add(strings[3225]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3225] = str->add(strings[3225]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3226] = str->add(strings[3226]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3226] = str->add(strings[3226]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3227] = str->add(strings[3227]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3227] = str->add(strings[3227]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3228] = str->add(strings[3228]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3228] = str->add(strings[3228]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[1721] = str->add(strings[1721]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3229] = str->add(strings[3229]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3229] = str->add(strings[3229]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3246] = str->add("resize"); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3246] = str->add(strings[3246]); +str->del(strings[3246]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[2074] = str->add(strings[2074]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3237] = str->add(strings[3237]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3237] = str->add(strings[3237]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[2077] = str->add(strings[2077]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3238] = str->add(strings[3238]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3238] = str->add(strings[3238]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3244] = str->add(strings[3244]); +strings[1841] = str->add(strings[1841]); +strings[2070] = str->add(strings[2070]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3244] = str->add(strings[3244]); +strings[3239] = str->add(strings[3239]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3239] = str->add(strings[3239]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[3246] = str->add(strings[3246]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3220]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3221]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3222]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3223]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3225]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3226]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3227]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3228]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[1721]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[3229]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3220]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3221]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3222]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3224]); +str->del(strings[3223]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3225]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3226]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3227]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3228]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1721]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3229]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[3237] = str->add(strings[3237]); +strings[3237] = str->add(strings[3237]); +strings[3238] = str->add(strings[3238]); +strings[3238] = str->add(strings[3238]); +strings[3239] = str->add(strings[3239]); +strings[3239] = str->add(strings[3239]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[1932] = str->add(strings[1932]); +strings[1840] = str->add(strings[1840]); +strings[3247] = str->add("program,start"); +strings[1844] = str->add(strings[1844]); +strings[1932] = str->add(strings[1932]); +strings[1844] = str->add(strings[1844]); +strings[3247] = str->add(strings[3247]); +strings[1840] = str->add(strings[1840]); +strings[1932] = str->add(strings[1932]); +strings[1851] = str->add(strings[1851]); +strings[3247] = str->add(strings[3247]); +strings[1851] = str->add(strings[1851]); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add(strings[3248]); +strings[1932] = str->add(strings[1932]); +strings[3249] = str->add("e_out"); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add(strings[3248]); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add(strings[3248]); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add(strings[3248]); +strings[1932] = str->add(strings[1932]); +strings[3248] = str->add(strings[3248]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3244]); +str->del(strings[1841]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[3246]); +str->del(strings[1932]); +str->del(strings[1840]); +str->del(strings[3247]); +str->del(strings[1844]); +str->del(strings[1932]); +str->del(strings[1844]); +str->del(strings[3247]); +str->del(strings[1840]); +str->del(strings[1932]); +str->del(strings[1851]); +str->del(strings[3247]); +str->del(strings[1851]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[1932]); +str->del(strings[3249]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[1932]); +str->del(strings[3248]); +str->del(strings[7]); +str->del(strings[2148]); +strings[7] = str->add(strings[7]); +strings[1869] = str->add(strings[1869]); +strings[1932] = str->add(strings[1932]); +strings[3250] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3250]); +str->del(strings[7]); +str->del(strings[1869]); +strings[7] = str->add(strings[7]); +strings[3251] = str->add("images/8"); +strings[3252] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/8"); +strings[7] = str->add(strings[7]); +strings[3251] = str->add(strings[3251]); +strings[1932] = str->add(strings[1932]); +strings[3253] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3253]); +str->del(strings[7]); +str->del(strings[3251]); +strings[7] = str->add(strings[7]); +strings[3254] = str->add("images/9"); +strings[3255] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/9"); +strings[7] = str->add(strings[7]); +strings[3254] = str->add(strings[3254]); +strings[1932] = str->add(strings[1932]); +strings[3256] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[3256] = str->add(strings[3256]); +str->del(strings[1932]); +str->del(strings[3256]); +str->del(strings[1932]); +str->del(strings[3256]); +str->del(strings[7]); +str->del(strings[3254]); +strings[7] = str->add(strings[7]); +strings[2206] = str->add(strings[2206]); +strings[1932] = str->add(strings[1932]); +strings[3257] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3257]); +str->del(strings[7]); +str->del(strings[2206]); +strings[7] = str->add(strings[7]); +strings[2213] = str->add(strings[2213]); +strings[1932] = str->add(strings[1932]); +strings[3258] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3258]); +str->del(strings[7]); +str->del(strings[2213]); +strings[7] = str->add(strings[7]); +strings[2220] = str->add(strings[2220]); +str->del(strings[7]); +str->del(strings[2220]); +strings[7] = str->add(strings[7]); +strings[2226] = str->add(strings[2226]); +str->del(strings[7]); +str->del(strings[2226]); +strings[7] = str->add(strings[7]); +strings[2257] = str->add(strings[2257]); +str->del(strings[7]); +str->del(strings[2257]); +strings[7] = str->add(strings[7]); +strings[2270] = str->add(strings[2270]); +str->del(strings[7]); +str->del(strings[2270]); +strings[7] = str->add(strings[7]); +strings[2276] = str->add(strings[2276]); +str->del(strings[7]); +str->del(strings[2276]); +strings[7] = str->add(strings[7]); +strings[3259] = str->add("images/17"); +strings[3260] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/17"); +strings[7] = str->add(strings[7]); +strings[3259] = str->add(strings[3259]); +str->del(strings[7]); +str->del(strings[3259]); +strings[7] = str->add(strings[7]); +strings[2292] = str->add(strings[2292]); +strings[3261] = str->add("e,action,mouse,move"); +strings[3262] = str->add("e"); +str->del(strings[3261]); +str->del(strings[3262]); +strings[3263] = str->add("e,action,mouse,move"); +strings[3264] = str->add("e"); +str->del(strings[3263]); +str->del(strings[3264]); +strings[3265] = str->add("e,action,mouse,move"); +strings[3266] = str->add("e"); +str->del(strings[3265]); +str->del(strings[3266]); +strings[3267] = str->add("e,action,mouse,move"); +strings[3268] = str->add("e"); +str->del(strings[3267]); +str->del(strings[3268]); +str->del(strings[7]); +str->del(strings[2292]); +strings[7] = str->add(strings[7]); +strings[2310] = str->add(strings[2310]); +strings[3269] = str->add("e,action,mouse,move"); +strings[3270] = str->add("e"); +str->del(strings[3269]); +str->del(strings[3270]); +strings[3271] = str->add("e,action,mouse,move"); +strings[3272] = str->add("e"); +str->del(strings[3271]); +str->del(strings[3272]); +strings[3273] = str->add("e,action,mouse,move"); +strings[3274] = str->add("e"); +str->del(strings[3273]); +str->del(strings[3274]); +strings[3275] = str->add("e,action,mouse,move"); +strings[3276] = str->add("e"); +str->del(strings[3275]); +str->del(strings[3276]); +strings[3277] = str->add("e,action,mouse,move"); +strings[3278] = str->add("e"); +str->del(strings[3277]); +str->del(strings[3278]); +str->del(strings[7]); +str->del(strings[2310]); +strings[7] = str->add(strings[7]); +strings[3279] = str->add("images/20"); +strings[3280] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/20"); +strings[7] = str->add(strings[7]); +strings[3279] = str->add(strings[3279]); +strings[3281] = str->add("e,action,mouse,move"); +strings[3282] = str->add("e"); +str->del(strings[3281]); +str->del(strings[3282]); +strings[3283] = str->add("e,action,mouse,move"); +strings[3284] = str->add("e"); +str->del(strings[3283]); +str->del(strings[3284]); +strings[3285] = str->add("e,action,mouse,move"); +strings[3286] = str->add("e"); +str->del(strings[3285]); +str->del(strings[3286]); +strings[3287] = str->add("e,action,mouse,move"); +strings[3288] = str->add("e"); +str->del(strings[3287]); +str->del(strings[3288]); +strings[3289] = str->add("e,action,mouse,move"); +strings[3290] = str->add("e"); +str->del(strings[3289]); +str->del(strings[3290]); +strings[3291] = str->add("e,action,mouse,move"); +strings[3292] = str->add("e"); +strings[3293] = str->add("e,state,unselected"); +strings[3292] = str->add(strings[3292]); +strings[3293] = str->add(strings[3293]); +strings[3292] = str->add(strings[3292]); +strings[3293] = str->add(strings[3293]); +strings[3292] = str->add(strings[3292]); +strings[3293] = str->add(strings[3293]); +strings[3292] = str->add(strings[3292]); +strings[3293] = str->add(strings[3293]); +strings[3292] = str->add(strings[3292]); +strings[3293] = str->add(strings[3293]); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add("e,state,selected"); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add(strings[3294]); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add(strings[3294]); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add(strings[3294]); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add(strings[3294]); +strings[3292] = str->add(strings[3292]); +strings[3294] = str->add(strings[3294]); +strings[3292] = str->add(strings[3292]); +str->del(strings[3291]); +str->del(strings[3292]); +strings[3295] = str->add("program,start"); +strings[3296] = str->add("unsel"); +str->del(strings[3293]); +str->del(strings[3292]); +str->del(strings[3293]); +str->del(strings[3292]); +strings[3295] = str->add(strings[3295]); +strings[3296] = str->add(strings[3296]); +str->del(strings[3293]); +str->del(strings[3292]); +strings[3295] = str->add(strings[3295]); +strings[3296] = str->add(strings[3296]); +strings[1932] = str->add(strings[1932]); +strings[3296] = str->add(strings[3296]); +str->del(strings[3293]); +str->del(strings[3292]); +str->del(strings[3293]); +str->del(strings[3292]); +str->del(strings[3293]); +str->del(strings[3292]); +strings[3295] = str->add(strings[3295]); +strings[3297] = str->add("sel"); +str->del(strings[3294]); +str->del(strings[3292]); +str->del(strings[3294]); +str->del(strings[3292]); +strings[3295] = str->add(strings[3295]); +strings[3297] = str->add(strings[3297]); +str->del(strings[3294]); +str->del(strings[3292]); +strings[3295] = str->add(strings[3295]); +strings[3297] = str->add(strings[3297]); +strings[1932] = str->add(strings[1932]); +strings[3297] = str->add(strings[3297]); +str->del(strings[3294]); +str->del(strings[3292]); +str->del(strings[3294]); +str->del(strings[3292]); +str->del(strings[3294]); +str->del(strings[3292]); +str->del(strings[3295]); +str->del(strings[3296]); +str->del(strings[3295]); +str->del(strings[3296]); +str->del(strings[3295]); +str->del(strings[3296]); +str->del(strings[1932]); +str->del(strings[3296]); +str->del(strings[3295]); +str->del(strings[3297]); +str->del(strings[3295]); +str->del(strings[3297]); +str->del(strings[3295]); +str->del(strings[3297]); +str->del(strings[1932]); +str->del(strings[3297]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3298] = str->add("resize"); +str->del(strings[3298]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3220] = str->add(strings[3220]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3220] = str->add(strings[3220]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3221] = str->add(strings[3221]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3221] = str->add(strings[3221]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3222] = str->add(strings[3222]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3222] = str->add(strings[3222]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[3224] = str->add(strings[3224]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3223] = str->add(strings[3223]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3223] = str->add(strings[3223]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3225] = str->add(strings[3225]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3225] = str->add(strings[3225]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3226] = str->add(strings[3226]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3226] = str->add(strings[3226]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3227] = str->add(strings[3227]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3227] = str->add(strings[3227]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3228] = str->add(strings[3228]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3228] = str->add(strings[3228]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[1721] = str->add(strings[1721]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3299] = str->add(strings[3299]); +strings[3229] = str->add(strings[3229]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3229] = str->add(strings[3229]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3299] = str->add(strings[3299]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3300] = str->add("resize"); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[3300] = str->add(strings[3300]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3237]); +str->del(strings[3237]); +str->del(strings[3237]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3238]); +str->del(strings[3238]); +str->del(strings[3238]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3239]); +str->del(strings[3239]); +str->del(strings[3239]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[2074]); +str->del(strings[3237]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[2077]); +str->del(strings[3238]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[2070]); +str->del(strings[3239]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[3220] = str->add(strings[3220]); +strings[3220] = str->add(strings[3220]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3221] = str->add(strings[3221]); +strings[3221] = str->add(strings[3221]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3222] = str->add(strings[3222]); +strings[3222] = str->add(strings[3222]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3223] = str->add(strings[3223]); +strings[3223] = str->add(strings[3223]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3225] = str->add(strings[3225]); +strings[3225] = str->add(strings[3225]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3226] = str->add(strings[3226]); +strings[3226] = str->add(strings[3226]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3227] = str->add(strings[3227]); +strings[3227] = str->add(strings[3227]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3228] = str->add(strings[3228]); +strings[3228] = str->add(strings[3228]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[1721] = str->add(strings[1721]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3229] = str->add(strings[3229]); +strings[3229] = str->add(strings[3229]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3299]); +str->del(strings[1841]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +str->del(strings[3300]); +strings[3301] = str->add("e,action,mouse,move"); +strings[3302] = str->add("e"); +str->del(strings[3301]); +str->del(strings[3302]); +str->del(strings[7]); +str->del(strings[3279]); +strings[7] = str->add(strings[7]); +strings[2320] = str->add(strings[2320]); +strings[3303] = str->add("e,action,mouse,move"); +strings[3304] = str->add("e"); +str->del(strings[3303]); +str->del(strings[3304]); +strings[3305] = str->add("e,action,mouse,move"); +strings[3306] = str->add("e"); +str->del(strings[3305]); +str->del(strings[3306]); +strings[3307] = str->add("e,action,mouse,move"); +strings[3308] = str->add("e"); +str->del(strings[3307]); +str->del(strings[3308]); +strings[3309] = str->add("e,action,mouse,move"); +strings[3310] = str->add("e"); +str->del(strings[3309]); +str->del(strings[3310]); +strings[3311] = str->add("e,action,mouse,move"); +strings[3312] = str->add("e"); +str->del(strings[3311]); +str->del(strings[3312]); +strings[3313] = str->add("e,action,mouse,move"); +strings[3314] = str->add("e"); +str->del(strings[3313]); +str->del(strings[3314]); +strings[3315] = str->add("e,action,mouse,move"); +strings[3316] = str->add("e"); +str->del(strings[3315]); +str->del(strings[3316]); +str->del(strings[7]); +str->del(strings[2320]); +strings[7] = str->add(strings[7]); +strings[2330] = str->add(strings[2330]); +strings[3317] = str->add("e,action,mouse,move"); +strings[3318] = str->add("e"); +str->del(strings[3317]); +str->del(strings[3318]); +strings[3319] = str->add("e,action,mouse,move"); +strings[3320] = str->add("e"); +str->del(strings[3319]); +str->del(strings[3320]); +strings[3321] = str->add("e,action,mouse,move"); +strings[3322] = str->add("e"); +str->del(strings[3321]); +str->del(strings[3322]); +strings[3323] = str->add("e,action,mouse,move"); +strings[3324] = str->add("e"); +str->del(strings[3323]); +str->del(strings[3324]); +strings[3325] = str->add("e,action,mouse,move"); +strings[3326] = str->add("e"); +str->del(strings[3325]); +str->del(strings[3326]); +strings[3327] = str->add("e,action,mouse,move"); +strings[3328] = str->add("e"); +str->del(strings[3327]); +str->del(strings[3328]); +strings[3329] = str->add("e,action,mouse,move"); +strings[3330] = str->add("e"); +str->del(strings[3329]); +str->del(strings[3330]); +strings[1932] = str->add(strings[1932]); +strings[3331] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3331]); +str->del(strings[7]); +str->del(strings[2330]); +strings[7] = str->add(strings[7]); +strings[2343] = str->add(strings[2343]); +strings[3332] = str->add("e,action,mouse,move"); +strings[3333] = str->add("e"); +str->del(strings[3332]); +str->del(strings[3333]); +strings[3334] = str->add("e,action,mouse,move"); +strings[3335] = str->add("e"); +str->del(strings[3334]); +str->del(strings[3335]); +strings[3336] = str->add("e,action,mouse,move"); +strings[3337] = str->add("e"); +str->del(strings[3336]); +str->del(strings[3337]); +strings[1932] = str->add(strings[1932]); +strings[1845] = str->add(strings[1845]); +strings[3338] = str->add("program,start"); +strings[1846] = str->add(strings[1846]); +strings[1932] = str->add(strings[1932]); +strings[1846] = str->add(strings[1846]); +strings[3338] = str->add(strings[3338]); +strings[1845] = str->add(strings[1845]); +strings[1932] = str->add(strings[1932]); +strings[3339] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[3339] = str->add(strings[3339]); +str->del(strings[1932]); +str->del(strings[1845]); +str->del(strings[3338]); +str->del(strings[1846]); +str->del(strings[1932]); +str->del(strings[1846]); +str->del(strings[3338]); +str->del(strings[1845]); +str->del(strings[1932]); +str->del(strings[3339]); +str->del(strings[1932]); +str->del(strings[3339]); +str->del(strings[7]); +str->del(strings[2343]); +strings[7] = str->add(strings[7]); +strings[2353] = str->add(strings[2353]); +strings[3340] = str->add("e,action,mouse,move"); +strings[3341] = str->add("e"); +str->del(strings[3340]); +str->del(strings[3341]); +str->del(strings[7]); +str->del(strings[2353]); +strings[7] = str->add(strings[7]); +strings[2363] = str->add(strings[2363]); +strings[3342] = str->add("e,action,mouse,move"); +strings[3343] = str->add("e"); +str->del(strings[3342]); +str->del(strings[3343]); +strings[3344] = str->add("e,action,mouse,move"); +strings[3345] = str->add("e"); +strings[3346] = str->add("e,state,unselected"); +strings[3345] = str->add(strings[3345]); +strings[3346] = str->add(strings[3346]); +strings[3345] = str->add(strings[3345]); +strings[3346] = str->add(strings[3346]); +strings[3345] = str->add(strings[3345]); +strings[3346] = str->add(strings[3346]); +strings[3345] = str->add(strings[3345]); +strings[3346] = str->add(strings[3346]); +strings[3345] = str->add(strings[3345]); +strings[3346] = str->add(strings[3346]); +strings[3345] = str->add(strings[3345]); +strings[3347] = str->add("e,state,selected"); +strings[3345] = str->add(strings[3345]); +strings[3347] = str->add(strings[3347]); +strings[3345] = str->add(strings[3345]); +strings[3347] = str->add(strings[3347]); +strings[3345] = str->add(strings[3345]); +strings[3347] = str->add(strings[3347]); +strings[3345] = str->add(strings[3345]); +strings[3347] = str->add(strings[3347]); +strings[3345] = str->add(strings[3345]); +str->del(strings[3344]); +str->del(strings[3345]); +strings[3348] = str->add("program,start"); +strings[3349] = str->add("unsel"); +str->del(strings[3346]); +str->del(strings[3345]); +str->del(strings[3346]); +str->del(strings[3345]); +strings[3348] = str->add(strings[3348]); +strings[3349] = str->add(strings[3349]); +str->del(strings[3346]); +str->del(strings[3345]); +strings[3348] = str->add(strings[3348]); +strings[3349] = str->add(strings[3349]); +strings[1932] = str->add(strings[1932]); +strings[3349] = str->add(strings[3349]); +str->del(strings[3346]); +str->del(strings[3345]); +str->del(strings[3346]); +str->del(strings[3345]); +str->del(strings[3346]); +str->del(strings[3345]); +strings[3348] = str->add(strings[3348]); +strings[3350] = str->add("sel"); +str->del(strings[3347]); +str->del(strings[3345]); +str->del(strings[3347]); +str->del(strings[3345]); +strings[3348] = str->add(strings[3348]); +strings[3350] = str->add(strings[3350]); +str->del(strings[3347]); +str->del(strings[3345]); +str->del(strings[3347]); +str->del(strings[3345]); +str->del(strings[3347]); +str->del(strings[3345]); +str->del(strings[3348]); +str->del(strings[3349]); +str->del(strings[3348]); +str->del(strings[3349]); +str->del(strings[3348]); +str->del(strings[3349]); +str->del(strings[1932]); +str->del(strings[3349]); +str->del(strings[3348]); +str->del(strings[3350]); +str->del(strings[3348]); +str->del(strings[3350]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3220]); +str->del(strings[3220]); +str->del(strings[3220]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3221]); +str->del(strings[3221]); +str->del(strings[3221]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3222]); +str->del(strings[3222]); +str->del(strings[3222]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3223]); +str->del(strings[3223]); +str->del(strings[3223]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3225]); +str->del(strings[3225]); +str->del(strings[3225]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3226]); +str->del(strings[3226]); +str->del(strings[3226]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3227]); +str->del(strings[3227]); +str->del(strings[3227]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3228]); +str->del(strings[3228]); +str->del(strings[3228]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3229]); +str->del(strings[3229]); +str->del(strings[3229]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3220]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3221]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3222]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3224]); +str->del(strings[3223]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3225]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3226]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3227]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3228]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1721]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3229]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3351] = str->add("e,action,mouse,move"); +strings[3352] = str->add("e"); +str->del(strings[3351]); +str->del(strings[3352]); +strings[3353] = str->add("e,action,mouse,move"); +strings[3354] = str->add("e"); +str->del(strings[3353]); +str->del(strings[3354]); +strings[3355] = str->add("e,action,mouse,move"); +strings[3356] = str->add("e"); +str->del(strings[3355]); +str->del(strings[3356]); +strings[3357] = str->add("e,action,mouse,move"); +strings[3358] = str->add("e"); +str->del(strings[3357]); +str->del(strings[3358]); +strings[3359] = str->add("e,action,mouse,move"); +strings[3360] = str->add("e"); +str->del(strings[3359]); +str->del(strings[3360]); +strings[3361] = str->add("e,action,mouse,move"); +strings[3362] = str->add("e"); +str->del(strings[3361]); +str->del(strings[3362]); +strings[1932] = str->add(strings[1932]); +strings[3363] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3363]); +str->del(strings[7]); +str->del(strings[2363]); +strings[7] = str->add(strings[7]); +strings[2383] = str->add(strings[2383]); +strings[3364] = str->add("e,action,mouse,move"); +strings[3365] = str->add("e"); +str->del(strings[3364]); +str->del(strings[3365]); +strings[3366] = str->add("e,action,mouse,move"); +strings[3367] = str->add("e"); +str->del(strings[3366]); +str->del(strings[3367]); +strings[3368] = str->add("e,action,mouse,move"); +strings[3369] = str->add("e"); +str->del(strings[3368]); +str->del(strings[3369]); +strings[3370] = str->add("e,action,mouse,move"); +strings[3371] = str->add("e"); +str->del(strings[3370]); +str->del(strings[3371]); +strings[3372] = str->add("e,action,mouse,move"); +strings[3373] = str->add("e"); +str->del(strings[3372]); +str->del(strings[3373]); +strings[3374] = str->add("e,action,mouse,move"); +strings[3375] = str->add("e"); +str->del(strings[3374]); +str->del(strings[3375]); +strings[3376] = str->add("e,action,mouse,move"); +strings[3377] = str->add("e"); +str->del(strings[3376]); +str->del(strings[3377]); +strings[3378] = str->add("e,action,mouse,move"); +strings[3379] = str->add("e"); +str->del(strings[3378]); +str->del(strings[3379]); +strings[1932] = str->add(strings[1932]); +strings[3380] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3380]); +str->del(strings[7]); +str->del(strings[2383]); +strings[7] = str->add(strings[7]); +strings[2404] = str->add(strings[2404]); +strings[3381] = str->add("e,action,mouse,move"); +strings[3382] = str->add("e"); +str->del(strings[3381]); +str->del(strings[3382]); +strings[3383] = str->add("e,action,mouse,move"); +strings[3384] = str->add("e"); +strings[3385] = str->add("e,state,unselected"); +strings[3384] = str->add(strings[3384]); +strings[3385] = str->add(strings[3385]); +strings[3384] = str->add(strings[3384]); +strings[3385] = str->add(strings[3385]); +strings[3384] = str->add(strings[3384]); +strings[3385] = str->add(strings[3385]); +strings[3384] = str->add(strings[3384]); +strings[3385] = str->add(strings[3385]); +strings[3384] = str->add(strings[3384]); +str->del(strings[3383]); +str->del(strings[3384]); +strings[1932] = str->add(strings[1932]); +strings[3386] = str->add("sel"); +strings[3387] = str->add("program,start"); +strings[3388] = str->add("unsel"); +str->del(strings[3385]); +str->del(strings[3384]); +str->del(strings[3385]); +str->del(strings[3384]); +strings[1932] = str->add(strings[1932]); +strings[3386] = str->add(strings[3386]); +strings[3387] = str->add(strings[3387]); +strings[3388] = str->add(strings[3388]); +str->del(strings[3385]); +str->del(strings[3384]); +str->del(strings[3385]); +str->del(strings[3384]); +str->del(strings[3385]); +str->del(strings[3384]); +str->del(strings[1932]); +str->del(strings[3386]); +str->del(strings[3387]); +str->del(strings[3388]); +str->del(strings[1932]); +str->del(strings[3386]); +str->del(strings[3387]); +str->del(strings[3388]); +strings[3389] = str->add("e,action,mouse,move"); +strings[3390] = str->add("e"); +str->del(strings[3389]); +str->del(strings[3390]); +strings[3391] = str->add("e,action,mouse,move"); +strings[3392] = str->add("e"); +str->del(strings[3391]); +str->del(strings[3392]); +strings[3393] = str->add("e,action,mouse,move"); +strings[3394] = str->add("e"); +str->del(strings[3393]); +str->del(strings[3394]); +strings[3395] = str->add("e,action,mouse,move"); +strings[3396] = str->add("e"); +str->del(strings[3395]); +str->del(strings[3396]); +strings[3397] = str->add("e,action,mouse,move"); +strings[3398] = str->add("e"); +strings[3399] = str->add("e,state,selected"); +strings[3398] = str->add(strings[3398]); +strings[3399] = str->add(strings[3399]); +strings[3398] = str->add(strings[3398]); +strings[3399] = str->add(strings[3399]); +strings[3398] = str->add(strings[3398]); +strings[3399] = str->add(strings[3399]); +strings[3398] = str->add(strings[3398]); +strings[3399] = str->add(strings[3399]); +strings[3398] = str->add(strings[3398]); +strings[3399] = str->add(strings[3399]); +strings[3398] = str->add(strings[3398]); +str->del(strings[3397]); +str->del(strings[3398]); +strings[3400] = str->add("program,start"); +strings[3401] = str->add("sel"); +str->del(strings[3399]); +str->del(strings[3398]); +str->del(strings[3399]); +str->del(strings[3398]); +strings[3400] = str->add(strings[3400]); +strings[3401] = str->add(strings[3401]); +str->del(strings[3399]); +str->del(strings[3398]); +strings[3400] = str->add(strings[3400]); +strings[3401] = str->add(strings[3401]); +strings[1932] = str->add(strings[1932]); +strings[3401] = str->add(strings[3401]); +str->del(strings[3399]); +str->del(strings[3398]); +str->del(strings[3399]); +str->del(strings[3398]); +str->del(strings[3399]); +str->del(strings[3398]); +str->del(strings[3400]); +str->del(strings[3401]); +str->del(strings[3400]); +str->del(strings[3401]); +str->del(strings[3400]); +str->del(strings[3401]); +str->del(strings[1932]); +str->del(strings[3401]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3402] = str->add("resize"); +str->del(strings[3402]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3403] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[3403] = str->add(strings[3403]); +strings[469] = str->add(strings[469]); +strings[2894] = str->add(strings[2894]); +strings[1841] = str->add(strings[1841]); +strings[3404] = str->add("resize"); +strings[3404] = str->add(strings[3404]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3403] = str->add(strings[3403]); +strings[2860] = str->add(strings[2860]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2860] = str->add(strings[2860]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[3403] = str->add(strings[3403]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3403] = str->add(strings[3403]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3403] = str->add(strings[3403]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3403] = str->add(strings[3403]); +strings[2861] = str->add(strings[2861]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2861] = str->add(strings[2861]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[3404] = str->add(strings[3404]); +strings[2860] = str->add(strings[2860]); +strings[2860] = str->add(strings[2860]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3404] = str->add(strings[3404]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[2861] = str->add(strings[2861]); +strings[2861] = str->add(strings[2861]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3403]); +str->del(strings[1841]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[3404]); +str->del(strings[7]); +str->del(strings[2404]); +strings[7] = str->add(strings[7]); +strings[2416] = str->add(strings[2416]); +strings[3405] = str->add("e,action,mouse,move"); +strings[3406] = str->add("e"); +str->del(strings[3405]); +str->del(strings[3406]); +strings[3407] = str->add("e,action,mouse,move"); +strings[3408] = str->add("e"); +str->del(strings[3407]); +str->del(strings[3408]); +strings[3409] = str->add("e,action,mouse,move"); +strings[3410] = str->add("e"); +str->del(strings[3409]); +str->del(strings[3410]); +strings[3411] = str->add("e,action,mouse,move"); +strings[3412] = str->add("e"); +str->del(strings[3411]); +str->del(strings[3412]); +strings[3413] = str->add("e,action,mouse,move"); +strings[3414] = str->add("e"); +str->del(strings[3413]); +str->del(strings[3414]); +strings[3415] = str->add("e,action,mouse,move"); +strings[3416] = str->add("e"); +str->del(strings[3415]); +str->del(strings[3416]); +strings[3417] = str->add("e,action,mouse,move"); +strings[3418] = str->add("e"); +str->del(strings[3417]); +str->del(strings[3418]); +strings[3419] = str->add("e,action,mouse,move"); +strings[3420] = str->add("e"); +str->del(strings[3419]); +str->del(strings[3420]); +strings[3421] = str->add("e,action,mouse,move"); +strings[3422] = str->add("e"); +str->del(strings[3421]); +str->del(strings[3422]); +strings[3423] = str->add("e,action,mouse,move"); +strings[3424] = str->add("e"); +str->del(strings[3423]); +str->del(strings[3424]); +strings[1932] = str->add(strings[1932]); +strings[3425] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3425]); +str->del(strings[7]); +str->del(strings[2416]); +strings[7] = str->add(strings[7]); +strings[2426] = str->add(strings[2426]); +strings[3426] = str->add("e,action,mouse,move"); +strings[3427] = str->add("e"); +str->del(strings[3426]); +str->del(strings[3427]); +strings[3428] = str->add("e,action,mouse,move"); +strings[3429] = str->add("e"); +str->del(strings[3428]); +str->del(strings[3429]); +strings[3430] = str->add("e,action,mouse,move"); +strings[3431] = str->add("e"); +str->del(strings[3430]); +str->del(strings[3431]); +strings[3432] = str->add("e,action,mouse,move"); +strings[3433] = str->add("e"); +str->del(strings[3432]); +str->del(strings[3433]); +strings[3434] = str->add("e,action,mouse,move"); +strings[3435] = str->add("e"); +str->del(strings[3434]); +str->del(strings[3435]); +strings[3436] = str->add("e,action,mouse,move"); +strings[3437] = str->add("e"); +str->del(strings[3436]); +str->del(strings[3437]); +strings[3438] = str->add("e,action,mouse,move"); +strings[3439] = str->add("e"); +str->del(strings[3438]); +str->del(strings[3439]); +strings[3440] = str->add("e,action,mouse,move"); +strings[3441] = str->add("e"); +str->del(strings[3440]); +str->del(strings[3441]); +strings[1932] = str->add(strings[1932]); +strings[3442] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3442]); +str->del(strings[7]); +str->del(strings[2426]); +strings[7] = str->add(strings[7]); +strings[2435] = str->add(strings[2435]); +strings[3443] = str->add("e,action,mouse,move"); +strings[3444] = str->add("e"); +strings[3445] = str->add("e,state,unselected"); +strings[3444] = str->add(strings[3444]); +strings[3445] = str->add(strings[3445]); +strings[3444] = str->add(strings[3444]); +strings[3445] = str->add(strings[3445]); +strings[3444] = str->add(strings[3444]); +strings[3445] = str->add(strings[3445]); +strings[3444] = str->add(strings[3444]); +strings[3445] = str->add(strings[3445]); +strings[3444] = str->add(strings[3444]); +strings[3445] = str->add(strings[3445]); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add("e,state,selected"); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add(strings[3446]); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add(strings[3446]); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add(strings[3446]); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add(strings[3446]); +strings[3444] = str->add(strings[3444]); +strings[3446] = str->add(strings[3446]); +strings[3444] = str->add(strings[3444]); +str->del(strings[3443]); +str->del(strings[3444]); +strings[1932] = str->add(strings[1932]); +strings[3447] = str->add("sel"); +strings[3448] = str->add("program,start"); +strings[3449] = str->add("unsel"); +str->del(strings[3445]); +str->del(strings[3444]); +str->del(strings[3445]); +str->del(strings[3444]); +strings[1932] = str->add(strings[1932]); +strings[3447] = str->add(strings[3447]); +strings[3448] = str->add(strings[3448]); +strings[3449] = str->add(strings[3449]); +str->del(strings[3445]); +str->del(strings[3444]); +strings[3448] = str->add(strings[3448]); +strings[3449] = str->add(strings[3449]); +strings[1932] = str->add(strings[1932]); +strings[3449] = str->add(strings[3449]); +str->del(strings[3445]); +str->del(strings[3444]); +str->del(strings[3445]); +str->del(strings[3444]); +str->del(strings[3445]); +str->del(strings[3444]); +strings[3448] = str->add(strings[3448]); +strings[3447] = str->add(strings[3447]); +str->del(strings[3446]); +str->del(strings[3444]); +str->del(strings[3446]); +str->del(strings[3444]); +strings[3448] = str->add(strings[3448]); +strings[3447] = str->add(strings[3447]); +str->del(strings[3446]); +str->del(strings[3444]); +strings[3448] = str->add(strings[3448]); +strings[3447] = str->add(strings[3447]); +strings[1932] = str->add(strings[1932]); +strings[3447] = str->add(strings[3447]); +str->del(strings[3446]); +str->del(strings[3444]); +str->del(strings[3446]); +str->del(strings[3444]); +str->del(strings[3446]); +str->del(strings[3444]); +str->del(strings[1932]); +str->del(strings[3447]); +str->del(strings[3448]); +str->del(strings[3449]); +str->del(strings[1932]); +str->del(strings[3447]); +str->del(strings[3448]); +str->del(strings[3449]); +str->del(strings[3448]); +str->del(strings[3449]); +str->del(strings[1932]); +str->del(strings[3449]); +str->del(strings[3448]); +str->del(strings[3447]); +str->del(strings[3448]); +str->del(strings[3447]); +str->del(strings[3448]); +str->del(strings[3447]); +str->del(strings[1932]); +str->del(strings[3447]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3450] = str->add("resize"); +str->del(strings[3450]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3451] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3451] = str->add(strings[3451]); +strings[3155] = str->add(strings[3155]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3155] = str->add(strings[3155]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[3451] = str->add(strings[3451]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[3452] = str->add("resize"); +strings[3452] = str->add(strings[3452]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3451] = str->add(strings[3451]); +strings[1731] = str->add(strings[1731]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1731] = str->add(strings[1731]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2683] = str->add(strings[2683]); +strings[3451] = str->add(strings[3451]); +strings[469] = str->add(strings[469]); +strings[3162] = str->add(strings[3162]); +strings[1841] = str->add(strings[1841]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3451] = str->add(strings[3451]); +strings[3156] = str->add(strings[3156]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[3156] = str->add(strings[3156]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[3451] = str->add(strings[3451]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[3452] = str->add(strings[3452]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2687]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2860]); +str->del(strings[2860]); +str->del(strings[2860]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2861]); +str->del(strings[2861]); +str->del(strings[2861]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2894]); +str->del(strings[2860]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[2861]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[3155] = str->add(strings[3155]); +strings[3155] = str->add(strings[3155]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3452] = str->add(strings[3452]); +strings[1731] = str->add(strings[1731]); +strings[1731] = str->add(strings[1731]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3452] = str->add(strings[3452]); +strings[3156] = str->add(strings[3156]); +strings[3156] = str->add(strings[3156]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3451]); +str->del(strings[1841]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +str->del(strings[3452]); +strings[3453] = str->add("e,action,mouse,move"); +strings[3454] = str->add("e"); +str->del(strings[3453]); +str->del(strings[3454]); +strings[3455] = str->add("e,action,mouse,move"); +strings[3456] = str->add("e"); +str->del(strings[3455]); +str->del(strings[3456]); +strings[3457] = str->add("e,action,mouse,move"); +strings[3458] = str->add("e"); +str->del(strings[3457]); +str->del(strings[3458]); +strings[3459] = str->add("e,action,mouse,move"); +strings[3460] = str->add("e"); +str->del(strings[3459]); +str->del(strings[3460]); +strings[3461] = str->add("e,action,mouse,move"); +strings[3462] = str->add("e"); +str->del(strings[3461]); +str->del(strings[3462]); +strings[3463] = str->add("e,action,mouse,move"); +strings[3464] = str->add("e"); +str->del(strings[3463]); +str->del(strings[3464]); +strings[3465] = str->add("e,action,mouse,move"); +strings[3466] = str->add("e"); +str->del(strings[3465]); +str->del(strings[3466]); +str->del(strings[7]); +str->del(strings[2435]); +strings[7] = str->add(strings[7]); +strings[2448] = str->add(strings[2448]); +strings[3467] = str->add("e,action,mouse,move"); +strings[3468] = str->add("e"); +str->del(strings[3467]); +str->del(strings[3468]); +strings[3469] = str->add("e,action,mouse,move"); +strings[3470] = str->add("e"); +str->del(strings[3469]); +str->del(strings[3470]); +strings[3471] = str->add("e,action,mouse,move"); +strings[3472] = str->add("e"); +str->del(strings[3471]); +str->del(strings[3472]); +strings[3473] = str->add("e,action,mouse,move"); +strings[3474] = str->add("e"); +str->del(strings[3473]); +str->del(strings[3474]); +strings[3475] = str->add("e,action,mouse,move"); +strings[3476] = str->add("e"); +str->del(strings[3475]); +str->del(strings[3476]); +strings[3477] = str->add("e,action,mouse,move"); +strings[3478] = str->add("e"); +str->del(strings[3477]); +str->del(strings[3478]); +strings[3479] = str->add("e,action,mouse,move"); +strings[3480] = str->add("e"); +str->del(strings[3479]); +str->del(strings[3480]); +strings[3481] = str->add("e,action,mouse,move"); +strings[3482] = str->add("e"); +str->del(strings[3481]); +str->del(strings[3482]); +strings[1932] = str->add(strings[1932]); +strings[3483] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[3483] = str->add(strings[3483]); +str->del(strings[1932]); +str->del(strings[3483]); +str->del(strings[1932]); +str->del(strings[3483]); +str->del(strings[7]); +str->del(strings[2448]); +strings[7] = str->add(strings[7]); +strings[2466] = str->add(strings[2466]); +strings[3484] = str->add("e,action,mouse,move"); +strings[3485] = str->add("e"); +str->del(strings[3484]); +str->del(strings[3485]); +strings[3486] = str->add("e,action,mouse,move"); +strings[3487] = str->add("e"); +str->del(strings[3486]); +str->del(strings[3487]); +strings[3488] = str->add("e,action,mouse,move"); +strings[3489] = str->add("e"); +str->del(strings[3488]); +str->del(strings[3489]); +strings[3490] = str->add("e,action,mouse,move"); +strings[3491] = str->add("e"); +str->del(strings[3490]); +str->del(strings[3491]); +strings[3492] = str->add("e,action,mouse,move"); +strings[3493] = str->add("e"); +strings[3494] = str->add("e,state,unselected"); +strings[3493] = str->add(strings[3493]); +strings[3494] = str->add(strings[3494]); +strings[3493] = str->add(strings[3493]); +strings[3494] = str->add(strings[3494]); +strings[3493] = str->add(strings[3493]); +strings[3494] = str->add(strings[3494]); +strings[3493] = str->add(strings[3493]); +strings[3494] = str->add(strings[3494]); +strings[3493] = str->add(strings[3493]); +strings[3494] = str->add(strings[3494]); +strings[3493] = str->add(strings[3493]); +str->del(strings[3492]); +str->del(strings[3493]); +strings[1932] = str->add(strings[1932]); +strings[3495] = str->add("sel"); +strings[3496] = str->add("program,start"); +strings[3497] = str->add("unsel"); +str->del(strings[3494]); +str->del(strings[3493]); +str->del(strings[3494]); +str->del(strings[3493]); +strings[1932] = str->add(strings[1932]); +strings[3495] = str->add(strings[3495]); +strings[3496] = str->add(strings[3496]); +strings[3497] = str->add(strings[3497]); +str->del(strings[3494]); +str->del(strings[3493]); +strings[3496] = str->add(strings[3496]); +strings[3497] = str->add(strings[3497]); +strings[1932] = str->add(strings[1932]); +strings[3497] = str->add(strings[3497]); +str->del(strings[3494]); +str->del(strings[3493]); +str->del(strings[3494]); +str->del(strings[3493]); +str->del(strings[3494]); +str->del(strings[3493]); +str->del(strings[1932]); +str->del(strings[3495]); +str->del(strings[3496]); +str->del(strings[3497]); +str->del(strings[1932]); +str->del(strings[3495]); +str->del(strings[3496]); +str->del(strings[3497]); +str->del(strings[3496]); +str->del(strings[3497]); +str->del(strings[1932]); +str->del(strings[3497]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3498] = str->add("e,action,mouse,move"); +strings[3499] = str->add("e"); +str->del(strings[3498]); +str->del(strings[3499]); +strings[3500] = str->add("e,action,mouse,move"); +strings[3501] = str->add("e"); +str->del(strings[3500]); +str->del(strings[3501]); +strings[3502] = str->add("e,action,mouse,move"); +strings[3503] = str->add("e"); +str->del(strings[3502]); +str->del(strings[3503]); +str->del(strings[7]); +str->del(strings[2466]); +strings[7] = str->add(strings[7]); +strings[2479] = str->add(strings[2479]); +strings[3504] = str->add("e,action,mouse,move"); +strings[3505] = str->add("e"); +str->del(strings[3504]); +str->del(strings[3505]); +strings[3506] = str->add("e,action,mouse,move"); +strings[3507] = str->add("e"); +strings[3508] = str->add("e,state,selected"); +strings[3507] = str->add(strings[3507]); +strings[3508] = str->add(strings[3508]); +strings[3507] = str->add(strings[3507]); +strings[3508] = str->add(strings[3508]); +strings[3507] = str->add(strings[3507]); +strings[3508] = str->add(strings[3508]); +strings[3507] = str->add(strings[3507]); +strings[3508] = str->add(strings[3508]); +strings[3507] = str->add(strings[3507]); +strings[3508] = str->add(strings[3508]); +strings[3507] = str->add(strings[3507]); +str->del(strings[3506]); +str->del(strings[3507]); +strings[3509] = str->add("program,start"); +strings[3510] = str->add("sel"); +str->del(strings[3508]); +str->del(strings[3507]); +str->del(strings[3508]); +str->del(strings[3507]); +strings[3509] = str->add(strings[3509]); +strings[3510] = str->add(strings[3510]); +str->del(strings[3508]); +str->del(strings[3507]); +strings[3509] = str->add(strings[3509]); +strings[3510] = str->add(strings[3510]); +strings[1932] = str->add(strings[1932]); +strings[3510] = str->add(strings[3510]); +str->del(strings[3508]); +str->del(strings[3507]); +strings[3509] = str->add(strings[3509]); +strings[3511] = str->add("e_in"); +str->del(strings[3508]); +str->del(strings[3507]); +str->del(strings[3508]); +str->del(strings[3507]); +str->del(strings[3509]); +str->del(strings[3510]); +str->del(strings[3509]); +str->del(strings[3510]); +str->del(strings[3509]); +str->del(strings[3510]); +str->del(strings[1932]); +str->del(strings[3510]); +str->del(strings[3509]); +str->del(strings[3511]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3512] = str->add("resize"); +str->del(strings[3512]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[3513] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[3513] = str->add(strings[3513]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[3514] = str->add("resize"); +strings[3514] = str->add(strings[3514]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3513] = str->add(strings[3513]); +strings[2862] = str->add(strings[2862]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2862] = str->add(strings[2862]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[3513] = str->add(strings[3513]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3513] = str->add(strings[3513]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[3513] = str->add(strings[3513]); +strings[469] = str->add(strings[469]); +strings[3130] = str->add(strings[3130]); +strings[1841] = str->add(strings[1841]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3513] = str->add(strings[3513]); +strings[1713] = str->add(strings[1713]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1713] = str->add(strings[1713]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[3513] = str->add(strings[3513]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[3513] = str->add(strings[3513]); +strings[469] = str->add(strings[469]); +strings[3132] = str->add(strings[3132]); +strings[1841] = str->add(strings[1841]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[3513] = str->add(strings[3513]); +strings[1714] = str->add(strings[1714]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1714] = str->add(strings[1714]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[3514] = str->add(strings[3514]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3155]); +str->del(strings[3155]); +str->del(strings[3155]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2682]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1731]); +str->del(strings[1731]); +str->del(strings[1731]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2683]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[3156]); +str->del(strings[3156]); +str->del(strings[3156]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[3155]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2896]); +str->del(strings[1731]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3162]); +str->del(strings[3156]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[3514] = str->add(strings[3514]); +strings[2862] = str->add(strings[2862]); +strings[2862] = str->add(strings[2862]); +strings[3514] = str->add(strings[3514]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[3514] = str->add(strings[3514]); +strings[1713] = str->add(strings[1713]); +strings[1713] = str->add(strings[1713]); +strings[3514] = str->add(strings[3514]); +strings[1714] = str->add(strings[1714]); +strings[1714] = str->add(strings[1714]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3513]); +str->del(strings[1841]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +str->del(strings[3514]); +strings[3515] = str->add("e,action,mouse,move"); +strings[3516] = str->add("e"); +str->del(strings[3515]); +str->del(strings[3516]); +strings[3517] = str->add("e,action,mouse,move"); +strings[3518] = str->add("e"); +str->del(strings[3517]); +str->del(strings[3518]); +strings[1932] = str->add(strings[1932]); +strings[1849] = str->add(strings[1849]); +strings[3519] = str->add("program,start"); +strings[1850] = str->add(strings[1850]); +strings[1932] = str->add(strings[1932]); +strings[1850] = str->add(strings[1850]); +strings[3519] = str->add(strings[3519]); +strings[1849] = str->add(strings[1849]); +str->del(strings[1932]); +str->del(strings[1849]); +str->del(strings[3519]); +str->del(strings[1850]); +str->del(strings[1932]); +str->del(strings[1850]); +str->del(strings[3519]); +str->del(strings[1849]); +strings[3520] = str->add("e,action,mouse,move"); +strings[3521] = str->add("e"); +str->del(strings[3520]); +str->del(strings[3521]); +strings[3522] = str->add("e,action,mouse,move"); +strings[3523] = str->add("e"); +str->del(strings[3522]); +str->del(strings[3523]); +strings[3524] = str->add("e,action,mouse,move"); +strings[3525] = str->add("e"); +str->del(strings[3524]); +str->del(strings[3525]); +strings[3526] = str->add("e,action,mouse,move"); +strings[3527] = str->add("e"); +str->del(strings[3526]); +str->del(strings[3527]); +str->del(strings[7]); +str->del(strings[2479]); +strings[7] = str->add(strings[7]); +strings[2489] = str->add(strings[2489]); +strings[3528] = str->add("e,action,mouse,move"); +strings[3529] = str->add("e"); +str->del(strings[3528]); +str->del(strings[3529]); +strings[3530] = str->add("e,action,mouse,move"); +strings[3531] = str->add("e"); +str->del(strings[3530]); +str->del(strings[3531]); +strings[3532] = str->add("e,action,mouse,move"); +strings[3533] = str->add("e"); +str->del(strings[3532]); +str->del(strings[3533]); +strings[3534] = str->add("e,action,mouse,move"); +strings[3535] = str->add("e"); +str->del(strings[3534]); +str->del(strings[3535]); +strings[1932] = str->add(strings[1932]); +strings[3536] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3536]); +strings[3537] = str->add("e,action,mouse,move"); +strings[3538] = str->add("e"); +str->del(strings[3537]); +str->del(strings[3538]); +strings[3539] = str->add("e,action,mouse,move"); +strings[3540] = str->add("e"); +str->del(strings[3539]); +str->del(strings[3540]); +strings[3541] = str->add("e,action,mouse,move"); +strings[3542] = str->add("e"); +str->del(strings[3541]); +str->del(strings[3542]); +strings[3543] = str->add("e,action,mouse,move"); +strings[3544] = str->add("e"); +str->del(strings[3543]); +str->del(strings[3544]); +strings[1932] = str->add(strings[1932]); +strings[3545] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3545]); +str->del(strings[7]); +str->del(strings[2489]); +strings[7] = str->add(strings[7]); +strings[2508] = str->add(strings[2508]); +strings[3546] = str->add("e,action,mouse,move"); +strings[3547] = str->add("e"); +str->del(strings[3546]); +str->del(strings[3547]); +strings[3548] = str->add("e,action,mouse,move"); +strings[3549] = str->add("e"); +str->del(strings[3548]); +str->del(strings[3549]); +strings[3550] = str->add("e,action,mouse,move"); +strings[3551] = str->add("e"); +str->del(strings[3550]); +str->del(strings[3551]); +strings[3552] = str->add("e,action,mouse,move"); +strings[3553] = str->add("e"); +str->del(strings[3552]); +str->del(strings[3553]); +strings[3554] = str->add("e,action,mouse,move"); +strings[3555] = str->add("e"); +str->del(strings[3554]); +str->del(strings[3555]); +strings[3556] = str->add("e,action,mouse,move"); +strings[3557] = str->add("e"); +str->del(strings[3556]); +str->del(strings[3557]); +str->del(strings[7]); +str->del(strings[2508]); +strings[7] = str->add(strings[7]); +strings[2518] = str->add(strings[2518]); +strings[3558] = str->add("e,action,mouse,move"); +strings[3559] = str->add("e"); +str->del(strings[3558]); +str->del(strings[3559]); +strings[3560] = str->add("e,action,mouse,move"); +strings[3561] = str->add("e"); +strings[3562] = str->add("e,state,unselected"); +strings[3561] = str->add(strings[3561]); +strings[3562] = str->add(strings[3562]); +strings[3561] = str->add(strings[3561]); +strings[3562] = str->add(strings[3562]); +strings[3561] = str->add(strings[3561]); +strings[3562] = str->add(strings[3562]); +strings[3561] = str->add(strings[3561]); +strings[3562] = str->add(strings[3562]); +strings[3561] = str->add(strings[3561]); +strings[3562] = str->add(strings[3562]); +strings[3561] = str->add(strings[3561]); +str->del(strings[3560]); +str->del(strings[3561]); +strings[1932] = str->add(strings[1932]); +strings[3563] = str->add("sel"); +strings[3564] = str->add("program,start"); +strings[3565] = str->add("unsel"); +str->del(strings[3562]); +str->del(strings[3561]); +str->del(strings[3562]); +str->del(strings[3561]); +strings[1932] = str->add(strings[1932]); +strings[3563] = str->add(strings[3563]); +strings[3564] = str->add(strings[3564]); +strings[3565] = str->add(strings[3565]); +str->del(strings[3562]); +str->del(strings[3561]); +strings[3564] = str->add(strings[3564]); +strings[3565] = str->add(strings[3565]); +strings[1932] = str->add(strings[1932]); +strings[3565] = str->add(strings[3565]); +str->del(strings[3562]); +str->del(strings[3561]); +strings[1932] = str->add(strings[1932]); +strings[3566] = str->add("e_in"); +strings[3564] = str->add(strings[3564]); +strings[3567] = str->add("e_out"); +str->del(strings[3562]); +str->del(strings[3561]); +str->del(strings[3562]); +str->del(strings[3561]); +str->del(strings[1932]); +str->del(strings[3563]); +str->del(strings[3564]); +str->del(strings[3565]); +str->del(strings[1932]); +str->del(strings[3563]); +str->del(strings[3564]); +str->del(strings[3565]); +str->del(strings[3564]); +str->del(strings[3565]); +str->del(strings[1932]); +str->del(strings[3565]); +str->del(strings[1932]); +str->del(strings[3566]); +str->del(strings[3564]); +str->del(strings[3567]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3568] = str->add("e,action,mouse,move"); +strings[3569] = str->add("e"); +str->del(strings[3568]); +str->del(strings[3569]); +strings[3570] = str->add("e,action,mouse,move"); +strings[3571] = str->add("e"); +str->del(strings[3570]); +str->del(strings[3571]); +str->del(strings[7]); +str->del(strings[2518]); +strings[7] = str->add(strings[7]); +strings[2531] = str->add(strings[2531]); +strings[3572] = str->add("e,action,mouse,move"); +strings[3573] = str->add("e"); +str->del(strings[3572]); +str->del(strings[3573]); +strings[1932] = str->add(strings[1932]); +strings[3574] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3574]); +strings[3575] = str->add("e,action,mouse,move"); +strings[3576] = str->add("e"); +str->del(strings[3575]); +str->del(strings[3576]); +strings[3577] = str->add("e,action,mouse,move"); +strings[3578] = str->add("e"); +str->del(strings[3577]); +str->del(strings[3578]); +strings[1932] = str->add(strings[1932]); +strings[3579] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3579]); +str->del(strings[7]); +str->del(strings[2531]); +strings[7] = str->add(strings[7]); +strings[2544] = str->add(strings[2544]); +str->del(strings[7]); +str->del(strings[2544]); +strings[7] = str->add(strings[7]); +strings[2561] = str->add(strings[2561]); +str->del(strings[7]); +str->del(strings[2561]); +strings[7] = str->add(strings[7]); +strings[3580] = str->add("images/40"); +strings[3581] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/40"); +strings[7] = str->add(strings[7]); +strings[3580] = str->add(strings[3580]); +strings[3582] = str->add("e,action,mouse,move"); +strings[3583] = str->add("e"); +str->del(strings[3582]); +str->del(strings[3583]); +strings[3584] = str->add("e,action,mouse,move"); +strings[3585] = str->add("e"); +str->del(strings[3584]); +str->del(strings[3585]); +strings[3586] = str->add("e,action,mouse,move"); +strings[3587] = str->add("e"); +str->del(strings[3586]); +str->del(strings[3587]); +strings[3588] = str->add("e,action,mouse,move"); +strings[3589] = str->add("e"); +str->del(strings[3588]); +str->del(strings[3589]); +strings[1932] = str->add(strings[1932]); +strings[3590] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3590]); +str->del(strings[7]); +str->del(strings[3580]); +strings[7] = str->add(strings[7]); +strings[1756] = str->add(strings[1756]); +strings[3591] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/41"); +strings[7] = str->add(strings[7]); +strings[1756] = str->add(strings[1756]); +strings[3592] = str->add("e,action,mouse,move"); +strings[3593] = str->add("e"); +str->del(strings[3592]); +str->del(strings[3593]); +strings[3594] = str->add("e,action,mouse,move"); +strings[3595] = str->add("e"); +strings[3596] = str->add("e,state,selected"); +strings[3595] = str->add(strings[3595]); +strings[3596] = str->add(strings[3596]); +strings[3595] = str->add(strings[3595]); +strings[3596] = str->add(strings[3596]); +strings[3595] = str->add(strings[3595]); +strings[3596] = str->add(strings[3596]); +strings[3595] = str->add(strings[3595]); +strings[3596] = str->add(strings[3596]); +strings[3595] = str->add(strings[3595]); +strings[3596] = str->add(strings[3596]); +strings[3595] = str->add(strings[3595]); +str->del(strings[3594]); +str->del(strings[3595]); +strings[3597] = str->add("program,start"); +strings[3598] = str->add("sel"); +str->del(strings[3596]); +str->del(strings[3595]); +str->del(strings[3596]); +str->del(strings[3595]); +strings[3597] = str->add(strings[3597]); +strings[3598] = str->add(strings[3598]); +str->del(strings[3596]); +str->del(strings[3595]); +strings[3597] = str->add(strings[3597]); +strings[3598] = str->add(strings[3598]); +strings[1932] = str->add(strings[1932]); +strings[3598] = str->add(strings[3598]); +str->del(strings[3596]); +str->del(strings[3595]); +strings[1932] = str->add(strings[1932]); +strings[3599] = str->add("e_out"); +strings[3597] = str->add(strings[3597]); +strings[3600] = str->add("e_in"); +str->del(strings[3596]); +str->del(strings[3595]); +str->del(strings[3596]); +str->del(strings[3595]); +str->del(strings[3597]); +str->del(strings[3598]); +str->del(strings[3597]); +str->del(strings[3598]); +str->del(strings[3597]); +str->del(strings[3598]); +str->del(strings[1932]); +str->del(strings[3598]); +str->del(strings[1932]); +str->del(strings[3599]); +str->del(strings[3597]); +str->del(strings[3600]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[3601] = str->add("e,action,mouse,move"); +strings[3602] = str->add("e"); +str->del(strings[3601]); +str->del(strings[3602]); +strings[3603] = str->add("e,action,mouse,move"); +strings[3604] = str->add("e"); +str->del(strings[3603]); +str->del(strings[3604]); +strings[3605] = str->add("e,action,mouse,move"); +strings[3606] = str->add("e"); +str->del(strings[3605]); +str->del(strings[3606]); +strings[3607] = str->add("e,action,mouse,move"); +strings[3608] = str->add("e"); +str->del(strings[3607]); +str->del(strings[3608]); +strings[3609] = str->add("e,action,mouse,move"); +strings[3610] = str->add("e"); +str->del(strings[3609]); +str->del(strings[3610]); +strings[3611] = str->add("e,action,mouse,move"); +strings[3612] = str->add("e"); +str->del(strings[3611]); +str->del(strings[3612]); +str->del(strings[7]); +str->del(strings[1756]); +strings[7] = str->add(strings[7]); +strings[1949] = str->add(strings[1949]); +strings[3613] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/42"); +strings[7] = str->add(strings[7]); +strings[1949] = str->add(strings[1949]); +strings[3614] = str->add("e,action,mouse,move"); +strings[3615] = str->add("e"); +str->del(strings[3614]); +str->del(strings[3615]); +strings[3616] = str->add("e,action,mouse,move"); +strings[3617] = str->add("e"); +str->del(strings[3616]); +str->del(strings[3617]); +strings[3618] = str->add("e,action,mouse,move"); +strings[3619] = str->add("e"); +str->del(strings[3618]); +str->del(strings[3619]); +strings[3620] = str->add("e,action,mouse,move"); +strings[3621] = str->add("e"); +str->del(strings[3620]); +str->del(strings[3621]); +strings[1932] = str->add(strings[1932]); +strings[1847] = str->add(strings[1847]); +strings[3622] = str->add("program,start"); +strings[1848] = str->add(strings[1848]); +strings[1932] = str->add(strings[1932]); +strings[1848] = str->add(strings[1848]); +strings[3622] = str->add(strings[3622]); +strings[1847] = str->add(strings[1847]); +str->del(strings[1932]); +str->del(strings[1847]); +str->del(strings[3622]); +str->del(strings[1848]); +str->del(strings[1932]); +str->del(strings[1848]); +str->del(strings[3622]); +str->del(strings[1847]); +strings[3623] = str->add("e,action,mouse,move"); +strings[3624] = str->add("e"); +str->del(strings[3623]); +str->del(strings[3624]); +strings[3625] = str->add("e,action,mouse,move"); +strings[3626] = str->add("e"); +str->del(strings[3625]); +str->del(strings[3626]); +strings[3627] = str->add("e,action,mouse,move"); +strings[3628] = str->add("e"); +str->del(strings[3627]); +str->del(strings[3628]); +strings[3629] = str->add("e,action,mouse,move"); +strings[3630] = str->add("e"); +str->del(strings[3629]); +str->del(strings[3630]); +str->del(strings[7]); +str->del(strings[1949]); +strings[7] = str->add(strings[7]); +strings[2915] = str->add(strings[2915]); +strings[3631] = str->add("e,action,mouse,move"); +strings[3632] = str->add("e"); +str->del(strings[3631]); +str->del(strings[3632]); +strings[3633] = str->add("e,action,mouse,move"); +strings[3634] = str->add("e"); +str->del(strings[3633]); +str->del(strings[3634]); +strings[3635] = str->add("e,action,mouse,move"); +strings[3636] = str->add("e"); +str->del(strings[3635]); +str->del(strings[3636]); +strings[3637] = str->add("e,action,mouse,move"); +strings[3638] = str->add("e"); +str->del(strings[3637]); +str->del(strings[3638]); +strings[3639] = str->add("e,action,mouse,move"); +strings[3640] = str->add("e"); +str->del(strings[3639]); +str->del(strings[3640]); +strings[3641] = str->add("e,action,mouse,move"); +strings[3642] = str->add("e"); +str->del(strings[3641]); +str->del(strings[3642]); +strings[3643] = str->add("e,action,mouse,move"); +strings[3644] = str->add("e"); +str->del(strings[3643]); +str->del(strings[3644]); +strings[3645] = str->add("e,action,mouse,move"); +strings[3646] = str->add("e"); +str->del(strings[3645]); +str->del(strings[3646]); +strings[3647] = str->add("e,action,mouse,move"); +strings[3648] = str->add("e"); +str->del(strings[3647]); +str->del(strings[3648]); +str->del(strings[7]); +str->del(strings[2915]); +strings[7] = str->add(strings[7]); +strings[2886] = str->add(strings[2886]); +strings[3649] = str->add("e,action,mouse,move"); +strings[3650] = str->add("e"); +str->del(strings[3649]); +str->del(strings[3650]); +strings[3651] = str->add("e,action,mouse,move"); +strings[3652] = str->add("e"); +str->del(strings[3651]); +str->del(strings[3652]); +strings[3653] = str->add("e,action,mouse,move"); +strings[3654] = str->add("e"); +str->del(strings[3653]); +str->del(strings[3654]); +strings[3655] = str->add("e,action,mouse,move"); +strings[3656] = str->add("e"); +str->del(strings[3655]); +str->del(strings[3656]); +strings[1932] = str->add(strings[1932]); +strings[3657] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[3657] = str->add(strings[3657]); +str->del(strings[1932]); +str->del(strings[3657]); +str->del(strings[1932]); +str->del(strings[3657]); +strings[3658] = str->add("e,action,mouse,move"); +strings[3659] = str->add("e"); +str->del(strings[3658]); +str->del(strings[3659]); +strings[3660] = str->add("e,action,mouse,move"); +strings[3661] = str->add("e"); +str->del(strings[3660]); +str->del(strings[3661]); +strings[3662] = str->add("e,action,mouse,move"); +strings[3663] = str->add("e"); +str->del(strings[3662]); +str->del(strings[3663]); +strings[3664] = str->add("e,action,mouse,move"); +strings[3665] = str->add("e"); +str->del(strings[3664]); +str->del(strings[3665]); +str->del(strings[7]); +str->del(strings[2886]); +strings[7] = str->add(strings[7]); +strings[2888] = str->add(strings[2888]); +strings[3666] = str->add("e,action,mouse,move"); +strings[3667] = str->add("e"); +str->del(strings[3666]); +str->del(strings[3667]); +strings[3668] = str->add("e,action,mouse,move"); +strings[3669] = str->add("e"); +str->del(strings[3668]); +str->del(strings[3669]); +strings[3670] = str->add("e,action,mouse,move"); +strings[3671] = str->add("e"); +strings[3672] = str->add("e,state,unselected"); +strings[3671] = str->add(strings[3671]); +strings[3672] = str->add(strings[3672]); +strings[3671] = str->add(strings[3671]); +strings[3672] = str->add(strings[3672]); +strings[3671] = str->add(strings[3671]); +strings[3672] = str->add(strings[3672]); +strings[3671] = str->add(strings[3671]); +strings[3672] = str->add(strings[3672]); +strings[3671] = str->add(strings[3671]); +strings[3672] = str->add(strings[3672]); +strings[3671] = str->add(strings[3671]); +strings[3673] = str->add("e,state,selected"); +strings[3671] = str->add(strings[3671]); +strings[3673] = str->add(strings[3673]); +strings[3671] = str->add(strings[3671]); +strings[3673] = str->add(strings[3673]); +strings[3671] = str->add(strings[3671]); +strings[3673] = str->add(strings[3673]); +strings[3671] = str->add(strings[3671]); +strings[3673] = str->add(strings[3673]); +strings[3671] = str->add(strings[3671]); +str->del(strings[3670]); +str->del(strings[3671]); +strings[3674] = str->add("program,start"); +strings[3675] = str->add("unsel"); +str->del(strings[3672]); +str->del(strings[3671]); +str->del(strings[3672]); +str->del(strings[3671]); +strings[3674] = str->add(strings[3674]); +strings[3675] = str->add(strings[3675]); +str->del(strings[3672]); +str->del(strings[3671]); +strings[3674] = str->add(strings[3674]); +strings[3675] = str->add(strings[3675]); +strings[1932] = str->add(strings[1932]); +strings[3675] = str->add(strings[3675]); +str->del(strings[3672]); +str->del(strings[3671]); +strings[1932] = str->add(strings[1932]); +strings[3676] = str->add("e_in"); +strings[3674] = str->add(strings[3674]); +strings[3677] = str->add("e_out"); +str->del(strings[3672]); +str->del(strings[3671]); +str->del(strings[3672]); +str->del(strings[3671]); +strings[3674] = str->add(strings[3674]); +strings[3678] = str->add("sel"); +str->del(strings[3673]); +str->del(strings[3671]); +str->del(strings[3673]); +str->del(strings[3671]); +strings[3674] = str->add(strings[3674]); +strings[3678] = str->add(strings[3678]); +str->del(strings[3673]); +str->del(strings[3671]); +strings[3674] = str->add(strings[3674]); +strings[3676] = str->add(strings[3676]); +str->del(strings[3673]); +str->del(strings[3671]); +str->del(strings[3673]); +str->del(strings[3671]); +str->del(strings[3674]); +str->del(strings[3675]); +str->del(strings[3674]); +str->del(strings[3675]); +str->del(strings[3674]); +str->del(strings[3675]); +str->del(strings[1932]); +str->del(strings[3675]); +str->del(strings[1932]); +str->del(strings[3676]); +str->del(strings[3674]); +str->del(strings[3677]); +str->del(strings[3674]); +str->del(strings[3678]); +str->del(strings[3674]); +str->del(strings[3678]); +str->del(strings[3674]); +str->del(strings[3676]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[3679] = str->add("e,action,mouse,move"); +strings[3680] = str->add("e"); +str->del(strings[3679]); +str->del(strings[3680]); +strings[3681] = str->add("e,action,mouse,move"); +strings[3682] = str->add("e"); +str->del(strings[3681]); +str->del(strings[3682]); +strings[3683] = str->add("e,action,mouse,move"); +strings[3684] = str->add("e"); +str->del(strings[3683]); +str->del(strings[3684]); +str->del(strings[7]); +str->del(strings[2888]); +strings[7] = str->add(strings[7]); +strings[2913] = str->add(strings[2913]); +strings[3685] = str->add("e,action,mouse,move"); +strings[3686] = str->add("e"); +str->del(strings[3685]); +str->del(strings[3686]); +strings[3687] = str->add("e,action,mouse,move"); +strings[3688] = str->add("e"); +str->del(strings[3687]); +str->del(strings[3688]); +strings[3689] = str->add("e,action,mouse,move"); +strings[3690] = str->add("e"); +str->del(strings[3689]); +str->del(strings[3690]); +strings[3691] = str->add("e,action,mouse,move"); +strings[3692] = str->add("e"); +str->del(strings[3691]); +str->del(strings[3692]); +str->del(strings[7]); +str->del(strings[2913]); +strings[7] = str->add(strings[7]); +strings[3021] = str->add(strings[3021]); +strings[3693] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/47"); +strings[7] = str->add(strings[7]); +strings[3021] = str->add(strings[3021]); +strings[1932] = str->add(strings[1932]); +strings[3694] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[3694]); +str->del(strings[7]); +str->del(strings[3021]); +strings[7] = str->add(strings[7]); +strings[3695] = str->add("images/48"); +strings[3696] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/48"); +strings[7] = str->add(strings[7]); +strings[3695] = str->add(strings[3695]); +strings[1932] = str->add(strings[1932]); +strings[3697] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[3697] = str->add(strings[3697]); +str->del(strings[1932]); +str->del(strings[3697]); +str->del(strings[1932]); +str->del(strings[3697]); +str->del(strings[7]); +str->del(strings[3695]); +strings[7] = str->add(strings[7]); +strings[3698] = str->add("images/49"); +strings[3699] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/49"); +strings[7] = str->add(strings[7]); +strings[3698] = str->add(strings[3698]); +strings[3700] = str->add("e,action,mouse,move"); +strings[3701] = str->add("e"); +strings[3702] = str->add("e,action,mouse,down"); +strings[3701] = str->add(strings[3701]); +str->del(strings[3700]); +str->del(strings[3701]); +str->del(strings[3702]); +str->del(strings[3701]); +str->del(strings[7]); +str->del(strings[3698]); +strings[7] = str->add(strings[7]); +strings[3703] = str->add("images/50"); +strings[3704] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/50"); +strings[7] = str->add(strings[7]); +strings[3703] = str->add(strings[3703]); +strings[3705] = str->add("e,action,mouse,move"); +strings[3706] = str->add("e"); +strings[3707] = str->add("e,action,mouse,up"); +strings[3706] = str->add(strings[3706]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[3708] = str->add("base/theme/about"); +strings[64] = str->add(strings[64]); +strings[2769] = str->add(strings[2769]); +str->del(strings[64]); +str->del(strings[2769]); +strings[469] = str->add(strings[469]); +strings[2769] = str->add(strings[2769]); +strings[2769] = str->add(strings[2769]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +strings[3709] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[1712] = str->add(strings[1712]); +strings[3710] = str->add("0.16.999.043"); +strings[3711] = str->add("Copyright © 1999-2008, by the Enlightenment Development Team.

We hope you enjoy using this software as much as we enjoyed writing it.

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.

Enlightenment is under HEAVY DEVELOPMENT and it is not stable. Many features are incomplete or even non-existent yet and may have many bugs. You have been WARNED!"); +strings[3712] = str->add("e,action,close"); +strings[3713] = str->add("The TeamThe Rasterman (Carsten Haitzler)
Ibukun Olumuyiwa
Sebastian Dransfeld
HandyAndE (Andrew Williams)
CodeWarrior (Hisham Mardam Bey)
dj2 (Dan Sinclair)
Tilman Sauerbeck
Aleksej Struk
Brian Mattern
devilhorns (Christopher Michael)
/dev/urandom (Viktor Kojouharov)
ilLogict
Stafford Horne
Cedric Bail
onefang (David Seikel)
Stephen Houston
Byron Hillis
Ravenlock (Eric Schuele)
ManoWarrior (Luchezar Petkov)
morlenxus (Brian Miculcy)
"); +strings[3714] = str->add("font"); +strings[3715] = str->add("font_fallbacks"); +strings[3716] = str->add("font_size"); +strings[3717] = str->add("font_source"); +strings[3718] = str->add("color"); +strings[3719] = str->add("underline_color"); +strings[3720] = str->add("underline2_color"); +strings[3721] = str->add("outline_color"); +strings[3722] = str->add("shadow_color"); +strings[3723] = str->add("glow_color"); +strings[3724] = str->add("glow2_color"); +strings[3725] = str->add("backing_color"); +strings[3726] = str->add("strikethrough_color"); +strings[3727] = str->add("align"); +strings[3728] = str->add("valign"); +strings[3729] = str->add("wrap"); +strings[3730] = str->add("left_margin"); +strings[3731] = str->add("right_margin"); +strings[3732] = str->add("underline"); +strings[3733] = str->add("strikethrough"); +strings[3734] = str->add("backing"); +strings[3735] = str->add("style"); +strings[3736] = str->add("tabstops"); +strings[3727] = str->add(strings[3727]); +strings[3737] = str->add("center"); +str->del(strings[3727]); +str->del(strings[3737]); +strings[3718] = str->add(strings[3718]); +strings[3738] = str->add("#000"); +str->del(strings[3718]); +str->del(strings[3738]); +strings[3735] = str->add(strings[3735]); +strings[3739] = str->add("shadow"); +str->del(strings[3735]); +str->del(strings[3739]); +strings[3722] = str->add(strings[3722]); +strings[3740] = str->add("#ffffff80"); +str->del(strings[3722]); +str->del(strings[3740]); +strings[3729] = str->add(strings[3729]); +strings[3741] = str->add("word"); +str->del(strings[3729]); +str->del(strings[3741]); +strings[3717] = str->add(strings[3717]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3717]); +str->del(strings[469]); +strings[3716] = str->add(strings[3716]); +strings[3742] = str->add("10.000000"); +str->del(strings[3716]); +str->del(strings[3742]); +strings[3714] = str->add(strings[3714]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +strings[3743] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj/fonts/Edje-Vera"); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +str->del(strings[3714]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3735] = str->add(strings[3735]); +strings[3744] = str->add("glow"); +str->del(strings[3735]); +str->del(strings[3744]); +strings[3718] = str->add(strings[3718]); +strings[3745] = str->add("#fff"); +str->del(strings[3718]); +str->del(strings[3745]); +strings[3724] = str->add(strings[3724]); +strings[3746] = str->add("#fe87"); +str->del(strings[3724]); +str->del(strings[3746]); +strings[3723] = str->add(strings[3723]); +strings[3747] = str->add("#fa14"); +str->del(strings[3723]); +str->del(strings[3747]); +strings[3714] = str->add(strings[3714]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3714]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3735] = str->add(strings[3735]); +strings[3748] = str->add("glow"); +str->del(strings[3735]); +str->del(strings[3748]); +strings[3718] = str->add(strings[3718]); +strings[3749] = str->add("#fff"); +str->del(strings[3718]); +str->del(strings[3749]); +strings[3724] = str->add(strings[3724]); +strings[3750] = str->add("#fe87"); +str->del(strings[3724]); +str->del(strings[3750]); +strings[3723] = str->add(strings[3723]); +strings[3751] = str->add("#fa14"); +str->del(strings[3723]); +str->del(strings[3751]); +strings[3714] = str->add(strings[3714]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3714]); +str->del(strings[471]); +strings[3714] = str->add(strings[3714]); +strings[3715] = str->add(strings[3715]); +strings[3716] = str->add(strings[3716]); +strings[3717] = str->add(strings[3717]); +strings[3718] = str->add(strings[3718]); +strings[3719] = str->add(strings[3719]); +strings[3720] = str->add(strings[3720]); +strings[3721] = str->add(strings[3721]); +strings[3722] = str->add(strings[3722]); +strings[3723] = str->add(strings[3723]); +strings[3724] = str->add(strings[3724]); +strings[3725] = str->add(strings[3725]); +strings[3726] = str->add(strings[3726]); +strings[3727] = str->add(strings[3727]); +strings[3728] = str->add(strings[3728]); +strings[3729] = str->add(strings[3729]); +strings[3730] = str->add(strings[3730]); +strings[3731] = str->add(strings[3731]); +strings[3732] = str->add(strings[3732]); +strings[3733] = str->add(strings[3733]); +strings[3734] = str->add(strings[3734]); +strings[3735] = str->add(strings[3735]); +strings[3736] = str->add(strings[3736]); +strings[3727] = str->add(strings[3727]); +strings[3752] = str->add("center"); +str->del(strings[3727]); +str->del(strings[3752]); +strings[3718] = str->add(strings[3718]); +strings[3753] = str->add("#000"); +str->del(strings[3718]); +str->del(strings[3753]); +strings[3735] = str->add(strings[3735]); +strings[3754] = str->add("shadow"); +str->del(strings[3735]); +str->del(strings[3754]); +strings[3722] = str->add(strings[3722]); +strings[3755] = str->add("#ffffff80"); +str->del(strings[3722]); +str->del(strings[3755]); +strings[3729] = str->add(strings[3729]); +strings[3756] = str->add("word"); +str->del(strings[3729]); +str->del(strings[3756]); +strings[3717] = str->add(strings[3717]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3717]); +str->del(strings[469]); +strings[3716] = str->add(strings[3716]); +strings[3757] = str->add("10.000000"); +str->del(strings[3716]); +str->del(strings[3757]); +strings[3714] = str->add(strings[3714]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3714]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3735] = str->add(strings[3735]); +strings[3758] = str->add("glow"); +str->del(strings[3735]); +str->del(strings[3758]); +strings[3718] = str->add(strings[3718]); +strings[3759] = str->add("#fff"); +str->del(strings[3718]); +str->del(strings[3759]); +strings[3724] = str->add(strings[3724]); +strings[3760] = str->add("#fe87"); +str->del(strings[3724]); +str->del(strings[3760]); +strings[3723] = str->add(strings[3723]); +strings[3761] = str->add("#fa14"); +str->del(strings[3723]); +str->del(strings[3761]); +strings[3714] = str->add(strings[3714]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3714]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3735] = str->add(strings[3735]); +strings[3762] = str->add("glow"); +str->del(strings[3735]); +str->del(strings[3762]); +strings[3718] = str->add(strings[3718]); +strings[3763] = str->add("#fff"); +str->del(strings[3718]); +str->del(strings[3763]); +strings[3724] = str->add(strings[3724]); +strings[3764] = str->add("#fe87"); +str->del(strings[3724]); +str->del(strings[3764]); +strings[3723] = str->add(strings[3723]); +strings[3765] = str->add("#fa14"); +str->del(strings[3723]); +str->del(strings[3765]); +strings[3714] = str->add(strings[3714]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3714]); +str->del(strings[471]); +str->del(strings[3714]); +str->del(strings[3715]); +str->del(strings[3716]); +str->del(strings[3717]); +str->del(strings[3718]); +str->del(strings[3719]); +str->del(strings[3720]); +str->del(strings[3721]); +str->del(strings[3722]); +str->del(strings[3723]); +str->del(strings[3724]); +str->del(strings[3725]); +str->del(strings[3726]); +str->del(strings[3727]); +str->del(strings[3728]); +str->del(strings[3729]); +str->del(strings[3730]); +str->del(strings[3731]); +str->del(strings[3732]); +str->del(strings[3733]); +str->del(strings[3734]); +str->del(strings[3735]); +str->del(strings[3736]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[3714]); +str->del(strings[3715]); +str->del(strings[3716]); +str->del(strings[3717]); +str->del(strings[3718]); +str->del(strings[3719]); +str->del(strings[3720]); +str->del(strings[3721]); +str->del(strings[3722]); +str->del(strings[3723]); +str->del(strings[3724]); +str->del(strings[3725]); +str->del(strings[3726]); +str->del(strings[3727]); +str->del(strings[3728]); +str->del(strings[3729]); +str->del(strings[3730]); +str->del(strings[3731]); +str->del(strings[3732]); +str->del(strings[3733]); +str->del(strings[3734]); +str->del(strings[3735]); +str->del(strings[3736]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3766] = str->add("Sans:style=Bold"); +strings[3767] = str->add("Edje-Vera-Bold"); +str->del(strings[3766]); +str->del(strings[3767]); +strings[379] = str->add(strings[379]); +strings[1712] = str->add(strings[1712]); +str->del(strings[469]); +strings[379] = str->add(strings[379]); +strings[3768] = str->add("Sans:style=Bold"); +strings[3769] = str->add("Edje-Vera-Bold"); +str->del(strings[3768]); +str->del(strings[3769]); +strings[379] = str->add(strings[379]); +strings[3710] = str->add(strings[3710]); +strings[3770] = str->add("font"); +strings[3771] = str->add("font_fallbacks"); +strings[3772] = str->add("font_size"); +strings[3773] = str->add("font_source"); +strings[3774] = str->add("color"); +strings[3775] = str->add("underline_color"); +strings[3776] = str->add("underline2_color"); +strings[3777] = str->add("outline_color"); +strings[3778] = str->add("shadow_color"); +strings[3779] = str->add("glow_color"); +strings[3780] = str->add("glow2_color"); +strings[3781] = str->add("backing_color"); +strings[3782] = str->add("strikethrough_color"); +strings[3783] = str->add("align"); +strings[3784] = str->add("valign"); +strings[3785] = str->add("wrap"); +strings[3786] = str->add("left_margin"); +strings[3787] = str->add("right_margin"); +strings[3788] = str->add("underline"); +strings[3789] = str->add("strikethrough"); +strings[3790] = str->add("backing"); +strings[3791] = str->add("style"); +strings[3792] = str->add("tabstops"); +strings[3783] = str->add(strings[3783]); +strings[3793] = str->add("center"); +str->del(strings[3783]); +str->del(strings[3793]); +strings[3774] = str->add(strings[3774]); +strings[3794] = str->add("#000"); +str->del(strings[3774]); +str->del(strings[3794]); +strings[3791] = str->add(strings[3791]); +strings[3795] = str->add("shadow"); +str->del(strings[3791]); +str->del(strings[3795]); +strings[3778] = str->add(strings[3778]); +strings[3796] = str->add("#ffffff80"); +str->del(strings[3778]); +str->del(strings[3796]); +strings[3785] = str->add(strings[3785]); +strings[3797] = str->add("word"); +str->del(strings[3785]); +str->del(strings[3797]); +strings[3773] = str->add(strings[3773]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3773]); +str->del(strings[469]); +strings[3772] = str->add(strings[3772]); +strings[3798] = str->add("10.000000"); +str->del(strings[3772]); +str->del(strings[3798]); +strings[3770] = str->add(strings[3770]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3770]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3791] = str->add(strings[3791]); +strings[3799] = str->add("soft_shadow"); +str->del(strings[3791]); +str->del(strings[3799]); +strings[3774] = str->add(strings[3774]); +strings[3800] = str->add("#fff"); +str->del(strings[3774]); +str->del(strings[3800]); +strings[3778] = str->add(strings[3778]); +strings[3801] = str->add("#00000020"); +str->del(strings[3778]); +str->del(strings[3801]); +strings[3772] = str->add(strings[3772]); +strings[3802] = str->add("12.000000"); +strings[470] = str->add(strings[470]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +str->del(strings[3772]); +str->del(strings[3802]); +strings[3770] = str->add(strings[3770]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +strings[471] = str->add(strings[471]); +str->del(strings[471]); +strings[471] = str->add(strings[471]); +strings[469] = str->add(strings[469]); +str->del(strings[3770]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[3770] = str->add(strings[3770]); +strings[3771] = str->add(strings[3771]); +strings[3772] = str->add(strings[3772]); +strings[3773] = str->add(strings[3773]); +strings[3774] = str->add(strings[3774]); +strings[3775] = str->add(strings[3775]); +strings[3776] = str->add(strings[3776]); +strings[3777] = str->add(strings[3777]); +strings[3778] = str->add(strings[3778]); +strings[3779] = str->add(strings[3779]); +strings[3780] = str->add(strings[3780]); +strings[3781] = str->add(strings[3781]); +strings[3782] = str->add(strings[3782]); +strings[3783] = str->add(strings[3783]); +strings[3784] = str->add(strings[3784]); +strings[3785] = str->add(strings[3785]); +strings[3786] = str->add(strings[3786]); +strings[3787] = str->add(strings[3787]); +strings[3788] = str->add(strings[3788]); +strings[3789] = str->add(strings[3789]); +strings[3790] = str->add(strings[3790]); +strings[3791] = str->add(strings[3791]); +strings[3792] = str->add(strings[3792]); +strings[3783] = str->add(strings[3783]); +strings[3803] = str->add("center"); +str->del(strings[3783]); +str->del(strings[3803]); +strings[3774] = str->add(strings[3774]); +strings[3804] = str->add("#000"); +str->del(strings[3774]); +str->del(strings[3804]); +strings[3791] = str->add(strings[3791]); +strings[3805] = str->add("shadow"); +str->del(strings[3791]); +str->del(strings[3805]); +strings[3778] = str->add(strings[3778]); +strings[3806] = str->add("#ffffff80"); +str->del(strings[3778]); +str->del(strings[3806]); +strings[3785] = str->add(strings[3785]); +strings[3807] = str->add("word"); +str->del(strings[3785]); +str->del(strings[3807]); +strings[3773] = str->add(strings[3773]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3773]); +str->del(strings[469]); +strings[3772] = str->add(strings[3772]); +strings[3808] = str->add("10.000000"); +str->del(strings[3772]); +str->del(strings[3808]); +strings[3770] = str->add(strings[3770]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3770]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3791] = str->add(strings[3791]); +strings[3809] = str->add("soft_shadow"); +str->del(strings[3791]); +str->del(strings[3809]); +strings[3774] = str->add(strings[3774]); +strings[3810] = str->add("#fff"); +str->del(strings[3774]); +str->del(strings[3810]); +strings[3778] = str->add(strings[3778]); +strings[3811] = str->add("#00000020"); +str->del(strings[3778]); +str->del(strings[3811]); +strings[3772] = str->add(strings[3772]); +strings[3812] = str->add("12.000000"); +str->del(strings[3772]); +str->del(strings[3812]); +strings[3770] = str->add(strings[3770]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3770]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[3770]); +str->del(strings[3771]); +str->del(strings[3772]); +str->del(strings[3773]); +str->del(strings[3774]); +str->del(strings[3775]); +str->del(strings[3776]); +str->del(strings[3777]); +str->del(strings[3778]); +str->del(strings[3779]); +str->del(strings[3780]); +str->del(strings[3781]); +str->del(strings[3782]); +str->del(strings[3783]); +str->del(strings[3784]); +str->del(strings[3785]); +str->del(strings[3786]); +str->del(strings[3787]); +str->del(strings[3788]); +str->del(strings[3789]); +str->del(strings[3790]); +str->del(strings[3791]); +str->del(strings[3792]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[3770]); +str->del(strings[3771]); +str->del(strings[3772]); +str->del(strings[3773]); +str->del(strings[3774]); +str->del(strings[3775]); +str->del(strings[3776]); +str->del(strings[3777]); +str->del(strings[3778]); +str->del(strings[3779]); +str->del(strings[3780]); +str->del(strings[3781]); +str->del(strings[3782]); +str->del(strings[3783]); +str->del(strings[3784]); +str->del(strings[3785]); +str->del(strings[3786]); +str->del(strings[3787]); +str->del(strings[3788]); +str->del(strings[3789]); +str->del(strings[3790]); +str->del(strings[3791]); +str->del(strings[3792]); +strings[3813] = str->add("font"); +strings[3814] = str->add("font_fallbacks"); +strings[3815] = str->add("font_size"); +strings[3816] = str->add("font_source"); +strings[3817] = str->add("color"); +strings[3818] = str->add("underline_color"); +strings[3819] = str->add("underline2_color"); +strings[3820] = str->add("outline_color"); +strings[3821] = str->add("shadow_color"); +strings[3822] = str->add("glow_color"); +strings[3823] = str->add("glow2_color"); +strings[3824] = str->add("backing_color"); +strings[3825] = str->add("strikethrough_color"); +strings[3826] = str->add("align"); +strings[3827] = str->add("valign"); +strings[3828] = str->add("wrap"); +strings[3829] = str->add("left_margin"); +strings[3830] = str->add("right_margin"); +strings[3831] = str->add("underline"); +strings[3832] = str->add("strikethrough"); +strings[3833] = str->add("backing"); +strings[3834] = str->add("style"); +strings[3835] = str->add("tabstops"); +strings[3826] = str->add(strings[3826]); +strings[3836] = str->add("center"); +str->del(strings[3826]); +str->del(strings[3836]); +strings[3817] = str->add(strings[3817]); +strings[3837] = str->add("#000"); +str->del(strings[3817]); +str->del(strings[3837]); +strings[3834] = str->add(strings[3834]); +strings[3838] = str->add("shadow"); +str->del(strings[3834]); +str->del(strings[3838]); +strings[3821] = str->add(strings[3821]); +strings[3839] = str->add("#ffffff80"); +str->del(strings[3821]); +str->del(strings[3839]); +strings[3828] = str->add(strings[3828]); +strings[3840] = str->add("word"); +str->del(strings[3828]); +str->del(strings[3840]); +strings[3816] = str->add(strings[3816]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3816]); +str->del(strings[469]); +strings[3815] = str->add(strings[3815]); +strings[3841] = str->add("10.000000"); +str->del(strings[3815]); +str->del(strings[3841]); +strings[3813] = str->add(strings[3813]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3813]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3834] = str->add(strings[3834]); +strings[3842] = str->add("soft_shadow"); +str->del(strings[3834]); +str->del(strings[3842]); +strings[3817] = str->add(strings[3817]); +strings[3843] = str->add("#fff"); +str->del(strings[3817]); +str->del(strings[3843]); +strings[3821] = str->add(strings[3821]); +strings[3844] = str->add("#00000020"); +str->del(strings[3821]); +str->del(strings[3844]); +strings[3815] = str->add(strings[3815]); +strings[3845] = str->add("12.000000"); +str->del(strings[3815]); +str->del(strings[3845]); +strings[3813] = str->add(strings[3813]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3813]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[3813]); +str->del(strings[3814]); +str->del(strings[3815]); +str->del(strings[3816]); +str->del(strings[3817]); +str->del(strings[3818]); +str->del(strings[3819]); +str->del(strings[3820]); +str->del(strings[3821]); +str->del(strings[3822]); +str->del(strings[3823]); +str->del(strings[3824]); +str->del(strings[3825]); +str->del(strings[3826]); +str->del(strings[3827]); +str->del(strings[3828]); +str->del(strings[3829]); +str->del(strings[3830]); +str->del(strings[3831]); +str->del(strings[3832]); +str->del(strings[3833]); +str->del(strings[3834]); +str->del(strings[3835]); +strings[3846] = str->add("font"); +strings[3847] = str->add("font_fallbacks"); +strings[3848] = str->add("font_size"); +strings[3849] = str->add("font_source"); +strings[3850] = str->add("color"); +strings[3851] = str->add("underline_color"); +strings[3852] = str->add("underline2_color"); +strings[3853] = str->add("outline_color"); +strings[3854] = str->add("shadow_color"); +strings[3855] = str->add("glow_color"); +strings[3856] = str->add("glow2_color"); +strings[3857] = str->add("backing_color"); +strings[3858] = str->add("strikethrough_color"); +strings[3859] = str->add("align"); +strings[3860] = str->add("valign"); +strings[3861] = str->add("wrap"); +strings[3862] = str->add("left_margin"); +strings[3863] = str->add("right_margin"); +strings[3864] = str->add("underline"); +strings[3865] = str->add("strikethrough"); +strings[3866] = str->add("backing"); +strings[3867] = str->add("style"); +strings[3868] = str->add("tabstops"); +strings[3859] = str->add(strings[3859]); +strings[3869] = str->add("center"); +str->del(strings[3859]); +str->del(strings[3869]); +strings[3850] = str->add(strings[3850]); +strings[3870] = str->add("#000"); +str->del(strings[3850]); +str->del(strings[3870]); +strings[3867] = str->add(strings[3867]); +strings[3871] = str->add("shadow"); +str->del(strings[3867]); +str->del(strings[3871]); +strings[3854] = str->add(strings[3854]); +strings[3872] = str->add("#ffffff80"); +str->del(strings[3854]); +str->del(strings[3872]); +strings[3861] = str->add(strings[3861]); +strings[3873] = str->add("word"); +str->del(strings[3861]); +str->del(strings[3873]); +strings[3849] = str->add(strings[3849]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3849]); +str->del(strings[469]); +strings[3848] = str->add(strings[3848]); +strings[3874] = str->add("10.000000"); +str->del(strings[3848]); +str->del(strings[3874]); +strings[3846] = str->add(strings[3846]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3846]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3867] = str->add(strings[3867]); +strings[3875] = str->add("soft_shadow"); +str->del(strings[3867]); +str->del(strings[3875]); +strings[3850] = str->add(strings[3850]); +strings[3876] = str->add("#fff"); +str->del(strings[3850]); +str->del(strings[3876]); +strings[3854] = str->add(strings[3854]); +strings[3877] = str->add("#00000020"); +str->del(strings[3854]); +str->del(strings[3877]); +strings[3848] = str->add(strings[3848]); +strings[3878] = str->add("12.000000"); +str->del(strings[3848]); +str->del(strings[3878]); +strings[3846] = str->add(strings[3846]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3846]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[3846]); +str->del(strings[3847]); +str->del(strings[3848]); +str->del(strings[3849]); +str->del(strings[3850]); +str->del(strings[3851]); +str->del(strings[3852]); +str->del(strings[3853]); +str->del(strings[3854]); +str->del(strings[3855]); +str->del(strings[3856]); +str->del(strings[3857]); +str->del(strings[3858]); +str->del(strings[3859]); +str->del(strings[3860]); +str->del(strings[3861]); +str->del(strings[3862]); +str->del(strings[3863]); +str->del(strings[3864]); +str->del(strings[3865]); +str->del(strings[3866]); +str->del(strings[3867]); +str->del(strings[3868]); +strings[470] = str->add(strings[470]); +strings[3879] = str->add("OK"); +strings[3880] = str->add("font"); +strings[3881] = str->add("font_fallbacks"); +strings[3882] = str->add("font_size"); +strings[3883] = str->add("font_source"); +strings[3884] = str->add("color"); +strings[3885] = str->add("underline_color"); +strings[3886] = str->add("underline2_color"); +strings[3887] = str->add("outline_color"); +strings[3888] = str->add("shadow_color"); +strings[3889] = str->add("glow_color"); +strings[3890] = str->add("glow2_color"); +strings[3891] = str->add("backing_color"); +strings[3892] = str->add("strikethrough_color"); +strings[3893] = str->add("align"); +strings[3894] = str->add("valign"); +strings[3895] = str->add("wrap"); +strings[3896] = str->add("left_margin"); +strings[3897] = str->add("right_margin"); +strings[3898] = str->add("underline"); +strings[3899] = str->add("strikethrough"); +strings[3900] = str->add("backing"); +strings[3901] = str->add("style"); +strings[3902] = str->add("tabstops"); +strings[3893] = str->add(strings[3893]); +strings[3903] = str->add("center"); +str->del(strings[3893]); +str->del(strings[3903]); +strings[3884] = str->add(strings[3884]); +strings[3904] = str->add("#000"); +str->del(strings[3884]); +str->del(strings[3904]); +strings[3901] = str->add(strings[3901]); +strings[3905] = str->add("shadow"); +str->del(strings[3901]); +str->del(strings[3905]); +strings[3888] = str->add(strings[3888]); +strings[3906] = str->add("#ffffff80"); +str->del(strings[3888]); +str->del(strings[3906]); +strings[3895] = str->add(strings[3895]); +strings[3907] = str->add("word"); +str->del(strings[3895]); +str->del(strings[3907]); +strings[3883] = str->add(strings[3883]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3883]); +str->del(strings[469]); +strings[3882] = str->add(strings[3882]); +strings[3908] = str->add("10.000000"); +str->del(strings[3882]); +str->del(strings[3908]); +strings[3880] = str->add(strings[3880]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3880]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3901] = str->add(strings[3901]); +strings[3909] = str->add("glow"); +str->del(strings[3901]); +str->del(strings[3909]); +strings[3884] = str->add(strings[3884]); +strings[3910] = str->add("#fff"); +str->del(strings[3884]); +str->del(strings[3910]); +strings[3890] = str->add(strings[3890]); +strings[3911] = str->add("#fe87"); +str->del(strings[3890]); +str->del(strings[3911]); +strings[3889] = str->add(strings[3889]); +strings[3912] = str->add("#fa14"); +str->del(strings[3889]); +str->del(strings[3912]); +strings[3880] = str->add(strings[3880]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3880]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3901] = str->add(strings[3901]); +strings[3913] = str->add("glow"); +str->del(strings[3901]); +str->del(strings[3913]); +strings[3884] = str->add(strings[3884]); +strings[3914] = str->add("#fff"); +str->del(strings[3884]); +str->del(strings[3914]); +strings[3890] = str->add(strings[3890]); +strings[3915] = str->add("#fe87"); +str->del(strings[3890]); +str->del(strings[3915]); +strings[3889] = str->add(strings[3889]); +strings[3916] = str->add("#fa14"); +str->del(strings[3889]); +str->del(strings[3916]); +strings[3880] = str->add(strings[3880]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3880]); +str->del(strings[471]); +str->del(strings[3880]); +str->del(strings[3881]); +str->del(strings[3882]); +str->del(strings[3883]); +str->del(strings[3884]); +str->del(strings[3885]); +str->del(strings[3886]); +str->del(strings[3887]); +str->del(strings[3888]); +str->del(strings[3889]); +str->del(strings[3890]); +str->del(strings[3891]); +str->del(strings[3892]); +str->del(strings[3893]); +str->del(strings[3894]); +str->del(strings[3895]); +str->del(strings[3896]); +str->del(strings[3897]); +str->del(strings[3898]); +str->del(strings[3899]); +str->del(strings[3900]); +str->del(strings[3901]); +str->del(strings[3902]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[3917] = str->add("font"); +strings[3918] = str->add("font_fallbacks"); +strings[3919] = str->add("font_size"); +strings[3920] = str->add("font_source"); +strings[3921] = str->add("color"); +strings[3922] = str->add("underline_color"); +strings[3923] = str->add("underline2_color"); +strings[3924] = str->add("outline_color"); +strings[3925] = str->add("shadow_color"); +strings[3926] = str->add("glow_color"); +strings[3927] = str->add("glow2_color"); +strings[3928] = str->add("backing_color"); +strings[3929] = str->add("strikethrough_color"); +strings[3930] = str->add("align"); +strings[3931] = str->add("valign"); +strings[3932] = str->add("wrap"); +strings[3933] = str->add("left_margin"); +strings[3934] = str->add("right_margin"); +strings[3935] = str->add("underline"); +strings[3936] = str->add("strikethrough"); +strings[3937] = str->add("backing"); +strings[3938] = str->add("style"); +strings[3939] = str->add("tabstops"); +strings[3930] = str->add(strings[3930]); +strings[3940] = str->add("center"); +str->del(strings[3930]); +str->del(strings[3940]); +strings[3921] = str->add(strings[3921]); +strings[3941] = str->add("#000"); +str->del(strings[3921]); +str->del(strings[3941]); +strings[3938] = str->add(strings[3938]); +strings[3942] = str->add("shadow"); +str->del(strings[3938]); +str->del(strings[3942]); +strings[3925] = str->add(strings[3925]); +strings[3943] = str->add("#ffffff80"); +str->del(strings[3925]); +str->del(strings[3943]); +strings[3932] = str->add(strings[3932]); +strings[3944] = str->add("word"); +str->del(strings[3932]); +str->del(strings[3944]); +strings[3920] = str->add(strings[3920]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3920]); +str->del(strings[469]); +strings[3919] = str->add(strings[3919]); +strings[3945] = str->add("10.000000"); +str->del(strings[3919]); +str->del(strings[3945]); +strings[3917] = str->add(strings[3917]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3917]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3938] = str->add(strings[3938]); +strings[3946] = str->add("glow"); +str->del(strings[3938]); +str->del(strings[3946]); +strings[3921] = str->add(strings[3921]); +strings[3947] = str->add("#fff"); +str->del(strings[3921]); +str->del(strings[3947]); +strings[3927] = str->add(strings[3927]); +strings[3948] = str->add("#fe87"); +str->del(strings[3927]); +str->del(strings[3948]); +strings[3926] = str->add(strings[3926]); +strings[3949] = str->add("#fa14"); +str->del(strings[3926]); +str->del(strings[3949]); +strings[3917] = str->add(strings[3917]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3917]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3938] = str->add(strings[3938]); +strings[3950] = str->add("glow"); +str->del(strings[3938]); +str->del(strings[3950]); +strings[3921] = str->add(strings[3921]); +strings[3951] = str->add("#fff"); +str->del(strings[3921]); +str->del(strings[3951]); +strings[3927] = str->add(strings[3927]); +strings[3952] = str->add("#fe87"); +str->del(strings[3927]); +str->del(strings[3952]); +strings[3926] = str->add(strings[3926]); +strings[3953] = str->add("#fa14"); +str->del(strings[3926]); +str->del(strings[3953]); +strings[3917] = str->add(strings[3917]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3917]); +str->del(strings[471]); +str->del(strings[3917]); +str->del(strings[3918]); +str->del(strings[3919]); +str->del(strings[3920]); +str->del(strings[3921]); +str->del(strings[3922]); +str->del(strings[3923]); +str->del(strings[3924]); +str->del(strings[3925]); +str->del(strings[3926]); +str->del(strings[3927]); +str->del(strings[3928]); +str->del(strings[3929]); +str->del(strings[3930]); +str->del(strings[3931]); +str->del(strings[3932]); +str->del(strings[3933]); +str->del(strings[3934]); +str->del(strings[3935]); +str->del(strings[3936]); +str->del(strings[3937]); +str->del(strings[3938]); +str->del(strings[3939]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[3954] = str->add("font"); +strings[3955] = str->add("font_fallbacks"); +strings[3956] = str->add("font_size"); +strings[3957] = str->add("font_source"); +strings[3958] = str->add("color"); +strings[3959] = str->add("underline_color"); +strings[3960] = str->add("underline2_color"); +strings[3961] = str->add("outline_color"); +strings[3962] = str->add("shadow_color"); +strings[3963] = str->add("glow_color"); +strings[3964] = str->add("glow2_color"); +strings[3965] = str->add("backing_color"); +strings[3966] = str->add("strikethrough_color"); +strings[3967] = str->add("align"); +strings[3968] = str->add("valign"); +strings[3969] = str->add("wrap"); +strings[3970] = str->add("left_margin"); +strings[3971] = str->add("right_margin"); +strings[3972] = str->add("underline"); +strings[3973] = str->add("strikethrough"); +strings[3974] = str->add("backing"); +strings[3975] = str->add("style"); +strings[3976] = str->add("tabstops"); +strings[3967] = str->add(strings[3967]); +strings[3977] = str->add("center"); +str->del(strings[3967]); +str->del(strings[3977]); +strings[3958] = str->add(strings[3958]); +strings[3978] = str->add("#000"); +str->del(strings[3958]); +str->del(strings[3978]); +strings[3975] = str->add(strings[3975]); +strings[3979] = str->add("shadow"); +str->del(strings[3975]); +str->del(strings[3979]); +strings[3962] = str->add(strings[3962]); +strings[3980] = str->add("#ffffff80"); +str->del(strings[3962]); +str->del(strings[3980]); +strings[3969] = str->add(strings[3969]); +strings[3981] = str->add("word"); +str->del(strings[3969]); +str->del(strings[3981]); +strings[3957] = str->add(strings[3957]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3957]); +str->del(strings[469]); +strings[3956] = str->add(strings[3956]); +strings[3982] = str->add("10.000000"); +str->del(strings[3956]); +str->del(strings[3982]); +strings[3954] = str->add(strings[3954]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3954]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3975] = str->add(strings[3975]); +strings[3983] = str->add("glow"); +str->del(strings[3975]); +str->del(strings[3983]); +strings[3958] = str->add(strings[3958]); +strings[3984] = str->add("#fff"); +str->del(strings[3958]); +str->del(strings[3984]); +strings[3964] = str->add(strings[3964]); +strings[3985] = str->add("#fe87"); +str->del(strings[3964]); +str->del(strings[3985]); +strings[3963] = str->add(strings[3963]); +strings[3986] = str->add("#fa14"); +str->del(strings[3963]); +str->del(strings[3986]); +strings[3954] = str->add(strings[3954]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3954]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[3975] = str->add(strings[3975]); +strings[3987] = str->add("glow"); +str->del(strings[3975]); +str->del(strings[3987]); +strings[3958] = str->add(strings[3958]); +strings[3988] = str->add("#fff"); +str->del(strings[3958]); +str->del(strings[3988]); +strings[3964] = str->add(strings[3964]); +strings[3989] = str->add("#fe87"); +str->del(strings[3964]); +str->del(strings[3989]); +strings[3963] = str->add(strings[3963]); +strings[3990] = str->add("#fa14"); +str->del(strings[3963]); +str->del(strings[3990]); +strings[3954] = str->add(strings[3954]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3954]); +str->del(strings[471]); +str->del(strings[3954]); +str->del(strings[3955]); +str->del(strings[3956]); +str->del(strings[3957]); +str->del(strings[3958]); +str->del(strings[3959]); +str->del(strings[3960]); +str->del(strings[3961]); +str->del(strings[3962]); +str->del(strings[3963]); +str->del(strings[3964]); +str->del(strings[3965]); +str->del(strings[3966]); +str->del(strings[3967]); +str->del(strings[3968]); +str->del(strings[3969]); +str->del(strings[3970]); +str->del(strings[3971]); +str->del(strings[3972]); +str->del(strings[3973]); +str->del(strings[3974]); +str->del(strings[3975]); +str->del(strings[3976]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[3991] = str->add("font"); +strings[3992] = str->add("font_fallbacks"); +strings[3993] = str->add("font_size"); +strings[3994] = str->add("font_source"); +strings[3995] = str->add("color"); +strings[3996] = str->add("underline_color"); +strings[3997] = str->add("underline2_color"); +strings[3998] = str->add("outline_color"); +strings[3999] = str->add("shadow_color"); +strings[4000] = str->add("glow_color"); +strings[4001] = str->add("glow2_color"); +strings[4002] = str->add("backing_color"); +strings[4003] = str->add("strikethrough_color"); +strings[4004] = str->add("align"); +strings[4005] = str->add("valign"); +strings[4006] = str->add("wrap"); +strings[4007] = str->add("left_margin"); +strings[4008] = str->add("right_margin"); +strings[4009] = str->add("underline"); +strings[4010] = str->add("strikethrough"); +strings[4011] = str->add("backing"); +strings[4012] = str->add("style"); +strings[4013] = str->add("tabstops"); +strings[4004] = str->add(strings[4004]); +strings[4014] = str->add("center"); +str->del(strings[4004]); +str->del(strings[4014]); +strings[3995] = str->add(strings[3995]); +strings[4015] = str->add("#000"); +str->del(strings[3995]); +str->del(strings[4015]); +strings[4012] = str->add(strings[4012]); +strings[4016] = str->add("shadow"); +str->del(strings[4012]); +str->del(strings[4016]); +strings[3999] = str->add(strings[3999]); +strings[4017] = str->add("#ffffff80"); +str->del(strings[3999]); +str->del(strings[4017]); +strings[4006] = str->add(strings[4006]); +strings[4018] = str->add("word"); +str->del(strings[4006]); +str->del(strings[4018]); +strings[3994] = str->add(strings[3994]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[3994]); +str->del(strings[469]); +strings[3993] = str->add(strings[3993]); +strings[4019] = str->add("10.000000"); +str->del(strings[3993]); +str->del(strings[4019]); +strings[3991] = str->add(strings[3991]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[3991]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4012] = str->add(strings[4012]); +strings[4020] = str->add("glow"); +str->del(strings[4012]); +str->del(strings[4020]); +strings[3995] = str->add(strings[3995]); +strings[4021] = str->add("#fff"); +str->del(strings[3995]); +str->del(strings[4021]); +strings[4001] = str->add(strings[4001]); +strings[4022] = str->add("#fe87"); +str->del(strings[4001]); +str->del(strings[4022]); +strings[4000] = str->add(strings[4000]); +strings[4023] = str->add("#fa14"); +str->del(strings[4000]); +str->del(strings[4023]); +strings[3991] = str->add(strings[3991]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3991]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4012] = str->add(strings[4012]); +strings[4024] = str->add("glow"); +str->del(strings[4012]); +str->del(strings[4024]); +strings[3995] = str->add(strings[3995]); +strings[4025] = str->add("#fff"); +str->del(strings[3995]); +str->del(strings[4025]); +strings[4001] = str->add(strings[4001]); +strings[4026] = str->add("#fe87"); +str->del(strings[4001]); +str->del(strings[4026]); +strings[4000] = str->add(strings[4000]); +strings[4027] = str->add("#fa14"); +str->del(strings[4000]); +str->del(strings[4027]); +strings[3991] = str->add(strings[3991]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[3991]); +str->del(strings[471]); +str->del(strings[3991]); +str->del(strings[3992]); +str->del(strings[3993]); +str->del(strings[3994]); +str->del(strings[3995]); +str->del(strings[3996]); +str->del(strings[3997]); +str->del(strings[3998]); +str->del(strings[3999]); +str->del(strings[4000]); +str->del(strings[4001]); +str->del(strings[4002]); +str->del(strings[4003]); +str->del(strings[4004]); +str->del(strings[4005]); +str->del(strings[4006]); +str->del(strings[4007]); +str->del(strings[4008]); +str->del(strings[4009]); +str->del(strings[4010]); +str->del(strings[4011]); +str->del(strings[4012]); +str->del(strings[4013]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4028] = str->add("font"); +strings[4029] = str->add("font_fallbacks"); +strings[4030] = str->add("font_size"); +strings[4031] = str->add("font_source"); +strings[4032] = str->add("color"); +strings[4033] = str->add("underline_color"); +strings[4034] = str->add("underline2_color"); +strings[4035] = str->add("outline_color"); +strings[4036] = str->add("shadow_color"); +strings[4037] = str->add("glow_color"); +strings[4038] = str->add("glow2_color"); +strings[4039] = str->add("backing_color"); +strings[4040] = str->add("strikethrough_color"); +strings[4041] = str->add("align"); +strings[4042] = str->add("valign"); +strings[4043] = str->add("wrap"); +strings[4044] = str->add("left_margin"); +strings[4045] = str->add("right_margin"); +strings[4046] = str->add("underline"); +strings[4047] = str->add("strikethrough"); +strings[4048] = str->add("backing"); +strings[4049] = str->add("style"); +strings[4050] = str->add("tabstops"); +strings[4041] = str->add(strings[4041]); +strings[4051] = str->add("center"); +str->del(strings[4041]); +str->del(strings[4051]); +strings[4032] = str->add(strings[4032]); +strings[4052] = str->add("#000"); +str->del(strings[4032]); +str->del(strings[4052]); +strings[4049] = str->add(strings[4049]); +strings[4053] = str->add("shadow"); +str->del(strings[4049]); +str->del(strings[4053]); +strings[4036] = str->add(strings[4036]); +strings[4054] = str->add("#ffffff80"); +str->del(strings[4036]); +str->del(strings[4054]); +strings[4043] = str->add(strings[4043]); +strings[4055] = str->add("word"); +str->del(strings[4043]); +str->del(strings[4055]); +strings[4031] = str->add(strings[4031]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4031]); +str->del(strings[469]); +strings[4030] = str->add(strings[4030]); +strings[4056] = str->add("10.000000"); +str->del(strings[4030]); +str->del(strings[4056]); +strings[4028] = str->add(strings[4028]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4028]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4049] = str->add(strings[4049]); +strings[4057] = str->add("glow"); +str->del(strings[4049]); +str->del(strings[4057]); +strings[4032] = str->add(strings[4032]); +strings[4058] = str->add("#fff"); +str->del(strings[4032]); +str->del(strings[4058]); +strings[4038] = str->add(strings[4038]); +strings[4059] = str->add("#fe87"); +str->del(strings[4038]); +str->del(strings[4059]); +strings[4037] = str->add(strings[4037]); +strings[4060] = str->add("#fa14"); +str->del(strings[4037]); +str->del(strings[4060]); +strings[4028] = str->add(strings[4028]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4028]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4049] = str->add(strings[4049]); +strings[4061] = str->add("glow"); +str->del(strings[4049]); +str->del(strings[4061]); +strings[4032] = str->add(strings[4032]); +strings[4062] = str->add("#fff"); +str->del(strings[4032]); +str->del(strings[4062]); +strings[4038] = str->add(strings[4038]); +strings[4063] = str->add("#fe87"); +str->del(strings[4038]); +str->del(strings[4063]); +strings[4037] = str->add(strings[4037]); +strings[4064] = str->add("#fa14"); +str->del(strings[4037]); +str->del(strings[4064]); +strings[4028] = str->add(strings[4028]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4028]); +str->del(strings[471]); +str->del(strings[4028]); +str->del(strings[4029]); +str->del(strings[4030]); +str->del(strings[4031]); +str->del(strings[4032]); +str->del(strings[4033]); +str->del(strings[4034]); +str->del(strings[4035]); +str->del(strings[4036]); +str->del(strings[4037]); +str->del(strings[4038]); +str->del(strings[4039]); +str->del(strings[4040]); +str->del(strings[4041]); +str->del(strings[4042]); +str->del(strings[4043]); +str->del(strings[4044]); +str->del(strings[4045]); +str->del(strings[4046]); +str->del(strings[4047]); +str->del(strings[4048]); +str->del(strings[4049]); +str->del(strings[4050]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4065] = str->add("font"); +strings[4066] = str->add("font_fallbacks"); +strings[4067] = str->add("font_size"); +strings[4068] = str->add("font_source"); +strings[4069] = str->add("color"); +strings[4070] = str->add("underline_color"); +strings[4071] = str->add("underline2_color"); +strings[4072] = str->add("outline_color"); +strings[4073] = str->add("shadow_color"); +strings[4074] = str->add("glow_color"); +strings[4075] = str->add("glow2_color"); +strings[4076] = str->add("backing_color"); +strings[4077] = str->add("strikethrough_color"); +strings[4078] = str->add("align"); +strings[4079] = str->add("valign"); +strings[4080] = str->add("wrap"); +strings[4081] = str->add("left_margin"); +strings[4082] = str->add("right_margin"); +strings[4083] = str->add("underline"); +strings[4084] = str->add("strikethrough"); +strings[4085] = str->add("backing"); +strings[4086] = str->add("style"); +strings[4087] = str->add("tabstops"); +strings[4078] = str->add(strings[4078]); +strings[4088] = str->add("center"); +str->del(strings[4078]); +str->del(strings[4088]); +strings[4069] = str->add(strings[4069]); +strings[4089] = str->add("#000"); +str->del(strings[4069]); +str->del(strings[4089]); +strings[4086] = str->add(strings[4086]); +strings[4090] = str->add("shadow"); +str->del(strings[4086]); +str->del(strings[4090]); +strings[4073] = str->add(strings[4073]); +strings[4091] = str->add("#ffffff80"); +str->del(strings[4073]); +str->del(strings[4091]); +strings[4080] = str->add(strings[4080]); +strings[4092] = str->add("word"); +str->del(strings[4080]); +str->del(strings[4092]); +strings[4068] = str->add(strings[4068]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4068]); +str->del(strings[469]); +strings[4067] = str->add(strings[4067]); +strings[4093] = str->add("10.000000"); +str->del(strings[4067]); +str->del(strings[4093]); +strings[4065] = str->add(strings[4065]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4065]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4086] = str->add(strings[4086]); +strings[4094] = str->add("glow"); +str->del(strings[4086]); +str->del(strings[4094]); +strings[4069] = str->add(strings[4069]); +strings[4095] = str->add("#fff"); +str->del(strings[4069]); +str->del(strings[4095]); +strings[4075] = str->add(strings[4075]); +strings[4096] = str->add("#fe87"); +str->del(strings[4075]); +str->del(strings[4096]); +strings[4074] = str->add(strings[4074]); +strings[4097] = str->add("#fa14"); +str->del(strings[4074]); +str->del(strings[4097]); +strings[4065] = str->add(strings[4065]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4065]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4086] = str->add(strings[4086]); +strings[4098] = str->add("glow"); +str->del(strings[4086]); +str->del(strings[4098]); +strings[4069] = str->add(strings[4069]); +strings[4099] = str->add("#fff"); +str->del(strings[4069]); +str->del(strings[4099]); +strings[4075] = str->add(strings[4075]); +strings[4100] = str->add("#fe87"); +str->del(strings[4075]); +str->del(strings[4100]); +strings[4074] = str->add(strings[4074]); +strings[4101] = str->add("#fa14"); +str->del(strings[4074]); +str->del(strings[4101]); +strings[4065] = str->add(strings[4065]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4065]); +str->del(strings[471]); +str->del(strings[4065]); +str->del(strings[4066]); +str->del(strings[4067]); +str->del(strings[4068]); +str->del(strings[4069]); +str->del(strings[4070]); +str->del(strings[4071]); +str->del(strings[4072]); +str->del(strings[4073]); +str->del(strings[4074]); +str->del(strings[4075]); +str->del(strings[4076]); +str->del(strings[4077]); +str->del(strings[4078]); +str->del(strings[4079]); +str->del(strings[4080]); +str->del(strings[4081]); +str->del(strings[4082]); +str->del(strings[4083]); +str->del(strings[4084]); +str->del(strings[4085]); +str->del(strings[4086]); +str->del(strings[4087]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4102] = str->add("font"); +strings[4103] = str->add("font_fallbacks"); +strings[4104] = str->add("font_size"); +strings[4105] = str->add("font_source"); +strings[4106] = str->add("color"); +strings[4107] = str->add("underline_color"); +strings[4108] = str->add("underline2_color"); +strings[4109] = str->add("outline_color"); +strings[4110] = str->add("shadow_color"); +strings[4111] = str->add("glow_color"); +strings[4112] = str->add("glow2_color"); +strings[4113] = str->add("backing_color"); +strings[4114] = str->add("strikethrough_color"); +strings[4115] = str->add("align"); +strings[4116] = str->add("valign"); +strings[4117] = str->add("wrap"); +strings[4118] = str->add("left_margin"); +strings[4119] = str->add("right_margin"); +strings[4120] = str->add("underline"); +strings[4121] = str->add("strikethrough"); +strings[4122] = str->add("backing"); +strings[4123] = str->add("style"); +strings[4124] = str->add("tabstops"); +strings[4115] = str->add(strings[4115]); +strings[4125] = str->add("center"); +str->del(strings[4115]); +str->del(strings[4125]); +strings[4106] = str->add(strings[4106]); +strings[4126] = str->add("#000"); +str->del(strings[4106]); +str->del(strings[4126]); +strings[4123] = str->add(strings[4123]); +strings[4127] = str->add("shadow"); +str->del(strings[4123]); +str->del(strings[4127]); +strings[4110] = str->add(strings[4110]); +strings[4128] = str->add("#ffffff80"); +str->del(strings[4110]); +str->del(strings[4128]); +strings[4117] = str->add(strings[4117]); +strings[4129] = str->add("word"); +str->del(strings[4117]); +str->del(strings[4129]); +strings[4105] = str->add(strings[4105]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4105]); +str->del(strings[469]); +strings[4104] = str->add(strings[4104]); +strings[4130] = str->add("10.000000"); +str->del(strings[4104]); +str->del(strings[4130]); +strings[4102] = str->add(strings[4102]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4102]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4123] = str->add(strings[4123]); +strings[4131] = str->add("glow"); +str->del(strings[4123]); +str->del(strings[4131]); +strings[4106] = str->add(strings[4106]); +strings[4132] = str->add("#fff"); +str->del(strings[4106]); +str->del(strings[4132]); +strings[4112] = str->add(strings[4112]); +strings[4133] = str->add("#fe87"); +str->del(strings[4112]); +str->del(strings[4133]); +strings[4111] = str->add(strings[4111]); +strings[4134] = str->add("#fa14"); +str->del(strings[4111]); +str->del(strings[4134]); +strings[4102] = str->add(strings[4102]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4102]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4123] = str->add(strings[4123]); +strings[4135] = str->add("glow"); +str->del(strings[4123]); +str->del(strings[4135]); +strings[4106] = str->add(strings[4106]); +strings[4136] = str->add("#fff"); +str->del(strings[4106]); +str->del(strings[4136]); +strings[4112] = str->add(strings[4112]); +strings[4137] = str->add("#fe87"); +str->del(strings[4112]); +str->del(strings[4137]); +strings[4111] = str->add(strings[4111]); +strings[4138] = str->add("#fa14"); +str->del(strings[4111]); +str->del(strings[4138]); +strings[4102] = str->add(strings[4102]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4102]); +str->del(strings[471]); +str->del(strings[4102]); +str->del(strings[4103]); +str->del(strings[4104]); +str->del(strings[4105]); +str->del(strings[4106]); +str->del(strings[4107]); +str->del(strings[4108]); +str->del(strings[4109]); +str->del(strings[4110]); +str->del(strings[4111]); +str->del(strings[4112]); +str->del(strings[4113]); +str->del(strings[4114]); +str->del(strings[4115]); +str->del(strings[4116]); +str->del(strings[4117]); +str->del(strings[4118]); +str->del(strings[4119]); +str->del(strings[4120]); +str->del(strings[4121]); +str->del(strings[4122]); +str->del(strings[4123]); +str->del(strings[4124]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4139] = str->add("font"); +strings[4140] = str->add("font_fallbacks"); +strings[4141] = str->add("font_size"); +strings[4142] = str->add("font_source"); +strings[4143] = str->add("color"); +strings[4144] = str->add("underline_color"); +strings[4145] = str->add("underline2_color"); +strings[4146] = str->add("outline_color"); +strings[4147] = str->add("shadow_color"); +strings[4148] = str->add("glow_color"); +strings[4149] = str->add("glow2_color"); +strings[4150] = str->add("backing_color"); +strings[4151] = str->add("strikethrough_color"); +strings[4152] = str->add("align"); +strings[4153] = str->add("valign"); +strings[4154] = str->add("wrap"); +strings[4155] = str->add("left_margin"); +strings[4156] = str->add("right_margin"); +strings[4157] = str->add("underline"); +strings[4158] = str->add("strikethrough"); +strings[4159] = str->add("backing"); +strings[4160] = str->add("style"); +strings[4161] = str->add("tabstops"); +strings[4152] = str->add(strings[4152]); +strings[4162] = str->add("center"); +str->del(strings[4152]); +str->del(strings[4162]); +strings[4143] = str->add(strings[4143]); +strings[4163] = str->add("#000"); +str->del(strings[4143]); +str->del(strings[4163]); +strings[4160] = str->add(strings[4160]); +strings[4164] = str->add("shadow"); +str->del(strings[4160]); +str->del(strings[4164]); +strings[4147] = str->add(strings[4147]); +strings[4165] = str->add("#ffffff80"); +str->del(strings[4147]); +str->del(strings[4165]); +strings[4154] = str->add(strings[4154]); +strings[4166] = str->add("word"); +str->del(strings[4154]); +str->del(strings[4166]); +strings[4142] = str->add(strings[4142]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4142]); +str->del(strings[469]); +strings[4141] = str->add(strings[4141]); +strings[4167] = str->add("10.000000"); +str->del(strings[4141]); +str->del(strings[4167]); +strings[4139] = str->add(strings[4139]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4139]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4160] = str->add(strings[4160]); +strings[4168] = str->add("glow"); +str->del(strings[4160]); +str->del(strings[4168]); +strings[4143] = str->add(strings[4143]); +strings[4169] = str->add("#fff"); +str->del(strings[4143]); +str->del(strings[4169]); +strings[4149] = str->add(strings[4149]); +strings[4170] = str->add("#fe87"); +str->del(strings[4149]); +str->del(strings[4170]); +strings[4148] = str->add(strings[4148]); +strings[4171] = str->add("#fa14"); +str->del(strings[4148]); +str->del(strings[4171]); +strings[4139] = str->add(strings[4139]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4139]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4160] = str->add(strings[4160]); +strings[4172] = str->add("glow"); +str->del(strings[4160]); +str->del(strings[4172]); +strings[4143] = str->add(strings[4143]); +strings[4173] = str->add("#fff"); +str->del(strings[4143]); +str->del(strings[4173]); +strings[4149] = str->add(strings[4149]); +strings[4174] = str->add("#fe87"); +str->del(strings[4149]); +str->del(strings[4174]); +strings[4148] = str->add(strings[4148]); +strings[4175] = str->add("#fa14"); +str->del(strings[4148]); +str->del(strings[4175]); +strings[4139] = str->add(strings[4139]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4139]); +str->del(strings[471]); +str->del(strings[4139]); +str->del(strings[4140]); +str->del(strings[4141]); +str->del(strings[4142]); +str->del(strings[4143]); +str->del(strings[4144]); +str->del(strings[4145]); +str->del(strings[4146]); +str->del(strings[4147]); +str->del(strings[4148]); +str->del(strings[4149]); +str->del(strings[4150]); +str->del(strings[4151]); +str->del(strings[4152]); +str->del(strings[4153]); +str->del(strings[4154]); +str->del(strings[4155]); +str->del(strings[4156]); +str->del(strings[4157]); +str->del(strings[4158]); +str->del(strings[4159]); +str->del(strings[4160]); +str->del(strings[4161]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4176] = str->add("resize"); +strings[469] = str->add(strings[469]); +strings[4177] = str->add("images/408"); +strings[4178] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/408"); +strings[469] = str->add(strings[469]); +strings[4177] = str->add(strings[4177]); +strings[469] = str->add(strings[469]); +strings[4179] = str->add("images/409"); +strings[4180] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/409"); +strings[469] = str->add(strings[469]); +strings[4179] = str->add(strings[4179]); +strings[469] = str->add(strings[469]); +strings[4181] = str->add("images/412"); +strings[4182] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/412"); +strings[469] = str->add(strings[469]); +strings[4181] = str->add(strings[4181]); +strings[469] = str->add(strings[469]); +strings[4183] = str->add("images/410"); +strings[4184] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/410"); +strings[469] = str->add(strings[469]); +strings[4183] = str->add(strings[4183]); +strings[469] = str->add(strings[469]); +strings[4185] = str->add("images/411"); +strings[4186] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/411"); +strings[469] = str->add(strings[469]); +strings[4185] = str->add(strings[4185]); +strings[469] = str->add(strings[469]); +strings[4187] = str->add("images/413"); +strings[4188] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/413"); +strings[469] = str->add(strings[469]); +strings[4187] = str->add(strings[4187]); +strings[469] = str->add(strings[469]); +strings[4189] = str->add("images/414"); +strings[4190] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/414"); +strings[469] = str->add(strings[469]); +strings[4189] = str->add(strings[4189]); +strings[469] = str->add(strings[469]); +strings[4191] = str->add("images/287"); +strings[4192] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/287"); +strings[469] = str->add(strings[469]); +strings[4191] = str->add(strings[4191]); +strings[1712] = str->add(strings[1712]); +strings[1712] = str->add(strings[1712]); +strings[3710] = str->add(strings[3710]); +strings[3710] = str->add(strings[3710]); +strings[469] = str->add(strings[469]); +strings[4193] = str->add("images/406"); +strings[4194] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/406"); +strings[469] = str->add(strings[469]); +strings[4193] = str->add(strings[4193]); +strings[4195] = str->add("font"); +strings[4196] = str->add("font_fallbacks"); +strings[4197] = str->add("font_size"); +strings[4198] = str->add("font_source"); +strings[4199] = str->add("color"); +strings[4200] = str->add("underline_color"); +strings[4201] = str->add("underline2_color"); +strings[4202] = str->add("outline_color"); +strings[4203] = str->add("shadow_color"); +strings[4204] = str->add("glow_color"); +strings[4205] = str->add("glow2_color"); +strings[4206] = str->add("backing_color"); +strings[4207] = str->add("strikethrough_color"); +strings[4208] = str->add("align"); +strings[4209] = str->add("valign"); +strings[4210] = str->add("wrap"); +strings[4211] = str->add("left_margin"); +strings[4212] = str->add("right_margin"); +strings[4213] = str->add("underline"); +strings[4214] = str->add("strikethrough"); +strings[4215] = str->add("backing"); +strings[4216] = str->add("style"); +strings[4217] = str->add("tabstops"); +strings[4208] = str->add(strings[4208]); +strings[4218] = str->add("center"); +str->del(strings[4208]); +str->del(strings[4218]); +strings[4199] = str->add(strings[4199]); +strings[4219] = str->add("#000"); +str->del(strings[4199]); +str->del(strings[4219]); +strings[4216] = str->add(strings[4216]); +strings[4220] = str->add("shadow"); +str->del(strings[4216]); +str->del(strings[4220]); +strings[4203] = str->add(strings[4203]); +strings[4221] = str->add("#ffffff80"); +str->del(strings[4203]); +str->del(strings[4221]); +strings[4210] = str->add(strings[4210]); +strings[4222] = str->add("word"); +str->del(strings[4210]); +str->del(strings[4222]); +strings[4198] = str->add(strings[4198]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4198]); +str->del(strings[469]); +strings[4197] = str->add(strings[4197]); +strings[4223] = str->add("10.000000"); +str->del(strings[4197]); +str->del(strings[4223]); +strings[4195] = str->add(strings[4195]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4195]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4216] = str->add(strings[4216]); +strings[4224] = str->add("soft_shadow"); +str->del(strings[4216]); +str->del(strings[4224]); +strings[4199] = str->add(strings[4199]); +strings[4225] = str->add("#fff"); +str->del(strings[4199]); +str->del(strings[4225]); +strings[4203] = str->add(strings[4203]); +strings[4226] = str->add("#00000020"); +str->del(strings[4203]); +str->del(strings[4226]); +strings[4197] = str->add(strings[4197]); +strings[4227] = str->add("12.000000"); +str->del(strings[4197]); +str->del(strings[4227]); +strings[4195] = str->add(strings[4195]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4195]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4195]); +str->del(strings[4196]); +str->del(strings[4197]); +str->del(strings[4198]); +str->del(strings[4199]); +str->del(strings[4200]); +str->del(strings[4201]); +str->del(strings[4202]); +str->del(strings[4203]); +str->del(strings[4204]); +str->del(strings[4205]); +str->del(strings[4206]); +str->del(strings[4207]); +str->del(strings[4208]); +str->del(strings[4209]); +str->del(strings[4210]); +str->del(strings[4211]); +str->del(strings[4212]); +str->del(strings[4213]); +str->del(strings[4214]); +str->del(strings[4215]); +str->del(strings[4216]); +str->del(strings[4217]); +strings[4228] = str->add("font"); +strings[4229] = str->add("font_fallbacks"); +strings[4230] = str->add("font_size"); +strings[4231] = str->add("font_source"); +strings[4232] = str->add("color"); +strings[4233] = str->add("underline_color"); +strings[4234] = str->add("underline2_color"); +strings[4235] = str->add("outline_color"); +strings[4236] = str->add("shadow_color"); +strings[4237] = str->add("glow_color"); +strings[4238] = str->add("glow2_color"); +strings[4239] = str->add("backing_color"); +strings[4240] = str->add("strikethrough_color"); +strings[4241] = str->add("align"); +strings[4242] = str->add("valign"); +strings[4243] = str->add("wrap"); +strings[4244] = str->add("left_margin"); +strings[4245] = str->add("right_margin"); +strings[4246] = str->add("underline"); +strings[4247] = str->add("strikethrough"); +strings[4248] = str->add("backing"); +strings[4249] = str->add("style"); +strings[4250] = str->add("tabstops"); +strings[4241] = str->add(strings[4241]); +strings[4251] = str->add("center"); +str->del(strings[4241]); +str->del(strings[4251]); +strings[4232] = str->add(strings[4232]); +strings[4252] = str->add("#000"); +str->del(strings[4232]); +str->del(strings[4252]); +strings[4249] = str->add(strings[4249]); +strings[4253] = str->add("shadow"); +str->del(strings[4249]); +str->del(strings[4253]); +strings[4236] = str->add(strings[4236]); +strings[4254] = str->add("#ffffff80"); +str->del(strings[4236]); +str->del(strings[4254]); +strings[4243] = str->add(strings[4243]); +strings[4255] = str->add("word"); +str->del(strings[4243]); +str->del(strings[4255]); +strings[4231] = str->add(strings[4231]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4231]); +str->del(strings[469]); +strings[4230] = str->add(strings[4230]); +strings[4256] = str->add("10.000000"); +str->del(strings[4230]); +str->del(strings[4256]); +strings[4228] = str->add(strings[4228]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4228]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4249] = str->add(strings[4249]); +strings[4257] = str->add("soft_shadow"); +str->del(strings[4249]); +str->del(strings[4257]); +strings[4232] = str->add(strings[4232]); +strings[4258] = str->add("#fff"); +str->del(strings[4232]); +str->del(strings[4258]); +strings[4236] = str->add(strings[4236]); +strings[4259] = str->add("#00000020"); +str->del(strings[4236]); +str->del(strings[4259]); +strings[4230] = str->add(strings[4230]); +strings[4260] = str->add("12.000000"); +str->del(strings[4230]); +str->del(strings[4260]); +strings[4228] = str->add(strings[4228]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4228]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[4228]); +str->del(strings[4229]); +str->del(strings[4230]); +str->del(strings[4231]); +str->del(strings[4232]); +str->del(strings[4233]); +str->del(strings[4234]); +str->del(strings[4235]); +str->del(strings[4236]); +str->del(strings[4237]); +str->del(strings[4238]); +str->del(strings[4239]); +str->del(strings[4240]); +str->del(strings[4241]); +str->del(strings[4242]); +str->del(strings[4243]); +str->del(strings[4244]); +str->del(strings[4245]); +str->del(strings[4246]); +str->del(strings[4247]); +str->del(strings[4248]); +str->del(strings[4249]); +str->del(strings[4250]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[4261] = str->add("font"); +strings[4262] = str->add("font_fallbacks"); +strings[4263] = str->add("font_size"); +strings[4264] = str->add("font_source"); +strings[4265] = str->add("color"); +strings[4266] = str->add("underline_color"); +strings[4267] = str->add("underline2_color"); +strings[4268] = str->add("outline_color"); +strings[4269] = str->add("shadow_color"); +strings[4270] = str->add("glow_color"); +strings[4271] = str->add("glow2_color"); +strings[4272] = str->add("backing_color"); +strings[4273] = str->add("strikethrough_color"); +strings[4274] = str->add("align"); +strings[4275] = str->add("valign"); +strings[4276] = str->add("wrap"); +strings[4277] = str->add("left_margin"); +strings[4278] = str->add("right_margin"); +strings[4279] = str->add("underline"); +strings[4280] = str->add("strikethrough"); +strings[4281] = str->add("backing"); +strings[4282] = str->add("style"); +strings[4283] = str->add("tabstops"); +strings[4274] = str->add(strings[4274]); +strings[4284] = str->add("center"); +str->del(strings[4274]); +str->del(strings[4284]); +strings[4265] = str->add(strings[4265]); +strings[4285] = str->add("#000"); +str->del(strings[4265]); +str->del(strings[4285]); +strings[4282] = str->add(strings[4282]); +strings[4286] = str->add("shadow"); +str->del(strings[4282]); +str->del(strings[4286]); +strings[4269] = str->add(strings[4269]); +strings[4287] = str->add("#ffffff80"); +str->del(strings[4269]); +str->del(strings[4287]); +strings[4276] = str->add(strings[4276]); +strings[4288] = str->add("word"); +str->del(strings[4276]); +str->del(strings[4288]); +strings[4264] = str->add(strings[4264]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4264]); +str->del(strings[469]); +strings[4263] = str->add(strings[4263]); +strings[4289] = str->add("10.000000"); +str->del(strings[4263]); +str->del(strings[4289]); +strings[4261] = str->add(strings[4261]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4261]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4282] = str->add(strings[4282]); +strings[4290] = str->add("soft_shadow"); +str->del(strings[4282]); +str->del(strings[4290]); +strings[4265] = str->add(strings[4265]); +strings[4291] = str->add("#fff"); +str->del(strings[4265]); +str->del(strings[4291]); +strings[4269] = str->add(strings[4269]); +strings[4292] = str->add("#00000020"); +str->del(strings[4269]); +str->del(strings[4292]); +strings[4263] = str->add(strings[4263]); +strings[4293] = str->add("12.000000"); +str->del(strings[4263]); +str->del(strings[4293]); +strings[4261] = str->add(strings[4261]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4261]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4261]); +str->del(strings[4262]); +str->del(strings[4263]); +str->del(strings[4264]); +str->del(strings[4265]); +str->del(strings[4266]); +str->del(strings[4267]); +str->del(strings[4268]); +str->del(strings[4269]); +str->del(strings[4270]); +str->del(strings[4271]); +str->del(strings[4272]); +str->del(strings[4273]); +str->del(strings[4274]); +str->del(strings[4275]); +str->del(strings[4276]); +str->del(strings[4277]); +str->del(strings[4278]); +str->del(strings[4279]); +str->del(strings[4280]); +str->del(strings[4281]); +str->del(strings[4282]); +str->del(strings[4283]); +strings[469] = str->add(strings[469]); +strings[4193] = str->add(strings[4193]); +strings[469] = str->add(strings[469]); +strings[4294] = str->add("images/313"); +strings[4295] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/313"); +strings[469] = str->add(strings[469]); +strings[4294] = str->add(strings[4294]); +strings[469] = str->add(strings[469]); +strings[4296] = str->add("images/254"); +strings[4297] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/254"); +strings[469] = str->add(strings[469]); +strings[4296] = str->add(strings[4296]); +strings[469] = str->add(strings[469]); +strings[4298] = str->add("images/407"); +strings[4299] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/407"); +strings[469] = str->add(strings[469]); +strings[4298] = str->add(strings[4298]); +strings[469] = str->add(strings[469]); +strings[4298] = str->add(strings[4298]); +strings[469] = str->add(strings[469]); +strings[4300] = str->add("images/288"); +strings[4301] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/288"); +strings[469] = str->add(strings[469]); +strings[4300] = str->add(strings[4300]); +strings[469] = str->add(strings[469]); +strings[4302] = str->add("images/289"); +strings[4303] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/289"); +strings[469] = str->add(strings[469]); +strings[4302] = str->add(strings[4302]); +strings[469] = str->add(strings[469]); +strings[4304] = str->add("images/290"); +strings[4305] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/290"); +strings[469] = str->add(strings[469]); +strings[4304] = str->add(strings[4304]); +strings[469] = str->add(strings[469]); +strings[4306] = str->add("images/291"); +strings[4307] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/291"); +strings[469] = str->add(strings[469]); +strings[4306] = str->add(strings[4306]); +strings[469] = str->add(strings[469]); +strings[4308] = str->add("images/292"); +strings[4309] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/292"); +strings[469] = str->add(strings[469]); +strings[4308] = str->add(strings[4308]); +strings[469] = str->add(strings[469]); +strings[4310] = str->add("images/293"); +strings[4311] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/293"); +strings[469] = str->add(strings[469]); +strings[4310] = str->add(strings[4310]); +strings[469] = str->add(strings[469]); +strings[4312] = str->add("images/294"); +strings[4313] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/294"); +strings[469] = str->add(strings[469]); +strings[4312] = str->add(strings[4312]); +strings[469] = str->add(strings[469]); +strings[4314] = str->add("images/295"); +strings[4315] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/295"); +strings[469] = str->add(strings[469]); +strings[4314] = str->add(strings[4314]); +strings[469] = str->add(strings[469]); +strings[4316] = str->add("images/296"); +strings[4317] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/296"); +strings[469] = str->add(strings[469]); +strings[4316] = str->add(strings[4316]); +strings[469] = str->add(strings[469]); +strings[4318] = str->add("images/297"); +strings[4319] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/297"); +strings[469] = str->add(strings[469]); +strings[4318] = str->add(strings[4318]); +strings[469] = str->add(strings[469]); +strings[4320] = str->add("images/298"); +strings[4321] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/298"); +strings[469] = str->add(strings[469]); +strings[4320] = str->add(strings[4320]); +strings[469] = str->add(strings[469]); +strings[4322] = str->add("images/299"); +strings[4323] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/299"); +strings[469] = str->add(strings[469]); +strings[4322] = str->add(strings[4322]); +strings[469] = str->add(strings[469]); +strings[4324] = str->add("images/300"); +strings[4325] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/300"); +strings[469] = str->add(strings[469]); +strings[4324] = str->add(strings[4324]); +strings[469] = str->add(strings[469]); +strings[4326] = str->add("images/301"); +strings[4327] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/301"); +strings[469] = str->add(strings[469]); +strings[4326] = str->add(strings[4326]); +strings[469] = str->add(strings[469]); +strings[4328] = str->add("images/302"); +strings[4329] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/302"); +strings[469] = str->add(strings[469]); +strings[4328] = str->add(strings[4328]); +strings[469] = str->add(strings[469]); +strings[4330] = str->add("images/303"); +strings[4331] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/303"); +strings[469] = str->add(strings[469]); +strings[4330] = str->add(strings[4330]); +strings[469] = str->add(strings[469]); +strings[4332] = str->add("images/304"); +strings[4333] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/304"); +strings[469] = str->add(strings[469]); +strings[4332] = str->add(strings[4332]); +strings[469] = str->add(strings[469]); +strings[4334] = str->add("images/305"); +strings[4335] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/305"); +strings[469] = str->add(strings[469]); +strings[4334] = str->add(strings[4334]); +strings[469] = str->add(strings[469]); +strings[4336] = str->add("images/268"); +strings[4337] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/268"); +strings[469] = str->add(strings[469]); +strings[4336] = str->add(strings[4336]); +strings[3879] = str->add(strings[3879]); +strings[3879] = str->add(strings[3879]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[4338] = str->add("e,state,unfocused"); +strings[3706] = str->add(strings[3706]); +str->del(strings[3705]); +str->del(strings[3706]); +str->del(strings[3707]); +str->del(strings[3706]); +str->del(strings[3709]); +strings[4339] = str->add("program,start"); +strings[4340] = str->add("go_active_pre"); +strings[1932] = str->add(strings[1932]); +strings[4340] = str->add(strings[4340]); +strings[4339] = str->add(strings[4339]); +strings[4341] = str->add("go_active1"); +strings[1932] = str->add(strings[1932]); +strings[4341] = str->add(strings[4341]); +strings[4339] = str->add(strings[4339]); +strings[4342] = str->add("go_activeb1"); +strings[4339] = str->add(strings[4339]); +strings[4343] = str->add("go_active29"); +strings[1932] = str->add(strings[1932]); +strings[4343] = str->add(strings[4343]); +strings[4339] = str->add(strings[4339]); +strings[4344] = str->add("go_activeb29"); +strings[4339] = str->add(strings[4339]); +strings[4345] = str->add("anim_sky1a"); +strings[4339] = str->add(strings[4339]); +strings[4346] = str->add("anim_sky4a"); +strings[4339] = str->add(strings[4339]); +strings[4347] = str->add("anim_sky2a"); +strings[4339] = str->add(strings[4339]); +strings[4348] = str->add("anim_sky3a"); +str->del(strings[1841]); +str->del(strings[4176]); +strings[4339] = str->add(strings[4339]); +strings[4349] = str->add("off"); +str->del(strings[4338]); +str->del(strings[3706]); +str->del(strings[4339]); +str->del(strings[4340]); +str->del(strings[1932]); +str->del(strings[4340]); +str->del(strings[4339]); +str->del(strings[4341]); +str->del(strings[1932]); +str->del(strings[4341]); +str->del(strings[4339]); +str->del(strings[4342]); +str->del(strings[4339]); +str->del(strings[4343]); +str->del(strings[1932]); +str->del(strings[4343]); +str->del(strings[4339]); +str->del(strings[4344]); +str->del(strings[4339]); +str->del(strings[4345]); +str->del(strings[4339]); +str->del(strings[4346]); +str->del(strings[4339]); +str->del(strings[4347]); +str->del(strings[4339]); +str->del(strings[4348]); +str->del(strings[4339]); +str->del(strings[4349]); +strings[4350] = str->add("e,action,mouse,move"); +strings[4351] = str->add("e"); +strings[4350] = str->add(strings[4350]); +strings[4351] = str->add(strings[4351]); +strings[4350] = str->add(strings[4350]); +strings[4351] = str->add(strings[4351]); +strings[4350] = str->add(strings[4350]); +strings[4351] = str->add(strings[4351]); +str->del(strings[4350]); +str->del(strings[4351]); +str->del(strings[4350]); +str->del(strings[4351]); +str->del(strings[4350]); +str->del(strings[4351]); +str->del(strings[4350]); +str->del(strings[4351]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2686]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2572]); +str->del(strings[2572]); +str->del(strings[2572]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2715]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2691]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2687]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2682]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2863]); +str->del(strings[2863]); +str->del(strings[2863]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2690]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2571]); +str->del(strings[2571]); +str->del(strings[2571]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2871]); +str->del(strings[2572]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2890]); +str->del(strings[2231]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2892]); +str->del(strings[2338]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2894]); +str->del(strings[1619]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2896]); +str->del(strings[2552]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[1712]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[2863]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2904]); +str->del(strings[1721]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[2571]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2862]); +str->del(strings[2862]); +str->del(strings[2862]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2672]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2673]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[2862]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3130]); +str->del(strings[1713]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3132]); +str->del(strings[1714]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[2074]); +str->del(strings[3237]); +str->del(strings[2077]); +str->del(strings[3238]); +str->del(strings[2070]); +str->del(strings[3239]); +str->del(strings[469]); +str->del(strings[2686]); +str->del(strings[2572]); +str->del(strings[3220]); +str->del(strings[3221]); +str->del(strings[3222]); +str->del(strings[3224]); +str->del(strings[3223]); +str->del(strings[3225]); +str->del(strings[3226]); +str->del(strings[3227]); +str->del(strings[3228]); +str->del(strings[1721]); +str->del(strings[3229]); +str->del(strings[469]); +str->del(strings[2715]); +str->del(strings[2231]); +str->del(strings[469]); +str->del(strings[2691]); +str->del(strings[2338]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[2860]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[2861]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[1619]); +str->del(strings[3155]); +str->del(strings[469]); +str->del(strings[2682]); +str->del(strings[1731]); +str->del(strings[469]); +str->del(strings[2683]); +str->del(strings[3156]); +str->del(strings[469]); +str->del(strings[2682]); +str->del(strings[2552]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[1712]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[2224]); +str->del(strings[469]); +str->del(strings[2685]); +str->del(strings[4]); +str->del(strings[1926]); +str->del(strings[3083]); +str->del(strings[1925]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2713]); +str->del(strings[2536]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[2863]); +str->del(strings[469]); +str->del(strings[2708]); +str->del(strings[3001]); +str->del(strings[469]); +str->del(strings[2677]); +str->del(strings[1726]); +str->del(strings[469]); +str->del(strings[2678]); +str->del(strings[3002]); +str->del(strings[469]); +str->del(strings[2676]); +str->del(strings[1724]); +str->del(strings[469]); +str->del(strings[2675]); +str->del(strings[1722]); +str->del(strings[469]); +str->del(strings[2674]); +str->del(strings[3003]); +str->del(strings[469]); +str->del(strings[2690]); +str->del(strings[1721]); +str->del(strings[2571]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[2862]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2672]); +str->del(strings[1713]); +str->del(strings[469]); +str->del(strings[2673]); +str->del(strings[1714]); +strings[863] = str->add(strings[863]); +strings[4352] = str->add("base/theme/borders"); +strings[64] = str->add(strings[64]); +strings[2578] = str->add(strings[2578]); +strings[2578] = str->add(strings[2578]); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[4353] = str->add("load"); +strings[332] = str->add(strings[332]); +strings[4354] = str->add("resize"); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[332] = str->add(strings[332]); +strings[332] = str->add(strings[332]); +strings[1842] = str->add(strings[1842]); +str->del(strings[332]); +strings[64] = str->add(strings[64]); +strings[1865] = str->add(strings[1865]); +strings[4355] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/2"); +strings[64] = str->add(strings[64]); +strings[1865] = str->add(strings[1865]); +strings[332] = str->add(strings[332]); +str->del(strings[332]); +strings[64] = str->add(strings[64]); +strings[2276] = str->add(strings[2276]); +strings[4356] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/16"); +strings[64] = str->add(strings[64]); +strings[2276] = str->add(strings[2276]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[4357] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/17"); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[2292] = str->add(strings[2292]); +strings[4358] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/18"); +strings[64] = str->add(strings[64]); +strings[2292] = str->add(strings[2292]); +strings[332] = str->add(strings[332]); +str->del(strings[332]); +strings[332] = str->add(strings[332]); +str->del(strings[1842]); +strings[332] = str->add(strings[332]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[3279] = str->add(strings[3279]); +strings[4359] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/20"); +strings[64] = str->add(strings[64]); +strings[3279] = str->add(strings[3279]); +strings[64] = str->add(strings[64]); +strings[2310] = str->add(strings[2310]); +strings[4360] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/19"); +strings[64] = str->add(strings[64]); +strings[2310] = str->add(strings[2310]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[332] = str->add(strings[332]); +strings[332] = str->add(strings[332]); +strings[332] = str->add(strings[332]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[2085] = str->add(strings[2085]); +strings[2085] = str->add(strings[2085]); +strings[4354] = str->add(strings[4354]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[4353] = str->add(strings[4353]); +strings[1841] = str->add(strings[1841]); +str->del(strings[332]); +strings[332] = str->add(strings[332]); +str->del(strings[332]); +strings[332] = str->add(strings[332]); +str->del(strings[332]); +strings[332] = str->add(strings[332]); +str->del(strings[332]); +strings[332] = str->add(strings[332]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[4354] = str->add(strings[4354]); +strings[4361] = str->add("e,state,focused"); +strings[4362] = str->add("e"); +strings[4361] = str->add(strings[4361]); +strings[4362] = str->add(strings[4362]); +str->del(strings[190]); +str->del(strings[331]); +str->del(strings[332]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[4363] = str->add("_about"); +strings[332] = str->add(strings[332]); +strings[193] = str->add(strings[193]); +strings[4364] = str->add("font"); +strings[4365] = str->add("font_fallbacks"); +strings[4366] = str->add("font_size"); +strings[4367] = str->add("font_source"); +strings[4368] = str->add("color"); +strings[4369] = str->add("underline_color"); +strings[4370] = str->add("underline2_color"); +strings[4371] = str->add("outline_color"); +strings[4372] = str->add("shadow_color"); +strings[4373] = str->add("glow_color"); +strings[4374] = str->add("glow2_color"); +strings[4375] = str->add("backing_color"); +strings[4376] = str->add("strikethrough_color"); +strings[4377] = str->add("align"); +strings[4378] = str->add("valign"); +strings[4379] = str->add("wrap"); +strings[4380] = str->add("left_margin"); +strings[4381] = str->add("right_margin"); +strings[4382] = str->add("underline"); +strings[4383] = str->add("strikethrough"); +strings[4384] = str->add("backing"); +strings[4385] = str->add("style"); +strings[4386] = str->add("tabstops"); +strings[4377] = str->add(strings[4377]); +strings[4387] = str->add("center"); +str->del(strings[4377]); +str->del(strings[4387]); +strings[4368] = str->add(strings[4368]); +strings[4388] = str->add("#000"); +str->del(strings[4368]); +str->del(strings[4388]); +strings[4385] = str->add(strings[4385]); +strings[4389] = str->add("shadow"); +str->del(strings[4385]); +str->del(strings[4389]); +strings[4372] = str->add(strings[4372]); +strings[4390] = str->add("#ffffff80"); +str->del(strings[4372]); +str->del(strings[4390]); +strings[4379] = str->add(strings[4379]); +strings[4391] = str->add("word"); +str->del(strings[4379]); +str->del(strings[4391]); +strings[4367] = str->add(strings[4367]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4367]); +str->del(strings[469]); +strings[4366] = str->add(strings[4366]); +strings[4392] = str->add("10.000000"); +str->del(strings[4366]); +str->del(strings[4392]); +strings[4364] = str->add(strings[4364]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4364]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4385] = str->add(strings[4385]); +strings[4393] = str->add("glow"); +str->del(strings[4385]); +str->del(strings[4393]); +strings[4368] = str->add(strings[4368]); +strings[4394] = str->add("#fff"); +str->del(strings[4368]); +str->del(strings[4394]); +strings[4374] = str->add(strings[4374]); +strings[4395] = str->add("#fe87"); +str->del(strings[4374]); +str->del(strings[4395]); +strings[4373] = str->add(strings[4373]); +strings[4396] = str->add("#fa14"); +str->del(strings[4373]); +str->del(strings[4396]); +strings[4364] = str->add(strings[4364]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4364]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4385] = str->add(strings[4385]); +strings[4397] = str->add("glow"); +str->del(strings[4385]); +str->del(strings[4397]); +strings[4368] = str->add(strings[4368]); +strings[4398] = str->add("#fff"); +str->del(strings[4368]); +str->del(strings[4398]); +strings[4374] = str->add(strings[4374]); +strings[4399] = str->add("#fe87"); +str->del(strings[4374]); +str->del(strings[4399]); +strings[4373] = str->add(strings[4373]); +strings[4400] = str->add("#fa14"); +str->del(strings[4373]); +str->del(strings[4400]); +strings[4364] = str->add(strings[4364]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4364]); +str->del(strings[471]); +str->del(strings[4364]); +str->del(strings[4365]); +str->del(strings[4366]); +str->del(strings[4367]); +str->del(strings[4368]); +str->del(strings[4369]); +str->del(strings[4370]); +str->del(strings[4371]); +str->del(strings[4372]); +str->del(strings[4373]); +str->del(strings[4374]); +str->del(strings[4375]); +str->del(strings[4376]); +str->del(strings[4377]); +str->del(strings[4378]); +str->del(strings[4379]); +str->del(strings[4380]); +str->del(strings[4381]); +str->del(strings[4382]); +str->del(strings[4383]); +str->del(strings[4384]); +str->del(strings[4385]); +str->del(strings[4386]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4401] = str->add("font"); +strings[4402] = str->add("font_fallbacks"); +strings[4403] = str->add("font_size"); +strings[4404] = str->add("font_source"); +strings[4405] = str->add("color"); +strings[4406] = str->add("underline_color"); +strings[4407] = str->add("underline2_color"); +strings[4408] = str->add("outline_color"); +strings[4409] = str->add("shadow_color"); +strings[4410] = str->add("glow_color"); +strings[4411] = str->add("glow2_color"); +strings[4412] = str->add("backing_color"); +strings[4413] = str->add("strikethrough_color"); +strings[4414] = str->add("align"); +strings[4415] = str->add("valign"); +strings[4416] = str->add("wrap"); +strings[4417] = str->add("left_margin"); +strings[4418] = str->add("right_margin"); +strings[4419] = str->add("underline"); +strings[4420] = str->add("strikethrough"); +strings[4421] = str->add("backing"); +strings[4422] = str->add("style"); +strings[4423] = str->add("tabstops"); +strings[4414] = str->add(strings[4414]); +strings[4424] = str->add("center"); +str->del(strings[4414]); +str->del(strings[4424]); +strings[4405] = str->add(strings[4405]); +strings[4425] = str->add("#000"); +str->del(strings[4405]); +str->del(strings[4425]); +strings[4422] = str->add(strings[4422]); +strings[4426] = str->add("shadow"); +str->del(strings[4422]); +str->del(strings[4426]); +strings[4409] = str->add(strings[4409]); +strings[4427] = str->add("#ffffff80"); +str->del(strings[4409]); +str->del(strings[4427]); +strings[4416] = str->add(strings[4416]); +strings[4428] = str->add("word"); +str->del(strings[4416]); +str->del(strings[4428]); +strings[4404] = str->add(strings[4404]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4404]); +str->del(strings[469]); +strings[4403] = str->add(strings[4403]); +strings[4429] = str->add("10.000000"); +str->del(strings[4403]); +str->del(strings[4429]); +strings[4401] = str->add(strings[4401]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4401]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4422] = str->add(strings[4422]); +strings[4430] = str->add("soft_shadow"); +str->del(strings[4422]); +str->del(strings[4430]); +strings[4405] = str->add(strings[4405]); +strings[4431] = str->add("#fff"); +str->del(strings[4405]); +str->del(strings[4431]); +strings[4409] = str->add(strings[4409]); +strings[4432] = str->add("#00000020"); +str->del(strings[4409]); +str->del(strings[4432]); +strings[4403] = str->add(strings[4403]); +strings[4433] = str->add("12.000000"); +str->del(strings[4403]); +str->del(strings[4433]); +strings[4401] = str->add(strings[4401]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4401]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4401]); +str->del(strings[4402]); +str->del(strings[4403]); +str->del(strings[4404]); +str->del(strings[4405]); +str->del(strings[4406]); +str->del(strings[4407]); +str->del(strings[4408]); +str->del(strings[4409]); +str->del(strings[4410]); +str->del(strings[4411]); +str->del(strings[4412]); +str->del(strings[4413]); +str->del(strings[4414]); +str->del(strings[4415]); +str->del(strings[4416]); +str->del(strings[4417]); +str->del(strings[4418]); +str->del(strings[4419]); +str->del(strings[4420]); +str->del(strings[4421]); +str->del(strings[4422]); +str->del(strings[4423]); +strings[4434] = str->add("font"); +strings[4435] = str->add("font_fallbacks"); +strings[4436] = str->add("font_size"); +strings[4437] = str->add("font_source"); +strings[4438] = str->add("color"); +strings[4439] = str->add("underline_color"); +strings[4440] = str->add("underline2_color"); +strings[4441] = str->add("outline_color"); +strings[4442] = str->add("shadow_color"); +strings[4443] = str->add("glow_color"); +strings[4444] = str->add("glow2_color"); +strings[4445] = str->add("backing_color"); +strings[4446] = str->add("strikethrough_color"); +strings[4447] = str->add("align"); +strings[4448] = str->add("valign"); +strings[4449] = str->add("wrap"); +strings[4450] = str->add("left_margin"); +strings[4451] = str->add("right_margin"); +strings[4452] = str->add("underline"); +strings[4453] = str->add("strikethrough"); +strings[4454] = str->add("backing"); +strings[4455] = str->add("style"); +strings[4456] = str->add("tabstops"); +strings[4447] = str->add(strings[4447]); +strings[4457] = str->add("center"); +str->del(strings[4447]); +str->del(strings[4457]); +strings[4438] = str->add(strings[4438]); +strings[4458] = str->add("#000"); +str->del(strings[4438]); +str->del(strings[4458]); +strings[4455] = str->add(strings[4455]); +strings[4459] = str->add("shadow"); +str->del(strings[4455]); +str->del(strings[4459]); +strings[4442] = str->add(strings[4442]); +strings[4460] = str->add("#ffffff80"); +str->del(strings[4442]); +str->del(strings[4460]); +strings[4449] = str->add(strings[4449]); +strings[4461] = str->add("word"); +str->del(strings[4449]); +str->del(strings[4461]); +strings[4437] = str->add(strings[4437]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4437]); +str->del(strings[469]); +strings[4436] = str->add(strings[4436]); +strings[4462] = str->add("10.000000"); +str->del(strings[4436]); +str->del(strings[4462]); +strings[4434] = str->add(strings[4434]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4434]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4455] = str->add(strings[4455]); +strings[4463] = str->add("soft_shadow"); +str->del(strings[4455]); +str->del(strings[4463]); +strings[4438] = str->add(strings[4438]); +strings[4464] = str->add("#fff"); +str->del(strings[4438]); +str->del(strings[4464]); +strings[4442] = str->add(strings[4442]); +strings[4465] = str->add("#00000020"); +str->del(strings[4442]); +str->del(strings[4465]); +strings[4436] = str->add(strings[4436]); +strings[4466] = str->add("12.000000"); +str->del(strings[4436]); +str->del(strings[4466]); +strings[4434] = str->add(strings[4434]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4434]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[4434]); +str->del(strings[4435]); +str->del(strings[4436]); +str->del(strings[4437]); +str->del(strings[4438]); +str->del(strings[4439]); +str->del(strings[4440]); +str->del(strings[4441]); +str->del(strings[4442]); +str->del(strings[4443]); +str->del(strings[4444]); +str->del(strings[4445]); +str->del(strings[4446]); +str->del(strings[4447]); +str->del(strings[4448]); +str->del(strings[4449]); +str->del(strings[4450]); +str->del(strings[4451]); +str->del(strings[4452]); +str->del(strings[4453]); +str->del(strings[4454]); +str->del(strings[4455]); +str->del(strings[4456]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[4467] = str->add("font"); +strings[4468] = str->add("font_fallbacks"); +strings[4469] = str->add("font_size"); +strings[4470] = str->add("font_source"); +strings[4471] = str->add("color"); +strings[4472] = str->add("underline_color"); +strings[4473] = str->add("underline2_color"); +strings[4474] = str->add("outline_color"); +strings[4475] = str->add("shadow_color"); +strings[4476] = str->add("glow_color"); +strings[4477] = str->add("glow2_color"); +strings[4478] = str->add("backing_color"); +strings[4479] = str->add("strikethrough_color"); +strings[4480] = str->add("align"); +strings[4481] = str->add("valign"); +strings[4482] = str->add("wrap"); +strings[4483] = str->add("left_margin"); +strings[4484] = str->add("right_margin"); +strings[4485] = str->add("underline"); +strings[4486] = str->add("strikethrough"); +strings[4487] = str->add("backing"); +strings[4488] = str->add("style"); +strings[4489] = str->add("tabstops"); +strings[4480] = str->add(strings[4480]); +strings[4490] = str->add("center"); +str->del(strings[4480]); +str->del(strings[4490]); +strings[4471] = str->add(strings[4471]); +strings[4491] = str->add("#000"); +str->del(strings[4471]); +str->del(strings[4491]); +strings[4488] = str->add(strings[4488]); +strings[4492] = str->add("shadow"); +str->del(strings[4488]); +str->del(strings[4492]); +strings[4475] = str->add(strings[4475]); +strings[4493] = str->add("#ffffff80"); +str->del(strings[4475]); +str->del(strings[4493]); +strings[4482] = str->add(strings[4482]); +strings[4494] = str->add("word"); +str->del(strings[4482]); +str->del(strings[4494]); +strings[4470] = str->add(strings[4470]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4470]); +str->del(strings[469]); +strings[4469] = str->add(strings[4469]); +strings[4495] = str->add("10.000000"); +str->del(strings[4469]); +str->del(strings[4495]); +strings[4467] = str->add(strings[4467]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4467]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4488] = str->add(strings[4488]); +strings[4496] = str->add("soft_shadow"); +str->del(strings[4488]); +str->del(strings[4496]); +strings[4471] = str->add(strings[4471]); +strings[4497] = str->add("#fff"); +str->del(strings[4471]); +str->del(strings[4497]); +strings[4475] = str->add(strings[4475]); +strings[4498] = str->add("#00000020"); +str->del(strings[4475]); +str->del(strings[4498]); +strings[4469] = str->add(strings[4469]); +strings[4499] = str->add("12.000000"); +str->del(strings[4469]); +str->del(strings[4499]); +strings[4467] = str->add(strings[4467]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4467]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4467]); +str->del(strings[4468]); +str->del(strings[4469]); +str->del(strings[4470]); +str->del(strings[4471]); +str->del(strings[4472]); +str->del(strings[4473]); +str->del(strings[4474]); +str->del(strings[4475]); +str->del(strings[4476]); +str->del(strings[4477]); +str->del(strings[4478]); +str->del(strings[4479]); +str->del(strings[4480]); +str->del(strings[4481]); +str->del(strings[4482]); +str->del(strings[4483]); +str->del(strings[4484]); +str->del(strings[4485]); +str->del(strings[4486]); +str->del(strings[4487]); +str->del(strings[4488]); +str->del(strings[4489]); +str->del(strings[4353]); +str->del(strings[4354]); +str->del(strings[4354]); +str->del(strings[1841]); +str->del(strings[4353]); +str->del(strings[1841]); +str->del(strings[4354]); +strings[4500] = str->add("program,start"); +strings[4501] = str->add("focus_in"); +str->del(strings[4361]); +str->del(strings[4362]); +str->del(strings[4361]); +str->del(strings[4362]); +str->del(strings[4500]); +str->del(strings[4501]); +strings[64] = str->add(strings[64]); +strings[2595] = str->add(strings[2595]); +strings[2595] = str->add(strings[2595]); +strings[4502] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[4502] = str->add(strings[4502]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[4503] = str->add("images/68"); +strings[4504] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/68"); +strings[64] = str->add(strings[64]); +strings[4503] = str->add(strings[4503]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[4505] = str->add("resize"); +strings[1933] = str->add(strings[1933]); +str->del(strings[4502]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[4502] = str->add(strings[4502]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[4505] = str->add(strings[4505]); +strings[4506] = str->add("e,state,focused"); +strings[4507] = str->add("e"); +strings[4508] = str->add("e,action,mouse,move"); +strings[4507] = str->add(strings[4507]); +strings[4508] = str->add(strings[4508]); +strings[4507] = str->add(strings[4507]); +strings[4508] = str->add(strings[4508]); +strings[4507] = str->add(strings[4507]); +strings[4508] = str->add(strings[4508]); +strings[4507] = str->add(strings[4507]); +strings[4508] = str->add(strings[4508]); +strings[4507] = str->add(strings[4507]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +strings[4508] = str->add(strings[4508]); +strings[4507] = str->add(strings[4507]); +strings[4509] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4502]); +str->del(strings[1841]); +str->del(strings[4505]); +str->del(strings[4502]); +str->del(strings[1841]); +str->del(strings[4505]); +strings[4510] = str->add("program,start"); +strings[4511] = str->add("focus_in"); +strings[1932] = str->add(strings[1932]); +strings[4511] = str->add(strings[4511]); +str->del(strings[4506]); +str->del(strings[4507]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[1737]); +str->del(strings[1853]); +str->del(strings[4508]); +str->del(strings[4507]); +str->del(strings[4509]); +str->del(strings[1853]); +str->del(strings[4510]); +str->del(strings[4511]); +str->del(strings[1932]); +str->del(strings[4511]); +strings[4512] = str->add("e,action,mouse,move"); +strings[4513] = str->add("e"); +strings[4514] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4512]); +str->del(strings[4513]); +str->del(strings[4514]); +str->del(strings[1853]); +str->del(strings[190]); +str->del(strings[4363]); +str->del(strings[332]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[4515] = str->add("_about"); +strings[332] = str->add(strings[332]); +strings[193] = str->add(strings[193]); +strings[4516] = str->add("font"); +strings[4517] = str->add("font_fallbacks"); +strings[4518] = str->add("font_size"); +strings[4519] = str->add("font_source"); +strings[4520] = str->add("color"); +strings[4521] = str->add("underline_color"); +strings[4522] = str->add("underline2_color"); +strings[4523] = str->add("outline_color"); +strings[4524] = str->add("shadow_color"); +strings[4525] = str->add("glow_color"); +strings[4526] = str->add("glow2_color"); +strings[4527] = str->add("backing_color"); +strings[4528] = str->add("strikethrough_color"); +strings[4529] = str->add("align"); +strings[4530] = str->add("valign"); +strings[4531] = str->add("wrap"); +strings[4532] = str->add("left_margin"); +strings[4533] = str->add("right_margin"); +strings[4534] = str->add("underline"); +strings[4535] = str->add("strikethrough"); +strings[4536] = str->add("backing"); +strings[4537] = str->add("style"); +strings[4538] = str->add("tabstops"); +strings[4529] = str->add(strings[4529]); +strings[4539] = str->add("center"); +str->del(strings[4529]); +str->del(strings[4539]); +strings[4520] = str->add(strings[4520]); +strings[4540] = str->add("#000"); +str->del(strings[4520]); +str->del(strings[4540]); +strings[4537] = str->add(strings[4537]); +strings[4541] = str->add("shadow"); +str->del(strings[4537]); +str->del(strings[4541]); +strings[4524] = str->add(strings[4524]); +strings[4542] = str->add("#ffffff80"); +str->del(strings[4524]); +str->del(strings[4542]); +strings[4531] = str->add(strings[4531]); +strings[4543] = str->add("word"); +str->del(strings[4531]); +str->del(strings[4543]); +strings[4519] = str->add(strings[4519]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4519]); +str->del(strings[469]); +strings[4518] = str->add(strings[4518]); +strings[4544] = str->add("10.000000"); +str->del(strings[4518]); +str->del(strings[4544]); +strings[4516] = str->add(strings[4516]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4516]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4537] = str->add(strings[4537]); +strings[4545] = str->add("glow"); +str->del(strings[4537]); +str->del(strings[4545]); +strings[4520] = str->add(strings[4520]); +strings[4546] = str->add("#fff"); +str->del(strings[4520]); +str->del(strings[4546]); +strings[4526] = str->add(strings[4526]); +strings[4547] = str->add("#fe87"); +str->del(strings[4526]); +str->del(strings[4547]); +strings[4525] = str->add(strings[4525]); +strings[4548] = str->add("#fa14"); +str->del(strings[4525]); +str->del(strings[4548]); +strings[4516] = str->add(strings[4516]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4516]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4537] = str->add(strings[4537]); +strings[4549] = str->add("glow"); +str->del(strings[4537]); +str->del(strings[4549]); +strings[4520] = str->add(strings[4520]); +strings[4550] = str->add("#fff"); +str->del(strings[4520]); +str->del(strings[4550]); +strings[4526] = str->add(strings[4526]); +strings[4551] = str->add("#fe87"); +str->del(strings[4526]); +str->del(strings[4551]); +strings[4525] = str->add(strings[4525]); +strings[4552] = str->add("#fa14"); +str->del(strings[4525]); +str->del(strings[4552]); +strings[4516] = str->add(strings[4516]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4516]); +str->del(strings[471]); +str->del(strings[4516]); +str->del(strings[4517]); +str->del(strings[4518]); +str->del(strings[4519]); +str->del(strings[4520]); +str->del(strings[4521]); +str->del(strings[4522]); +str->del(strings[4523]); +str->del(strings[4524]); +str->del(strings[4525]); +str->del(strings[4526]); +str->del(strings[4527]); +str->del(strings[4528]); +str->del(strings[4529]); +str->del(strings[4530]); +str->del(strings[4531]); +str->del(strings[4532]); +str->del(strings[4533]); +str->del(strings[4534]); +str->del(strings[4535]); +str->del(strings[4536]); +str->del(strings[4537]); +str->del(strings[4538]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[4553] = str->add("font"); +strings[4554] = str->add("font_fallbacks"); +strings[4555] = str->add("font_size"); +strings[4556] = str->add("font_source"); +strings[4557] = str->add("color"); +strings[4558] = str->add("underline_color"); +strings[4559] = str->add("underline2_color"); +strings[4560] = str->add("outline_color"); +strings[4561] = str->add("shadow_color"); +strings[4562] = str->add("glow_color"); +strings[4563] = str->add("glow2_color"); +strings[4564] = str->add("backing_color"); +strings[4565] = str->add("strikethrough_color"); +strings[4566] = str->add("align"); +strings[4567] = str->add("valign"); +strings[4568] = str->add("wrap"); +strings[4569] = str->add("left_margin"); +strings[4570] = str->add("right_margin"); +strings[4571] = str->add("underline"); +strings[4572] = str->add("strikethrough"); +strings[4573] = str->add("backing"); +strings[4574] = str->add("style"); +strings[4575] = str->add("tabstops"); +strings[4566] = str->add(strings[4566]); +strings[4576] = str->add("center"); +str->del(strings[4566]); +str->del(strings[4576]); +strings[4557] = str->add(strings[4557]); +strings[4577] = str->add("#000"); +str->del(strings[4557]); +str->del(strings[4577]); +strings[4574] = str->add(strings[4574]); +strings[4578] = str->add("shadow"); +str->del(strings[4574]); +str->del(strings[4578]); +strings[4561] = str->add(strings[4561]); +strings[4579] = str->add("#ffffff80"); +str->del(strings[4561]); +str->del(strings[4579]); +strings[4568] = str->add(strings[4568]); +strings[4580] = str->add("word"); +str->del(strings[4568]); +str->del(strings[4580]); +strings[4556] = str->add(strings[4556]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4556]); +str->del(strings[469]); +strings[4555] = str->add(strings[4555]); +strings[4581] = str->add("10.000000"); +str->del(strings[4555]); +str->del(strings[4581]); +strings[4553] = str->add(strings[4553]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4553]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4574] = str->add(strings[4574]); +strings[4582] = str->add("soft_shadow"); +str->del(strings[4574]); +str->del(strings[4582]); +strings[4557] = str->add(strings[4557]); +strings[4583] = str->add("#fff"); +str->del(strings[4557]); +str->del(strings[4583]); +strings[4561] = str->add(strings[4561]); +strings[4584] = str->add("#00000020"); +str->del(strings[4561]); +str->del(strings[4584]); +strings[4555] = str->add(strings[4555]); +strings[4585] = str->add("12.000000"); +str->del(strings[4555]); +str->del(strings[4585]); +strings[4553] = str->add(strings[4553]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4553]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4553]); +str->del(strings[4554]); +str->del(strings[4555]); +str->del(strings[4556]); +str->del(strings[4557]); +str->del(strings[4558]); +str->del(strings[4559]); +str->del(strings[4560]); +str->del(strings[4561]); +str->del(strings[4562]); +str->del(strings[4563]); +str->del(strings[4564]); +str->del(strings[4565]); +str->del(strings[4566]); +str->del(strings[4567]); +str->del(strings[4568]); +str->del(strings[4569]); +str->del(strings[4570]); +str->del(strings[4571]); +str->del(strings[4572]); +str->del(strings[4573]); +str->del(strings[4574]); +str->del(strings[4575]); +strings[4586] = str->add("font"); +strings[4587] = str->add("font_fallbacks"); +strings[4588] = str->add("font_size"); +strings[4589] = str->add("font_source"); +strings[4590] = str->add("color"); +strings[4591] = str->add("underline_color"); +strings[4592] = str->add("underline2_color"); +strings[4593] = str->add("outline_color"); +strings[4594] = str->add("shadow_color"); +strings[4595] = str->add("glow_color"); +strings[4596] = str->add("glow2_color"); +strings[4597] = str->add("backing_color"); +strings[4598] = str->add("strikethrough_color"); +strings[4599] = str->add("align"); +strings[4600] = str->add("valign"); +strings[4601] = str->add("wrap"); +strings[4602] = str->add("left_margin"); +strings[4603] = str->add("right_margin"); +strings[4604] = str->add("underline"); +strings[4605] = str->add("strikethrough"); +strings[4606] = str->add("backing"); +strings[4607] = str->add("style"); +strings[4608] = str->add("tabstops"); +strings[4599] = str->add(strings[4599]); +strings[4609] = str->add("center"); +str->del(strings[4599]); +str->del(strings[4609]); +strings[4590] = str->add(strings[4590]); +strings[4610] = str->add("#000"); +str->del(strings[4590]); +str->del(strings[4610]); +strings[4607] = str->add(strings[4607]); +strings[4611] = str->add("shadow"); +str->del(strings[4607]); +str->del(strings[4611]); +strings[4594] = str->add(strings[4594]); +strings[4612] = str->add("#ffffff80"); +str->del(strings[4594]); +str->del(strings[4612]); +strings[4601] = str->add(strings[4601]); +strings[4613] = str->add("word"); +str->del(strings[4601]); +str->del(strings[4613]); +strings[4589] = str->add(strings[4589]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4589]); +str->del(strings[469]); +strings[4588] = str->add(strings[4588]); +strings[4614] = str->add("10.000000"); +str->del(strings[4588]); +str->del(strings[4614]); +strings[4586] = str->add(strings[4586]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4586]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4607] = str->add(strings[4607]); +strings[4615] = str->add("soft_shadow"); +str->del(strings[4607]); +str->del(strings[4615]); +strings[4590] = str->add(strings[4590]); +strings[4616] = str->add("#fff"); +str->del(strings[4590]); +str->del(strings[4616]); +strings[4594] = str->add(strings[4594]); +strings[4617] = str->add("#00000020"); +str->del(strings[4594]); +str->del(strings[4617]); +strings[4588] = str->add(strings[4588]); +strings[4618] = str->add("12.000000"); +str->del(strings[4588]); +str->del(strings[4618]); +strings[4586] = str->add(strings[4586]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4586]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[4586]); +str->del(strings[4587]); +str->del(strings[4588]); +str->del(strings[4589]); +str->del(strings[4590]); +str->del(strings[4591]); +str->del(strings[4592]); +str->del(strings[4593]); +str->del(strings[4594]); +str->del(strings[4595]); +str->del(strings[4596]); +str->del(strings[4597]); +str->del(strings[4598]); +str->del(strings[4599]); +str->del(strings[4600]); +str->del(strings[4601]); +str->del(strings[4602]); +str->del(strings[4603]); +str->del(strings[4604]); +str->del(strings[4605]); +str->del(strings[4606]); +str->del(strings[4607]); +str->del(strings[4608]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[4619] = str->add("font"); +strings[4620] = str->add("font_fallbacks"); +strings[4621] = str->add("font_size"); +strings[4622] = str->add("font_source"); +strings[4623] = str->add("color"); +strings[4624] = str->add("underline_color"); +strings[4625] = str->add("underline2_color"); +strings[4626] = str->add("outline_color"); +strings[4627] = str->add("shadow_color"); +strings[4628] = str->add("glow_color"); +strings[4629] = str->add("glow2_color"); +strings[4630] = str->add("backing_color"); +strings[4631] = str->add("strikethrough_color"); +strings[4632] = str->add("align"); +strings[4633] = str->add("valign"); +strings[4634] = str->add("wrap"); +strings[4635] = str->add("left_margin"); +strings[4636] = str->add("right_margin"); +strings[4637] = str->add("underline"); +strings[4638] = str->add("strikethrough"); +strings[4639] = str->add("backing"); +strings[4640] = str->add("style"); +strings[4641] = str->add("tabstops"); +strings[4632] = str->add(strings[4632]); +strings[4642] = str->add("center"); +str->del(strings[4632]); +str->del(strings[4642]); +strings[4623] = str->add(strings[4623]); +strings[4643] = str->add("#000"); +str->del(strings[4623]); +str->del(strings[4643]); +strings[4640] = str->add(strings[4640]); +strings[4644] = str->add("shadow"); +str->del(strings[4640]); +str->del(strings[4644]); +strings[4627] = str->add(strings[4627]); +strings[4645] = str->add("#ffffff80"); +str->del(strings[4627]); +str->del(strings[4645]); +strings[4634] = str->add(strings[4634]); +strings[4646] = str->add("word"); +str->del(strings[4634]); +str->del(strings[4646]); +strings[4622] = str->add(strings[4622]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4622]); +str->del(strings[469]); +strings[4621] = str->add(strings[4621]); +strings[4647] = str->add("10.000000"); +str->del(strings[4621]); +str->del(strings[4647]); +strings[4619] = str->add(strings[4619]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4619]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4640] = str->add(strings[4640]); +strings[4648] = str->add("soft_shadow"); +str->del(strings[4640]); +str->del(strings[4648]); +strings[4623] = str->add(strings[4623]); +strings[4649] = str->add("#fff"); +str->del(strings[4623]); +str->del(strings[4649]); +strings[4627] = str->add(strings[4627]); +strings[4650] = str->add("#00000020"); +str->del(strings[4627]); +str->del(strings[4650]); +strings[4621] = str->add(strings[4621]); +strings[4651] = str->add("12.000000"); +str->del(strings[4621]); +str->del(strings[4651]); +strings[4619] = str->add(strings[4619]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4619]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4619]); +str->del(strings[4620]); +str->del(strings[4621]); +str->del(strings[4622]); +str->del(strings[4623]); +str->del(strings[4624]); +str->del(strings[4625]); +str->del(strings[4626]); +str->del(strings[4627]); +str->del(strings[4628]); +str->del(strings[4629]); +str->del(strings[4630]); +str->del(strings[4631]); +str->del(strings[4632]); +str->del(strings[4633]); +str->del(strings[4634]); +str->del(strings[4635]); +str->del(strings[4636]); +str->del(strings[4637]); +str->del(strings[4638]); +str->del(strings[4639]); +str->del(strings[4640]); +str->del(strings[4641]); +str->del(strings[64]); +str->del(strings[4503]); +strings[64] = str->add(strings[64]); +strings[1869] = str->add(strings[1869]); +strings[4652] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/67"); +strings[64] = str->add(strings[64]); +strings[1869] = str->add(strings[1869]); +str->del(strings[7]); +str->del(strings[3703]); +strings[7] = str->add(strings[7]); +strings[3027] = str->add(strings[3027]); +strings[4653] = str->add("e,action,mouse,move"); +strings[4654] = str->add("e"); +strings[4655] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[4653] = str->add(strings[4653]); +strings[4654] = str->add(strings[4654]); +strings[4655] = str->add(strings[4655]); +strings[1853] = str->add(strings[1853]); +strings[4653] = str->add(strings[4653]); +strings[4654] = str->add(strings[4654]); +strings[4655] = str->add(strings[4655]); +strings[1853] = str->add(strings[1853]); +strings[4653] = str->add(strings[4653]); +strings[4654] = str->add(strings[4654]); +strings[4655] = str->add(strings[4655]); +strings[1853] = str->add(strings[1853]); +str->del(strings[4653]); +str->del(strings[4654]); +str->del(strings[4655]); +str->del(strings[1853]); +str->del(strings[4653]); +str->del(strings[4654]); +str->del(strings[4655]); +str->del(strings[1853]); +str->del(strings[4653]); +str->del(strings[4654]); +str->del(strings[4655]); +str->del(strings[1853]); +str->del(strings[4653]); +str->del(strings[4654]); +str->del(strings[4655]); +str->del(strings[1853]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[7]); +str->del(strings[3027]); +strings[7] = str->add(strings[7]); +strings[3033] = str->add(strings[3033]); +strings[4656] = str->add("e,action,mouse,move"); +strings[4657] = str->add("e"); +strings[4658] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[4656] = str->add(strings[4656]); +strings[4657] = str->add(strings[4657]); +strings[4658] = str->add(strings[4658]); +strings[1853] = str->add(strings[1853]); +str->del(strings[4656]); +str->del(strings[4657]); +str->del(strings[4658]); +str->del(strings[1853]); +str->del(strings[4656]); +str->del(strings[4657]); +str->del(strings[4658]); +str->del(strings[1853]); +strings[4659] = str->add("e,action,mouse,move"); +strings[4660] = str->add("e"); +strings[4661] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4659]); +str->del(strings[4660]); +str->del(strings[4661]); +str->del(strings[1853]); +strings[4662] = str->add("e,action,mouse,move"); +strings[4663] = str->add("e"); +strings[4664] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4662]); +str->del(strings[4663]); +str->del(strings[4664]); +str->del(strings[1853]); +strings[4665] = str->add("e,action,mouse,move"); +strings[4666] = str->add("e"); +strings[4667] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4665]); +str->del(strings[4666]); +str->del(strings[4667]); +str->del(strings[1853]); +strings[4668] = str->add("e,action,mouse,move"); +strings[4669] = str->add("e"); +strings[4670] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4668]); +str->del(strings[4669]); +str->del(strings[4670]); +str->del(strings[1853]); +strings[4671] = str->add("e,action,mouse,move"); +strings[4672] = str->add("e"); +strings[4673] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4671]); +str->del(strings[4672]); +str->del(strings[4673]); +str->del(strings[1853]); +strings[4674] = str->add("e,action,mouse,move"); +strings[4675] = str->add("e"); +strings[4676] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4674]); +str->del(strings[4675]); +str->del(strings[4676]); +str->del(strings[1853]); +strings[4677] = str->add("e,action,mouse,move"); +strings[4678] = str->add("e"); +strings[4679] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4677]); +str->del(strings[4678]); +str->del(strings[4679]); +str->del(strings[1853]); +strings[4680] = str->add("e,action,mouse,move"); +strings[4681] = str->add("e"); +strings[4682] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4680]); +str->del(strings[4681]); +str->del(strings[4682]); +str->del(strings[1853]); +strings[4683] = str->add("e,action,mouse,move"); +strings[4684] = str->add("e"); +strings[4685] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4683]); +str->del(strings[4684]); +str->del(strings[4685]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[3033]); +strings[7] = str->add(strings[7]); +strings[2062] = str->add(strings[2062]); +strings[4686] = str->add("e,action,mouse,move"); +strings[4687] = str->add("e"); +strings[4688] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4686]); +str->del(strings[4687]); +str->del(strings[4688]); +str->del(strings[1853]); +strings[4689] = str->add("e,action,mouse,move"); +strings[4690] = str->add("e"); +strings[4691] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4689]); +str->del(strings[4690]); +str->del(strings[4691]); +str->del(strings[1853]); +strings[4692] = str->add("e,action,mouse,move"); +strings[4693] = str->add("e"); +strings[4694] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4692]); +str->del(strings[4693]); +str->del(strings[4694]); +str->del(strings[1853]); +strings[4695] = str->add("e,action,mouse,move"); +strings[4696] = str->add("e"); +strings[4697] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4695]); +str->del(strings[4696]); +str->del(strings[4697]); +str->del(strings[1853]); +strings[4698] = str->add("e,action,mouse,move"); +strings[4699] = str->add("e"); +strings[4700] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4698]); +str->del(strings[4699]); +str->del(strings[4700]); +str->del(strings[1853]); +strings[4701] = str->add("e,action,mouse,move"); +strings[4702] = str->add("e"); +strings[4703] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4701]); +str->del(strings[4702]); +str->del(strings[4703]); +str->del(strings[1853]); +strings[4704] = str->add("e,action,mouse,move"); +strings[4705] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +str->del(strings[4704]); +str->del(strings[4705]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[1737]); +str->del(strings[1856]); +strings[4706] = str->add("e,action,mouse,move"); +strings[4707] = str->add("e"); +strings[4708] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4706]); +str->del(strings[4707]); +str->del(strings[4708]); +str->del(strings[1856]); +strings[4709] = str->add("program,start"); +strings[4710] = str->add("go_active28"); +strings[1932] = str->add(strings[1932]); +strings[4710] = str->add(strings[4710]); +strings[4709] = str->add(strings[4709]); +strings[4711] = str->add("go_activeb28"); +strings[4709] = str->add(strings[4709]); +strings[4712] = str->add("go_active2"); +strings[1932] = str->add(strings[1932]); +strings[4712] = str->add(strings[4712]); +strings[4709] = str->add(strings[4709]); +strings[4713] = str->add("go_activeb2"); +str->del(strings[4709]); +str->del(strings[4710]); +str->del(strings[1932]); +str->del(strings[4710]); +str->del(strings[4709]); +str->del(strings[4711]); +str->del(strings[4709]); +str->del(strings[4712]); +str->del(strings[1932]); +str->del(strings[4712]); +str->del(strings[4709]); +str->del(strings[4713]); +str->del(strings[7]); +str->del(strings[2062]); +strings[7] = str->add(strings[7]); +strings[3100] = str->add(strings[3100]); +strings[4714] = str->add("e,action,mouse,move"); +strings[4715] = str->add("e"); +strings[4716] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4714]); +str->del(strings[4715]); +str->del(strings[4716]); +str->del(strings[1856]); +strings[4717] = str->add("e,action,mouse,move"); +strings[4718] = str->add("e"); +strings[4719] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4717]); +str->del(strings[4718]); +str->del(strings[4719]); +str->del(strings[1856]); +strings[4720] = str->add("e,action,mouse,move"); +strings[4721] = str->add("e"); +strings[4722] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4720]); +str->del(strings[4721]); +str->del(strings[4722]); +str->del(strings[1856]); +strings[4723] = str->add("e,action,mouse,move"); +strings[4724] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1862] = str->add(strings[1862]); +str->del(strings[4723]); +str->del(strings[4724]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1862]); +strings[1932] = str->add(strings[1932]); +strings[4725] = str->add("focus_in"); +str->del(strings[1932]); +str->del(strings[4725]); +strings[4726] = str->add("e,action,mouse,move"); +strings[4727] = str->add("e"); +strings[4728] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4726]); +str->del(strings[4727]); +str->del(strings[4728]); +str->del(strings[1862]); +strings[4729] = str->add("e,action,mouse,move"); +strings[4730] = str->add("e"); +strings[4731] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4729]); +str->del(strings[4730]); +str->del(strings[4731]); +str->del(strings[1862]); +strings[4732] = str->add("e,action,mouse,move"); +strings[4733] = str->add("e"); +strings[4734] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4732]); +str->del(strings[4733]); +str->del(strings[4734]); +str->del(strings[1862]); +strings[4735] = str->add("e,action,mouse,move"); +strings[4736] = str->add("e"); +strings[4737] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4735]); +str->del(strings[4736]); +str->del(strings[4737]); +str->del(strings[1862]); +strings[4738] = str->add("e,action,mouse,move"); +strings[4739] = str->add("e"); +strings[4740] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4738]); +str->del(strings[4739]); +str->del(strings[4740]); +str->del(strings[1862]); +str->del(strings[7]); +str->del(strings[3100]); +strings[7] = str->add(strings[7]); +strings[3111] = str->add(strings[3111]); +strings[4741] = str->add("e,action,mouse,move"); +strings[4742] = str->add("e"); +strings[4743] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4741]); +str->del(strings[4742]); +str->del(strings[4743]); +str->del(strings[1862]); +strings[4744] = str->add("e,action,mouse,move"); +strings[4745] = str->add("e"); +strings[4746] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4744]); +str->del(strings[4745]); +str->del(strings[4746]); +str->del(strings[1862]); +strings[4747] = str->add("e,action,mouse,move"); +strings[4748] = str->add("e"); +strings[4749] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4747]); +str->del(strings[4748]); +str->del(strings[4749]); +str->del(strings[1862]); +strings[4750] = str->add("e,action,mouse,move"); +strings[4751] = str->add("e"); +strings[4752] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4750]); +str->del(strings[4751]); +str->del(strings[4752]); +str->del(strings[1862]); +strings[1932] = str->add(strings[1932]); +strings[4753] = str->add("off"); +str->del(strings[1932]); +str->del(strings[4753]); +str->del(strings[7]); +str->del(strings[3111]); +strings[7] = str->add(strings[7]); +strings[3136] = str->add(strings[3136]); +strings[4754] = str->add("e,action,mouse,move"); +strings[4755] = str->add("e"); +strings[4756] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4754]); +str->del(strings[4755]); +str->del(strings[4756]); +str->del(strings[1862]); +strings[4757] = str->add("e,action,mouse,move"); +strings[4758] = str->add("e"); +strings[4759] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4757]); +str->del(strings[4758]); +str->del(strings[4759]); +str->del(strings[1862]); +strings[4760] = str->add("e,action,mouse,move"); +strings[4761] = str->add("e"); +strings[4762] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4760]); +str->del(strings[4761]); +str->del(strings[4762]); +str->del(strings[1862]); +strings[4763] = str->add("e,action,mouse,move"); +strings[4764] = str->add("e"); +strings[4765] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4763]); +str->del(strings[4764]); +str->del(strings[4765]); +str->del(strings[1862]); +strings[4766] = str->add("e,action,mouse,move"); +strings[4767] = str->add("e"); +strings[4768] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4766]); +str->del(strings[4767]); +str->del(strings[4768]); +str->del(strings[1862]); +strings[4769] = str->add("e,action,mouse,move"); +strings[4770] = str->add("e"); +strings[4771] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4769]); +str->del(strings[4770]); +str->del(strings[4771]); +str->del(strings[1862]); +strings[4772] = str->add("e,action,mouse,move"); +strings[4773] = str->add("e"); +strings[4774] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4772]); +str->del(strings[4773]); +str->del(strings[4774]); +str->del(strings[1862]); +strings[4775] = str->add("e,action,mouse,move"); +strings[4776] = str->add("e"); +strings[4777] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4775]); +str->del(strings[4776]); +str->del(strings[4777]); +str->del(strings[1862]); +strings[4778] = str->add("e,action,mouse,move"); +strings[4779] = str->add("e"); +strings[4780] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4778]); +str->del(strings[4779]); +str->del(strings[4780]); +str->del(strings[1862]); +strings[4781] = str->add("e,action,mouse,move"); +strings[4782] = str->add("e"); +strings[4783] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4781]); +str->del(strings[4782]); +str->del(strings[4783]); +str->del(strings[1862]); +strings[4784] = str->add("e,action,mouse,move"); +strings[4785] = str->add("e"); +strings[4786] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4784]); +str->del(strings[4785]); +str->del(strings[4786]); +str->del(strings[1862]); +strings[4787] = str->add("e,action,mouse,move"); +strings[4788] = str->add("e"); +strings[4789] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4787]); +str->del(strings[4788]); +str->del(strings[4789]); +str->del(strings[1862]); +strings[4790] = str->add("program,start"); +strings[4791] = str->add("go_active27"); +strings[1932] = str->add(strings[1932]); +strings[4791] = str->add(strings[4791]); +strings[4790] = str->add(strings[4790]); +strings[4792] = str->add("go_activeb27"); +strings[4790] = str->add(strings[4790]); +strings[4793] = str->add("go_active3"); +strings[1932] = str->add(strings[1932]); +strings[4793] = str->add(strings[4793]); +strings[4790] = str->add(strings[4790]); +strings[4794] = str->add("go_activeb3"); +str->del(strings[4790]); +str->del(strings[4791]); +str->del(strings[1932]); +str->del(strings[4791]); +str->del(strings[4790]); +str->del(strings[4792]); +str->del(strings[4790]); +str->del(strings[4793]); +str->del(strings[1932]); +str->del(strings[4793]); +str->del(strings[4790]); +str->del(strings[4794]); +str->del(strings[7]); +str->del(strings[3136]); +strings[7] = str->add(strings[7]); +strings[3167] = str->add(strings[3167]); +strings[4795] = str->add("e,action,mouse,move"); +strings[4796] = str->add("e"); +strings[4797] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[4795]); +str->del(strings[4796]); +str->del(strings[4797]); +str->del(strings[1862]); +strings[4798] = str->add("e,action,mouse,move"); +strings[4799] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1862] = str->add(strings[1862]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +str->del(strings[4798]); +str->del(strings[4799]); +str->del(strings[1740]); +str->del(strings[1862]); +str->del(strings[1737]); +str->del(strings[1856]); +strings[4800] = str->add("e,action,mouse,move"); +strings[4801] = str->add("e"); +strings[4802] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4800]); +str->del(strings[4801]); +str->del(strings[4802]); +str->del(strings[1856]); +strings[4803] = str->add("e,action,mouse,move"); +strings[4804] = str->add("e"); +strings[4805] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4803]); +str->del(strings[4804]); +str->del(strings[4805]); +str->del(strings[1856]); +strings[4806] = str->add("e,action,mouse,move"); +strings[4807] = str->add("e"); +strings[4808] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4806]); +str->del(strings[4807]); +str->del(strings[4808]); +str->del(strings[1856]); +strings[4809] = str->add("e,action,mouse,move"); +strings[4810] = str->add("e"); +strings[4811] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[4809]); +str->del(strings[4810]); +str->del(strings[4811]); +str->del(strings[1856]); +strings[4812] = str->add("e,action,mouse,move"); +strings[4813] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +str->del(strings[4812]); +str->del(strings[4813]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1853]); +strings[4814] = str->add("e,action,mouse,move"); +strings[4815] = str->add("e"); +strings[4816] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[4814]); +str->del(strings[4815]); +str->del(strings[4816]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[3167]); +strings[7] = str->add(strings[7]); +strings[3190] = str->add(strings[3190]); +strings[4817] = str->add("e,action,mouse,move"); +strings[4818] = str->add("e"); +strings[4819] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[4817] = str->add(strings[4817]); +strings[4818] = str->add(strings[4818]); +strings[4817] = str->add(strings[4817]); +strings[4818] = str->add(strings[4818]); +strings[4820] = str->add("e,state,focused"); +strings[4818] = str->add(strings[4818]); +str->del(strings[4817]); +str->del(strings[4818]); +str->del(strings[4819]); +str->del(strings[1853]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[4817]); +str->del(strings[4818]); +str->del(strings[4817]); +str->del(strings[4818]); +str->del(strings[4820]); +str->del(strings[4818]); +strings[4821] = str->add("e,action,mouse,move"); +strings[4822] = str->add("e"); +str->del(strings[4821]); +str->del(strings[4822]); +strings[4823] = str->add("e,action,mouse,move"); +strings[4824] = str->add("e"); +str->del(strings[4823]); +str->del(strings[4824]); +strings[4825] = str->add("e,action,mouse,move"); +strings[4826] = str->add("e"); +str->del(strings[4825]); +str->del(strings[4826]); +strings[1932] = str->add(strings[1932]); +strings[4827] = str->add("go_activeb1"); +strings[4828] = str->add("program,start"); +strings[4829] = str->add("go_activec1"); +strings[1932] = str->add(strings[1932]); +strings[4830] = str->add("go_activeb29"); +strings[4828] = str->add(strings[4828]); +strings[4831] = str->add("go_activec29"); +str->del(strings[1932]); +str->del(strings[4827]); +str->del(strings[4828]); +str->del(strings[4829]); +str->del(strings[1932]); +str->del(strings[4830]); +str->del(strings[4828]); +str->del(strings[4831]); +str->del(strings[7]); +str->del(strings[3190]); +strings[7] = str->add(strings[7]); +strings[2148] = str->add(strings[2148]); +strings[4832] = str->add("e,action,mouse,move"); +strings[4833] = str->add("e"); +strings[1737] = str->add(strings[1737]); +strings[4834] = str->add("base2"); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4832]); +str->del(strings[4833]); +str->del(strings[1737]); +str->del(strings[4834]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[4835] = str->add("e,action,mouse,move"); +strings[4836] = str->add("e"); +strings[4837] = str->add("mouse,move"); +strings[4838] = str->add("base2"); +strings[4837] = str->add(strings[4837]); +strings[1946] = str->add(strings[1946]); +strings[4837] = str->add(strings[4837]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4835]); +str->del(strings[4836]); +str->del(strings[4837]); +str->del(strings[4838]); +str->del(strings[4837]); +str->del(strings[1946]); +str->del(strings[4837]); +str->del(strings[1946]); +strings[4839] = str->add("e,action,mouse,move"); +strings[4840] = str->add("e"); +strings[4841] = str->add("mouse,move"); +strings[4842] = str->add("base2"); +strings[4841] = str->add(strings[4841]); +strings[1946] = str->add(strings[1946]); +strings[4841] = str->add(strings[4841]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4839]); +str->del(strings[4840]); +str->del(strings[4841]); +str->del(strings[4842]); +str->del(strings[4841]); +str->del(strings[1946]); +str->del(strings[4841]); +str->del(strings[1946]); +strings[4843] = str->add("e,action,mouse,move"); +strings[4844] = str->add("e"); +strings[4845] = str->add("mouse,move"); +strings[4846] = str->add("base2"); +strings[4845] = str->add(strings[4845]); +strings[1946] = str->add(strings[1946]); +strings[4845] = str->add(strings[4845]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4843]); +str->del(strings[4844]); +str->del(strings[4845]); +str->del(strings[4846]); +str->del(strings[4845]); +str->del(strings[1946]); +str->del(strings[4845]); +str->del(strings[1946]); +strings[4847] = str->add("e,action,mouse,move"); +strings[4848] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[4849] = str->add("base2"); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[4850] = str->add("icon_area"); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4847]); +str->del(strings[4848]); +str->del(strings[1740]); +str->del(strings[4849]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[4850]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[4851] = str->add("e,action,mouse,move"); +strings[4852] = str->add("e"); +strings[4853] = str->add("mouse,move"); +strings[4854] = str->add("icon_area"); +strings[4853] = str->add(strings[4853]); +strings[1946] = str->add(strings[1946]); +strings[4853] = str->add(strings[4853]); +strings[1946] = str->add(strings[1946]); +strings[4853] = str->add(strings[4853]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4851]); +str->del(strings[4852]); +str->del(strings[4853]); +str->del(strings[4854]); +str->del(strings[4853]); +str->del(strings[1946]); +str->del(strings[4853]); +str->del(strings[1946]); +str->del(strings[4853]); +str->del(strings[1946]); +strings[4855] = str->add("e,action,mouse,move"); +strings[4856] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[4857] = str->add("icon_area"); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[4858] = str->add("base2"); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4855]); +str->del(strings[4856]); +str->del(strings[1740]); +str->del(strings[4857]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[4858]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[4859] = str->add("e,action,mouse,move"); +strings[4860] = str->add("e"); +strings[4861] = str->add("mouse,move"); +strings[4862] = str->add("base2"); +strings[4861] = str->add(strings[4861]); +strings[1946] = str->add(strings[1946]); +strings[4861] = str->add(strings[4861]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4859]); +str->del(strings[4860]); +str->del(strings[4861]); +str->del(strings[4862]); +str->del(strings[4861]); +str->del(strings[1946]); +str->del(strings[4861]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2148]); +strings[7] = str->add(strings[7]); +strings[2150] = str->add(strings[2150]); +strings[4863] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/61"); +strings[7] = str->add(strings[7]); +strings[2150] = str->add(strings[2150]); +strings[4864] = str->add("e,action,mouse,move"); +strings[4865] = str->add("e"); +strings[4866] = str->add("mouse,move"); +strings[4867] = str->add("base2"); +strings[4866] = str->add(strings[4866]); +strings[1946] = str->add(strings[1946]); +strings[4866] = str->add(strings[4866]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4864]); +str->del(strings[4865]); +str->del(strings[4866]); +str->del(strings[4867]); +str->del(strings[4866]); +str->del(strings[1946]); +str->del(strings[4866]); +str->del(strings[1946]); +strings[4868] = str->add("e,action,mouse,move"); +strings[4869] = str->add("e"); +strings[4870] = str->add("mouse,move"); +strings[4871] = str->add("base2"); +strings[4870] = str->add(strings[4870]); +strings[1946] = str->add(strings[1946]); +strings[4870] = str->add(strings[4870]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4868]); +str->del(strings[4869]); +str->del(strings[4870]); +str->del(strings[4871]); +str->del(strings[4870]); +str->del(strings[1946]); +str->del(strings[4870]); +str->del(strings[1946]); +strings[4872] = str->add("e,action,mouse,move"); +strings[4873] = str->add("e"); +strings[4874] = str->add("mouse,move"); +strings[4875] = str->add("base2"); +strings[4874] = str->add(strings[4874]); +strings[1946] = str->add(strings[1946]); +strings[4874] = str->add(strings[4874]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4872]); +str->del(strings[4873]); +str->del(strings[4874]); +str->del(strings[4875]); +str->del(strings[4874]); +str->del(strings[1946]); +str->del(strings[4874]); +str->del(strings[1946]); +strings[4876] = str->add("e,action,mouse,move"); +strings[4877] = str->add("e"); +strings[4878] = str->add("mouse,move"); +strings[4879] = str->add("base2"); +strings[4878] = str->add(strings[4878]); +strings[1946] = str->add(strings[1946]); +strings[4878] = str->add(strings[4878]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4876]); +str->del(strings[4877]); +str->del(strings[4878]); +str->del(strings[4879]); +str->del(strings[4878]); +str->del(strings[1946]); +str->del(strings[4878]); +str->del(strings[1946]); +strings[4880] = str->add("program,start"); +strings[4881] = str->add("go_active26"); +strings[1932] = str->add(strings[1932]); +strings[4881] = str->add(strings[4881]); +strings[4880] = str->add(strings[4880]); +strings[4882] = str->add("go_activeb26"); +strings[4880] = str->add(strings[4880]); +strings[4883] = str->add("go_active4"); +strings[1932] = str->add(strings[1932]); +strings[4883] = str->add(strings[4883]); +strings[4880] = str->add(strings[4880]); +strings[4884] = str->add("go_activeb4"); +str->del(strings[4880]); +str->del(strings[4881]); +str->del(strings[1932]); +str->del(strings[4881]); +str->del(strings[4880]); +str->del(strings[4882]); +str->del(strings[4880]); +str->del(strings[4883]); +str->del(strings[1932]); +str->del(strings[4883]); +str->del(strings[4880]); +str->del(strings[4884]); +strings[4885] = str->add("e,action,mouse,move"); +strings[4886] = str->add("e"); +strings[4887] = str->add("mouse,move"); +strings[4888] = str->add("base2"); +strings[4887] = str->add(strings[4887]); +strings[1946] = str->add(strings[1946]); +strings[4887] = str->add(strings[4887]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4885]); +str->del(strings[4886]); +str->del(strings[4887]); +str->del(strings[4888]); +str->del(strings[4887]); +str->del(strings[1946]); +str->del(strings[4887]); +str->del(strings[1946]); +strings[4889] = str->add("e,action,mouse,move"); +strings[4890] = str->add("e"); +strings[4891] = str->add("mouse,move"); +strings[4892] = str->add("base2"); +strings[4891] = str->add(strings[4891]); +strings[1946] = str->add(strings[1946]); +strings[4891] = str->add(strings[4891]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4889]); +str->del(strings[4890]); +str->del(strings[4891]); +str->del(strings[4892]); +str->del(strings[4891]); +str->del(strings[1946]); +str->del(strings[4891]); +str->del(strings[1946]); +strings[4893] = str->add("e,action,mouse,move"); +strings[4894] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[4895] = str->add("base2"); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[377] = str->add(strings[377]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4893]); +str->del(strings[4894]); +str->del(strings[1740]); +str->del(strings[4895]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[377]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[4896] = str->add("e,action,mouse,move"); +strings[4897] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[377] = str->add(strings[377]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4896]); +str->del(strings[4897]); +str->del(strings[1740]); +str->del(strings[377]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +strings[4898] = str->add("e,action,mouse,move"); +strings[4899] = str->add("e"); +str->del(strings[4898]); +str->del(strings[4899]); +strings[4900] = str->add("e,action,mouse,move"); +strings[4901] = str->add("e"); +str->del(strings[4900]); +str->del(strings[4901]); +strings[4902] = str->add("e,action,mouse,move"); +strings[4903] = str->add("e"); +strings[1737] = str->add(strings[1737]); +strings[377] = str->add(strings[377]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4902]); +str->del(strings[4903]); +str->del(strings[1737]); +str->del(strings[377]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[4904] = str->add("e,action,mouse,move"); +strings[4905] = str->add("e"); +strings[4906] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4906] = str->add(strings[4906]); +strings[1946] = str->add(strings[1946]); +strings[4906] = str->add(strings[4906]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4904]); +str->del(strings[4905]); +str->del(strings[4906]); +str->del(strings[377]); +str->del(strings[4906]); +str->del(strings[1946]); +str->del(strings[4906]); +str->del(strings[1946]); +strings[4907] = str->add("e,action,mouse,move"); +strings[4908] = str->add("e"); +strings[4909] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4909] = str->add(strings[4909]); +strings[1946] = str->add(strings[1946]); +strings[4909] = str->add(strings[4909]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4907]); +str->del(strings[4908]); +str->del(strings[4909]); +str->del(strings[377]); +str->del(strings[4909]); +str->del(strings[1946]); +str->del(strings[4909]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[2150]); +strings[7] = str->add(strings[7]); +strings[1966] = str->add(strings[1966]); +strings[4910] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/62"); +strings[7] = str->add(strings[7]); +strings[1966] = str->add(strings[1966]); +strings[4911] = str->add("e,action,mouse,move"); +strings[4912] = str->add("e"); +strings[4913] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4913] = str->add(strings[4913]); +strings[1946] = str->add(strings[1946]); +strings[4913] = str->add(strings[4913]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4911]); +str->del(strings[4912]); +str->del(strings[4913]); +str->del(strings[377]); +str->del(strings[4913]); +str->del(strings[1946]); +str->del(strings[4913]); +str->del(strings[1946]); +strings[4914] = str->add("e,action,mouse,move"); +strings[4915] = str->add("e"); +strings[4916] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4916] = str->add(strings[4916]); +strings[1946] = str->add(strings[1946]); +strings[4916] = str->add(strings[4916]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4914]); +str->del(strings[4915]); +str->del(strings[4916]); +str->del(strings[377]); +str->del(strings[4916]); +str->del(strings[1946]); +str->del(strings[4916]); +str->del(strings[1946]); +strings[4917] = str->add("e,action,mouse,move"); +strings[4918] = str->add("e"); +strings[4919] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4919] = str->add(strings[4919]); +strings[1946] = str->add(strings[1946]); +strings[4919] = str->add(strings[4919]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4917]); +str->del(strings[4918]); +str->del(strings[4919]); +str->del(strings[377]); +str->del(strings[4919]); +str->del(strings[1946]); +str->del(strings[4919]); +str->del(strings[1946]); +strings[4920] = str->add("e,action,mouse,move"); +strings[4921] = str->add("e"); +strings[4922] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4922] = str->add(strings[4922]); +strings[1946] = str->add(strings[1946]); +strings[4922] = str->add(strings[4922]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4920]); +str->del(strings[4921]); +str->del(strings[4922]); +str->del(strings[377]); +str->del(strings[4922]); +str->del(strings[1946]); +str->del(strings[4922]); +str->del(strings[1946]); +strings[1932] = str->add(strings[1932]); +strings[4923] = str->add("go_activeb28"); +strings[4924] = str->add("program,start"); +strings[4925] = str->add("go_activec28"); +strings[1932] = str->add(strings[1932]); +strings[4926] = str->add("go_activeb2"); +strings[4924] = str->add(strings[4924]); +strings[4927] = str->add("go_activec2"); +str->del(strings[1932]); +str->del(strings[4923]); +str->del(strings[4924]); +str->del(strings[4925]); +str->del(strings[1932]); +str->del(strings[4926]); +str->del(strings[4924]); +str->del(strings[4927]); +str->del(strings[7]); +str->del(strings[1966]); +strings[7] = str->add(strings[7]); +strings[1964] = str->add(strings[1964]); +strings[4928] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/63"); +strings[7] = str->add(strings[7]); +strings[1964] = str->add(strings[1964]); +strings[4929] = str->add("e,action,mouse,move"); +strings[4930] = str->add("e"); +strings[4931] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4931] = str->add(strings[4931]); +strings[1946] = str->add(strings[1946]); +strings[4931] = str->add(strings[4931]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4929]); +str->del(strings[4930]); +str->del(strings[4931]); +str->del(strings[377]); +str->del(strings[4931]); +str->del(strings[1946]); +str->del(strings[4931]); +str->del(strings[1946]); +strings[4932] = str->add("e,action,mouse,move"); +strings[4933] = str->add("e"); +strings[4934] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4934] = str->add(strings[4934]); +strings[1946] = str->add(strings[1946]); +strings[4934] = str->add(strings[4934]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4932]); +str->del(strings[4933]); +str->del(strings[4934]); +str->del(strings[377]); +str->del(strings[4934]); +str->del(strings[1946]); +str->del(strings[4934]); +str->del(strings[1946]); +strings[4935] = str->add("e,action,mouse,move"); +strings[4936] = str->add("e"); +strings[4937] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4937] = str->add(strings[4937]); +strings[1946] = str->add(strings[1946]); +strings[4937] = str->add(strings[4937]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4935]); +str->del(strings[4936]); +str->del(strings[4937]); +str->del(strings[377]); +str->del(strings[4937]); +str->del(strings[1946]); +str->del(strings[4937]); +str->del(strings[1946]); +strings[4938] = str->add("e,action,mouse,move"); +strings[4939] = str->add("e"); +strings[4940] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[4940] = str->add(strings[4940]); +strings[1946] = str->add(strings[1946]); +strings[4940] = str->add(strings[4940]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4938]); +str->del(strings[4939]); +str->del(strings[4940]); +str->del(strings[377]); +str->del(strings[4940]); +str->del(strings[1946]); +str->del(strings[4940]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[1964]); +strings[7] = str->add(strings[7]); +strings[1968] = str->add(strings[1968]); +strings[4941] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/64"); +strings[7] = str->add(strings[7]); +strings[1968] = str->add(strings[1968]); +strings[4942] = str->add("program,start"); +strings[4943] = str->add("go_active25"); +strings[1932] = str->add(strings[1932]); +strings[4943] = str->add(strings[4943]); +strings[4942] = str->add(strings[4942]); +strings[4944] = str->add("go_activeb25"); +strings[4942] = str->add(strings[4942]); +strings[4945] = str->add("go_active5"); +strings[1932] = str->add(strings[1932]); +strings[4945] = str->add(strings[4945]); +strings[4942] = str->add(strings[4942]); +strings[4946] = str->add("go_activeb5"); +str->del(strings[4942]); +str->del(strings[4943]); +str->del(strings[1932]); +str->del(strings[4943]); +str->del(strings[4942]); +str->del(strings[4944]); +str->del(strings[4942]); +str->del(strings[4945]); +str->del(strings[1932]); +str->del(strings[4945]); +str->del(strings[4942]); +str->del(strings[4946]); +str->del(strings[7]); +str->del(strings[1968]); +strings[7] = str->add(strings[7]); +strings[2058] = str->add(strings[2058]); +strings[4947] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/65"); +strings[7] = str->add(strings[7]); +strings[2058] = str->add(strings[2058]); +strings[4948] = str->add("e,action,mouse,move"); +strings[4949] = str->add("e"); +strings[4950] = str->add("e,action,mouse,down"); +strings[4949] = str->add(strings[4949]); +strings[167] = str->add(strings[167]); +strings[377] = str->add(strings[377]); +strings[4951] = str->add("Main"); +strings[66] = str->add(strings[66]); +strings[4952] = str->add("Favorite Applications"); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[2231] = str->add(strings[2231]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[2338] = str->add(strings[2338]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[4953] = str->add("Files"); +strings[469] = str->add(strings[469]); +strings[2693] = str->add(strings[2693]); +strings[4954] = str->add("Virtual"); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[4955] = str->add("Show/Hide All Windows"); +strings[1619] = str->add(strings[1619]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2552] = str->add(strings[2552]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[1712] = str->add(strings[1712]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[4956] = str->add("About"); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[1713] = str->add(strings[1713]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[1714] = str->add(strings[1714]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[4957] = str->add("Configuration"); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[1721] = str->add(strings[1721]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[4958] = str->add("resize"); +str->del(strings[4958]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[4959] = str->add("load"); +strings[4951] = str->add(strings[4951]); +strings[4960] = str->add("e,action,show,title"); +strings[4949] = str->add(strings[4949]); +str->del(strings[4959]); +strings[4961] = str->add("program,start"); +strings[4962] = str->add("on"); +strings[1932] = str->add(strings[1932]); +strings[4962] = str->add(strings[4962]); +str->del(strings[4960]); +str->del(strings[4949]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[4951] = str->add(strings[4951]); +strings[4951] = str->add(strings[4951]); +strings[4951] = str->add(strings[4951]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2871] = str->add(strings[2871]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add("resize"); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[4952] = str->add(strings[4952]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4952] = str->add(strings[4952]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2890] = str->add(strings[2890]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[2231] = str->add(strings[2231]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2892] = str->add(strings[2892]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[2338] = str->add(strings[2338]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2338] = str->add(strings[2338]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2693] = str->add(strings[2693]); +strings[2693] = str->add(strings[2693]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[4965] = str->add("images/449"); +strings[4966] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/449"); +strings[469] = str->add(strings[469]); +strings[4965] = str->add(strings[4965]); +strings[469] = str->add(strings[469]); +strings[4967] = str->add("images/450"); +strings[4968] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/450"); +strings[469] = str->add(strings[469]); +strings[4967] = str->add(strings[4967]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[4953] = str->add(strings[4953]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4953] = str->add(strings[4953]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2894] = str->add(strings[2894]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[1619] = str->add(strings[1619]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[2552] = str->add(strings[2552]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[1712] = str->add(strings[1712]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[4957] = str->add(strings[4957]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4957] = str->add(strings[4957]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[4963] = str->add(strings[4963]); +strings[469] = str->add(strings[469]); +strings[2904] = str->add(strings[2904]); +strings[1841] = str->add(strings[1841]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[4963] = str->add(strings[4963]); +strings[1721] = str->add(strings[1721]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[4963] = str->add(strings[4963]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4964] = str->add(strings[4964]); +strings[4969] = str->add("e,state,focused"); +strings[4949] = str->add(strings[4949]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4948]); +str->del(strings[4949]); +str->del(strings[4950]); +str->del(strings[4949]); +str->del(strings[167]); +str->del(strings[377]); +str->del(strings[4961]); +str->del(strings[4962]); +str->del(strings[1932]); +str->del(strings[4962]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4963]); +str->del(strings[1841]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +str->del(strings[4964]); +strings[4970] = str->add("program,start"); +strings[4971] = str->add("on"); +str->del(strings[4969]); +str->del(strings[4949]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[4970]); +str->del(strings[4971]); +strings[4972] = str->add("e,action,mouse,move"); +strings[4973] = str->add("e"); +strings[4972] = str->add(strings[4972]); +strings[4973] = str->add(strings[4973]); +strings[169] = str->add(strings[169]); +strings[377] = str->add(strings[377]); +strings[159] = str->add(strings[159]); +strings[377] = str->add(strings[377]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[377] = str->add(strings[377]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +str->del(strings[4972]); +str->del(strings[4973]); +str->del(strings[4972]); +str->del(strings[4973]); +str->del(strings[169]); +str->del(strings[377]); +str->del(strings[159]); +str->del(strings[377]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[377]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[4951]); +strings[4951] = str->add(strings[4951]); +str->del(strings[4951]); +strings[4951] = str->add(strings[4951]); +strings[4974] = str->add("resize"); +strings[4952] = str->add(strings[4952]); +strings[4952] = str->add(strings[4952]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[4974] = str->add(strings[4974]); +strings[2231] = str->add(strings[2231]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[4974] = str->add(strings[4974]); +strings[2338] = str->add(strings[2338]); +strings[2338] = str->add(strings[2338]); +strings[4974] = str->add(strings[4974]); +strings[4953] = str->add(strings[4953]); +strings[4953] = str->add(strings[4953]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[4974] = str->add(strings[4974]); +strings[1619] = str->add(strings[1619]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[4974] = str->add(strings[4974]); +strings[2552] = str->add(strings[2552]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[4974] = str->add(strings[4974]); +strings[1712] = str->add(strings[1712]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[4974] = str->add(strings[4974]); +strings[4957] = str->add(strings[4957]); +strings[4957] = str->add(strings[4957]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[4974] = str->add(strings[4974]); +strings[1721] = str->add(strings[1721]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[4975] = str->add("font"); +strings[4976] = str->add("font_fallbacks"); +strings[4977] = str->add("font_size"); +strings[4978] = str->add("font_source"); +strings[4979] = str->add("color"); +strings[4980] = str->add("underline_color"); +strings[4981] = str->add("underline2_color"); +strings[4982] = str->add("outline_color"); +strings[4983] = str->add("shadow_color"); +strings[4984] = str->add("glow_color"); +strings[4985] = str->add("glow2_color"); +strings[4986] = str->add("backing_color"); +strings[4987] = str->add("strikethrough_color"); +strings[4988] = str->add("align"); +strings[4989] = str->add("valign"); +strings[4990] = str->add("wrap"); +strings[4991] = str->add("left_margin"); +strings[4992] = str->add("right_margin"); +strings[4993] = str->add("underline"); +strings[4994] = str->add("strikethrough"); +strings[4995] = str->add("backing"); +strings[4996] = str->add("style"); +strings[4997] = str->add("tabstops"); +strings[4988] = str->add(strings[4988]); +strings[4998] = str->add("center"); +str->del(strings[4988]); +str->del(strings[4998]); +strings[4979] = str->add(strings[4979]); +strings[4999] = str->add("#000"); +str->del(strings[4979]); +str->del(strings[4999]); +strings[4996] = str->add(strings[4996]); +strings[5000] = str->add("shadow"); +str->del(strings[4996]); +str->del(strings[5000]); +strings[4983] = str->add(strings[4983]); +strings[5001] = str->add("#ffffff80"); +str->del(strings[4983]); +str->del(strings[5001]); +strings[4990] = str->add(strings[4990]); +strings[5002] = str->add("word"); +str->del(strings[4990]); +str->del(strings[5002]); +strings[4978] = str->add(strings[4978]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[4978]); +str->del(strings[469]); +strings[4977] = str->add(strings[4977]); +strings[5003] = str->add("10.000000"); +str->del(strings[4977]); +str->del(strings[5003]); +strings[4975] = str->add(strings[4975]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[4975]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4996] = str->add(strings[4996]); +strings[5004] = str->add("glow"); +str->del(strings[4996]); +str->del(strings[5004]); +strings[4979] = str->add(strings[4979]); +strings[5005] = str->add("#fff"); +str->del(strings[4979]); +str->del(strings[5005]); +strings[4985] = str->add(strings[4985]); +strings[5006] = str->add("#fe87"); +str->del(strings[4985]); +str->del(strings[5006]); +strings[4984] = str->add(strings[4984]); +strings[5007] = str->add("#fa14"); +str->del(strings[4984]); +str->del(strings[5007]); +strings[4975] = str->add(strings[4975]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4975]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[4996] = str->add(strings[4996]); +strings[5008] = str->add("glow"); +str->del(strings[4996]); +str->del(strings[5008]); +strings[4979] = str->add(strings[4979]); +strings[5009] = str->add("#fff"); +str->del(strings[4979]); +str->del(strings[5009]); +strings[4985] = str->add(strings[4985]); +strings[5010] = str->add("#fe87"); +str->del(strings[4985]); +str->del(strings[5010]); +strings[4984] = str->add(strings[4984]); +strings[5011] = str->add("#fa14"); +str->del(strings[4984]); +str->del(strings[5011]); +strings[4975] = str->add(strings[4975]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[4975]); +str->del(strings[471]); +str->del(strings[4975]); +str->del(strings[4976]); +str->del(strings[4977]); +str->del(strings[4978]); +str->del(strings[4979]); +str->del(strings[4980]); +str->del(strings[4981]); +str->del(strings[4982]); +str->del(strings[4983]); +str->del(strings[4984]); +str->del(strings[4985]); +str->del(strings[4986]); +str->del(strings[4987]); +str->del(strings[4988]); +str->del(strings[4989]); +str->del(strings[4990]); +str->del(strings[4991]); +str->del(strings[4992]); +str->del(strings[4993]); +str->del(strings[4994]); +str->del(strings[4995]); +str->del(strings[4996]); +str->del(strings[4997]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[5012] = str->add("font"); +strings[5013] = str->add("font_fallbacks"); +strings[5014] = str->add("font_size"); +strings[5015] = str->add("font_source"); +strings[5016] = str->add("color"); +strings[5017] = str->add("underline_color"); +strings[5018] = str->add("underline2_color"); +strings[5019] = str->add("outline_color"); +strings[5020] = str->add("shadow_color"); +strings[5021] = str->add("glow_color"); +strings[5022] = str->add("glow2_color"); +strings[5023] = str->add("backing_color"); +strings[5024] = str->add("strikethrough_color"); +strings[5025] = str->add("align"); +strings[5026] = str->add("valign"); +strings[5027] = str->add("wrap"); +strings[5028] = str->add("left_margin"); +strings[5029] = str->add("right_margin"); +strings[5030] = str->add("underline"); +strings[5031] = str->add("strikethrough"); +strings[5032] = str->add("backing"); +strings[5033] = str->add("style"); +strings[5034] = str->add("tabstops"); +strings[5025] = str->add(strings[5025]); +strings[5035] = str->add("center"); +str->del(strings[5025]); +str->del(strings[5035]); +strings[5016] = str->add(strings[5016]); +strings[5036] = str->add("#000"); +str->del(strings[5016]); +str->del(strings[5036]); +strings[5033] = str->add(strings[5033]); +strings[5037] = str->add("shadow"); +str->del(strings[5033]); +str->del(strings[5037]); +strings[5020] = str->add(strings[5020]); +strings[5038] = str->add("#ffffff80"); +str->del(strings[5020]); +str->del(strings[5038]); +strings[5027] = str->add(strings[5027]); +strings[5039] = str->add("word"); +str->del(strings[5027]); +str->del(strings[5039]); +strings[5015] = str->add(strings[5015]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5015]); +str->del(strings[469]); +strings[5014] = str->add(strings[5014]); +strings[5040] = str->add("10.000000"); +str->del(strings[5014]); +str->del(strings[5040]); +strings[5012] = str->add(strings[5012]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5012]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5033] = str->add(strings[5033]); +strings[5041] = str->add("soft_shadow"); +str->del(strings[5033]); +str->del(strings[5041]); +strings[5016] = str->add(strings[5016]); +strings[5042] = str->add("#fff"); +str->del(strings[5016]); +str->del(strings[5042]); +strings[5020] = str->add(strings[5020]); +strings[5043] = str->add("#00000020"); +str->del(strings[5020]); +str->del(strings[5043]); +strings[5014] = str->add(strings[5014]); +strings[5044] = str->add("12.000000"); +str->del(strings[5014]); +str->del(strings[5044]); +strings[5012] = str->add(strings[5012]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5012]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[5012]); +str->del(strings[5013]); +str->del(strings[5014]); +str->del(strings[5015]); +str->del(strings[5016]); +str->del(strings[5017]); +str->del(strings[5018]); +str->del(strings[5019]); +str->del(strings[5020]); +str->del(strings[5021]); +str->del(strings[5022]); +str->del(strings[5023]); +str->del(strings[5024]); +str->del(strings[5025]); +str->del(strings[5026]); +str->del(strings[5027]); +str->del(strings[5028]); +str->del(strings[5029]); +str->del(strings[5030]); +str->del(strings[5031]); +str->del(strings[5032]); +str->del(strings[5033]); +str->del(strings[5034]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +str->del(strings[4974]); +strings[5045] = str->add("font"); +strings[5046] = str->add("font_fallbacks"); +strings[5047] = str->add("font_size"); +strings[5048] = str->add("font_source"); +strings[5049] = str->add("color"); +strings[5050] = str->add("underline_color"); +strings[5051] = str->add("underline2_color"); +strings[5052] = str->add("outline_color"); +strings[5053] = str->add("shadow_color"); +strings[5054] = str->add("glow_color"); +strings[5055] = str->add("glow2_color"); +strings[5056] = str->add("backing_color"); +strings[5057] = str->add("strikethrough_color"); +strings[5058] = str->add("align"); +strings[5059] = str->add("valign"); +strings[5060] = str->add("wrap"); +strings[5061] = str->add("left_margin"); +strings[5062] = str->add("right_margin"); +strings[5063] = str->add("underline"); +strings[5064] = str->add("strikethrough"); +strings[5065] = str->add("backing"); +strings[5066] = str->add("style"); +strings[5067] = str->add("tabstops"); +strings[5058] = str->add(strings[5058]); +strings[5068] = str->add("center"); +str->del(strings[5058]); +str->del(strings[5068]); +strings[5049] = str->add(strings[5049]); +strings[5069] = str->add("#000"); +str->del(strings[5049]); +str->del(strings[5069]); +strings[5066] = str->add(strings[5066]); +strings[5070] = str->add("shadow"); +str->del(strings[5066]); +str->del(strings[5070]); +strings[5053] = str->add(strings[5053]); +strings[5071] = str->add("#ffffff80"); +str->del(strings[5053]); +str->del(strings[5071]); +strings[5060] = str->add(strings[5060]); +strings[5072] = str->add("word"); +str->del(strings[5060]); +str->del(strings[5072]); +strings[5048] = str->add(strings[5048]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5048]); +str->del(strings[469]); +strings[5047] = str->add(strings[5047]); +strings[5073] = str->add("10.000000"); +str->del(strings[5047]); +str->del(strings[5073]); +strings[5045] = str->add(strings[5045]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5045]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5066] = str->add(strings[5066]); +strings[5074] = str->add("soft_shadow"); +str->del(strings[5066]); +str->del(strings[5074]); +strings[5049] = str->add(strings[5049]); +strings[5075] = str->add("#fff"); +str->del(strings[5049]); +str->del(strings[5075]); +strings[5053] = str->add(strings[5053]); +strings[5076] = str->add("#00000020"); +str->del(strings[5053]); +str->del(strings[5076]); +strings[5047] = str->add(strings[5047]); +strings[5077] = str->add("12.000000"); +str->del(strings[5047]); +str->del(strings[5077]); +strings[5045] = str->add(strings[5045]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5045]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5045]); +str->del(strings[5046]); +str->del(strings[5047]); +str->del(strings[5048]); +str->del(strings[5049]); +str->del(strings[5050]); +str->del(strings[5051]); +str->del(strings[5052]); +str->del(strings[5053]); +str->del(strings[5054]); +str->del(strings[5055]); +str->del(strings[5056]); +str->del(strings[5057]); +str->del(strings[5058]); +str->del(strings[5059]); +str->del(strings[5060]); +str->del(strings[5061]); +str->del(strings[5062]); +str->del(strings[5063]); +str->del(strings[5064]); +str->del(strings[5065]); +str->del(strings[5066]); +str->del(strings[5067]); +strings[1932] = str->add(strings[1932]); +strings[5078] = str->add("go_activeb27"); +strings[5079] = str->add("program,start"); +strings[5080] = str->add("go_activec27"); +strings[1932] = str->add(strings[1932]); +strings[5081] = str->add("go_activeb3"); +strings[5079] = str->add(strings[5079]); +strings[5082] = str->add("go_activec3"); +str->del(strings[1932]); +str->del(strings[5078]); +str->del(strings[5079]); +str->del(strings[5080]); +str->del(strings[1932]); +str->del(strings[5081]); +str->del(strings[5079]); +str->del(strings[5082]); +str->del(strings[7]); +str->del(strings[2058]); +strings[7] = str->add(strings[7]); +strings[1970] = str->add(strings[1970]); +strings[5083] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/66"); +strings[7] = str->add(strings[7]); +strings[1970] = str->add(strings[1970]); +strings[5084] = str->add("e,action,mouse,move"); +strings[5085] = str->add("e"); +strings[5086] = str->add("e,action,mouse,up"); +strings[5085] = str->add(strings[5085]); +str->del(strings[5084]); +str->del(strings[5085]); +str->del(strings[5086]); +str->del(strings[5085]); +str->del(strings[7]); +str->del(strings[1970]); +strings[7] = str->add(strings[7]); +strings[1869] = str->add(strings[1869]); +strings[1932] = str->add(strings[1932]); +strings[1840] = str->add(strings[1840]); +strings[5087] = str->add("program,start"); +strings[1844] = str->add(strings[1844]); +strings[1932] = str->add(strings[1932]); +strings[1844] = str->add(strings[1844]); +strings[5087] = str->add(strings[5087]); +strings[1840] = str->add(strings[1840]); +strings[1932] = str->add(strings[1932]); +strings[1851] = str->add(strings[1851]); +strings[5087] = str->add(strings[5087]); +strings[1851] = str->add(strings[1851]); +strings[5087] = str->add(strings[5087]); +strings[5088] = str->add("go_active24"); +strings[1932] = str->add(strings[1932]); +strings[5088] = str->add(strings[5088]); +strings[5087] = str->add(strings[5087]); +strings[5089] = str->add("go_activeb24"); +strings[5087] = str->add(strings[5087]); +strings[5090] = str->add("go_active6"); +strings[1932] = str->add(strings[1932]); +strings[5090] = str->add(strings[5090]); +strings[5087] = str->add(strings[5087]); +strings[5091] = str->add("go_activeb6"); +str->del(strings[1932]); +str->del(strings[1840]); +str->del(strings[5087]); +str->del(strings[1844]); +str->del(strings[1932]); +str->del(strings[1844]); +str->del(strings[5087]); +str->del(strings[1840]); +str->del(strings[1932]); +str->del(strings[1851]); +str->del(strings[5087]); +str->del(strings[1851]); +str->del(strings[5087]); +str->del(strings[5088]); +str->del(strings[1932]); +str->del(strings[5088]); +str->del(strings[5087]); +str->del(strings[5089]); +str->del(strings[5087]); +str->del(strings[5090]); +str->del(strings[1932]); +str->del(strings[5090]); +str->del(strings[5087]); +str->del(strings[5091]); +str->del(strings[7]); +str->del(strings[1869]); +strings[7] = str->add(strings[7]); +strings[3251] = str->add(strings[3251]); +strings[1932] = str->add(strings[1932]); +strings[5092] = str->add("go_activeb26"); +strings[5093] = str->add("program,start"); +strings[5094] = str->add("go_activec26"); +strings[1932] = str->add(strings[1932]); +strings[5095] = str->add("go_activeb4"); +strings[5093] = str->add(strings[5093]); +strings[5096] = str->add("go_activec4"); +strings[1932] = str->add(strings[1932]); +strings[5097] = str->add("on"); +str->del(strings[1932]); +str->del(strings[5092]); +str->del(strings[5093]); +str->del(strings[5094]); +str->del(strings[1932]); +str->del(strings[5095]); +str->del(strings[5093]); +str->del(strings[5096]); +str->del(strings[1932]); +str->del(strings[5097]); +strings[5098] = str->add("e,action,mouse,move"); +strings[5099] = str->add("e"); +str->del(strings[5098]); +str->del(strings[5099]); +strings[5100] = str->add("e,action,mouse,move"); +strings[5101] = str->add("e"); +str->del(strings[5100]); +str->del(strings[5101]); +strings[5102] = str->add("e,action,mouse,move"); +strings[5103] = str->add("e"); +str->del(strings[5102]); +str->del(strings[5103]); +strings[5104] = str->add("e,action,mouse,move"); +strings[5105] = str->add("e"); +str->del(strings[5104]); +str->del(strings[5105]); +str->del(strings[7]); +str->del(strings[3251]); +strings[7] = str->add(strings[7]); +strings[3254] = str->add(strings[3254]); +strings[5106] = str->add("e,action,mouse,move"); +strings[5107] = str->add("e"); +str->del(strings[5106]); +str->del(strings[5107]); +strings[5108] = str->add("e,action,mouse,move"); +strings[5109] = str->add("e"); +str->del(strings[5108]); +str->del(strings[5109]); +strings[5110] = str->add("e,action,mouse,move"); +strings[5111] = str->add("e"); +str->del(strings[5110]); +str->del(strings[5111]); +strings[5112] = str->add("e,action,mouse,move"); +strings[5113] = str->add("e"); +str->del(strings[5112]); +str->del(strings[5113]); +strings[5114] = str->add("e,action,mouse,move"); +strings[5115] = str->add("e"); +str->del(strings[5114]); +str->del(strings[5115]); +strings[5116] = str->add("e,action,mouse,move"); +strings[5117] = str->add("e"); +str->del(strings[5116]); +str->del(strings[5117]); +strings[5118] = str->add("e,action,mouse,move"); +strings[5119] = str->add("e"); +str->del(strings[5118]); +str->del(strings[5119]); +strings[5120] = str->add("e,action,mouse,move"); +strings[5121] = str->add("e"); +str->del(strings[5120]); +str->del(strings[5121]); +strings[5122] = str->add("program,start"); +strings[5123] = str->add("go_active23"); +strings[1932] = str->add(strings[1932]); +strings[5123] = str->add(strings[5123]); +strings[5122] = str->add(strings[5122]); +strings[5124] = str->add("go_activeb23"); +strings[5122] = str->add(strings[5122]); +strings[5125] = str->add("go_active7"); +strings[1932] = str->add(strings[1932]); +strings[5125] = str->add(strings[5125]); +strings[5122] = str->add(strings[5122]); +strings[5126] = str->add("go_activeb7"); +str->del(strings[5122]); +str->del(strings[5123]); +str->del(strings[1932]); +str->del(strings[5123]); +str->del(strings[5122]); +str->del(strings[5124]); +str->del(strings[5122]); +str->del(strings[5125]); +str->del(strings[1932]); +str->del(strings[5125]); +str->del(strings[5122]); +str->del(strings[5126]); +strings[5127] = str->add("e,action,mouse,move"); +strings[5128] = str->add("e"); +str->del(strings[5127]); +str->del(strings[5128]); +strings[5129] = str->add("e,action,mouse,move"); +strings[5130] = str->add("e"); +str->del(strings[5129]); +str->del(strings[5130]); +strings[5131] = str->add("e,action,mouse,move"); +strings[5132] = str->add("e"); +str->del(strings[5131]); +str->del(strings[5132]); +strings[5133] = str->add("e,action,mouse,move"); +strings[5134] = str->add("e"); +str->del(strings[5133]); +str->del(strings[5134]); +str->del(strings[7]); +str->del(strings[3254]); +strings[7] = str->add(strings[7]); +strings[2206] = str->add(strings[2206]); +strings[5135] = str->add("e,action,mouse,move"); +strings[5136] = str->add("e"); +str->del(strings[5135]); +str->del(strings[5136]); +strings[5137] = str->add("e,action,mouse,move"); +strings[5138] = str->add("e"); +str->del(strings[5137]); +str->del(strings[5138]); +strings[5139] = str->add("e,action,mouse,move"); +strings[5140] = str->add("e"); +str->del(strings[5139]); +str->del(strings[5140]); +strings[5141] = str->add("e,action,mouse,move"); +strings[5142] = str->add("e"); +str->del(strings[5141]); +str->del(strings[5142]); +str->del(strings[7]); +str->del(strings[2206]); +strings[7] = str->add(strings[7]); +strings[2213] = str->add(strings[2213]); +strings[5143] = str->add("e,action,mouse,move"); +strings[5144] = str->add("e"); +strings[5145] = str->add("e,state,selected"); +strings[5144] = str->add(strings[5144]); +strings[5145] = str->add(strings[5145]); +strings[5144] = str->add(strings[5144]); +strings[5145] = str->add(strings[5145]); +strings[5144] = str->add(strings[5144]); +strings[5145] = str->add(strings[5145]); +strings[5144] = str->add(strings[5144]); +strings[5145] = str->add(strings[5145]); +strings[5144] = str->add(strings[5144]); +strings[5145] = str->add(strings[5145]); +strings[5144] = str->add(strings[5144]); +strings[5146] = str->add("Lock Screen"); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[1726] = str->add(strings[1726]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[5147] = str->add("Hibernate"); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[1724] = str->add(strings[1724]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[1722] = str->add(strings[1722]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[5148] = str->add("Logout"); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +str->del(strings[5143]); +str->del(strings[5144]); +strings[5149] = str->add("program,start"); +strings[5150] = str->add("sel"); +str->del(strings[5145]); +str->del(strings[5144]); +str->del(strings[5145]); +str->del(strings[5144]); +strings[5149] = str->add(strings[5149]); +strings[5150] = str->add(strings[5150]); +str->del(strings[5145]); +str->del(strings[5144]); +strings[5149] = str->add(strings[5149]); +strings[5150] = str->add(strings[5150]); +strings[1932] = str->add(strings[1932]); +strings[5150] = str->add(strings[5150]); +str->del(strings[5145]); +str->del(strings[5144]); +str->del(strings[5145]); +str->del(strings[5144]); +str->del(strings[5145]); +str->del(strings[5144]); +str->del(strings[5149]); +str->del(strings[5150]); +str->del(strings[5149]); +str->del(strings[5150]); +str->del(strings[5149]); +str->del(strings[5150]); +str->del(strings[1932]); +str->del(strings[5150]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[5151] = str->add("resize"); +str->del(strings[5151]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3008] = str->add(strings[3008]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add("resize"); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[5146] = str->add(strings[5146]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[5146] = str->add(strings[5146]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3011] = str->add(strings[3011]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[1726] = str->add(strings[1726]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1726] = str->add(strings[1726]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3013] = str->add(strings[3013]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[5147] = str->add(strings[5147]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[5147] = str->add(strings[5147]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3015] = str->add(strings[3015]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[1724] = str->add(strings[1724]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1724] = str->add(strings[1724]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3017] = str->add(strings[3017]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[1722] = str->add(strings[1722]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5152] = str->add(strings[5152]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +strings[5152] = str->add(strings[5152]); +strings[469] = str->add(strings[469]); +strings[3019] = str->add(strings[3019]); +strings[1841] = str->add(strings[1841]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5152] = str->add(strings[5152]); +strings[5148] = str->add(strings[5148]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[5148] = str->add(strings[5148]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +strings[5153] = str->add(strings[5153]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[5153] = str->add(strings[5153]); +strings[5146] = str->add(strings[5146]); +strings[5146] = str->add(strings[5146]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[5153] = str->add(strings[5153]); +strings[1726] = str->add(strings[1726]); +strings[1726] = str->add(strings[1726]); +strings[5153] = str->add(strings[5153]); +strings[5147] = str->add(strings[5147]); +strings[5147] = str->add(strings[5147]); +strings[5153] = str->add(strings[5153]); +strings[1724] = str->add(strings[1724]); +strings[1724] = str->add(strings[1724]); +strings[5153] = str->add(strings[5153]); +strings[1722] = str->add(strings[1722]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[5153] = str->add(strings[5153]); +strings[5148] = str->add(strings[5148]); +strings[5148] = str->add(strings[5148]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[5154] = str->add("font"); +strings[5155] = str->add("font_fallbacks"); +strings[5156] = str->add("font_size"); +strings[5157] = str->add("font_source"); +strings[5158] = str->add("color"); +strings[5159] = str->add("underline_color"); +strings[5160] = str->add("underline2_color"); +strings[5161] = str->add("outline_color"); +strings[5162] = str->add("shadow_color"); +strings[5163] = str->add("glow_color"); +strings[5164] = str->add("glow2_color"); +strings[5165] = str->add("backing_color"); +strings[5166] = str->add("strikethrough_color"); +strings[5167] = str->add("align"); +strings[5168] = str->add("valign"); +strings[5169] = str->add("wrap"); +strings[5170] = str->add("left_margin"); +strings[5171] = str->add("right_margin"); +strings[5172] = str->add("underline"); +strings[5173] = str->add("strikethrough"); +strings[5174] = str->add("backing"); +strings[5175] = str->add("style"); +strings[5176] = str->add("tabstops"); +strings[5167] = str->add(strings[5167]); +strings[5177] = str->add("center"); +str->del(strings[5167]); +str->del(strings[5177]); +strings[5158] = str->add(strings[5158]); +strings[5178] = str->add("#000"); +str->del(strings[5158]); +str->del(strings[5178]); +strings[5175] = str->add(strings[5175]); +strings[5179] = str->add("shadow"); +str->del(strings[5175]); +str->del(strings[5179]); +strings[5162] = str->add(strings[5162]); +strings[5180] = str->add("#ffffff80"); +str->del(strings[5162]); +str->del(strings[5180]); +strings[5169] = str->add(strings[5169]); +strings[5181] = str->add("word"); +str->del(strings[5169]); +str->del(strings[5181]); +strings[5157] = str->add(strings[5157]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5157]); +str->del(strings[469]); +strings[5156] = str->add(strings[5156]); +strings[5182] = str->add("10.000000"); +str->del(strings[5156]); +str->del(strings[5182]); +strings[5154] = str->add(strings[5154]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5154]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5175] = str->add(strings[5175]); +strings[5183] = str->add("glow"); +str->del(strings[5175]); +str->del(strings[5183]); +strings[5158] = str->add(strings[5158]); +strings[5184] = str->add("#fff"); +str->del(strings[5158]); +str->del(strings[5184]); +strings[5164] = str->add(strings[5164]); +strings[5185] = str->add("#fe87"); +str->del(strings[5164]); +str->del(strings[5185]); +strings[5163] = str->add(strings[5163]); +strings[5186] = str->add("#fa14"); +str->del(strings[5163]); +str->del(strings[5186]); +strings[5154] = str->add(strings[5154]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5154]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5175] = str->add(strings[5175]); +strings[5187] = str->add("glow"); +str->del(strings[5175]); +str->del(strings[5187]); +strings[5158] = str->add(strings[5158]); +strings[5188] = str->add("#fff"); +str->del(strings[5158]); +str->del(strings[5188]); +strings[5164] = str->add(strings[5164]); +strings[5189] = str->add("#fe87"); +str->del(strings[5164]); +str->del(strings[5189]); +strings[5163] = str->add(strings[5163]); +strings[5190] = str->add("#fa14"); +str->del(strings[5163]); +str->del(strings[5190]); +strings[5154] = str->add(strings[5154]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5154]); +str->del(strings[471]); +str->del(strings[5154]); +str->del(strings[5155]); +str->del(strings[5156]); +str->del(strings[5157]); +str->del(strings[5158]); +str->del(strings[5159]); +str->del(strings[5160]); +str->del(strings[5161]); +str->del(strings[5162]); +str->del(strings[5163]); +str->del(strings[5164]); +str->del(strings[5165]); +str->del(strings[5166]); +str->del(strings[5167]); +str->del(strings[5168]); +str->del(strings[5169]); +str->del(strings[5170]); +str->del(strings[5171]); +str->del(strings[5172]); +str->del(strings[5173]); +str->del(strings[5174]); +str->del(strings[5175]); +str->del(strings[5176]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[5191] = str->add("font"); +strings[5192] = str->add("font_fallbacks"); +strings[5193] = str->add("font_size"); +strings[5194] = str->add("font_source"); +strings[5195] = str->add("color"); +strings[5196] = str->add("underline_color"); +strings[5197] = str->add("underline2_color"); +strings[5198] = str->add("outline_color"); +strings[5199] = str->add("shadow_color"); +strings[5200] = str->add("glow_color"); +strings[5201] = str->add("glow2_color"); +strings[5202] = str->add("backing_color"); +strings[5203] = str->add("strikethrough_color"); +strings[5204] = str->add("align"); +strings[5205] = str->add("valign"); +strings[5206] = str->add("wrap"); +strings[5207] = str->add("left_margin"); +strings[5208] = str->add("right_margin"); +strings[5209] = str->add("underline"); +strings[5210] = str->add("strikethrough"); +strings[5211] = str->add("backing"); +strings[5212] = str->add("style"); +strings[5213] = str->add("tabstops"); +strings[5204] = str->add(strings[5204]); +strings[5214] = str->add("center"); +str->del(strings[5204]); +str->del(strings[5214]); +strings[5195] = str->add(strings[5195]); +strings[5215] = str->add("#000"); +str->del(strings[5195]); +str->del(strings[5215]); +strings[5212] = str->add(strings[5212]); +strings[5216] = str->add("shadow"); +str->del(strings[5212]); +str->del(strings[5216]); +strings[5199] = str->add(strings[5199]); +strings[5217] = str->add("#ffffff80"); +str->del(strings[5199]); +str->del(strings[5217]); +strings[5206] = str->add(strings[5206]); +strings[5218] = str->add("word"); +str->del(strings[5206]); +str->del(strings[5218]); +strings[5194] = str->add(strings[5194]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5194]); +str->del(strings[469]); +strings[5193] = str->add(strings[5193]); +strings[5219] = str->add("10.000000"); +str->del(strings[5193]); +str->del(strings[5219]); +strings[5191] = str->add(strings[5191]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5191]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5212] = str->add(strings[5212]); +strings[5220] = str->add("soft_shadow"); +str->del(strings[5212]); +str->del(strings[5220]); +strings[5195] = str->add(strings[5195]); +strings[5221] = str->add("#fff"); +str->del(strings[5195]); +str->del(strings[5221]); +strings[5199] = str->add(strings[5199]); +strings[5222] = str->add("#00000020"); +str->del(strings[5199]); +str->del(strings[5222]); +strings[5193] = str->add(strings[5193]); +strings[5223] = str->add("12.000000"); +str->del(strings[5193]); +str->del(strings[5223]); +strings[5191] = str->add(strings[5191]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5191]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[5191]); +str->del(strings[5192]); +str->del(strings[5193]); +str->del(strings[5194]); +str->del(strings[5195]); +str->del(strings[5196]); +str->del(strings[5197]); +str->del(strings[5198]); +str->del(strings[5199]); +str->del(strings[5200]); +str->del(strings[5201]); +str->del(strings[5202]); +str->del(strings[5203]); +str->del(strings[5204]); +str->del(strings[5205]); +str->del(strings[5206]); +str->del(strings[5207]); +str->del(strings[5208]); +str->del(strings[5209]); +str->del(strings[5210]); +str->del(strings[5211]); +str->del(strings[5212]); +str->del(strings[5213]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5152]); +str->del(strings[1841]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +str->del(strings[5153]); +strings[5224] = str->add("e,action,mouse,move"); +strings[5225] = str->add("e"); +str->del(strings[5224]); +str->del(strings[5225]); +strings[5226] = str->add("font"); +strings[5227] = str->add("font_fallbacks"); +strings[5228] = str->add("font_size"); +strings[5229] = str->add("font_source"); +strings[5230] = str->add("color"); +strings[5231] = str->add("underline_color"); +strings[5232] = str->add("underline2_color"); +strings[5233] = str->add("outline_color"); +strings[5234] = str->add("shadow_color"); +strings[5235] = str->add("glow_color"); +strings[5236] = str->add("glow2_color"); +strings[5237] = str->add("backing_color"); +strings[5238] = str->add("strikethrough_color"); +strings[5239] = str->add("align"); +strings[5240] = str->add("valign"); +strings[5241] = str->add("wrap"); +strings[5242] = str->add("left_margin"); +strings[5243] = str->add("right_margin"); +strings[5244] = str->add("underline"); +strings[5245] = str->add("strikethrough"); +strings[5246] = str->add("backing"); +strings[5247] = str->add("style"); +strings[5248] = str->add("tabstops"); +strings[5239] = str->add(strings[5239]); +strings[5249] = str->add("center"); +str->del(strings[5239]); +str->del(strings[5249]); +strings[5230] = str->add(strings[5230]); +strings[5250] = str->add("#000"); +str->del(strings[5230]); +str->del(strings[5250]); +strings[5247] = str->add(strings[5247]); +strings[5251] = str->add("shadow"); +str->del(strings[5247]); +str->del(strings[5251]); +strings[5234] = str->add(strings[5234]); +strings[5252] = str->add("#ffffff80"); +str->del(strings[5234]); +str->del(strings[5252]); +strings[5241] = str->add(strings[5241]); +strings[5253] = str->add("word"); +str->del(strings[5241]); +str->del(strings[5253]); +strings[5229] = str->add(strings[5229]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5229]); +str->del(strings[469]); +strings[5228] = str->add(strings[5228]); +strings[5254] = str->add("10.000000"); +str->del(strings[5228]); +str->del(strings[5254]); +strings[5226] = str->add(strings[5226]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5226]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5247] = str->add(strings[5247]); +strings[5255] = str->add("soft_shadow"); +str->del(strings[5247]); +str->del(strings[5255]); +strings[5230] = str->add(strings[5230]); +strings[5256] = str->add("#fff"); +str->del(strings[5230]); +str->del(strings[5256]); +strings[5234] = str->add(strings[5234]); +strings[5257] = str->add("#00000020"); +str->del(strings[5234]); +str->del(strings[5257]); +strings[5228] = str->add(strings[5228]); +strings[5258] = str->add("12.000000"); +str->del(strings[5228]); +str->del(strings[5258]); +strings[5226] = str->add(strings[5226]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5226]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5226]); +str->del(strings[5227]); +str->del(strings[5228]); +str->del(strings[5229]); +str->del(strings[5230]); +str->del(strings[5231]); +str->del(strings[5232]); +str->del(strings[5233]); +str->del(strings[5234]); +str->del(strings[5235]); +str->del(strings[5236]); +str->del(strings[5237]); +str->del(strings[5238]); +str->del(strings[5239]); +str->del(strings[5240]); +str->del(strings[5241]); +str->del(strings[5242]); +str->del(strings[5243]); +str->del(strings[5244]); +str->del(strings[5245]); +str->del(strings[5246]); +str->del(strings[5247]); +str->del(strings[5248]); +strings[5259] = str->add("e,action,mouse,move"); +strings[5260] = str->add("e"); +str->del(strings[5259]); +str->del(strings[5260]); +strings[5261] = str->add("e,action,mouse,move"); +strings[5262] = str->add("e"); +str->del(strings[5261]); +str->del(strings[5262]); +strings[5263] = str->add("e,action,mouse,move"); +strings[5264] = str->add("e"); +str->del(strings[5263]); +str->del(strings[5264]); +strings[1932] = str->add(strings[1932]); +strings[5265] = str->add("go_activeb25"); +strings[5266] = str->add("program,start"); +strings[5267] = str->add("go_activec25"); +strings[1932] = str->add(strings[1932]); +strings[5268] = str->add("go_activeb5"); +strings[5266] = str->add(strings[5266]); +strings[5269] = str->add("go_activec5"); +str->del(strings[1932]); +str->del(strings[5265]); +str->del(strings[5266]); +str->del(strings[5267]); +str->del(strings[1932]); +str->del(strings[5268]); +str->del(strings[5266]); +str->del(strings[5269]); +str->del(strings[7]); +str->del(strings[2213]); +strings[7] = str->add(strings[7]); +strings[2220] = str->add(strings[2220]); +strings[5270] = str->add("e,action,mouse,move"); +strings[5271] = str->add("e"); +str->del(strings[5270]); +str->del(strings[5271]); +strings[5272] = str->add("e,action,mouse,move"); +strings[5273] = str->add("e"); +str->del(strings[5272]); +str->del(strings[5273]); +strings[5274] = str->add("program,start"); +strings[5275] = str->add("go_active22"); +strings[1932] = str->add(strings[1932]); +strings[5275] = str->add(strings[5275]); +strings[5274] = str->add(strings[5274]); +strings[5276] = str->add("go_activeb22"); +strings[5274] = str->add(strings[5274]); +strings[5277] = str->add("go_active8"); +strings[1932] = str->add(strings[1932]); +strings[5277] = str->add(strings[5277]); +strings[5274] = str->add(strings[5274]); +strings[5278] = str->add("go_activeb8"); +str->del(strings[5274]); +str->del(strings[5275]); +str->del(strings[1932]); +str->del(strings[5275]); +str->del(strings[5274]); +str->del(strings[5276]); +str->del(strings[5274]); +str->del(strings[5277]); +str->del(strings[1932]); +str->del(strings[5277]); +str->del(strings[5274]); +str->del(strings[5278]); +str->del(strings[7]); +str->del(strings[2220]); +strings[7] = str->add(strings[7]); +strings[2226] = str->add(strings[2226]); +str->del(strings[7]); +str->del(strings[2226]); +strings[7] = str->add(strings[7]); +strings[2257] = str->add(strings[2257]); +strings[5279] = str->add("e,action,mouse,move"); +strings[5280] = str->add("e"); +str->del(strings[5279]); +str->del(strings[5280]); +strings[5281] = str->add("e,action,mouse,move"); +strings[5282] = str->add("e"); +str->del(strings[5281]); +str->del(strings[5282]); +strings[5283] = str->add("e,action,mouse,move"); +strings[5284] = str->add("e"); +str->del(strings[5283]); +str->del(strings[5284]); +strings[1932] = str->add(strings[1932]); +strings[5285] = str->add("go_activeb24"); +strings[5286] = str->add("program,start"); +strings[5287] = str->add("go_activec24"); +strings[1932] = str->add(strings[1932]); +strings[5288] = str->add("go_activeb6"); +strings[5286] = str->add(strings[5286]); +strings[5289] = str->add("go_activec6"); +strings[1932] = str->add(strings[1932]); +strings[5290] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[5290] = str->add(strings[5290]); +str->del(strings[1932]); +str->del(strings[5285]); +str->del(strings[5286]); +str->del(strings[5287]); +str->del(strings[1932]); +str->del(strings[5288]); +str->del(strings[5286]); +str->del(strings[5289]); +str->del(strings[1932]); +str->del(strings[5290]); +str->del(strings[1932]); +str->del(strings[5290]); +strings[5291] = str->add("e,action,mouse,move"); +strings[5292] = str->add("e"); +str->del(strings[5291]); +str->del(strings[5292]); +strings[5293] = str->add("e,action,mouse,move"); +strings[5294] = str->add("e"); +str->del(strings[5293]); +str->del(strings[5294]); +strings[5295] = str->add("e,action,mouse,move"); +strings[5296] = str->add("e"); +str->del(strings[5295]); +str->del(strings[5296]); +str->del(strings[7]); +str->del(strings[2257]); +strings[7] = str->add(strings[7]); +strings[2270] = str->add(strings[2270]); +strings[5297] = str->add("e,action,mouse,move"); +strings[5298] = str->add("e"); +str->del(strings[5297]); +str->del(strings[5298]); +strings[5299] = str->add("e,action,mouse,move"); +strings[5300] = str->add("e"); +str->del(strings[5299]); +str->del(strings[5300]); +strings[5301] = str->add("e,action,mouse,move"); +strings[5302] = str->add("e"); +str->del(strings[5301]); +str->del(strings[5302]); +strings[5303] = str->add("e,action,mouse,move"); +strings[5304] = str->add("e"); +str->del(strings[5303]); +str->del(strings[5304]); +strings[5305] = str->add("e,action,mouse,move"); +strings[5306] = str->add("e"); +str->del(strings[5305]); +str->del(strings[5306]); +strings[5307] = str->add("e,action,mouse,move"); +strings[5308] = str->add("e"); +str->del(strings[5307]); +str->del(strings[5308]); +strings[5309] = str->add("program,start"); +strings[5310] = str->add("go_active21"); +strings[1932] = str->add(strings[1932]); +strings[5310] = str->add(strings[5310]); +strings[5309] = str->add(strings[5309]); +strings[5311] = str->add("go_activeb21"); +strings[5309] = str->add(strings[5309]); +strings[5312] = str->add("go_active9"); +strings[1932] = str->add(strings[1932]); +strings[5312] = str->add(strings[5312]); +strings[5309] = str->add(strings[5309]); +strings[5313] = str->add("go_activeb9"); +str->del(strings[5309]); +str->del(strings[5310]); +str->del(strings[1932]); +str->del(strings[5310]); +str->del(strings[5309]); +str->del(strings[5311]); +str->del(strings[5309]); +str->del(strings[5312]); +str->del(strings[1932]); +str->del(strings[5312]); +str->del(strings[5309]); +str->del(strings[5313]); +str->del(strings[7]); +str->del(strings[2270]); +strings[7] = str->add(strings[7]); +strings[2276] = str->add(strings[2276]); +str->del(strings[7]); +str->del(strings[2276]); +strings[7] = str->add(strings[7]); +strings[3259] = str->add(strings[3259]); +strings[1932] = str->add(strings[1932]); +strings[5314] = str->add("go_activec1"); +strings[5315] = str->add("program,start"); +strings[5316] = str->add("go_activeb1"); +strings[1932] = str->add(strings[1932]); +strings[5317] = str->add("go_activec29"); +strings[5315] = str->add(strings[5315]); +strings[5318] = str->add("go_activeb29"); +strings[1932] = str->add(strings[1932]); +strings[5319] = str->add("go_activeb23"); +strings[5315] = str->add(strings[5315]); +strings[5320] = str->add("go_activec23"); +strings[1932] = str->add(strings[1932]); +strings[5321] = str->add("go_activeb7"); +strings[5315] = str->add(strings[5315]); +strings[5322] = str->add("go_activec7"); +str->del(strings[1932]); +str->del(strings[5314]); +str->del(strings[5315]); +str->del(strings[5316]); +str->del(strings[1932]); +str->del(strings[5317]); +str->del(strings[5315]); +str->del(strings[5318]); +str->del(strings[1932]); +str->del(strings[5319]); +str->del(strings[5315]); +str->del(strings[5320]); +str->del(strings[1932]); +str->del(strings[5321]); +str->del(strings[5315]); +str->del(strings[5322]); +strings[5323] = str->add("e,action,mouse,move"); +strings[5324] = str->add("e"); +str->del(strings[5323]); +str->del(strings[5324]); +strings[5325] = str->add("e,action,mouse,move"); +strings[5326] = str->add("e"); +str->del(strings[5325]); +str->del(strings[5326]); +str->del(strings[7]); +str->del(strings[3259]); +strings[7] = str->add(strings[7]); +strings[2292] = str->add(strings[2292]); +strings[5327] = str->add("e,action,mouse,move"); +strings[5328] = str->add("e"); +str->del(strings[5327]); +str->del(strings[5328]); +strings[5329] = str->add("e,action,mouse,move"); +strings[5330] = str->add("e"); +str->del(strings[5329]); +str->del(strings[5330]); +strings[5331] = str->add("e,action,mouse,move"); +strings[5332] = str->add("e"); +str->del(strings[5331]); +str->del(strings[5332]); +strings[5333] = str->add("e,action,mouse,move"); +strings[5334] = str->add("e"); +str->del(strings[5333]); +str->del(strings[5334]); +strings[5335] = str->add("e,action,mouse,move"); +strings[5336] = str->add("e"); +str->del(strings[5335]); +str->del(strings[5336]); +str->del(strings[7]); +str->del(strings[2292]); +strings[7] = str->add(strings[7]); +strings[2310] = str->add(strings[2310]); +strings[5337] = str->add("e,action,mouse,move"); +strings[5338] = str->add("e"); +str->del(strings[5337]); +str->del(strings[5338]); +strings[5339] = str->add("e,action,mouse,move"); +strings[5340] = str->add("e"); +str->del(strings[5339]); +str->del(strings[5340]); +strings[5341] = str->add("e,action,mouse,move"); +strings[5342] = str->add("e"); +str->del(strings[5341]); +str->del(strings[5342]); +str->del(strings[7]); +str->del(strings[2310]); +strings[7] = str->add(strings[7]); +strings[3279] = str->add(strings[3279]); +strings[5343] = str->add("e,action,mouse,move"); +strings[5344] = str->add("e"); +strings[5345] = str->add("e,state,unselected"); +strings[5344] = str->add(strings[5344]); +strings[5345] = str->add(strings[5345]); +strings[5344] = str->add(strings[5344]); +strings[5345] = str->add(strings[5345]); +strings[5344] = str->add(strings[5344]); +strings[5345] = str->add(strings[5345]); +strings[5344] = str->add(strings[5344]); +strings[5345] = str->add(strings[5345]); +strings[5344] = str->add(strings[5344]); +strings[5345] = str->add(strings[5345]); +strings[5344] = str->add(strings[5344]); +str->del(strings[5343]); +str->del(strings[5344]); +strings[5346] = str->add("program,start"); +strings[5347] = str->add("unsel"); +str->del(strings[5345]); +str->del(strings[5344]); +str->del(strings[5345]); +str->del(strings[5344]); +strings[5346] = str->add(strings[5346]); +strings[5347] = str->add(strings[5347]); +str->del(strings[5345]); +str->del(strings[5344]); +strings[5346] = str->add(strings[5346]); +strings[5347] = str->add(strings[5347]); +strings[1932] = str->add(strings[1932]); +strings[5347] = str->add(strings[5347]); +str->del(strings[5345]); +str->del(strings[5344]); +str->del(strings[5345]); +str->del(strings[5344]); +str->del(strings[5345]); +str->del(strings[5344]); +str->del(strings[5346]); +str->del(strings[5347]); +str->del(strings[5346]); +str->del(strings[5347]); +str->del(strings[5346]); +str->del(strings[5347]); +str->del(strings[1932]); +str->del(strings[5347]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[1932] = str->add(strings[1932]); +strings[5348] = str->add("go_activec28"); +strings[5349] = str->add("program,start"); +strings[5350] = str->add("go_activeb28"); +strings[1932] = str->add(strings[1932]); +strings[5351] = str->add("go_activec2"); +strings[5349] = str->add(strings[5349]); +strings[5352] = str->add("go_activeb2"); +strings[1932] = str->add(strings[1932]); +strings[5353] = str->add("go_activeb22"); +strings[5349] = str->add(strings[5349]); +strings[5354] = str->add("go_activec22"); +strings[1932] = str->add(strings[1932]); +strings[5355] = str->add("go_activeb8"); +strings[5349] = str->add(strings[5349]); +strings[5356] = str->add("go_activec8"); +str->del(strings[1932]); +str->del(strings[5348]); +str->del(strings[5349]); +str->del(strings[5350]); +str->del(strings[1932]); +str->del(strings[5351]); +str->del(strings[5349]); +str->del(strings[5352]); +str->del(strings[1932]); +str->del(strings[5353]); +str->del(strings[5349]); +str->del(strings[5354]); +str->del(strings[1932]); +str->del(strings[5355]); +str->del(strings[5349]); +str->del(strings[5356]); +strings[5357] = str->add("e,action,mouse,move"); +strings[5358] = str->add("e"); +str->del(strings[5357]); +str->del(strings[5358]); +strings[5359] = str->add("e,action,mouse,move"); +strings[5360] = str->add("e"); +str->del(strings[5359]); +str->del(strings[5360]); +str->del(strings[7]); +str->del(strings[3279]); +strings[7] = str->add(strings[7]); +strings[2320] = str->add(strings[2320]); +strings[5361] = str->add("e,action,mouse,move"); +strings[5362] = str->add("e"); +str->del(strings[5361]); +str->del(strings[5362]); +strings[1932] = str->add(strings[1932]); +strings[5363] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5363]); +str->del(strings[7]); +str->del(strings[2320]); +strings[7] = str->add(strings[7]); +strings[2330] = str->add(strings[2330]); +str->del(strings[7]); +str->del(strings[2330]); +strings[7] = str->add(strings[7]); +strings[2343] = str->add(strings[2343]); +strings[1932] = str->add(strings[1932]); +strings[5364] = str->add("go_activeb21"); +strings[5365] = str->add("program,start"); +strings[5366] = str->add("go_activec21"); +strings[1932] = str->add(strings[1932]); +strings[5367] = str->add("go_activeb9"); +strings[5365] = str->add(strings[5365]); +strings[5368] = str->add("go_activec9"); +str->del(strings[1932]); +str->del(strings[5364]); +str->del(strings[5365]); +str->del(strings[5366]); +str->del(strings[1932]); +str->del(strings[5367]); +str->del(strings[5365]); +str->del(strings[5368]); +strings[5369] = str->add("e,action,mouse,move"); +strings[5370] = str->add("e"); +str->del(strings[5369]); +str->del(strings[5370]); +strings[5371] = str->add("e,action,mouse,move"); +strings[5372] = str->add("e"); +str->del(strings[5371]); +str->del(strings[5372]); +strings[1932] = str->add(strings[1932]); +strings[5373] = str->add("go_activec27"); +strings[5374] = str->add("program,start"); +strings[5375] = str->add("go_activeb27"); +strings[1932] = str->add(strings[1932]); +strings[5376] = str->add("go_activec3"); +strings[5374] = str->add(strings[5374]); +strings[5377] = str->add("go_activeb3"); +str->del(strings[1932]); +str->del(strings[5373]); +str->del(strings[5374]); +str->del(strings[5375]); +str->del(strings[1932]); +str->del(strings[5376]); +str->del(strings[5374]); +str->del(strings[5377]); +str->del(strings[7]); +str->del(strings[2343]); +strings[7] = str->add(strings[7]); +strings[2353] = str->add(strings[2353]); +strings[5378] = str->add("e,action,mouse,move"); +strings[5379] = str->add("e"); +str->del(strings[5378]); +str->del(strings[5379]); +strings[5380] = str->add("e,action,mouse,move"); +strings[5381] = str->add("e"); +str->del(strings[5380]); +str->del(strings[5381]); +strings[5382] = str->add("e,action,mouse,move"); +strings[5383] = str->add("e"); +strings[5384] = str->add("e,state,selected"); +strings[5383] = str->add(strings[5383]); +strings[5384] = str->add(strings[5384]); +strings[5383] = str->add(strings[5383]); +strings[5384] = str->add(strings[5384]); +strings[5383] = str->add(strings[5383]); +strings[5384] = str->add(strings[5384]); +strings[5383] = str->add(strings[5383]); +strings[5384] = str->add(strings[5384]); +strings[5383] = str->add(strings[5383]); +strings[5384] = str->add(strings[5384]); +strings[5383] = str->add(strings[5383]); +strings[2224] = str->add(strings[2224]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[4] = str->add(strings[4]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[1925] = str->add(strings[1925]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[2536] = str->add(strings[2536]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +str->del(strings[5382]); +str->del(strings[5383]); +strings[5385] = str->add("program,start"); +strings[5386] = str->add("sel"); +str->del(strings[5384]); +str->del(strings[5383]); +str->del(strings[5384]); +str->del(strings[5383]); +strings[5385] = str->add(strings[5385]); +strings[5386] = str->add(strings[5386]); +str->del(strings[5384]); +str->del(strings[5383]); +strings[5385] = str->add(strings[5385]); +strings[5386] = str->add(strings[5386]); +strings[1932] = str->add(strings[1932]); +strings[5386] = str->add(strings[5386]); +str->del(strings[5384]); +str->del(strings[5383]); +str->del(strings[5384]); +str->del(strings[5383]); +str->del(strings[5384]); +str->del(strings[5383]); +str->del(strings[5385]); +str->del(strings[5386]); +str->del(strings[5385]); +str->del(strings[5386]); +str->del(strings[5385]); +str->del(strings[5386]); +str->del(strings[1932]); +str->del(strings[5386]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[5387] = str->add("resize"); +str->del(strings[5387]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[5388] = str->add(strings[5388]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add("resize"); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[2224] = str->add(strings[2224]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[5388] = str->add(strings[5388]); +strings[469] = str->add(strings[469]); +strings[3089] = str->add(strings[3089]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[4] = str->add(strings[4]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4] = str->add(strings[4]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[5388] = str->add(strings[5388]); +strings[1926] = str->add(strings[1926]); +strings[1552] = str->add(strings[1552]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[1925] = str->add(strings[1925]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1925] = str->add(strings[1925]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[5388] = str->add(strings[5388]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[5388] = str->add(strings[5388]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5388] = str->add(strings[5388]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[5388] = str->add(strings[5388]); +strings[469] = str->add(strings[469]); +strings[3096] = str->add(strings[3096]); +strings[1841] = str->add(strings[1841]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5388] = str->add(strings[5388]); +strings[2536] = str->add(strings[2536]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[5389] = str->add(strings[5389]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2708]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[5146]); +str->del(strings[5146]); +str->del(strings[5146]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2677]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2678]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[5147]); +str->del(strings[5147]); +str->del(strings[5147]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2676]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2675]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2674]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[5148]); +str->del(strings[5148]); +str->del(strings[5148]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3008]); +str->del(strings[5146]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3011]); +str->del(strings[1726]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3013]); +str->del(strings[5147]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3015]); +str->del(strings[1724]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3017]); +str->del(strings[1722]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3019]); +str->del(strings[5148]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[5389] = str->add(strings[5389]); +strings[2224] = str->add(strings[2224]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[5389] = str->add(strings[5389]); +strings[4] = str->add(strings[4]); +strings[4] = str->add(strings[4]); +strings[5389] = str->add(strings[5389]); +strings[1925] = str->add(strings[1925]); +strings[1925] = str->add(strings[1925]); +strings[5389] = str->add(strings[5389]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[5389] = str->add(strings[5389]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[5389] = str->add(strings[5389]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[5390] = str->add("font"); +strings[5391] = str->add("font_fallbacks"); +strings[5392] = str->add("font_size"); +strings[5393] = str->add("font_source"); +strings[5394] = str->add("color"); +strings[5395] = str->add("underline_color"); +strings[5396] = str->add("underline2_color"); +strings[5397] = str->add("outline_color"); +strings[5398] = str->add("shadow_color"); +strings[5399] = str->add("glow_color"); +strings[5400] = str->add("glow2_color"); +strings[5401] = str->add("backing_color"); +strings[5402] = str->add("strikethrough_color"); +strings[5403] = str->add("align"); +strings[5404] = str->add("valign"); +strings[5405] = str->add("wrap"); +strings[5406] = str->add("left_margin"); +strings[5407] = str->add("right_margin"); +strings[5408] = str->add("underline"); +strings[5409] = str->add("strikethrough"); +strings[5410] = str->add("backing"); +strings[5411] = str->add("style"); +strings[5412] = str->add("tabstops"); +strings[5403] = str->add(strings[5403]); +strings[5413] = str->add("center"); +str->del(strings[5403]); +str->del(strings[5413]); +strings[5394] = str->add(strings[5394]); +strings[5414] = str->add("#000"); +str->del(strings[5394]); +str->del(strings[5414]); +strings[5411] = str->add(strings[5411]); +strings[5415] = str->add("shadow"); +str->del(strings[5411]); +str->del(strings[5415]); +strings[5398] = str->add(strings[5398]); +strings[5416] = str->add("#ffffff80"); +str->del(strings[5398]); +str->del(strings[5416]); +strings[5405] = str->add(strings[5405]); +strings[5417] = str->add("word"); +str->del(strings[5405]); +str->del(strings[5417]); +strings[5393] = str->add(strings[5393]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5393]); +str->del(strings[469]); +strings[5392] = str->add(strings[5392]); +strings[5418] = str->add("10.000000"); +str->del(strings[5392]); +str->del(strings[5418]); +strings[5390] = str->add(strings[5390]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5390]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5411] = str->add(strings[5411]); +strings[5419] = str->add("glow"); +str->del(strings[5411]); +str->del(strings[5419]); +strings[5394] = str->add(strings[5394]); +strings[5420] = str->add("#fff"); +str->del(strings[5394]); +str->del(strings[5420]); +strings[5400] = str->add(strings[5400]); +strings[5421] = str->add("#fe87"); +str->del(strings[5400]); +str->del(strings[5421]); +strings[5399] = str->add(strings[5399]); +strings[5422] = str->add("#fa14"); +str->del(strings[5399]); +str->del(strings[5422]); +strings[5390] = str->add(strings[5390]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5390]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5411] = str->add(strings[5411]); +strings[5423] = str->add("glow"); +str->del(strings[5411]); +str->del(strings[5423]); +strings[5394] = str->add(strings[5394]); +strings[5424] = str->add("#fff"); +str->del(strings[5394]); +str->del(strings[5424]); +strings[5400] = str->add(strings[5400]); +strings[5425] = str->add("#fe87"); +str->del(strings[5400]); +str->del(strings[5425]); +strings[5399] = str->add(strings[5399]); +strings[5426] = str->add("#fa14"); +str->del(strings[5399]); +str->del(strings[5426]); +strings[5390] = str->add(strings[5390]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5390]); +str->del(strings[471]); +str->del(strings[5390]); +str->del(strings[5391]); +str->del(strings[5392]); +str->del(strings[5393]); +str->del(strings[5394]); +str->del(strings[5395]); +str->del(strings[5396]); +str->del(strings[5397]); +str->del(strings[5398]); +str->del(strings[5399]); +str->del(strings[5400]); +str->del(strings[5401]); +str->del(strings[5402]); +str->del(strings[5403]); +str->del(strings[5404]); +str->del(strings[5405]); +str->del(strings[5406]); +str->del(strings[5407]); +str->del(strings[5408]); +str->del(strings[5409]); +str->del(strings[5410]); +str->del(strings[5411]); +str->del(strings[5412]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[5427] = str->add("font"); +strings[5428] = str->add("font_fallbacks"); +strings[5429] = str->add("font_size"); +strings[5430] = str->add("font_source"); +strings[5431] = str->add("color"); +strings[5432] = str->add("underline_color"); +strings[5433] = str->add("underline2_color"); +strings[5434] = str->add("outline_color"); +strings[5435] = str->add("shadow_color"); +strings[5436] = str->add("glow_color"); +strings[5437] = str->add("glow2_color"); +strings[5438] = str->add("backing_color"); +strings[5439] = str->add("strikethrough_color"); +strings[5440] = str->add("align"); +strings[5441] = str->add("valign"); +strings[5442] = str->add("wrap"); +strings[5443] = str->add("left_margin"); +strings[5444] = str->add("right_margin"); +strings[5445] = str->add("underline"); +strings[5446] = str->add("strikethrough"); +strings[5447] = str->add("backing"); +strings[5448] = str->add("style"); +strings[5449] = str->add("tabstops"); +strings[5440] = str->add(strings[5440]); +strings[5450] = str->add("center"); +str->del(strings[5440]); +str->del(strings[5450]); +strings[5431] = str->add(strings[5431]); +strings[5451] = str->add("#000"); +str->del(strings[5431]); +str->del(strings[5451]); +strings[5448] = str->add(strings[5448]); +strings[5452] = str->add("shadow"); +str->del(strings[5448]); +str->del(strings[5452]); +strings[5435] = str->add(strings[5435]); +strings[5453] = str->add("#ffffff80"); +str->del(strings[5435]); +str->del(strings[5453]); +strings[5442] = str->add(strings[5442]); +strings[5454] = str->add("word"); +str->del(strings[5442]); +str->del(strings[5454]); +strings[5430] = str->add(strings[5430]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5430]); +str->del(strings[469]); +strings[5429] = str->add(strings[5429]); +strings[5455] = str->add("10.000000"); +str->del(strings[5429]); +str->del(strings[5455]); +strings[5427] = str->add(strings[5427]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5427]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5448] = str->add(strings[5448]); +strings[5456] = str->add("soft_shadow"); +str->del(strings[5448]); +str->del(strings[5456]); +strings[5431] = str->add(strings[5431]); +strings[5457] = str->add("#fff"); +str->del(strings[5431]); +str->del(strings[5457]); +strings[5435] = str->add(strings[5435]); +strings[5458] = str->add("#00000020"); +str->del(strings[5435]); +str->del(strings[5458]); +strings[5429] = str->add(strings[5429]); +strings[5459] = str->add("12.000000"); +str->del(strings[5429]); +str->del(strings[5459]); +strings[5427] = str->add(strings[5427]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5427]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[5427]); +str->del(strings[5428]); +str->del(strings[5429]); +str->del(strings[5430]); +str->del(strings[5431]); +str->del(strings[5432]); +str->del(strings[5433]); +str->del(strings[5434]); +str->del(strings[5435]); +str->del(strings[5436]); +str->del(strings[5437]); +str->del(strings[5438]); +str->del(strings[5439]); +str->del(strings[5440]); +str->del(strings[5441]); +str->del(strings[5442]); +str->del(strings[5443]); +str->del(strings[5444]); +str->del(strings[5445]); +str->del(strings[5446]); +str->del(strings[5447]); +str->del(strings[5448]); +str->del(strings[5449]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5388]); +str->del(strings[1841]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +str->del(strings[5389]); +strings[5460] = str->add("e,action,mouse,move"); +strings[5461] = str->add("e"); +str->del(strings[5460]); +str->del(strings[5461]); +strings[1932] = str->add(strings[1932]); +strings[5462] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5462]); +strings[5463] = str->add("font"); +strings[5464] = str->add("font_fallbacks"); +strings[5465] = str->add("font_size"); +strings[5466] = str->add("font_source"); +strings[5467] = str->add("color"); +strings[5468] = str->add("underline_color"); +strings[5469] = str->add("underline2_color"); +strings[5470] = str->add("outline_color"); +strings[5471] = str->add("shadow_color"); +strings[5472] = str->add("glow_color"); +strings[5473] = str->add("glow2_color"); +strings[5474] = str->add("backing_color"); +strings[5475] = str->add("strikethrough_color"); +strings[5476] = str->add("align"); +strings[5477] = str->add("valign"); +strings[5478] = str->add("wrap"); +strings[5479] = str->add("left_margin"); +strings[5480] = str->add("right_margin"); +strings[5481] = str->add("underline"); +strings[5482] = str->add("strikethrough"); +strings[5483] = str->add("backing"); +strings[5484] = str->add("style"); +strings[5485] = str->add("tabstops"); +strings[5476] = str->add(strings[5476]); +strings[5486] = str->add("center"); +str->del(strings[5476]); +str->del(strings[5486]); +strings[5467] = str->add(strings[5467]); +strings[5487] = str->add("#000"); +str->del(strings[5467]); +str->del(strings[5487]); +strings[5484] = str->add(strings[5484]); +strings[5488] = str->add("shadow"); +str->del(strings[5484]); +str->del(strings[5488]); +strings[5471] = str->add(strings[5471]); +strings[5489] = str->add("#ffffff80"); +str->del(strings[5471]); +str->del(strings[5489]); +strings[5478] = str->add(strings[5478]); +strings[5490] = str->add("word"); +str->del(strings[5478]); +str->del(strings[5490]); +strings[5466] = str->add(strings[5466]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5466]); +str->del(strings[469]); +strings[5465] = str->add(strings[5465]); +strings[5491] = str->add("10.000000"); +str->del(strings[5465]); +str->del(strings[5491]); +strings[5463] = str->add(strings[5463]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5463]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5484] = str->add(strings[5484]); +strings[5492] = str->add("soft_shadow"); +str->del(strings[5484]); +str->del(strings[5492]); +strings[5467] = str->add(strings[5467]); +strings[5493] = str->add("#fff"); +str->del(strings[5467]); +str->del(strings[5493]); +strings[5471] = str->add(strings[5471]); +strings[5494] = str->add("#00000020"); +str->del(strings[5471]); +str->del(strings[5494]); +strings[5465] = str->add(strings[5465]); +strings[5495] = str->add("12.000000"); +str->del(strings[5465]); +str->del(strings[5495]); +strings[5463] = str->add(strings[5463]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5463]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5463]); +str->del(strings[5464]); +str->del(strings[5465]); +str->del(strings[5466]); +str->del(strings[5467]); +str->del(strings[5468]); +str->del(strings[5469]); +str->del(strings[5470]); +str->del(strings[5471]); +str->del(strings[5472]); +str->del(strings[5473]); +str->del(strings[5474]); +str->del(strings[5475]); +str->del(strings[5476]); +str->del(strings[5477]); +str->del(strings[5478]); +str->del(strings[5479]); +str->del(strings[5480]); +str->del(strings[5481]); +str->del(strings[5482]); +str->del(strings[5483]); +str->del(strings[5484]); +str->del(strings[5485]); +str->del(strings[7]); +str->del(strings[2353]); +strings[7] = str->add(strings[7]); +strings[2363] = str->add(strings[2363]); +strings[5496] = str->add("e,action,mouse,move"); +strings[5497] = str->add("e"); +str->del(strings[5496]); +str->del(strings[5497]); +strings[5498] = str->add("e,action,mouse,move"); +strings[5499] = str->add("e"); +str->del(strings[5498]); +str->del(strings[5499]); +strings[1932] = str->add(strings[1932]); +strings[5500] = str->add("go_activeb1"); +strings[5501] = str->add("program,start"); +strings[5502] = str->add("go_activec1"); +strings[1932] = str->add(strings[1932]); +strings[5503] = str->add("go_activeb29"); +strings[5501] = str->add(strings[5501]); +strings[5504] = str->add("go_activec29"); +str->del(strings[1932]); +str->del(strings[5500]); +str->del(strings[5501]); +str->del(strings[5502]); +str->del(strings[1932]); +str->del(strings[5503]); +str->del(strings[5501]); +str->del(strings[5504]); +strings[5505] = str->add("e,action,mouse,move"); +strings[5506] = str->add("e"); +str->del(strings[5505]); +str->del(strings[5506]); +strings[5507] = str->add("e,action,mouse,move"); +strings[5508] = str->add("e"); +str->del(strings[5507]); +str->del(strings[5508]); +strings[5509] = str->add("e,action,mouse,move"); +strings[5510] = str->add("e"); +str->del(strings[5509]); +str->del(strings[5510]); +strings[5511] = str->add("e,action,mouse,move"); +strings[5512] = str->add("e"); +str->del(strings[5511]); +str->del(strings[5512]); +strings[5513] = str->add("e,action,mouse,move"); +strings[5514] = str->add("e"); +str->del(strings[5513]); +str->del(strings[5514]); +str->del(strings[7]); +str->del(strings[2363]); +strings[7] = str->add(strings[7]); +strings[2383] = str->add(strings[2383]); +strings[5515] = str->add("e,action,mouse,move"); +strings[5516] = str->add("e"); +str->del(strings[5515]); +str->del(strings[5516]); +strings[5517] = str->add("e,action,mouse,move"); +strings[5518] = str->add("e"); +str->del(strings[5517]); +str->del(strings[5518]); +strings[5519] = str->add("e,action,mouse,move"); +strings[5520] = str->add("e"); +str->del(strings[5519]); +str->del(strings[5520]); +strings[5521] = str->add("e,action,mouse,move"); +strings[5522] = str->add("e"); +str->del(strings[5521]); +str->del(strings[5522]); +strings[5523] = str->add("e,action,mouse,move"); +strings[5524] = str->add("e"); +str->del(strings[5523]); +str->del(strings[5524]); +strings[5525] = str->add("e,action,mouse,move"); +strings[5526] = str->add("e"); +str->del(strings[5525]); +str->del(strings[5526]); +strings[5527] = str->add("e,action,mouse,move"); +strings[5528] = str->add("e"); +str->del(strings[5527]); +str->del(strings[5528]); +strings[1932] = str->add(strings[1932]); +strings[5529] = str->add("go_activec26"); +strings[5530] = str->add("program,start"); +strings[5531] = str->add("go_activeb26"); +strings[1932] = str->add(strings[1932]); +strings[5532] = str->add("go_activec4"); +strings[5530] = str->add(strings[5530]); +strings[5533] = str->add("go_activeb4"); +str->del(strings[1932]); +str->del(strings[5529]); +str->del(strings[5530]); +str->del(strings[5531]); +str->del(strings[1932]); +str->del(strings[5532]); +str->del(strings[5530]); +str->del(strings[5533]); +str->del(strings[7]); +str->del(strings[2383]); +strings[7] = str->add(strings[7]); +strings[2404] = str->add(strings[2404]); +strings[5534] = str->add("e,action,mouse,move"); +strings[5535] = str->add("e"); +str->del(strings[5534]); +str->del(strings[5535]); +strings[5536] = str->add("e,action,mouse,move"); +strings[5537] = str->add("e"); +str->del(strings[5536]); +str->del(strings[5537]); +strings[5538] = str->add("e,action,mouse,move"); +strings[5539] = str->add("e"); +str->del(strings[5538]); +str->del(strings[5539]); +strings[5540] = str->add("e,action,mouse,move"); +strings[5541] = str->add("e"); +str->del(strings[5540]); +str->del(strings[5541]); +strings[5542] = str->add("e,action,mouse,move"); +strings[5543] = str->add("e"); +str->del(strings[5542]); +str->del(strings[5543]); +strings[5544] = str->add("e,action,mouse,move"); +strings[5545] = str->add("e"); +str->del(strings[5544]); +str->del(strings[5545]); +strings[5546] = str->add("e,action,mouse,move"); +strings[5547] = str->add("e"); +str->del(strings[5546]); +str->del(strings[5547]); +strings[5548] = str->add("e,action,mouse,move"); +strings[5549] = str->add("e"); +str->del(strings[5548]); +str->del(strings[5549]); +strings[1932] = str->add(strings[1932]); +strings[5550] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[5550] = str->add(strings[5550]); +str->del(strings[1932]); +str->del(strings[5550]); +str->del(strings[1932]); +str->del(strings[5550]); +str->del(strings[7]); +str->del(strings[2404]); +strings[7] = str->add(strings[7]); +strings[2416] = str->add(strings[2416]); +strings[5551] = str->add("e,action,mouse,move"); +strings[5552] = str->add("e"); +str->del(strings[5551]); +str->del(strings[5552]); +strings[5553] = str->add("e,action,mouse,move"); +strings[5554] = str->add("e"); +str->del(strings[5553]); +str->del(strings[5554]); +strings[5555] = str->add("e,action,mouse,move"); +strings[5556] = str->add("e"); +strings[5557] = str->add("e,state,unselected"); +strings[5556] = str->add(strings[5556]); +strings[5557] = str->add(strings[5557]); +strings[5556] = str->add(strings[5556]); +strings[5557] = str->add(strings[5557]); +strings[5556] = str->add(strings[5556]); +strings[5557] = str->add(strings[5557]); +strings[5556] = str->add(strings[5556]); +strings[5557] = str->add(strings[5557]); +strings[5556] = str->add(strings[5556]); +strings[5557] = str->add(strings[5557]); +strings[5556] = str->add(strings[5556]); +str->del(strings[5555]); +str->del(strings[5556]); +strings[5558] = str->add("program,start"); +strings[5559] = str->add("unsel"); +str->del(strings[5557]); +str->del(strings[5556]); +str->del(strings[5557]); +str->del(strings[5556]); +strings[5558] = str->add(strings[5558]); +strings[5559] = str->add(strings[5559]); +str->del(strings[5557]); +str->del(strings[5556]); +strings[5558] = str->add(strings[5558]); +strings[5559] = str->add(strings[5559]); +strings[1932] = str->add(strings[1932]); +strings[5559] = str->add(strings[5559]); +str->del(strings[5557]); +str->del(strings[5556]); +str->del(strings[5557]); +str->del(strings[5556]); +str->del(strings[5557]); +str->del(strings[5556]); +str->del(strings[5558]); +str->del(strings[5559]); +str->del(strings[5558]); +str->del(strings[5559]); +str->del(strings[5558]); +str->del(strings[5559]); +str->del(strings[1932]); +str->del(strings[5559]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[5560] = str->add("e,action,mouse,move"); +strings[5561] = str->add("e"); +str->del(strings[5560]); +str->del(strings[5561]); +strings[1932] = str->add(strings[1932]); +strings[5562] = str->add("go_activeb28"); +strings[5563] = str->add("program,start"); +strings[5564] = str->add("go_activec28"); +strings[1932] = str->add(strings[1932]); +strings[5565] = str->add("go_activeb2"); +strings[5563] = str->add(strings[5563]); +strings[5566] = str->add("go_activec2"); +str->del(strings[1932]); +str->del(strings[5562]); +str->del(strings[5563]); +str->del(strings[5564]); +str->del(strings[1932]); +str->del(strings[5565]); +str->del(strings[5563]); +str->del(strings[5566]); +strings[5567] = str->add("e,action,mouse,move"); +strings[5568] = str->add("e"); +str->del(strings[5567]); +str->del(strings[5568]); +strings[5569] = str->add("e,action,mouse,move"); +strings[5570] = str->add("e"); +str->del(strings[5569]); +str->del(strings[5570]); +strings[5571] = str->add("e,action,mouse,move"); +strings[5572] = str->add("e"); +str->del(strings[5571]); +str->del(strings[5572]); +str->del(strings[7]); +str->del(strings[2416]); +strings[7] = str->add(strings[7]); +strings[2426] = str->add(strings[2426]); +strings[5573] = str->add("e,action,mouse,move"); +strings[5574] = str->add("e"); +str->del(strings[5573]); +str->del(strings[5574]); +strings[1932] = str->add(strings[1932]); +strings[5575] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5575]); +str->del(strings[7]); +str->del(strings[2426]); +strings[7] = str->add(strings[7]); +strings[2435] = str->add(strings[2435]); +strings[5576] = str->add("e,action,mouse,move"); +strings[5577] = str->add("e"); +str->del(strings[5576]); +str->del(strings[5577]); +strings[1932] = str->add(strings[1932]); +strings[5578] = str->add("go_activec25"); +strings[5579] = str->add("program,start"); +strings[5580] = str->add("go_activeb25"); +strings[1932] = str->add(strings[1932]); +strings[5581] = str->add("go_activec5"); +strings[5579] = str->add(strings[5579]); +strings[5582] = str->add("go_activeb5"); +str->del(strings[1932]); +str->del(strings[5578]); +str->del(strings[5579]); +str->del(strings[5580]); +str->del(strings[1932]); +str->del(strings[5581]); +str->del(strings[5579]); +str->del(strings[5582]); +strings[5583] = str->add("e,action,mouse,move"); +strings[5584] = str->add("e"); +str->del(strings[5583]); +str->del(strings[5584]); +strings[5585] = str->add("e,action,mouse,move"); +strings[5586] = str->add("e"); +str->del(strings[5585]); +str->del(strings[5586]); +str->del(strings[7]); +str->del(strings[2435]); +strings[7] = str->add(strings[7]); +strings[2448] = str->add(strings[2448]); +strings[5587] = str->add("e,action,mouse,move"); +strings[5588] = str->add("e"); +str->del(strings[5587]); +str->del(strings[5588]); +strings[5589] = str->add("e,action,mouse,move"); +strings[5590] = str->add("e"); +str->del(strings[5589]); +str->del(strings[5590]); +strings[5591] = str->add("e,action,mouse,move"); +strings[5592] = str->add("e"); +str->del(strings[5591]); +str->del(strings[5592]); +strings[5593] = str->add("e,action,mouse,move"); +strings[5594] = str->add("e"); +str->del(strings[5593]); +str->del(strings[5594]); +strings[5595] = str->add("e,action,mouse,move"); +strings[5596] = str->add("e"); +str->del(strings[5595]); +str->del(strings[5596]); +strings[5597] = str->add("e,action,mouse,move"); +strings[5598] = str->add("e"); +str->del(strings[5597]); +str->del(strings[5598]); +strings[5599] = str->add("e,action,mouse,move"); +strings[5600] = str->add("e"); +str->del(strings[5599]); +str->del(strings[5600]); +strings[1932] = str->add(strings[1932]); +strings[5601] = str->add("go_activeb27"); +strings[5602] = str->add("program,start"); +strings[5603] = str->add("go_activec27"); +strings[1932] = str->add(strings[1932]); +strings[5604] = str->add("go_activeb3"); +strings[5602] = str->add(strings[5602]); +strings[5605] = str->add("go_activec3"); +str->del(strings[1932]); +str->del(strings[5601]); +str->del(strings[5602]); +str->del(strings[5603]); +str->del(strings[1932]); +str->del(strings[5604]); +str->del(strings[5602]); +str->del(strings[5605]); +str->del(strings[7]); +str->del(strings[2448]); +strings[7] = str->add(strings[7]); +strings[2466] = str->add(strings[2466]); +strings[5606] = str->add("e,action,mouse,move"); +strings[5607] = str->add("e"); +str->del(strings[5606]); +str->del(strings[5607]); +strings[5608] = str->add("e,action,mouse,move"); +strings[5609] = str->add("e"); +str->del(strings[5608]); +str->del(strings[5609]); +strings[5610] = str->add("e,action,mouse,move"); +strings[5611] = str->add("e"); +str->del(strings[5610]); +str->del(strings[5611]); +strings[5612] = str->add("e,action,mouse,move"); +strings[5613] = str->add("e"); +str->del(strings[5612]); +str->del(strings[5613]); +strings[5614] = str->add("e,action,mouse,move"); +strings[5615] = str->add("e"); +str->del(strings[5614]); +str->del(strings[5615]); +strings[5616] = str->add("e,action,mouse,move"); +strings[5617] = str->add("e"); +str->del(strings[5616]); +str->del(strings[5617]); +strings[5618] = str->add("e,action,mouse,move"); +strings[5619] = str->add("e"); +str->del(strings[5618]); +str->del(strings[5619]); +strings[1932] = str->add(strings[1932]); +strings[5620] = str->add("go_activec24"); +strings[5621] = str->add("program,start"); +strings[5622] = str->add("go_activeb24"); +strings[1932] = str->add(strings[1932]); +strings[5623] = str->add("go_activec6"); +strings[5621] = str->add(strings[5621]); +strings[5624] = str->add("go_activeb6"); +strings[1932] = str->add(strings[1932]); +strings[5625] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5620]); +str->del(strings[5621]); +str->del(strings[5622]); +str->del(strings[1932]); +str->del(strings[5623]); +str->del(strings[5621]); +str->del(strings[5624]); +str->del(strings[1932]); +str->del(strings[5625]); +str->del(strings[7]); +str->del(strings[2466]); +strings[7] = str->add(strings[7]); +strings[2479] = str->add(strings[2479]); +strings[5626] = str->add("e,action,mouse,move"); +strings[5627] = str->add("e"); +strings[5628] = str->add("e,state,selected"); +strings[5627] = str->add(strings[5627]); +strings[5628] = str->add(strings[5628]); +strings[5627] = str->add(strings[5627]); +strings[5628] = str->add(strings[5628]); +strings[5627] = str->add(strings[5627]); +strings[5628] = str->add(strings[5628]); +strings[5627] = str->add(strings[5627]); +strings[5628] = str->add(strings[5628]); +strings[5627] = str->add(strings[5627]); +strings[5628] = str->add(strings[5628]); +strings[5627] = str->add(strings[5627]); +str->del(strings[5626]); +str->del(strings[5627]); +strings[5629] = str->add("program,start"); +strings[5630] = str->add("sel"); +str->del(strings[5628]); +str->del(strings[5627]); +str->del(strings[5628]); +str->del(strings[5627]); +strings[5629] = str->add(strings[5629]); +strings[5630] = str->add(strings[5630]); +str->del(strings[5628]); +str->del(strings[5627]); +strings[5629] = str->add(strings[5629]); +strings[5630] = str->add(strings[5630]); +strings[1932] = str->add(strings[1932]); +strings[5630] = str->add(strings[5630]); +str->del(strings[5628]); +str->del(strings[5627]); +strings[5629] = str->add(strings[5629]); +strings[5631] = str->add("e_in"); +str->del(strings[5628]); +str->del(strings[5627]); +str->del(strings[5628]); +str->del(strings[5627]); +str->del(strings[5629]); +str->del(strings[5630]); +str->del(strings[5629]); +str->del(strings[5630]); +str->del(strings[5629]); +str->del(strings[5630]); +str->del(strings[1932]); +str->del(strings[5630]); +str->del(strings[5629]); +str->del(strings[5631]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[5632] = str->add("resize"); +str->del(strings[5632]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[5633] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[5633] = str->add(strings[5633]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[5634] = str->add("resize"); +strings[5634] = str->add(strings[5634]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5633] = str->add(strings[5633]); +strings[4956] = str->add(strings[4956]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4956] = str->add(strings[4956]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[5633] = str->add(strings[5633]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5633] = str->add(strings[5633]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[5633] = str->add(strings[5633]); +strings[469] = str->add(strings[469]); +strings[3130] = str->add(strings[3130]); +strings[1841] = str->add(strings[1841]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5633] = str->add(strings[5633]); +strings[1713] = str->add(strings[1713]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1713] = str->add(strings[1713]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[5633] = str->add(strings[5633]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[5633] = str->add(strings[5633]); +strings[469] = str->add(strings[469]); +strings[3132] = str->add(strings[3132]); +strings[1841] = str->add(strings[1841]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[5633] = str->add(strings[5633]); +strings[1714] = str->add(strings[1714]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1714] = str->add(strings[1714]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[5634] = str->add(strings[5634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2685]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1926]); +str->del(strings[3083]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2713]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[2224]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3089]); +str->del(strings[4]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1926]); +str->del(strings[1552]); +str->del(strings[1925]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3096]); +str->del(strings[2536]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[5634] = str->add(strings[5634]); +strings[4956] = str->add(strings[4956]); +strings[4956] = str->add(strings[4956]); +strings[5634] = str->add(strings[5634]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[5634] = str->add(strings[5634]); +strings[1713] = str->add(strings[1713]); +strings[1713] = str->add(strings[1713]); +strings[5634] = str->add(strings[5634]); +strings[1714] = str->add(strings[1714]); +strings[1714] = str->add(strings[1714]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[5635] = str->add("font"); +strings[5636] = str->add("font_fallbacks"); +strings[5637] = str->add("font_size"); +strings[5638] = str->add("font_source"); +strings[5639] = str->add("color"); +strings[5640] = str->add("underline_color"); +strings[5641] = str->add("underline2_color"); +strings[5642] = str->add("outline_color"); +strings[5643] = str->add("shadow_color"); +strings[5644] = str->add("glow_color"); +strings[5645] = str->add("glow2_color"); +strings[5646] = str->add("backing_color"); +strings[5647] = str->add("strikethrough_color"); +strings[5648] = str->add("align"); +strings[5649] = str->add("valign"); +strings[5650] = str->add("wrap"); +strings[5651] = str->add("left_margin"); +strings[5652] = str->add("right_margin"); +strings[5653] = str->add("underline"); +strings[5654] = str->add("strikethrough"); +strings[5655] = str->add("backing"); +strings[5656] = str->add("style"); +strings[5657] = str->add("tabstops"); +strings[5648] = str->add(strings[5648]); +strings[5658] = str->add("center"); +str->del(strings[5648]); +str->del(strings[5658]); +strings[5639] = str->add(strings[5639]); +strings[5659] = str->add("#000"); +str->del(strings[5639]); +str->del(strings[5659]); +strings[5656] = str->add(strings[5656]); +strings[5660] = str->add("shadow"); +str->del(strings[5656]); +str->del(strings[5660]); +strings[5643] = str->add(strings[5643]); +strings[5661] = str->add("#ffffff80"); +str->del(strings[5643]); +str->del(strings[5661]); +strings[5650] = str->add(strings[5650]); +strings[5662] = str->add("word"); +str->del(strings[5650]); +str->del(strings[5662]); +strings[5638] = str->add(strings[5638]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5638]); +str->del(strings[469]); +strings[5637] = str->add(strings[5637]); +strings[5663] = str->add("10.000000"); +str->del(strings[5637]); +str->del(strings[5663]); +strings[5635] = str->add(strings[5635]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5635]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5656] = str->add(strings[5656]); +strings[5664] = str->add("glow"); +str->del(strings[5656]); +str->del(strings[5664]); +strings[5639] = str->add(strings[5639]); +strings[5665] = str->add("#fff"); +str->del(strings[5639]); +str->del(strings[5665]); +strings[5645] = str->add(strings[5645]); +strings[5666] = str->add("#fe87"); +str->del(strings[5645]); +str->del(strings[5666]); +strings[5644] = str->add(strings[5644]); +strings[5667] = str->add("#fa14"); +str->del(strings[5644]); +str->del(strings[5667]); +strings[5635] = str->add(strings[5635]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5635]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5656] = str->add(strings[5656]); +strings[5668] = str->add("glow"); +str->del(strings[5656]); +str->del(strings[5668]); +strings[5639] = str->add(strings[5639]); +strings[5669] = str->add("#fff"); +str->del(strings[5639]); +str->del(strings[5669]); +strings[5645] = str->add(strings[5645]); +strings[5670] = str->add("#fe87"); +str->del(strings[5645]); +str->del(strings[5670]); +strings[5644] = str->add(strings[5644]); +strings[5671] = str->add("#fa14"); +str->del(strings[5644]); +str->del(strings[5671]); +strings[5635] = str->add(strings[5635]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5635]); +str->del(strings[471]); +str->del(strings[5635]); +str->del(strings[5636]); +str->del(strings[5637]); +str->del(strings[5638]); +str->del(strings[5639]); +str->del(strings[5640]); +str->del(strings[5641]); +str->del(strings[5642]); +str->del(strings[5643]); +str->del(strings[5644]); +str->del(strings[5645]); +str->del(strings[5646]); +str->del(strings[5647]); +str->del(strings[5648]); +str->del(strings[5649]); +str->del(strings[5650]); +str->del(strings[5651]); +str->del(strings[5652]); +str->del(strings[5653]); +str->del(strings[5654]); +str->del(strings[5655]); +str->del(strings[5656]); +str->del(strings[5657]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[5672] = str->add("font"); +strings[5673] = str->add("font_fallbacks"); +strings[5674] = str->add("font_size"); +strings[5675] = str->add("font_source"); +strings[5676] = str->add("color"); +strings[5677] = str->add("underline_color"); +strings[5678] = str->add("underline2_color"); +strings[5679] = str->add("outline_color"); +strings[5680] = str->add("shadow_color"); +strings[5681] = str->add("glow_color"); +strings[5682] = str->add("glow2_color"); +strings[5683] = str->add("backing_color"); +strings[5684] = str->add("strikethrough_color"); +strings[5685] = str->add("align"); +strings[5686] = str->add("valign"); +strings[5687] = str->add("wrap"); +strings[5688] = str->add("left_margin"); +strings[5689] = str->add("right_margin"); +strings[5690] = str->add("underline"); +strings[5691] = str->add("strikethrough"); +strings[5692] = str->add("backing"); +strings[5693] = str->add("style"); +strings[5694] = str->add("tabstops"); +strings[5685] = str->add(strings[5685]); +strings[5695] = str->add("center"); +str->del(strings[5685]); +str->del(strings[5695]); +strings[5676] = str->add(strings[5676]); +strings[5696] = str->add("#000"); +str->del(strings[5676]); +str->del(strings[5696]); +strings[5693] = str->add(strings[5693]); +strings[5697] = str->add("shadow"); +str->del(strings[5693]); +str->del(strings[5697]); +strings[5680] = str->add(strings[5680]); +strings[5698] = str->add("#ffffff80"); +str->del(strings[5680]); +str->del(strings[5698]); +strings[5687] = str->add(strings[5687]); +strings[5699] = str->add("word"); +str->del(strings[5687]); +str->del(strings[5699]); +strings[5675] = str->add(strings[5675]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5675]); +str->del(strings[469]); +strings[5674] = str->add(strings[5674]); +strings[5700] = str->add("10.000000"); +str->del(strings[5674]); +str->del(strings[5700]); +strings[5672] = str->add(strings[5672]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5672]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5693] = str->add(strings[5693]); +strings[5701] = str->add("soft_shadow"); +str->del(strings[5693]); +str->del(strings[5701]); +strings[5676] = str->add(strings[5676]); +strings[5702] = str->add("#fff"); +str->del(strings[5676]); +str->del(strings[5702]); +strings[5680] = str->add(strings[5680]); +strings[5703] = str->add("#00000020"); +str->del(strings[5680]); +str->del(strings[5703]); +strings[5674] = str->add(strings[5674]); +strings[5704] = str->add("12.000000"); +str->del(strings[5674]); +str->del(strings[5704]); +strings[5672] = str->add(strings[5672]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5672]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[5672]); +str->del(strings[5673]); +str->del(strings[5674]); +str->del(strings[5675]); +str->del(strings[5676]); +str->del(strings[5677]); +str->del(strings[5678]); +str->del(strings[5679]); +str->del(strings[5680]); +str->del(strings[5681]); +str->del(strings[5682]); +str->del(strings[5683]); +str->del(strings[5684]); +str->del(strings[5685]); +str->del(strings[5686]); +str->del(strings[5687]); +str->del(strings[5688]); +str->del(strings[5689]); +str->del(strings[5690]); +str->del(strings[5691]); +str->del(strings[5692]); +str->del(strings[5693]); +str->del(strings[5694]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5633]); +str->del(strings[1841]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +str->del(strings[5634]); +strings[5705] = str->add("e,action,mouse,move"); +strings[5706] = str->add("e"); +strings[5705] = str->add(strings[5705]); +strings[5706] = str->add(strings[5706]); +str->del(strings[5705]); +str->del(strings[5706]); +str->del(strings[5705]); +str->del(strings[5706]); +strings[5707] = str->add("e,action,mouse,move"); +strings[5708] = str->add("e"); +str->del(strings[5707]); +str->del(strings[5708]); +strings[5709] = str->add("font"); +strings[5710] = str->add("font_fallbacks"); +strings[5711] = str->add("font_size"); +strings[5712] = str->add("font_source"); +strings[5713] = str->add("color"); +strings[5714] = str->add("underline_color"); +strings[5715] = str->add("underline2_color"); +strings[5716] = str->add("outline_color"); +strings[5717] = str->add("shadow_color"); +strings[5718] = str->add("glow_color"); +strings[5719] = str->add("glow2_color"); +strings[5720] = str->add("backing_color"); +strings[5721] = str->add("strikethrough_color"); +strings[5722] = str->add("align"); +strings[5723] = str->add("valign"); +strings[5724] = str->add("wrap"); +strings[5725] = str->add("left_margin"); +strings[5726] = str->add("right_margin"); +strings[5727] = str->add("underline"); +strings[5728] = str->add("strikethrough"); +strings[5729] = str->add("backing"); +strings[5730] = str->add("style"); +strings[5731] = str->add("tabstops"); +strings[5722] = str->add(strings[5722]); +strings[5732] = str->add("center"); +str->del(strings[5722]); +str->del(strings[5732]); +strings[5713] = str->add(strings[5713]); +strings[5733] = str->add("#000"); +str->del(strings[5713]); +str->del(strings[5733]); +strings[5730] = str->add(strings[5730]); +strings[5734] = str->add("shadow"); +str->del(strings[5730]); +str->del(strings[5734]); +strings[5717] = str->add(strings[5717]); +strings[5735] = str->add("#ffffff80"); +str->del(strings[5717]); +str->del(strings[5735]); +strings[5724] = str->add(strings[5724]); +strings[5736] = str->add("word"); +str->del(strings[5724]); +str->del(strings[5736]); +strings[5712] = str->add(strings[5712]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5712]); +str->del(strings[469]); +strings[5711] = str->add(strings[5711]); +strings[5737] = str->add("10.000000"); +str->del(strings[5711]); +str->del(strings[5737]); +strings[5709] = str->add(strings[5709]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5709]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5730] = str->add(strings[5730]); +strings[5738] = str->add("soft_shadow"); +str->del(strings[5730]); +str->del(strings[5738]); +strings[5713] = str->add(strings[5713]); +strings[5739] = str->add("#fff"); +str->del(strings[5713]); +str->del(strings[5739]); +strings[5717] = str->add(strings[5717]); +strings[5740] = str->add("#00000020"); +str->del(strings[5717]); +str->del(strings[5740]); +strings[5711] = str->add(strings[5711]); +strings[5741] = str->add("12.000000"); +str->del(strings[5711]); +str->del(strings[5741]); +strings[5709] = str->add(strings[5709]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5709]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[5709]); +str->del(strings[5710]); +str->del(strings[5711]); +str->del(strings[5712]); +str->del(strings[5713]); +str->del(strings[5714]); +str->del(strings[5715]); +str->del(strings[5716]); +str->del(strings[5717]); +str->del(strings[5718]); +str->del(strings[5719]); +str->del(strings[5720]); +str->del(strings[5721]); +str->del(strings[5722]); +str->del(strings[5723]); +str->del(strings[5724]); +str->del(strings[5725]); +str->del(strings[5726]); +str->del(strings[5727]); +str->del(strings[5728]); +str->del(strings[5729]); +str->del(strings[5730]); +str->del(strings[5731]); +strings[5742] = str->add("e,action,mouse,move"); +strings[5743] = str->add("e"); +str->del(strings[5742]); +str->del(strings[5743]); +strings[5744] = str->add("e,action,mouse,move"); +strings[5745] = str->add("e"); +str->del(strings[5744]); +str->del(strings[5745]); +strings[5746] = str->add("e,action,mouse,move"); +strings[5747] = str->add("e"); +str->del(strings[5746]); +str->del(strings[5747]); +strings[5748] = str->add("e,action,mouse,move"); +strings[5749] = str->add("e"); +str->del(strings[5748]); +str->del(strings[5749]); +str->del(strings[7]); +str->del(strings[2479]); +strings[7] = str->add(strings[7]); +strings[2489] = str->add(strings[2489]); +strings[5750] = str->add("e,action,mouse,move"); +strings[5751] = str->add("e"); +str->del(strings[5750]); +str->del(strings[5751]); +strings[5752] = str->add("e,action,mouse,move"); +strings[5753] = str->add("e"); +str->del(strings[5752]); +str->del(strings[5753]); +strings[5754] = str->add("e,action,mouse,move"); +strings[5755] = str->add("e"); +str->del(strings[5754]); +str->del(strings[5755]); +strings[5756] = str->add("e,action,mouse,move"); +strings[5757] = str->add("e"); +str->del(strings[5756]); +str->del(strings[5757]); +strings[1932] = str->add(strings[1932]); +strings[1847] = str->add(strings[1847]); +strings[5758] = str->add("program,start"); +strings[1848] = str->add(strings[1848]); +strings[1932] = str->add(strings[1932]); +strings[1848] = str->add(strings[1848]); +strings[5758] = str->add(strings[5758]); +strings[1847] = str->add(strings[1847]); +str->del(strings[1932]); +str->del(strings[1847]); +str->del(strings[5758]); +str->del(strings[1848]); +str->del(strings[1932]); +str->del(strings[1848]); +str->del(strings[5758]); +str->del(strings[1847]); +strings[5759] = str->add("e,action,mouse,move"); +strings[5760] = str->add("e"); +str->del(strings[5759]); +str->del(strings[5760]); +strings[5761] = str->add("e,action,mouse,move"); +strings[5762] = str->add("e"); +str->del(strings[5761]); +str->del(strings[5762]); +strings[5763] = str->add("e,action,mouse,move"); +strings[5764] = str->add("e"); +str->del(strings[5763]); +str->del(strings[5764]); +strings[5765] = str->add("e,action,mouse,move"); +strings[5766] = str->add("e"); +str->del(strings[5765]); +str->del(strings[5766]); +strings[5767] = str->add("e,action,mouse,move"); +strings[5768] = str->add("e"); +str->del(strings[5767]); +str->del(strings[5768]); +strings[1932] = str->add(strings[1932]); +strings[5769] = str->add("go_activeb26"); +strings[5770] = str->add("program,start"); +strings[5771] = str->add("go_activec26"); +strings[1932] = str->add(strings[1932]); +strings[5772] = str->add("go_activeb4"); +strings[5770] = str->add(strings[5770]); +strings[5773] = str->add("go_activec4"); +str->del(strings[1932]); +str->del(strings[5769]); +str->del(strings[5770]); +str->del(strings[5771]); +str->del(strings[1932]); +str->del(strings[5772]); +str->del(strings[5770]); +str->del(strings[5773]); +str->del(strings[7]); +str->del(strings[2489]); +strings[7] = str->add(strings[7]); +strings[2508] = str->add(strings[2508]); +strings[5774] = str->add("e,action,mouse,move"); +strings[5775] = str->add("e"); +str->del(strings[5774]); +str->del(strings[5775]); +strings[5776] = str->add("e,action,mouse,move"); +strings[5777] = str->add("e"); +str->del(strings[5776]); +str->del(strings[5777]); +strings[5778] = str->add("e,action,mouse,move"); +strings[5779] = str->add("e"); +str->del(strings[5778]); +str->del(strings[5779]); +strings[5780] = str->add("e,action,mouse,move"); +strings[5781] = str->add("e"); +str->del(strings[5780]); +str->del(strings[5781]); +strings[5782] = str->add("e,action,mouse,move"); +strings[5783] = str->add("e"); +str->del(strings[5782]); +str->del(strings[5783]); +strings[5784] = str->add("e,action,mouse,move"); +strings[5785] = str->add("e"); +str->del(strings[5784]); +str->del(strings[5785]); +strings[5786] = str->add("e,action,mouse,move"); +strings[5787] = str->add("e"); +str->del(strings[5786]); +str->del(strings[5787]); +strings[5788] = str->add("e,action,mouse,move"); +strings[5789] = str->add("e"); +str->del(strings[5788]); +str->del(strings[5789]); +strings[1932] = str->add(strings[1932]); +strings[5790] = str->add("go_activec23"); +strings[5791] = str->add("program,start"); +strings[5792] = str->add("go_activeb23"); +strings[1932] = str->add(strings[1932]); +strings[5793] = str->add("go_activec7"); +strings[5791] = str->add(strings[5791]); +strings[5794] = str->add("go_activeb7"); +str->del(strings[1932]); +str->del(strings[5790]); +str->del(strings[5791]); +str->del(strings[5792]); +str->del(strings[1932]); +str->del(strings[5793]); +str->del(strings[5791]); +str->del(strings[5794]); +str->del(strings[7]); +str->del(strings[2508]); +strings[7] = str->add(strings[7]); +strings[2518] = str->add(strings[2518]); +strings[5795] = str->add("e,action,mouse,move"); +strings[5796] = str->add("e"); +str->del(strings[5795]); +str->del(strings[5796]); +strings[5797] = str->add("e,action,mouse,move"); +strings[5798] = str->add("e"); +str->del(strings[5797]); +str->del(strings[5798]); +strings[5799] = str->add("e,action,mouse,move"); +strings[5800] = str->add("e"); +str->del(strings[5799]); +str->del(strings[5800]); +strings[5801] = str->add("e,action,mouse,move"); +strings[5802] = str->add("e"); +str->del(strings[5801]); +str->del(strings[5802]); +strings[1932] = str->add(strings[1932]); +strings[5803] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[5803] = str->add(strings[5803]); +str->del(strings[1932]); +str->del(strings[5803]); +str->del(strings[1932]); +str->del(strings[5803]); +strings[5804] = str->add("e,action,mouse,move"); +strings[5805] = str->add("e"); +str->del(strings[5804]); +str->del(strings[5805]); +strings[5806] = str->add("e,action,mouse,move"); +strings[5807] = str->add("e"); +str->del(strings[5806]); +str->del(strings[5807]); +strings[5808] = str->add("e,action,mouse,move"); +strings[5809] = str->add("e"); +str->del(strings[5808]); +str->del(strings[5809]); +strings[5810] = str->add("e,action,mouse,move"); +strings[5811] = str->add("e"); +str->del(strings[5810]); +str->del(strings[5811]); +str->del(strings[7]); +str->del(strings[2518]); +strings[7] = str->add(strings[7]); +strings[2531] = str->add(strings[2531]); +strings[5812] = str->add("e,action,mouse,move"); +strings[5813] = str->add("e"); +str->del(strings[5812]); +str->del(strings[5813]); +strings[5814] = str->add("e,action,mouse,move"); +strings[5815] = str->add("e"); +str->del(strings[5814]); +str->del(strings[5815]); +strings[5816] = str->add("e,action,mouse,move"); +strings[5817] = str->add("e"); +str->del(strings[5816]); +str->del(strings[5817]); +strings[5818] = str->add("e,action,mouse,move"); +strings[5819] = str->add("e"); +str->del(strings[5818]); +str->del(strings[5819]); +strings[5820] = str->add("e,action,mouse,move"); +strings[5821] = str->add("e"); +str->del(strings[5820]); +str->del(strings[5821]); +strings[5822] = str->add("e,action,mouse,move"); +strings[5823] = str->add("e"); +str->del(strings[5822]); +str->del(strings[5823]); +strings[5824] = str->add("e,action,mouse,move"); +strings[5825] = str->add("e"); +str->del(strings[5824]); +str->del(strings[5825]); +strings[5826] = str->add("e,action,mouse,move"); +strings[5827] = str->add("e"); +str->del(strings[5826]); +str->del(strings[5827]); +strings[5828] = str->add("e,action,mouse,move"); +strings[5829] = str->add("e"); +strings[5830] = str->add("e,state,unselected"); +strings[5829] = str->add(strings[5829]); +strings[5830] = str->add(strings[5830]); +strings[5829] = str->add(strings[5829]); +strings[5830] = str->add(strings[5830]); +strings[5829] = str->add(strings[5829]); +strings[5830] = str->add(strings[5830]); +strings[5829] = str->add(strings[5829]); +strings[5830] = str->add(strings[5830]); +strings[5829] = str->add(strings[5829]); +strings[5830] = str->add(strings[5830]); +strings[5829] = str->add(strings[5829]); +str->del(strings[5828]); +str->del(strings[5829]); +strings[5831] = str->add("program,start"); +strings[5832] = str->add("unsel"); +str->del(strings[5830]); +str->del(strings[5829]); +str->del(strings[5830]); +str->del(strings[5829]); +strings[5831] = str->add(strings[5831]); +strings[5832] = str->add(strings[5832]); +str->del(strings[5830]); +str->del(strings[5829]); +strings[5831] = str->add(strings[5831]); +strings[5832] = str->add(strings[5832]); +strings[1932] = str->add(strings[1932]); +strings[5832] = str->add(strings[5832]); +str->del(strings[5830]); +str->del(strings[5829]); +strings[1932] = str->add(strings[1932]); +strings[5833] = str->add("e_in"); +strings[5831] = str->add(strings[5831]); +strings[5834] = str->add("e_out"); +str->del(strings[5830]); +str->del(strings[5829]); +str->del(strings[5830]); +str->del(strings[5829]); +str->del(strings[5831]); +str->del(strings[5832]); +str->del(strings[5831]); +str->del(strings[5832]); +str->del(strings[5831]); +str->del(strings[5832]); +str->del(strings[1932]); +str->del(strings[5832]); +str->del(strings[1932]); +str->del(strings[5833]); +str->del(strings[5831]); +str->del(strings[5834]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[1932] = str->add(strings[1932]); +strings[5835] = str->add("go_activeb25"); +strings[5836] = str->add("program,start"); +strings[5837] = str->add("go_activec25"); +strings[1932] = str->add(strings[1932]); +strings[5838] = str->add("go_activeb5"); +strings[5836] = str->add(strings[5836]); +strings[5839] = str->add("go_activec5"); +str->del(strings[1932]); +str->del(strings[5835]); +str->del(strings[5836]); +str->del(strings[5837]); +str->del(strings[1932]); +str->del(strings[5838]); +str->del(strings[5836]); +str->del(strings[5839]); +str->del(strings[7]); +str->del(strings[2531]); +strings[7] = str->add(strings[7]); +strings[2544] = str->add(strings[2544]); +strings[5840] = str->add("e,action,mouse,move"); +strings[5841] = str->add("e"); +strings[5842] = str->add("e,state,selected"); +strings[5841] = str->add(strings[5841]); +strings[5842] = str->add(strings[5842]); +strings[5841] = str->add(strings[5841]); +strings[5842] = str->add(strings[5842]); +strings[5841] = str->add(strings[5841]); +strings[5842] = str->add(strings[5842]); +strings[5841] = str->add(strings[5841]); +strings[5842] = str->add(strings[5842]); +strings[5841] = str->add(strings[5841]); +str->del(strings[5840]); +str->del(strings[5841]); +strings[5843] = str->add("program,start"); +strings[5844] = str->add("sel"); +str->del(strings[5842]); +str->del(strings[5841]); +str->del(strings[5842]); +str->del(strings[5841]); +strings[5843] = str->add(strings[5843]); +strings[5844] = str->add(strings[5844]); +str->del(strings[5842]); +str->del(strings[5841]); +strings[5843] = str->add(strings[5843]); +strings[5845] = str->add("e_in"); +str->del(strings[5842]); +str->del(strings[5841]); +str->del(strings[5842]); +str->del(strings[5841]); +str->del(strings[5843]); +str->del(strings[5844]); +str->del(strings[5843]); +str->del(strings[5844]); +str->del(strings[5843]); +str->del(strings[5845]); +strings[5846] = str->add("e,action,mouse,move"); +strings[5847] = str->add("e"); +str->del(strings[5846]); +str->del(strings[5847]); +strings[5848] = str->add("e,action,mouse,move"); +strings[5849] = str->add("e"); +str->del(strings[5848]); +str->del(strings[5849]); +strings[5850] = str->add("e,action,mouse,move"); +strings[5851] = str->add("e"); +str->del(strings[5850]); +str->del(strings[5851]); +strings[5852] = str->add("e,action,mouse,move"); +strings[5853] = str->add("e"); +str->del(strings[5852]); +str->del(strings[5853]); +strings[5854] = str->add("e,action,mouse,move"); +strings[5855] = str->add("e"); +str->del(strings[5854]); +str->del(strings[5855]); +strings[1932] = str->add(strings[1932]); +strings[5856] = str->add("go_activec22"); +strings[5857] = str->add("program,start"); +strings[5858] = str->add("go_activeb22"); +strings[1932] = str->add(strings[1932]); +strings[5859] = str->add("go_activec8"); +strings[5857] = str->add(strings[5857]); +strings[5860] = str->add("go_activeb8"); +str->del(strings[1932]); +str->del(strings[5856]); +str->del(strings[5857]); +str->del(strings[5858]); +str->del(strings[1932]); +str->del(strings[5859]); +str->del(strings[5857]); +str->del(strings[5860]); +str->del(strings[7]); +str->del(strings[2544]); +strings[7] = str->add(strings[7]); +strings[2561] = str->add(strings[2561]); +strings[5861] = str->add("e,action,mouse,move"); +strings[5862] = str->add("e"); +str->del(strings[5861]); +str->del(strings[5862]); +strings[5863] = str->add("e,action,mouse,move"); +strings[5864] = str->add("e"); +str->del(strings[5863]); +str->del(strings[5864]); +strings[5865] = str->add("e,action,mouse,move"); +strings[5866] = str->add("e"); +str->del(strings[5865]); +str->del(strings[5866]); +strings[5867] = str->add("e,action,mouse,move"); +strings[5868] = str->add("e"); +str->del(strings[5867]); +str->del(strings[5868]); +strings[5869] = str->add("e,action,mouse,move"); +strings[5870] = str->add("e"); +str->del(strings[5869]); +str->del(strings[5870]); +strings[5871] = str->add("e,action,mouse,move"); +strings[5872] = str->add("e"); +str->del(strings[5871]); +str->del(strings[5872]); +strings[5873] = str->add("e,action,mouse,move"); +strings[5874] = str->add("e"); +str->del(strings[5873]); +str->del(strings[5874]); +strings[5875] = str->add("e,action,mouse,move"); +strings[5876] = str->add("e"); +str->del(strings[5875]); +str->del(strings[5876]); +strings[1932] = str->add(strings[1932]); +strings[5877] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5877]); +str->del(strings[7]); +str->del(strings[2561]); +strings[7] = str->add(strings[7]); +strings[3580] = str->add(strings[3580]); +strings[5878] = str->add("e,action,mouse,move"); +strings[5879] = str->add("e"); +str->del(strings[5878]); +str->del(strings[5879]); +strings[5880] = str->add("e,action,mouse,move"); +strings[5881] = str->add("e"); +str->del(strings[5880]); +str->del(strings[5881]); +strings[5882] = str->add("e,action,mouse,move"); +strings[5883] = str->add("e"); +str->del(strings[5882]); +str->del(strings[5883]); +strings[1932] = str->add(strings[1932]); +strings[5884] = str->add("go_activeb24"); +strings[5885] = str->add("program,start"); +strings[5886] = str->add("go_activec24"); +strings[1932] = str->add(strings[1932]); +strings[5887] = str->add("go_activeb6"); +strings[5885] = str->add(strings[5885]); +strings[5888] = str->add("go_activec6"); +str->del(strings[1932]); +str->del(strings[5884]); +str->del(strings[5885]); +str->del(strings[5886]); +str->del(strings[1932]); +str->del(strings[5887]); +str->del(strings[5885]); +str->del(strings[5888]); +strings[5889] = str->add("e,action,mouse,move"); +strings[5890] = str->add("e"); +str->del(strings[5889]); +str->del(strings[5890]); +strings[5891] = str->add("e,action,mouse,move"); +strings[5892] = str->add("e"); +str->del(strings[5891]); +str->del(strings[5892]); +str->del(strings[7]); +str->del(strings[3580]); +strings[7] = str->add(strings[7]); +strings[1756] = str->add(strings[1756]); +strings[5893] = str->add("e,action,mouse,move"); +strings[5894] = str->add("e"); +str->del(strings[5893]); +str->del(strings[5894]); +strings[5895] = str->add("e,action,mouse,move"); +strings[5896] = str->add("e"); +strings[5897] = str->add("e,state,unselected"); +strings[5896] = str->add(strings[5896]); +strings[5897] = str->add(strings[5897]); +strings[5896] = str->add(strings[5896]); +strings[5897] = str->add(strings[5897]); +strings[5896] = str->add(strings[5896]); +strings[5897] = str->add(strings[5897]); +strings[5896] = str->add(strings[5896]); +strings[5897] = str->add(strings[5897]); +strings[5896] = str->add(strings[5896]); +strings[5898] = str->add("e,state,selected"); +strings[5896] = str->add(strings[5896]); +strings[5898] = str->add(strings[5898]); +strings[5896] = str->add(strings[5896]); +strings[5898] = str->add(strings[5898]); +strings[5896] = str->add(strings[5896]); +strings[5898] = str->add(strings[5898]); +strings[5896] = str->add(strings[5896]); +strings[5898] = str->add(strings[5898]); +strings[5896] = str->add(strings[5896]); +str->del(strings[5895]); +str->del(strings[5896]); +strings[1932] = str->add(strings[1932]); +strings[5899] = str->add("sel"); +strings[5900] = str->add("program,start"); +strings[5901] = str->add("unsel"); +str->del(strings[5897]); +str->del(strings[5896]); +str->del(strings[5897]); +str->del(strings[5896]); +strings[1932] = str->add(strings[1932]); +strings[5899] = str->add(strings[5899]); +strings[5900] = str->add(strings[5900]); +strings[5901] = str->add(strings[5901]); +str->del(strings[5897]); +str->del(strings[5896]); +strings[1932] = str->add(strings[1932]); +strings[5902] = str->add("e_in"); +strings[5900] = str->add(strings[5900]); +strings[5903] = str->add("e_out"); +str->del(strings[5897]); +str->del(strings[5896]); +str->del(strings[5897]); +str->del(strings[5896]); +strings[5900] = str->add(strings[5900]); +strings[5899] = str->add(strings[5899]); +str->del(strings[5898]); +str->del(strings[5896]); +str->del(strings[5898]); +str->del(strings[5896]); +strings[5900] = str->add(strings[5900]); +strings[5899] = str->add(strings[5899]); +str->del(strings[5898]); +str->del(strings[5896]); +str->del(strings[5898]); +str->del(strings[5896]); +str->del(strings[5898]); +str->del(strings[5896]); +str->del(strings[1932]); +str->del(strings[5899]); +str->del(strings[5900]); +str->del(strings[5901]); +str->del(strings[1932]); +str->del(strings[5899]); +str->del(strings[5900]); +str->del(strings[5901]); +str->del(strings[1932]); +str->del(strings[5902]); +str->del(strings[5900]); +str->del(strings[5903]); +str->del(strings[5900]); +str->del(strings[5899]); +str->del(strings[5900]); +str->del(strings[5899]); +strings[5904] = str->add("e,action,mouse,move"); +strings[5905] = str->add("e"); +str->del(strings[5904]); +str->del(strings[5905]); +strings[5906] = str->add("e,action,mouse,move"); +strings[5907] = str->add("e"); +str->del(strings[5906]); +str->del(strings[5907]); +strings[5908] = str->add("e,action,mouse,move"); +strings[5909] = str->add("e"); +str->del(strings[5908]); +str->del(strings[5909]); +strings[5910] = str->add("e,action,mouse,move"); +strings[5911] = str->add("e"); +str->del(strings[5910]); +str->del(strings[5911]); +strings[5912] = str->add("e,action,mouse,move"); +strings[5913] = str->add("e"); +str->del(strings[5912]); +str->del(strings[5913]); +strings[5914] = str->add("e,action,mouse,move"); +strings[5915] = str->add("e"); +str->del(strings[5914]); +str->del(strings[5915]); +strings[5916] = str->add("e,action,mouse,move"); +strings[5917] = str->add("e"); +str->del(strings[5916]); +str->del(strings[5917]); +strings[1932] = str->add(strings[1932]); +strings[5918] = str->add("go_activec21"); +strings[5919] = str->add("program,start"); +strings[5920] = str->add("go_activeb21"); +strings[1932] = str->add(strings[1932]); +strings[5921] = str->add("go_activec9"); +strings[5919] = str->add(strings[5919]); +strings[5922] = str->add("go_activeb9"); +str->del(strings[1932]); +str->del(strings[5918]); +str->del(strings[5919]); +str->del(strings[5920]); +str->del(strings[1932]); +str->del(strings[5921]); +str->del(strings[5919]); +str->del(strings[5922]); +str->del(strings[7]); +str->del(strings[1756]); +strings[7] = str->add(strings[7]); +strings[1949] = str->add(strings[1949]); +strings[5923] = str->add("e,action,mouse,move"); +strings[5924] = str->add("e"); +str->del(strings[5923]); +str->del(strings[5924]); +strings[5925] = str->add("e,action,mouse,move"); +strings[5926] = str->add("e"); +str->del(strings[5925]); +str->del(strings[5926]); +strings[5927] = str->add("e,action,mouse,move"); +strings[5928] = str->add("e"); +str->del(strings[5927]); +str->del(strings[5928]); +strings[5929] = str->add("e,action,mouse,move"); +strings[5930] = str->add("e"); +str->del(strings[5929]); +str->del(strings[5930]); +strings[5931] = str->add("e,action,mouse,move"); +strings[5932] = str->add("e"); +str->del(strings[5931]); +str->del(strings[5932]); +strings[5933] = str->add("e,action,mouse,move"); +strings[5934] = str->add("e"); +str->del(strings[5933]); +str->del(strings[5934]); +strings[1932] = str->add(strings[1932]); +strings[5935] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[5935] = str->add(strings[5935]); +str->del(strings[1932]); +str->del(strings[5935]); +str->del(strings[1932]); +str->del(strings[5935]); +str->del(strings[7]); +str->del(strings[1949]); +strings[7] = str->add(strings[7]); +strings[2915] = str->add(strings[2915]); +strings[5936] = str->add("e,action,mouse,move"); +strings[5937] = str->add("e"); +str->del(strings[5936]); +str->del(strings[5937]); +strings[5938] = str->add("e,action,mouse,move"); +strings[5939] = str->add("e"); +str->del(strings[5938]); +str->del(strings[5939]); +strings[1932] = str->add(strings[1932]); +strings[5940] = str->add("go_activec1"); +strings[5941] = str->add("program,start"); +strings[5942] = str->add("go_activeb1"); +strings[1932] = str->add(strings[1932]); +strings[5943] = str->add("go_activec29"); +strings[5941] = str->add(strings[5941]); +strings[5944] = str->add("go_activeb29"); +strings[1932] = str->add(strings[1932]); +strings[5945] = str->add("go_activeb23"); +strings[5941] = str->add(strings[5941]); +strings[5946] = str->add("go_activec23"); +strings[1932] = str->add(strings[1932]); +strings[5947] = str->add("go_activeb7"); +strings[5941] = str->add(strings[5941]); +strings[5948] = str->add("go_activec7"); +str->del(strings[1932]); +str->del(strings[5940]); +str->del(strings[5941]); +str->del(strings[5942]); +str->del(strings[1932]); +str->del(strings[5943]); +str->del(strings[5941]); +str->del(strings[5944]); +str->del(strings[1932]); +str->del(strings[5945]); +str->del(strings[5941]); +str->del(strings[5946]); +str->del(strings[1932]); +str->del(strings[5947]); +str->del(strings[5941]); +str->del(strings[5948]); +strings[5949] = str->add("e,action,mouse,move"); +strings[5950] = str->add("e"); +str->del(strings[5949]); +str->del(strings[5950]); +strings[5951] = str->add("e,action,mouse,move"); +strings[5952] = str->add("e"); +str->del(strings[5951]); +str->del(strings[5952]); +strings[5953] = str->add("e,action,mouse,move"); +strings[5954] = str->add("e"); +str->del(strings[5953]); +str->del(strings[5954]); +str->del(strings[7]); +str->del(strings[2915]); +strings[7] = str->add(strings[7]); +strings[2886] = str->add(strings[2886]); +strings[5955] = str->add("e,action,mouse,move"); +strings[5956] = str->add("e"); +str->del(strings[5955]); +str->del(strings[5956]); +strings[1932] = str->add(strings[1932]); +strings[5957] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[5957] = str->add(strings[5957]); +str->del(strings[1932]); +str->del(strings[5957]); +str->del(strings[1932]); +str->del(strings[5957]); +str->del(strings[7]); +str->del(strings[2886]); +strings[7] = str->add(strings[7]); +strings[2888] = str->add(strings[2888]); +strings[1932] = str->add(strings[1932]); +strings[5958] = str->add("e_out"); +str->del(strings[1932]); +str->del(strings[5958]); +strings[1932] = str->add(strings[1932]); +strings[5959] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[5959]); +str->del(strings[7]); +str->del(strings[2888]); +strings[7] = str->add(strings[7]); +strings[2913] = str->add(strings[2913]); +strings[5960] = str->add("e,action,mouse,move"); +strings[5961] = str->add("e"); +str->del(strings[5960]); +str->del(strings[5961]); +strings[5962] = str->add("e,action,mouse,move"); +strings[5963] = str->add("e"); +str->del(strings[5962]); +str->del(strings[5963]); +strings[5964] = str->add("e,action,mouse,move"); +strings[5965] = str->add("e"); +str->del(strings[5964]); +str->del(strings[5965]); +strings[5966] = str->add("e,action,mouse,move"); +strings[5967] = str->add("e"); +str->del(strings[5966]); +str->del(strings[5967]); +strings[5968] = str->add("e,action,mouse,move"); +strings[5969] = str->add("e"); +str->del(strings[5968]); +str->del(strings[5969]); +strings[5970] = str->add("e,action,mouse,move"); +strings[5971] = str->add("e"); +str->del(strings[5970]); +str->del(strings[5971]); +strings[1932] = str->add(strings[1932]); +strings[5972] = str->add("go_activec28"); +strings[5973] = str->add("program,start"); +strings[5974] = str->add("go_activeb28"); +strings[1932] = str->add(strings[1932]); +strings[5975] = str->add("go_activec2"); +strings[5973] = str->add(strings[5973]); +strings[5976] = str->add("go_activeb2"); +strings[1932] = str->add(strings[1932]); +strings[5977] = str->add("go_activeb22"); +strings[5973] = str->add(strings[5973]); +strings[5978] = str->add("go_activec22"); +strings[1932] = str->add(strings[1932]); +strings[5979] = str->add("go_activeb8"); +strings[5973] = str->add(strings[5973]); +strings[5980] = str->add("go_activec8"); +str->del(strings[1932]); +str->del(strings[5972]); +str->del(strings[5973]); +str->del(strings[5974]); +str->del(strings[1932]); +str->del(strings[5975]); +str->del(strings[5973]); +str->del(strings[5976]); +str->del(strings[1932]); +str->del(strings[5977]); +str->del(strings[5973]); +str->del(strings[5978]); +str->del(strings[1932]); +str->del(strings[5979]); +str->del(strings[5973]); +str->del(strings[5980]); +str->del(strings[7]); +str->del(strings[2913]); +strings[7] = str->add(strings[7]); +strings[3021] = str->add(strings[3021]); +str->del(strings[7]); +str->del(strings[3021]); +strings[7] = str->add(strings[7]); +strings[3695] = str->add(strings[3695]); +strings[5981] = str->add("e,action,mouse,move"); +strings[5982] = str->add("e"); +strings[5983] = str->add("e,action,mouse,down"); +strings[5982] = str->add(strings[5982]); +str->del(strings[5981]); +str->del(strings[5982]); +str->del(strings[5983]); +str->del(strings[5982]); +strings[1932] = str->add(strings[1932]); +strings[5984] = str->add("e_out"); +str->del(strings[1932]); +str->del(strings[5984]); +str->del(strings[7]); +str->del(strings[3695]); +strings[7] = str->add(strings[7]); +strings[3698] = str->add(strings[3698]); +strings[5985] = str->add("e,action,mouse,move"); +strings[5986] = str->add("e"); +strings[5987] = str->add("e,action,mouse,up"); +strings[5986] = str->add(strings[5986]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[64] = str->add(strings[64]); +strings[2770] = str->add(strings[2770]); +str->del(strings[64]); +str->del(strings[2770]); +strings[469] = str->add(strings[469]); +strings[2770] = str->add(strings[2770]); +strings[2770] = str->add(strings[2770]); +strings[469] = str->add(strings[469]); +strings[5988] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[3712] = str->add(strings[3712]); +strings[5989] = str->add("resize"); +strings[469] = str->add(strings[469]); +strings[4177] = str->add(strings[4177]); +strings[469] = str->add(strings[469]); +strings[4179] = str->add(strings[4179]); +strings[469] = str->add(strings[469]); +strings[4181] = str->add(strings[4181]); +strings[469] = str->add(strings[469]); +strings[5990] = str->add("images/267"); +strings[5991] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/267"); +strings[469] = str->add(strings[469]); +strings[5990] = str->add(strings[5990]); +strings[469] = str->add(strings[469]); +strings[4336] = str->add(strings[4336]); +strings[5992] = str->add("font"); +strings[5993] = str->add("font_fallbacks"); +strings[5994] = str->add("font_size"); +strings[5995] = str->add("font_source"); +strings[5996] = str->add("color"); +strings[5997] = str->add("underline_color"); +strings[5998] = str->add("underline2_color"); +strings[5999] = str->add("outline_color"); +strings[6000] = str->add("shadow_color"); +strings[6001] = str->add("glow_color"); +strings[6002] = str->add("glow2_color"); +strings[6003] = str->add("backing_color"); +strings[6004] = str->add("strikethrough_color"); +strings[6005] = str->add("align"); +strings[6006] = str->add("valign"); +strings[6007] = str->add("wrap"); +strings[6008] = str->add("left_margin"); +strings[6009] = str->add("right_margin"); +strings[6010] = str->add("underline"); +strings[6011] = str->add("strikethrough"); +strings[6012] = str->add("backing"); +strings[6013] = str->add("style"); +strings[6014] = str->add("tabstops"); +strings[6013] = str->add(strings[6013]); +strings[6015] = str->add("glow"); +str->del(strings[6013]); +str->del(strings[6015]); +strings[5996] = str->add(strings[5996]); +strings[6016] = str->add("#fff"); +str->del(strings[5996]); +str->del(strings[6016]); +strings[6002] = str->add(strings[6002]); +strings[6017] = str->add("#fe87"); +str->del(strings[6002]); +str->del(strings[6017]); +strings[6001] = str->add(strings[6001]); +strings[6018] = str->add("#fa14"); +str->del(strings[6001]); +str->del(strings[6018]); +strings[6005] = str->add(strings[6005]); +strings[6019] = str->add("center"); +str->del(strings[6005]); +str->del(strings[6019]); +strings[6007] = str->add(strings[6007]); +strings[6020] = str->add("word"); +str->del(strings[6007]); +str->del(strings[6020]); +strings[5995] = str->add(strings[5995]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5995]); +str->del(strings[469]); +strings[5994] = str->add(strings[5994]); +strings[6021] = str->add("12.000000"); +str->del(strings[5994]); +str->del(strings[6021]); +strings[5992] = str->add(strings[5992]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5992]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5992] = str->add(strings[5992]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5992]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6013] = str->add(strings[6013]); +strings[6022] = str->add("none"); +str->del(strings[6013]); +str->del(strings[6022]); +strings[5996] = str->add(strings[5996]); +strings[6023] = str->add("#0002"); +str->del(strings[5996]); +str->del(strings[6023]); +strings[5994] = str->add(strings[5994]); +strings[6024] = str->add("7.000000"); +strings[470] = str->add(strings[470]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +str->del(strings[5994]); +str->del(strings[6024]); +strings[5992] = str->add(strings[5992]); +strings[470] = str->add(strings[470]); +str->del(strings[5992]); +str->del(strings[470]); +strings[5992] = str->add(strings[5992]); +strings[5993] = str->add(strings[5993]); +strings[5994] = str->add(strings[5994]); +strings[5995] = str->add(strings[5995]); +strings[5996] = str->add(strings[5996]); +strings[5997] = str->add(strings[5997]); +strings[5998] = str->add(strings[5998]); +strings[5999] = str->add(strings[5999]); +strings[6000] = str->add(strings[6000]); +strings[6001] = str->add(strings[6001]); +strings[6002] = str->add(strings[6002]); +strings[6003] = str->add(strings[6003]); +strings[6004] = str->add(strings[6004]); +strings[6005] = str->add(strings[6005]); +strings[6006] = str->add(strings[6006]); +strings[6007] = str->add(strings[6007]); +strings[6008] = str->add(strings[6008]); +strings[6009] = str->add(strings[6009]); +strings[6010] = str->add(strings[6010]); +strings[6011] = str->add(strings[6011]); +strings[6012] = str->add(strings[6012]); +strings[6013] = str->add(strings[6013]); +strings[6014] = str->add(strings[6014]); +strings[6013] = str->add(strings[6013]); +strings[6025] = str->add("glow"); +str->del(strings[6013]); +str->del(strings[6025]); +strings[5996] = str->add(strings[5996]); +strings[6026] = str->add("#fff"); +str->del(strings[5996]); +str->del(strings[6026]); +strings[6002] = str->add(strings[6002]); +strings[6027] = str->add("#fe87"); +str->del(strings[6002]); +str->del(strings[6027]); +strings[6001] = str->add(strings[6001]); +strings[6028] = str->add("#fa14"); +str->del(strings[6001]); +str->del(strings[6028]); +strings[6005] = str->add(strings[6005]); +strings[6029] = str->add("center"); +str->del(strings[6005]); +str->del(strings[6029]); +strings[6007] = str->add(strings[6007]); +strings[6030] = str->add("word"); +str->del(strings[6007]); +str->del(strings[6030]); +strings[5995] = str->add(strings[5995]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[5995]); +str->del(strings[469]); +strings[5994] = str->add(strings[5994]); +strings[6031] = str->add("12.000000"); +str->del(strings[5994]); +str->del(strings[6031]); +strings[5992] = str->add(strings[5992]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[5992]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[5992] = str->add(strings[5992]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[5992]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6013] = str->add(strings[6013]); +strings[6032] = str->add("none"); +str->del(strings[6013]); +str->del(strings[6032]); +strings[5996] = str->add(strings[5996]); +strings[6033] = str->add("#0002"); +str->del(strings[5996]); +str->del(strings[6033]); +strings[5994] = str->add(strings[5994]); +strings[6034] = str->add("7.000000"); +str->del(strings[5994]); +str->del(strings[6034]); +strings[5992] = str->add(strings[5992]); +strings[470] = str->add(strings[470]); +str->del(strings[5992]); +str->del(strings[470]); +str->del(strings[5992]); +str->del(strings[5993]); +str->del(strings[5994]); +str->del(strings[5995]); +str->del(strings[5996]); +str->del(strings[5997]); +str->del(strings[5998]); +str->del(strings[5999]); +str->del(strings[6000]); +str->del(strings[6001]); +str->del(strings[6002]); +str->del(strings[6003]); +str->del(strings[6004]); +str->del(strings[6005]); +str->del(strings[6006]); +str->del(strings[6007]); +str->del(strings[6008]); +str->del(strings[6009]); +str->del(strings[6010]); +str->del(strings[6011]); +str->del(strings[6012]); +str->del(strings[6013]); +str->del(strings[6014]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[5992]); +str->del(strings[5993]); +str->del(strings[5994]); +str->del(strings[5995]); +str->del(strings[5996]); +str->del(strings[5997]); +str->del(strings[5998]); +str->del(strings[5999]); +str->del(strings[6000]); +str->del(strings[6001]); +str->del(strings[6002]); +str->del(strings[6003]); +str->del(strings[6004]); +str->del(strings[6005]); +str->del(strings[6006]); +str->del(strings[6007]); +str->del(strings[6008]); +str->del(strings[6009]); +str->del(strings[6010]); +str->del(strings[6011]); +str->del(strings[6012]); +str->del(strings[6013]); +str->del(strings[6014]); +strings[469] = str->add(strings[469]); +strings[4183] = str->add(strings[4183]); +strings[469] = str->add(strings[469]); +strings[4185] = str->add(strings[4185]); +strings[469] = str->add(strings[469]); +strings[4187] = str->add(strings[4187]); +strings[470] = str->add(strings[470]); +strings[3879] = str->add(strings[3879]); +strings[3879] = str->add(strings[3879]); +strings[3879] = str->add(strings[3879]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[376] = str->add(strings[376]); +strings[6035] = str->add("e,state,unfocused"); +strings[5986] = str->add(strings[5986]); +str->del(strings[5985]); +str->del(strings[5986]); +str->del(strings[5987]); +str->del(strings[5986]); +str->del(strings[5988]); +strings[6036] = str->add("program,start"); +strings[6037] = str->add("anim_sky1a"); +strings[6036] = str->add(strings[6036]); +strings[6038] = str->add("anim_sky4a"); +strings[6036] = str->add(strings[6036]); +strings[6039] = str->add("anim_sky2a"); +strings[6036] = str->add(strings[6036]); +strings[6040] = str->add("anim_sky3a"); +str->del(strings[1841]); +str->del(strings[5989]); +strings[6036] = str->add(strings[6036]); +strings[6041] = str->add("off"); +str->del(strings[6035]); +str->del(strings[5986]); +str->del(strings[6036]); +str->del(strings[6037]); +str->del(strings[6036]); +str->del(strings[6038]); +str->del(strings[6036]); +str->del(strings[6039]); +str->del(strings[6036]); +str->del(strings[6040]); +str->del(strings[6036]); +str->del(strings[6041]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2686]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4952]); +str->del(strings[4952]); +str->del(strings[4952]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2715]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2691]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2693]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4953]); +str->del(strings[4953]); +str->del(strings[4953]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2687]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2682]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4957]); +str->del(strings[4957]); +str->del(strings[4957]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2690]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4951]); +str->del(strings[4951]); +str->del(strings[4951]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2871]); +str->del(strings[4952]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2890]); +str->del(strings[2231]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2892]); +str->del(strings[2338]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[4965]); +str->del(strings[469]); +str->del(strings[4967]); +str->del(strings[4953]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2894]); +str->del(strings[1619]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2896]); +str->del(strings[2552]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[1712]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[4957]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2904]); +str->del(strings[1721]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[4951]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4956]); +str->del(strings[4956]); +str->del(strings[4956]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2672]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2673]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[4956]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3130]); +str->del(strings[1713]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3132]); +str->del(strings[1714]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[469]); +str->del(strings[2686]); +str->del(strings[4952]); +str->del(strings[469]); +str->del(strings[2715]); +str->del(strings[2231]); +str->del(strings[469]); +str->del(strings[2691]); +str->del(strings[2338]); +str->del(strings[469]); +str->del(strings[2693]); +str->del(strings[4953]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[4954]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[4955]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[1619]); +str->del(strings[469]); +str->del(strings[2682]); +str->del(strings[2552]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[1712]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[2224]); +str->del(strings[469]); +str->del(strings[2685]); +str->del(strings[4]); +str->del(strings[1926]); +str->del(strings[3083]); +str->del(strings[1925]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2713]); +str->del(strings[2536]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[4957]); +str->del(strings[469]); +str->del(strings[2708]); +str->del(strings[5146]); +str->del(strings[469]); +str->del(strings[2677]); +str->del(strings[1726]); +str->del(strings[469]); +str->del(strings[2678]); +str->del(strings[5147]); +str->del(strings[469]); +str->del(strings[2676]); +str->del(strings[1724]); +str->del(strings[469]); +str->del(strings[2675]); +str->del(strings[1722]); +str->del(strings[469]); +str->del(strings[2674]); +str->del(strings[5148]); +str->del(strings[469]); +str->del(strings[2690]); +str->del(strings[1721]); +str->del(strings[4951]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[4956]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2672]); +str->del(strings[1713]); +str->del(strings[469]); +str->del(strings[2673]); +str->del(strings[1714]); +strings[863] = str->add(strings[863]); +strings[64] = str->add(strings[64]); +strings[2578] = str->add(strings[2578]); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[6042] = str->add("load"); +strings[330] = str->add(strings[330]); +strings[6043] = str->add("resize"); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[330] = str->add(strings[330]); +strings[330] = str->add(strings[330]); +strings[1842] = str->add(strings[1842]); +str->del(strings[330]); +strings[64] = str->add(strings[64]); +strings[1865] = str->add(strings[1865]); +strings[330] = str->add(strings[330]); +str->del(strings[330]); +strings[64] = str->add(strings[64]); +strings[2276] = str->add(strings[2276]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[2292] = str->add(strings[2292]); +strings[330] = str->add(strings[330]); +str->del(strings[330]); +strings[330] = str->add(strings[330]); +str->del(strings[1842]); +strings[330] = str->add(strings[330]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[3279] = str->add(strings[3279]); +strings[64] = str->add(strings[64]); +strings[2310] = str->add(strings[2310]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[330] = str->add(strings[330]); +strings[330] = str->add(strings[330]); +strings[330] = str->add(strings[330]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[2085] = str->add(strings[2085]); +strings[2085] = str->add(strings[2085]); +strings[6043] = str->add(strings[6043]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[6042] = str->add(strings[6042]); +strings[1841] = str->add(strings[1841]); +str->del(strings[330]); +strings[330] = str->add(strings[330]); +str->del(strings[330]); +strings[330] = str->add(strings[330]); +str->del(strings[330]); +strings[330] = str->add(strings[330]); +str->del(strings[330]); +strings[330] = str->add(strings[330]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[6043] = str->add(strings[6043]); +str->del(strings[190]); +str->del(strings[329]); +str->del(strings[330]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[6044] = str->add("_theme_about"); +strings[330] = str->add(strings[330]); +strings[193] = str->add(strings[193]); +strings[6045] = str->add("font"); +strings[6046] = str->add("font_fallbacks"); +strings[6047] = str->add("font_size"); +strings[6048] = str->add("font_source"); +strings[6049] = str->add("color"); +strings[6050] = str->add("underline_color"); +strings[6051] = str->add("underline2_color"); +strings[6052] = str->add("outline_color"); +strings[6053] = str->add("shadow_color"); +strings[6054] = str->add("glow_color"); +strings[6055] = str->add("glow2_color"); +strings[6056] = str->add("backing_color"); +strings[6057] = str->add("strikethrough_color"); +strings[6058] = str->add("align"); +strings[6059] = str->add("valign"); +strings[6060] = str->add("wrap"); +strings[6061] = str->add("left_margin"); +strings[6062] = str->add("right_margin"); +strings[6063] = str->add("underline"); +strings[6064] = str->add("strikethrough"); +strings[6065] = str->add("backing"); +strings[6066] = str->add("style"); +strings[6067] = str->add("tabstops"); +strings[6058] = str->add(strings[6058]); +strings[6068] = str->add("center"); +str->del(strings[6058]); +str->del(strings[6068]); +strings[6049] = str->add(strings[6049]); +strings[6069] = str->add("#000"); +str->del(strings[6049]); +str->del(strings[6069]); +strings[6066] = str->add(strings[6066]); +strings[6070] = str->add("shadow"); +str->del(strings[6066]); +str->del(strings[6070]); +strings[6053] = str->add(strings[6053]); +strings[6071] = str->add("#ffffff80"); +str->del(strings[6053]); +str->del(strings[6071]); +strings[6060] = str->add(strings[6060]); +strings[6072] = str->add("word"); +str->del(strings[6060]); +str->del(strings[6072]); +strings[6048] = str->add(strings[6048]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6048]); +str->del(strings[469]); +strings[6047] = str->add(strings[6047]); +strings[6073] = str->add("10.000000"); +str->del(strings[6047]); +str->del(strings[6073]); +strings[6045] = str->add(strings[6045]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6045]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6066] = str->add(strings[6066]); +strings[6074] = str->add("glow"); +str->del(strings[6066]); +str->del(strings[6074]); +strings[6049] = str->add(strings[6049]); +strings[6075] = str->add("#fff"); +str->del(strings[6049]); +str->del(strings[6075]); +strings[6055] = str->add(strings[6055]); +strings[6076] = str->add("#fe87"); +str->del(strings[6055]); +str->del(strings[6076]); +strings[6054] = str->add(strings[6054]); +strings[6077] = str->add("#fa14"); +str->del(strings[6054]); +str->del(strings[6077]); +strings[6045] = str->add(strings[6045]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6045]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6066] = str->add(strings[6066]); +strings[6078] = str->add("glow"); +str->del(strings[6066]); +str->del(strings[6078]); +strings[6049] = str->add(strings[6049]); +strings[6079] = str->add("#fff"); +str->del(strings[6049]); +str->del(strings[6079]); +strings[6055] = str->add(strings[6055]); +strings[6080] = str->add("#fe87"); +str->del(strings[6055]); +str->del(strings[6080]); +strings[6054] = str->add(strings[6054]); +strings[6081] = str->add("#fa14"); +str->del(strings[6054]); +str->del(strings[6081]); +strings[6045] = str->add(strings[6045]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6045]); +str->del(strings[471]); +str->del(strings[6045]); +str->del(strings[6046]); +str->del(strings[6047]); +str->del(strings[6048]); +str->del(strings[6049]); +str->del(strings[6050]); +str->del(strings[6051]); +str->del(strings[6052]); +str->del(strings[6053]); +str->del(strings[6054]); +str->del(strings[6055]); +str->del(strings[6056]); +str->del(strings[6057]); +str->del(strings[6058]); +str->del(strings[6059]); +str->del(strings[6060]); +str->del(strings[6061]); +str->del(strings[6062]); +str->del(strings[6063]); +str->del(strings[6064]); +str->del(strings[6065]); +str->del(strings[6066]); +str->del(strings[6067]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[6082] = str->add("font"); +strings[6083] = str->add("font_fallbacks"); +strings[6084] = str->add("font_size"); +strings[6085] = str->add("font_source"); +strings[6086] = str->add("color"); +strings[6087] = str->add("underline_color"); +strings[6088] = str->add("underline2_color"); +strings[6089] = str->add("outline_color"); +strings[6090] = str->add("shadow_color"); +strings[6091] = str->add("glow_color"); +strings[6092] = str->add("glow2_color"); +strings[6093] = str->add("backing_color"); +strings[6094] = str->add("strikethrough_color"); +strings[6095] = str->add("align"); +strings[6096] = str->add("valign"); +strings[6097] = str->add("wrap"); +strings[6098] = str->add("left_margin"); +strings[6099] = str->add("right_margin"); +strings[6100] = str->add("underline"); +strings[6101] = str->add("strikethrough"); +strings[6102] = str->add("backing"); +strings[6103] = str->add("style"); +strings[6104] = str->add("tabstops"); +strings[6095] = str->add(strings[6095]); +strings[6105] = str->add("center"); +str->del(strings[6095]); +str->del(strings[6105]); +strings[6086] = str->add(strings[6086]); +strings[6106] = str->add("#000"); +str->del(strings[6086]); +str->del(strings[6106]); +strings[6103] = str->add(strings[6103]); +strings[6107] = str->add("shadow"); +str->del(strings[6103]); +str->del(strings[6107]); +strings[6090] = str->add(strings[6090]); +strings[6108] = str->add("#ffffff80"); +str->del(strings[6090]); +str->del(strings[6108]); +strings[6097] = str->add(strings[6097]); +strings[6109] = str->add("word"); +str->del(strings[6097]); +str->del(strings[6109]); +strings[6085] = str->add(strings[6085]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6085]); +str->del(strings[469]); +strings[6084] = str->add(strings[6084]); +strings[6110] = str->add("10.000000"); +str->del(strings[6084]); +str->del(strings[6110]); +strings[6082] = str->add(strings[6082]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6082]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6103] = str->add(strings[6103]); +strings[6111] = str->add("soft_shadow"); +str->del(strings[6103]); +str->del(strings[6111]); +strings[6086] = str->add(strings[6086]); +strings[6112] = str->add("#fff"); +str->del(strings[6086]); +str->del(strings[6112]); +strings[6090] = str->add(strings[6090]); +strings[6113] = str->add("#00000020"); +str->del(strings[6090]); +str->del(strings[6113]); +strings[6084] = str->add(strings[6084]); +strings[6114] = str->add("12.000000"); +str->del(strings[6084]); +str->del(strings[6114]); +strings[6082] = str->add(strings[6082]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6082]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[6082]); +str->del(strings[6083]); +str->del(strings[6084]); +str->del(strings[6085]); +str->del(strings[6086]); +str->del(strings[6087]); +str->del(strings[6088]); +str->del(strings[6089]); +str->del(strings[6090]); +str->del(strings[6091]); +str->del(strings[6092]); +str->del(strings[6093]); +str->del(strings[6094]); +str->del(strings[6095]); +str->del(strings[6096]); +str->del(strings[6097]); +str->del(strings[6098]); +str->del(strings[6099]); +str->del(strings[6100]); +str->del(strings[6101]); +str->del(strings[6102]); +str->del(strings[6103]); +str->del(strings[6104]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[6115] = str->add("go_activeb21"); +strings[6116] = str->add("program,start"); +strings[6117] = str->add("go_activec21"); +strings[1932] = str->add(strings[1932]); +strings[6118] = str->add("go_activeb9"); +strings[6116] = str->add(strings[6116]); +strings[6119] = str->add("go_activec9"); +str->del(strings[6042]); +str->del(strings[6043]); +str->del(strings[6043]); +str->del(strings[1841]); +str->del(strings[6042]); +str->del(strings[1841]); +str->del(strings[6043]); +str->del(strings[1932]); +str->del(strings[6115]); +str->del(strings[6116]); +str->del(strings[6117]); +str->del(strings[1932]); +str->del(strings[6118]); +str->del(strings[6116]); +str->del(strings[6119]); +strings[64] = str->add(strings[64]); +strings[2595] = str->add(strings[2595]); +strings[6120] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[6120] = str->add(strings[6120]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[4503] = str->add(strings[4503]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[6121] = str->add("resize"); +strings[1933] = str->add(strings[1933]); +str->del(strings[6120]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[6120] = str->add(strings[6120]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[6121] = str->add(strings[6121]); +strings[6122] = str->add("e,action,mouse,move"); +strings[6123] = str->add("e"); +strings[6122] = str->add(strings[6122]); +strings[6123] = str->add(strings[6123]); +strings[6122] = str->add(strings[6122]); +strings[6123] = str->add(strings[6123]); +strings[6122] = str->add(strings[6122]); +strings[6123] = str->add(strings[6123]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +str->del(strings[6120]); +str->del(strings[1841]); +str->del(strings[6121]); +str->del(strings[6120]); +str->del(strings[1841]); +str->del(strings[6121]); +str->del(strings[6122]); +str->del(strings[6123]); +str->del(strings[6122]); +str->del(strings[6123]); +str->del(strings[6122]); +str->del(strings[6123]); +str->del(strings[6122]); +str->del(strings[6123]); +str->del(strings[1737]); +str->del(strings[1856]); +str->del(strings[190]); +str->del(strings[6044]); +str->del(strings[330]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[6124] = str->add("_theme_about"); +strings[330] = str->add(strings[330]); +strings[193] = str->add(strings[193]); +strings[6125] = str->add("font"); +strings[6126] = str->add("font_fallbacks"); +strings[6127] = str->add("font_size"); +strings[6128] = str->add("font_source"); +strings[6129] = str->add("color"); +strings[6130] = str->add("underline_color"); +strings[6131] = str->add("underline2_color"); +strings[6132] = str->add("outline_color"); +strings[6133] = str->add("shadow_color"); +strings[6134] = str->add("glow_color"); +strings[6135] = str->add("glow2_color"); +strings[6136] = str->add("backing_color"); +strings[6137] = str->add("strikethrough_color"); +strings[6138] = str->add("align"); +strings[6139] = str->add("valign"); +strings[6140] = str->add("wrap"); +strings[6141] = str->add("left_margin"); +strings[6142] = str->add("right_margin"); +strings[6143] = str->add("underline"); +strings[6144] = str->add("strikethrough"); +strings[6145] = str->add("backing"); +strings[6146] = str->add("style"); +strings[6147] = str->add("tabstops"); +strings[6138] = str->add(strings[6138]); +strings[6148] = str->add("center"); +str->del(strings[6138]); +str->del(strings[6148]); +strings[6129] = str->add(strings[6129]); +strings[6149] = str->add("#000"); +str->del(strings[6129]); +str->del(strings[6149]); +strings[6146] = str->add(strings[6146]); +strings[6150] = str->add("shadow"); +str->del(strings[6146]); +str->del(strings[6150]); +strings[6133] = str->add(strings[6133]); +strings[6151] = str->add("#ffffff80"); +str->del(strings[6133]); +str->del(strings[6151]); +strings[6140] = str->add(strings[6140]); +strings[6152] = str->add("word"); +str->del(strings[6140]); +str->del(strings[6152]); +strings[6128] = str->add(strings[6128]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6128]); +str->del(strings[469]); +strings[6127] = str->add(strings[6127]); +strings[6153] = str->add("10.000000"); +str->del(strings[6127]); +str->del(strings[6153]); +strings[6125] = str->add(strings[6125]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6125]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6146] = str->add(strings[6146]); +strings[6154] = str->add("glow"); +str->del(strings[6146]); +str->del(strings[6154]); +strings[6129] = str->add(strings[6129]); +strings[6155] = str->add("#fff"); +str->del(strings[6129]); +str->del(strings[6155]); +strings[6135] = str->add(strings[6135]); +strings[6156] = str->add("#fe87"); +str->del(strings[6135]); +str->del(strings[6156]); +strings[6134] = str->add(strings[6134]); +strings[6157] = str->add("#fa14"); +str->del(strings[6134]); +str->del(strings[6157]); +strings[6125] = str->add(strings[6125]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6125]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6146] = str->add(strings[6146]); +strings[6158] = str->add("glow"); +str->del(strings[6146]); +str->del(strings[6158]); +strings[6129] = str->add(strings[6129]); +strings[6159] = str->add("#fff"); +str->del(strings[6129]); +str->del(strings[6159]); +strings[6135] = str->add(strings[6135]); +strings[6160] = str->add("#fe87"); +str->del(strings[6135]); +str->del(strings[6160]); +strings[6134] = str->add(strings[6134]); +strings[6161] = str->add("#fa14"); +str->del(strings[6134]); +str->del(strings[6161]); +strings[6125] = str->add(strings[6125]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6125]); +str->del(strings[471]); +str->del(strings[6125]); +str->del(strings[6126]); +str->del(strings[6127]); +str->del(strings[6128]); +str->del(strings[6129]); +str->del(strings[6130]); +str->del(strings[6131]); +str->del(strings[6132]); +str->del(strings[6133]); +str->del(strings[6134]); +str->del(strings[6135]); +str->del(strings[6136]); +str->del(strings[6137]); +str->del(strings[6138]); +str->del(strings[6139]); +str->del(strings[6140]); +str->del(strings[6141]); +str->del(strings[6142]); +str->del(strings[6143]); +str->del(strings[6144]); +str->del(strings[6145]); +str->del(strings[6146]); +str->del(strings[6147]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[6162] = str->add("font"); +strings[6163] = str->add("font_fallbacks"); +strings[6164] = str->add("font_size"); +strings[6165] = str->add("font_source"); +strings[6166] = str->add("color"); +strings[6167] = str->add("underline_color"); +strings[6168] = str->add("underline2_color"); +strings[6169] = str->add("outline_color"); +strings[6170] = str->add("shadow_color"); +strings[6171] = str->add("glow_color"); +strings[6172] = str->add("glow2_color"); +strings[6173] = str->add("backing_color"); +strings[6174] = str->add("strikethrough_color"); +strings[6175] = str->add("align"); +strings[6176] = str->add("valign"); +strings[6177] = str->add("wrap"); +strings[6178] = str->add("left_margin"); +strings[6179] = str->add("right_margin"); +strings[6180] = str->add("underline"); +strings[6181] = str->add("strikethrough"); +strings[6182] = str->add("backing"); +strings[6183] = str->add("style"); +strings[6184] = str->add("tabstops"); +strings[6175] = str->add(strings[6175]); +strings[6185] = str->add("center"); +str->del(strings[6175]); +str->del(strings[6185]); +strings[6166] = str->add(strings[6166]); +strings[6186] = str->add("#000"); +str->del(strings[6166]); +str->del(strings[6186]); +strings[6183] = str->add(strings[6183]); +strings[6187] = str->add("shadow"); +str->del(strings[6183]); +str->del(strings[6187]); +strings[6170] = str->add(strings[6170]); +strings[6188] = str->add("#ffffff80"); +str->del(strings[6170]); +str->del(strings[6188]); +strings[6177] = str->add(strings[6177]); +strings[6189] = str->add("word"); +str->del(strings[6177]); +str->del(strings[6189]); +strings[6165] = str->add(strings[6165]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6165]); +str->del(strings[469]); +strings[6164] = str->add(strings[6164]); +strings[6190] = str->add("10.000000"); +str->del(strings[6164]); +str->del(strings[6190]); +strings[6162] = str->add(strings[6162]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6162]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6183] = str->add(strings[6183]); +strings[6191] = str->add("soft_shadow"); +str->del(strings[6183]); +str->del(strings[6191]); +strings[6166] = str->add(strings[6166]); +strings[6192] = str->add("#fff"); +str->del(strings[6166]); +str->del(strings[6192]); +strings[6170] = str->add(strings[6170]); +strings[6193] = str->add("#00000020"); +str->del(strings[6170]); +str->del(strings[6193]); +strings[6164] = str->add(strings[6164]); +strings[6194] = str->add("12.000000"); +str->del(strings[6164]); +str->del(strings[6194]); +strings[6162] = str->add(strings[6162]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6162]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[6162]); +str->del(strings[6163]); +str->del(strings[6164]); +str->del(strings[6165]); +str->del(strings[6166]); +str->del(strings[6167]); +str->del(strings[6168]); +str->del(strings[6169]); +str->del(strings[6170]); +str->del(strings[6171]); +str->del(strings[6172]); +str->del(strings[6173]); +str->del(strings[6174]); +str->del(strings[6175]); +str->del(strings[6176]); +str->del(strings[6177]); +str->del(strings[6178]); +str->del(strings[6179]); +str->del(strings[6180]); +str->del(strings[6181]); +str->del(strings[6182]); +str->del(strings[6183]); +str->del(strings[6184]); +strings[6195] = str->add("font"); +strings[6196] = str->add("font_fallbacks"); +strings[6197] = str->add("font_size"); +strings[6198] = str->add("font_source"); +strings[6199] = str->add("color"); +strings[6200] = str->add("underline_color"); +strings[6201] = str->add("underline2_color"); +strings[6202] = str->add("outline_color"); +strings[6203] = str->add("shadow_color"); +strings[6204] = str->add("glow_color"); +strings[6205] = str->add("glow2_color"); +strings[6206] = str->add("backing_color"); +strings[6207] = str->add("strikethrough_color"); +strings[6208] = str->add("align"); +strings[6209] = str->add("valign"); +strings[6210] = str->add("wrap"); +strings[6211] = str->add("left_margin"); +strings[6212] = str->add("right_margin"); +strings[6213] = str->add("underline"); +strings[6214] = str->add("strikethrough"); +strings[6215] = str->add("backing"); +strings[6216] = str->add("style"); +strings[6217] = str->add("tabstops"); +strings[6208] = str->add(strings[6208]); +strings[6218] = str->add("center"); +str->del(strings[6208]); +str->del(strings[6218]); +strings[6199] = str->add(strings[6199]); +strings[6219] = str->add("#000"); +str->del(strings[6199]); +str->del(strings[6219]); +strings[6216] = str->add(strings[6216]); +strings[6220] = str->add("shadow"); +str->del(strings[6216]); +str->del(strings[6220]); +strings[6203] = str->add(strings[6203]); +strings[6221] = str->add("#ffffff80"); +str->del(strings[6203]); +str->del(strings[6221]); +strings[6210] = str->add(strings[6210]); +strings[6222] = str->add("word"); +str->del(strings[6210]); +str->del(strings[6222]); +strings[6198] = str->add(strings[6198]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6198]); +str->del(strings[469]); +strings[6197] = str->add(strings[6197]); +strings[6223] = str->add("10.000000"); +str->del(strings[6197]); +str->del(strings[6223]); +strings[6195] = str->add(strings[6195]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6195]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6216] = str->add(strings[6216]); +strings[6224] = str->add("soft_shadow"); +str->del(strings[6216]); +str->del(strings[6224]); +strings[6199] = str->add(strings[6199]); +strings[6225] = str->add("#fff"); +str->del(strings[6199]); +str->del(strings[6225]); +strings[6203] = str->add(strings[6203]); +strings[6226] = str->add("#00000020"); +str->del(strings[6203]); +str->del(strings[6226]); +strings[6197] = str->add(strings[6197]); +strings[6227] = str->add("12.000000"); +str->del(strings[6197]); +str->del(strings[6227]); +strings[6195] = str->add(strings[6195]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6195]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[6195]); +str->del(strings[6196]); +str->del(strings[6197]); +str->del(strings[6198]); +str->del(strings[6199]); +str->del(strings[6200]); +str->del(strings[6201]); +str->del(strings[6202]); +str->del(strings[6203]); +str->del(strings[6204]); +str->del(strings[6205]); +str->del(strings[6206]); +str->del(strings[6207]); +str->del(strings[6208]); +str->del(strings[6209]); +str->del(strings[6210]); +str->del(strings[6211]); +str->del(strings[6212]); +str->del(strings[6213]); +str->del(strings[6214]); +str->del(strings[6215]); +str->del(strings[6216]); +str->del(strings[6217]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[6228] = str->add("font"); +strings[6229] = str->add("font_fallbacks"); +strings[6230] = str->add("font_size"); +strings[6231] = str->add("font_source"); +strings[6232] = str->add("color"); +strings[6233] = str->add("underline_color"); +strings[6234] = str->add("underline2_color"); +strings[6235] = str->add("outline_color"); +strings[6236] = str->add("shadow_color"); +strings[6237] = str->add("glow_color"); +strings[6238] = str->add("glow2_color"); +strings[6239] = str->add("backing_color"); +strings[6240] = str->add("strikethrough_color"); +strings[6241] = str->add("align"); +strings[6242] = str->add("valign"); +strings[6243] = str->add("wrap"); +strings[6244] = str->add("left_margin"); +strings[6245] = str->add("right_margin"); +strings[6246] = str->add("underline"); +strings[6247] = str->add("strikethrough"); +strings[6248] = str->add("backing"); +strings[6249] = str->add("style"); +strings[6250] = str->add("tabstops"); +strings[6241] = str->add(strings[6241]); +strings[6251] = str->add("center"); +str->del(strings[6241]); +str->del(strings[6251]); +strings[6232] = str->add(strings[6232]); +strings[6252] = str->add("#000"); +str->del(strings[6232]); +str->del(strings[6252]); +strings[6249] = str->add(strings[6249]); +strings[6253] = str->add("shadow"); +str->del(strings[6249]); +str->del(strings[6253]); +strings[6236] = str->add(strings[6236]); +strings[6254] = str->add("#ffffff80"); +str->del(strings[6236]); +str->del(strings[6254]); +strings[6243] = str->add(strings[6243]); +strings[6255] = str->add("word"); +str->del(strings[6243]); +str->del(strings[6255]); +strings[6231] = str->add(strings[6231]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6231]); +str->del(strings[469]); +strings[6230] = str->add(strings[6230]); +strings[6256] = str->add("10.000000"); +str->del(strings[6230]); +str->del(strings[6256]); +strings[6228] = str->add(strings[6228]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6228]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6249] = str->add(strings[6249]); +strings[6257] = str->add("soft_shadow"); +str->del(strings[6249]); +str->del(strings[6257]); +strings[6232] = str->add(strings[6232]); +strings[6258] = str->add("#fff"); +str->del(strings[6232]); +str->del(strings[6258]); +strings[6236] = str->add(strings[6236]); +strings[6259] = str->add("#00000020"); +str->del(strings[6236]); +str->del(strings[6259]); +strings[6230] = str->add(strings[6230]); +strings[6260] = str->add("12.000000"); +str->del(strings[6230]); +str->del(strings[6260]); +strings[6228] = str->add(strings[6228]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6228]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[6228]); +str->del(strings[6229]); +str->del(strings[6230]); +str->del(strings[6231]); +str->del(strings[6232]); +str->del(strings[6233]); +str->del(strings[6234]); +str->del(strings[6235]); +str->del(strings[6236]); +str->del(strings[6237]); +str->del(strings[6238]); +str->del(strings[6239]); +str->del(strings[6240]); +str->del(strings[6241]); +str->del(strings[6242]); +str->del(strings[6243]); +str->del(strings[6244]); +str->del(strings[6245]); +str->del(strings[6246]); +str->del(strings[6247]); +str->del(strings[6248]); +str->del(strings[6249]); +str->del(strings[6250]); +str->del(strings[7]); +str->del(strings[3698]); +strings[7] = str->add(strings[7]); +strings[3703] = str->add(strings[3703]); +strings[1932] = str->add(strings[1932]); +strings[1845] = str->add(strings[1845]); +strings[6261] = str->add("program,start"); +strings[1846] = str->add(strings[1846]); +strings[1932] = str->add(strings[1932]); +strings[1846] = str->add(strings[1846]); +strings[6261] = str->add(strings[6261]); +strings[1845] = str->add(strings[1845]); +strings[1932] = str->add(strings[1932]); +strings[6262] = str->add("go_activec27"); +strings[6261] = str->add(strings[6261]); +strings[6263] = str->add("go_activeb27"); +strings[1932] = str->add(strings[1932]); +strings[6264] = str->add("go_activec3"); +strings[6261] = str->add(strings[6261]); +strings[6265] = str->add("go_activeb3"); +str->del(strings[1932]); +str->del(strings[1845]); +str->del(strings[6261]); +str->del(strings[1846]); +str->del(strings[1932]); +str->del(strings[1846]); +str->del(strings[6261]); +str->del(strings[1845]); +str->del(strings[1932]); +str->del(strings[6262]); +str->del(strings[6261]); +str->del(strings[6263]); +str->del(strings[1932]); +str->del(strings[6264]); +str->del(strings[6261]); +str->del(strings[6265]); +strings[6266] = str->add("e,action,mouse,move"); +strings[6267] = str->add("e"); +strings[6268] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6266]); +str->del(strings[6267]); +str->del(strings[6268]); +str->del(strings[1856]); +str->del(strings[469]); +str->del(strings[3094]); +strings[6269] = str->add("e,action,mouse,move"); +strings[6270] = str->add("e"); +strings[6271] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +strings[6269] = str->add(strings[6269]); +strings[6270] = str->add(strings[6270]); +strings[6271] = str->add(strings[6271]); +strings[1856] = str->add(strings[1856]); +strings[6269] = str->add(strings[6269]); +strings[6270] = str->add(strings[6270]); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6269]); +str->del(strings[6270]); +str->del(strings[6271]); +str->del(strings[1856]); +str->del(strings[6269]); +str->del(strings[6270]); +str->del(strings[6271]); +str->del(strings[1856]); +str->del(strings[6269]); +str->del(strings[6270]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1853]); +strings[6272] = str->add("e,action,mouse,move"); +strings[6273] = str->add("e"); +strings[6274] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6272]); +str->del(strings[6273]); +str->del(strings[6274]); +str->del(strings[1853]); +strings[6275] = str->add("e,action,mouse,move"); +strings[6276] = str->add("e"); +strings[6277] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6275] = str->add(strings[6275]); +strings[6276] = str->add(strings[6276]); +strings[6277] = str->add(strings[6277]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6275]); +str->del(strings[6276]); +str->del(strings[6277]); +str->del(strings[1853]); +str->del(strings[6275]); +str->del(strings[6276]); +str->del(strings[6277]); +str->del(strings[1853]); +strings[6278] = str->add("e,action,mouse,move"); +strings[6279] = str->add("e"); +strings[6280] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6278]); +str->del(strings[6279]); +str->del(strings[6280]); +str->del(strings[1853]); +strings[6281] = str->add("e,action,mouse,move"); +strings[6282] = str->add("e"); +strings[6283] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6281]); +str->del(strings[6282]); +str->del(strings[6283]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[3703]); +strings[7] = str->add(strings[7]); +strings[2990] = str->add(strings[2990]); +strings[6284] = str->add("e,action,mouse,move"); +strings[6285] = str->add("e"); +strings[6286] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6284] = str->add(strings[6284]); +strings[6285] = str->add(strings[6285]); +strings[6286] = str->add(strings[6286]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6284]); +str->del(strings[6285]); +str->del(strings[6286]); +str->del(strings[1853]); +str->del(strings[6284]); +str->del(strings[6285]); +str->del(strings[6286]); +str->del(strings[1853]); +strings[6287] = str->add("e,action,mouse,move"); +strings[6288] = str->add("e"); +strings[6289] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6287]); +str->del(strings[6288]); +str->del(strings[6289]); +str->del(strings[1853]); +strings[6290] = str->add("e,action,mouse,move"); +strings[6291] = str->add("e"); +strings[6292] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6290]); +str->del(strings[6291]); +str->del(strings[6292]); +str->del(strings[1853]); +strings[1932] = str->add(strings[1932]); +strings[6293] = str->add("go_activeb1"); +strings[6294] = str->add("program,start"); +strings[6295] = str->add("go_activec1"); +strings[1932] = str->add(strings[1932]); +strings[6296] = str->add("go_activeb29"); +strings[6294] = str->add(strings[6294]); +strings[6297] = str->add("go_activec29"); +str->del(strings[1932]); +str->del(strings[6293]); +str->del(strings[6294]); +str->del(strings[6295]); +str->del(strings[1932]); +str->del(strings[6296]); +str->del(strings[6294]); +str->del(strings[6297]); +strings[6298] = str->add("e,action,mouse,move"); +strings[6299] = str->add("e"); +strings[6300] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6298] = str->add(strings[6298]); +strings[6299] = str->add(strings[6299]); +strings[6300] = str->add(strings[6300]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6298]); +str->del(strings[6299]); +str->del(strings[6300]); +str->del(strings[1853]); +str->del(strings[6298]); +str->del(strings[6299]); +str->del(strings[6300]); +str->del(strings[1853]); +strings[6301] = str->add("e,action,mouse,move"); +strings[6302] = str->add("e"); +strings[6303] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6301]); +str->del(strings[6302]); +str->del(strings[6303]); +str->del(strings[1853]); +strings[6304] = str->add("e,action,mouse,move"); +strings[6305] = str->add("e"); +strings[6306] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6304]); +str->del(strings[6305]); +str->del(strings[6306]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[2990]); +strings[7] = str->add(strings[7]); +strings[3027] = str->add(strings[3027]); +strings[6307] = str->add("e,action,mouse,move"); +strings[6308] = str->add("e"); +strings[6309] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6307] = str->add(strings[6307]); +strings[6308] = str->add(strings[6308]); +strings[6309] = str->add(strings[6309]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6307]); +str->del(strings[6308]); +str->del(strings[6309]); +str->del(strings[1853]); +str->del(strings[6307]); +str->del(strings[6308]); +str->del(strings[6309]); +str->del(strings[1853]); +strings[6310] = str->add("e,action,mouse,move"); +strings[6311] = str->add("e"); +strings[6312] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6310]); +str->del(strings[6311]); +str->del(strings[6312]); +str->del(strings[1853]); +strings[6313] = str->add("e,action,mouse,move"); +strings[6314] = str->add("e"); +strings[6315] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6313]); +str->del(strings[6314]); +str->del(strings[6315]); +str->del(strings[1853]); +strings[6316] = str->add("e,action,mouse,move"); +strings[6317] = str->add("e"); +strings[6318] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6316] = str->add(strings[6316]); +strings[6317] = str->add(strings[6317]); +strings[6318] = str->add(strings[6318]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6316]); +str->del(strings[6317]); +str->del(strings[6318]); +str->del(strings[1853]); +str->del(strings[6316]); +str->del(strings[6317]); +str->del(strings[6318]); +str->del(strings[1853]); +strings[6319] = str->add("e,action,mouse,move"); +strings[6320] = str->add("e"); +strings[6321] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6319]); +str->del(strings[6320]); +str->del(strings[6321]); +str->del(strings[1853]); +strings[6322] = str->add("e,action,mouse,move"); +strings[6323] = str->add("e"); +strings[6324] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6322]); +str->del(strings[6323]); +str->del(strings[6324]); +str->del(strings[1853]); +strings[6325] = str->add("e,action,mouse,move"); +strings[6326] = str->add("e"); +strings[6327] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6325]); +str->del(strings[6326]); +str->del(strings[6327]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[3027]); +strings[7] = str->add(strings[7]); +strings[3033] = str->add(strings[3033]); +strings[6328] = str->add("e,action,mouse,move"); +strings[6329] = str->add("e"); +strings[6330] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6328] = str->add(strings[6328]); +strings[6329] = str->add(strings[6329]); +strings[6330] = str->add(strings[6330]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6328]); +str->del(strings[6329]); +str->del(strings[6330]); +str->del(strings[1853]); +str->del(strings[6328]); +str->del(strings[6329]); +str->del(strings[6330]); +str->del(strings[1853]); +strings[6331] = str->add("e,action,mouse,move"); +strings[6332] = str->add("e"); +strings[6333] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6331]); +str->del(strings[6332]); +str->del(strings[6333]); +str->del(strings[1853]); +strings[6334] = str->add("e,action,mouse,move"); +strings[6335] = str->add("e"); +strings[6336] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6334]); +str->del(strings[6335]); +str->del(strings[6336]); +str->del(strings[1853]); +strings[1932] = str->add(strings[1932]); +strings[6337] = str->add("go_activec26"); +strings[6338] = str->add("program,start"); +strings[6339] = str->add("go_activeb26"); +strings[1932] = str->add(strings[1932]); +strings[6340] = str->add("go_activec4"); +strings[6338] = str->add(strings[6338]); +strings[6341] = str->add("go_activeb4"); +str->del(strings[1932]); +str->del(strings[6337]); +str->del(strings[6338]); +str->del(strings[6339]); +str->del(strings[1932]); +str->del(strings[6340]); +str->del(strings[6338]); +str->del(strings[6341]); +strings[6342] = str->add("e,action,mouse,move"); +strings[6343] = str->add("e"); +strings[6344] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6342] = str->add(strings[6342]); +strings[6343] = str->add(strings[6343]); +strings[6344] = str->add(strings[6344]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6342]); +str->del(strings[6343]); +str->del(strings[6344]); +str->del(strings[1853]); +str->del(strings[6342]); +str->del(strings[6343]); +str->del(strings[6344]); +str->del(strings[1853]); +strings[6345] = str->add("e,action,mouse,move"); +strings[6346] = str->add("e"); +strings[6347] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6345]); +str->del(strings[6346]); +str->del(strings[6347]); +str->del(strings[1853]); +strings[6348] = str->add("e,action,mouse,move"); +strings[6349] = str->add("e"); +strings[6350] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6348]); +str->del(strings[6349]); +str->del(strings[6350]); +str->del(strings[1853]); +strings[1932] = str->add(strings[1932]); +strings[6351] = str->add("off"); +str->del(strings[1932]); +str->del(strings[6351]); +str->del(strings[7]); +str->del(strings[3033]); +strings[7] = str->add(strings[7]); +strings[2062] = str->add(strings[2062]); +strings[6352] = str->add("e,action,mouse,move"); +strings[6353] = str->add("e"); +strings[6354] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[6352] = str->add(strings[6352]); +strings[6353] = str->add(strings[6353]); +strings[6354] = str->add(strings[6354]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6352]); +str->del(strings[6353]); +str->del(strings[6354]); +str->del(strings[1853]); +str->del(strings[6352]); +str->del(strings[6353]); +str->del(strings[6354]); +str->del(strings[1853]); +strings[6355] = str->add("e,action,mouse,move"); +strings[6356] = str->add("e"); +strings[6357] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6355]); +str->del(strings[6356]); +str->del(strings[6357]); +str->del(strings[1853]); +strings[6358] = str->add("e,action,mouse,move"); +strings[6359] = str->add("e"); +strings[6360] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6358]); +str->del(strings[6359]); +str->del(strings[6360]); +str->del(strings[1853]); +strings[6361] = str->add("e,action,mouse,move"); +strings[6362] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +strings[6361] = str->add(strings[6361]); +strings[6362] = str->add(strings[6362]); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1862] = str->add(strings[1862]); +str->del(strings[6361]); +str->del(strings[6362]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[1737]); +str->del(strings[1856]); +str->del(strings[6361]); +str->del(strings[6362]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1862]); +strings[6363] = str->add("e,action,mouse,move"); +strings[6364] = str->add("e"); +strings[6365] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6363]); +str->del(strings[6364]); +str->del(strings[6365]); +str->del(strings[1862]); +strings[6366] = str->add("e,action,mouse,move"); +strings[6367] = str->add("e"); +strings[6368] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6366]); +str->del(strings[6367]); +str->del(strings[6368]); +str->del(strings[1862]); +strings[1932] = str->add(strings[1932]); +strings[6369] = str->add("go_activeb28"); +strings[6370] = str->add("program,start"); +strings[6371] = str->add("go_activec28"); +strings[1932] = str->add(strings[1932]); +strings[6372] = str->add("go_activeb2"); +strings[6370] = str->add(strings[6370]); +strings[6373] = str->add("go_activec2"); +str->del(strings[1932]); +str->del(strings[6369]); +str->del(strings[6370]); +str->del(strings[6371]); +str->del(strings[1932]); +str->del(strings[6372]); +str->del(strings[6370]); +str->del(strings[6373]); +str->del(strings[7]); +str->del(strings[2062]); +strings[7] = str->add(strings[7]); +strings[3100] = str->add(strings[3100]); +strings[6374] = str->add("e,action,mouse,move"); +strings[6375] = str->add("e"); +strings[6376] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +strings[6374] = str->add(strings[6374]); +strings[6375] = str->add(strings[6375]); +strings[6376] = str->add(strings[6376]); +strings[1862] = str->add(strings[1862]); +str->del(strings[6374]); +str->del(strings[6375]); +str->del(strings[6376]); +str->del(strings[1862]); +str->del(strings[6374]); +str->del(strings[6375]); +str->del(strings[6376]); +str->del(strings[1862]); +strings[6377] = str->add("e,action,mouse,move"); +strings[6378] = str->add("e"); +strings[6379] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6377]); +str->del(strings[6378]); +str->del(strings[6379]); +str->del(strings[1862]); +strings[6380] = str->add("e,action,mouse,move"); +strings[6381] = str->add("e"); +strings[6382] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6380]); +str->del(strings[6381]); +str->del(strings[6382]); +str->del(strings[1862]); +strings[6383] = str->add("e,action,mouse,move"); +strings[6384] = str->add("e"); +strings[6385] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6383]); +str->del(strings[6384]); +str->del(strings[6385]); +str->del(strings[1862]); +strings[6386] = str->add("e,action,mouse,move"); +strings[6387] = str->add("e"); +strings[6388] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6386]); +str->del(strings[6387]); +str->del(strings[6388]); +str->del(strings[1862]); +strings[6389] = str->add("e,action,mouse,move"); +strings[6390] = str->add("e"); +strings[6391] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6389]); +str->del(strings[6390]); +str->del(strings[6391]); +str->del(strings[1862]); +strings[6392] = str->add("e,action,mouse,move"); +strings[6393] = str->add("e"); +strings[6394] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6392]); +str->del(strings[6393]); +str->del(strings[6394]); +str->del(strings[1862]); +strings[6395] = str->add("e,action,mouse,move"); +strings[6396] = str->add("e"); +strings[6397] = str->add("mouse,move"); +strings[1862] = str->add(strings[1862]); +str->del(strings[6395]); +str->del(strings[6396]); +str->del(strings[6397]); +str->del(strings[1862]); +str->del(strings[7]); +str->del(strings[3100]); +strings[7] = str->add(strings[7]); +strings[3111] = str->add(strings[3111]); +strings[6398] = str->add("e,action,mouse,move"); +strings[6399] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1862] = str->add(strings[1862]); +strings[1737] = str->add(strings[1737]); +strings[1856] = str->add(strings[1856]); +strings[6398] = str->add(strings[6398]); +strings[6399] = str->add(strings[6399]); +strings[6400] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6398]); +str->del(strings[6399]); +str->del(strings[1740]); +str->del(strings[1862]); +str->del(strings[1737]); +str->del(strings[1856]); +str->del(strings[6398]); +str->del(strings[6399]); +str->del(strings[6400]); +str->del(strings[1856]); +strings[6401] = str->add("e,action,mouse,move"); +strings[6402] = str->add("e"); +strings[6403] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6401]); +str->del(strings[6402]); +str->del(strings[6403]); +str->del(strings[1856]); +strings[6404] = str->add("e,action,mouse,move"); +strings[6405] = str->add("e"); +strings[6406] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6404]); +str->del(strings[6405]); +str->del(strings[6406]); +str->del(strings[1856]); +strings[1932] = str->add(strings[1932]); +strings[6407] = str->add("go_activec25"); +strings[6408] = str->add("program,start"); +strings[6409] = str->add("go_activeb25"); +strings[1932] = str->add(strings[1932]); +strings[6410] = str->add("go_activec5"); +strings[6408] = str->add(strings[6408]); +strings[6411] = str->add("go_activeb5"); +str->del(strings[1932]); +str->del(strings[6407]); +str->del(strings[6408]); +str->del(strings[6409]); +str->del(strings[1932]); +str->del(strings[6410]); +str->del(strings[6408]); +str->del(strings[6411]); +strings[6412] = str->add("e,action,mouse,move"); +strings[6413] = str->add("e"); +strings[6414] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6412]); +str->del(strings[6413]); +str->del(strings[6414]); +str->del(strings[1856]); +strings[6415] = str->add("e,action,mouse,move"); +strings[6416] = str->add("e"); +strings[6417] = str->add("mouse,move"); +strings[1856] = str->add(strings[1856]); +str->del(strings[6415]); +str->del(strings[6416]); +str->del(strings[6417]); +str->del(strings[1856]); +strings[6418] = str->add("e,action,mouse,move"); +strings[6419] = str->add("e"); +strings[1740] = str->add(strings[1740]); +strings[1856] = str->add(strings[1856]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +str->del(strings[6418]); +str->del(strings[6419]); +str->del(strings[1740]); +str->del(strings[1856]); +str->del(strings[1737]); +str->del(strings[1853]); +str->del(strings[7]); +str->del(strings[3111]); +strings[7] = str->add(strings[7]); +strings[3136] = str->add(strings[3136]); +strings[6420] = str->add("e,action,mouse,move"); +strings[6421] = str->add("e"); +strings[6422] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[6420]); +str->del(strings[6421]); +str->del(strings[6422]); +str->del(strings[1853]); +strings[6423] = str->add("e,action,mouse,move"); +strings[6424] = str->add("e"); +strings[6425] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[1740] = str->add(strings[1740]); +strings[1853] = str->add(strings[1853]); +strings[6423] = str->add(strings[6423]); +strings[6424] = str->add(strings[6424]); +strings[6423] = str->add(strings[6423]); +strings[6424] = str->add(strings[6424]); +strings[6426] = str->add("e,state,focused"); +strings[6424] = str->add(strings[6424]); +str->del(strings[6423]); +str->del(strings[6424]); +str->del(strings[6425]); +str->del(strings[1853]); +str->del(strings[1740]); +str->del(strings[1853]); +str->del(strings[6423]); +str->del(strings[6424]); +str->del(strings[6423]); +str->del(strings[6424]); +str->del(strings[6426]); +str->del(strings[6424]); +strings[6427] = str->add("e,action,mouse,move"); +strings[6428] = str->add("e"); +str->del(strings[6427]); +str->del(strings[6428]); +strings[6429] = str->add("e,action,mouse,move"); +strings[6430] = str->add("e"); +strings[1737] = str->add(strings[1737]); +strings[377] = str->add(strings[377]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +strings[1737] = str->add(strings[1737]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6429]); +str->del(strings[6430]); +str->del(strings[1737]); +str->del(strings[377]); +str->del(strings[1737]); +str->del(strings[1946]); +str->del(strings[1737]); +str->del(strings[1946]); +strings[6431] = str->add("e,action,mouse,move"); +strings[6432] = str->add("e"); +strings[6433] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6433] = str->add(strings[6433]); +strings[1946] = str->add(strings[1946]); +strings[6433] = str->add(strings[6433]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6431]); +str->del(strings[6432]); +str->del(strings[6433]); +str->del(strings[377]); +str->del(strings[6433]); +str->del(strings[1946]); +str->del(strings[6433]); +str->del(strings[1946]); +strings[1932] = str->add(strings[1932]); +strings[6434] = str->add("go_activeb27"); +strings[6435] = str->add("program,start"); +strings[6436] = str->add("go_activec27"); +strings[1932] = str->add(strings[1932]); +strings[6437] = str->add("go_activeb3"); +strings[6435] = str->add(strings[6435]); +strings[6438] = str->add("go_activec3"); +str->del(strings[1932]); +str->del(strings[6434]); +str->del(strings[6435]); +str->del(strings[6436]); +str->del(strings[1932]); +str->del(strings[6437]); +str->del(strings[6435]); +str->del(strings[6438]); +str->del(strings[7]); +str->del(strings[3136]); +strings[7] = str->add(strings[7]); +strings[3167] = str->add(strings[3167]); +strings[6439] = str->add("e,action,mouse,move"); +strings[6440] = str->add("e"); +strings[6441] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6441] = str->add(strings[6441]); +strings[1946] = str->add(strings[1946]); +strings[6441] = str->add(strings[6441]); +strings[1946] = str->add(strings[1946]); +strings[6439] = str->add(strings[6439]); +strings[6440] = str->add(strings[6440]); +strings[6441] = str->add(strings[6441]); +strings[377] = str->add(strings[377]); +strings[6441] = str->add(strings[6441]); +strings[1946] = str->add(strings[1946]); +strings[6441] = str->add(strings[6441]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6439]); +str->del(strings[6440]); +str->del(strings[6441]); +str->del(strings[377]); +str->del(strings[6441]); +str->del(strings[1946]); +str->del(strings[6441]); +str->del(strings[1946]); +str->del(strings[6439]); +str->del(strings[6440]); +str->del(strings[6441]); +str->del(strings[377]); +str->del(strings[6441]); +str->del(strings[1946]); +str->del(strings[6441]); +str->del(strings[1946]); +strings[6442] = str->add("e,action,mouse,move"); +strings[6443] = str->add("e"); +strings[6444] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6444] = str->add(strings[6444]); +strings[1946] = str->add(strings[1946]); +strings[6444] = str->add(strings[6444]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6442]); +str->del(strings[6443]); +str->del(strings[6444]); +str->del(strings[377]); +str->del(strings[6444]); +str->del(strings[1946]); +str->del(strings[6444]); +str->del(strings[1946]); +strings[6445] = str->add("e,action,mouse,move"); +strings[6446] = str->add("e"); +strings[6447] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6447] = str->add(strings[6447]); +strings[1946] = str->add(strings[1946]); +strings[6447] = str->add(strings[6447]); +strings[1946] = str->add(strings[1946]); +strings[6445] = str->add(strings[6445]); +strings[6446] = str->add(strings[6446]); +strings[6447] = str->add(strings[6447]); +strings[377] = str->add(strings[377]); +strings[6447] = str->add(strings[6447]); +strings[1946] = str->add(strings[1946]); +strings[6447] = str->add(strings[6447]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6445]); +str->del(strings[6446]); +str->del(strings[6447]); +str->del(strings[377]); +str->del(strings[6447]); +str->del(strings[1946]); +str->del(strings[6447]); +str->del(strings[1946]); +str->del(strings[6445]); +str->del(strings[6446]); +str->del(strings[6447]); +str->del(strings[377]); +str->del(strings[6447]); +str->del(strings[1946]); +str->del(strings[6447]); +str->del(strings[1946]); +strings[6448] = str->add("e,action,mouse,move"); +strings[6449] = str->add("e"); +strings[6450] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6450] = str->add(strings[6450]); +strings[1946] = str->add(strings[1946]); +strings[6450] = str->add(strings[6450]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6448]); +str->del(strings[6449]); +str->del(strings[6450]); +str->del(strings[377]); +str->del(strings[6450]); +str->del(strings[1946]); +str->del(strings[6450]); +str->del(strings[1946]); +strings[1932] = str->add(strings[1932]); +strings[6451] = str->add("go_activec24"); +strings[6452] = str->add("program,start"); +strings[6453] = str->add("go_activeb24"); +strings[1932] = str->add(strings[1932]); +strings[6454] = str->add("go_activec6"); +strings[6452] = str->add(strings[6452]); +strings[6455] = str->add("go_activeb6"); +str->del(strings[1932]); +str->del(strings[6451]); +str->del(strings[6452]); +str->del(strings[6453]); +str->del(strings[1932]); +str->del(strings[6454]); +str->del(strings[6452]); +str->del(strings[6455]); +str->del(strings[7]); +str->del(strings[3167]); +strings[7] = str->add(strings[7]); +strings[3190] = str->add(strings[3190]); +strings[6456] = str->add("e,action,mouse,move"); +strings[6457] = str->add("e"); +strings[6458] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6458] = str->add(strings[6458]); +strings[1946] = str->add(strings[1946]); +strings[6458] = str->add(strings[6458]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6456]); +str->del(strings[6457]); +str->del(strings[6458]); +str->del(strings[377]); +str->del(strings[6458]); +str->del(strings[1946]); +str->del(strings[6458]); +str->del(strings[1946]); +strings[6459] = str->add("e,action,mouse,move"); +strings[6460] = str->add("e"); +strings[6461] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6461] = str->add(strings[6461]); +strings[1946] = str->add(strings[1946]); +strings[6461] = str->add(strings[6461]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6459]); +str->del(strings[6460]); +str->del(strings[6461]); +str->del(strings[377]); +str->del(strings[6461]); +str->del(strings[1946]); +str->del(strings[6461]); +str->del(strings[1946]); +strings[6462] = str->add("e,action,mouse,move"); +strings[6463] = str->add("e"); +strings[6464] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6464] = str->add(strings[6464]); +strings[1946] = str->add(strings[1946]); +strings[6464] = str->add(strings[6464]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6462]); +str->del(strings[6463]); +str->del(strings[6464]); +str->del(strings[377]); +str->del(strings[6464]); +str->del(strings[1946]); +str->del(strings[6464]); +str->del(strings[1946]); +strings[6465] = str->add("e,action,mouse,move"); +strings[6466] = str->add("e"); +strings[6467] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6467] = str->add(strings[6467]); +strings[1946] = str->add(strings[1946]); +strings[6467] = str->add(strings[6467]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6465]); +str->del(strings[6466]); +str->del(strings[6467]); +str->del(strings[377]); +str->del(strings[6467]); +str->del(strings[1946]); +str->del(strings[6467]); +str->del(strings[1946]); +str->del(strings[7]); +str->del(strings[3190]); +strings[7] = str->add(strings[7]); +strings[2148] = str->add(strings[2148]); +strings[6468] = str->add("e,action,mouse,move"); +strings[6469] = str->add("e"); +strings[6470] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6470] = str->add(strings[6470]); +strings[1946] = str->add(strings[1946]); +strings[6470] = str->add(strings[6470]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6468]); +str->del(strings[6469]); +str->del(strings[6470]); +str->del(strings[377]); +str->del(strings[6470]); +str->del(strings[1946]); +str->del(strings[6470]); +str->del(strings[1946]); +strings[6471] = str->add("e,action,mouse,move"); +strings[6472] = str->add("e"); +strings[6473] = str->add("mouse,move"); +strings[377] = str->add(strings[377]); +strings[6473] = str->add(strings[6473]); +strings[1946] = str->add(strings[1946]); +strings[6473] = str->add(strings[6473]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6471]); +str->del(strings[6472]); +str->del(strings[6473]); +str->del(strings[377]); +str->del(strings[6473]); +str->del(strings[1946]); +str->del(strings[6473]); +str->del(strings[1946]); +strings[1932] = str->add(strings[1932]); +strings[6474] = str->add("go_activeb26"); +strings[6475] = str->add("program,start"); +strings[6476] = str->add("go_activec26"); +strings[1932] = str->add(strings[1932]); +strings[6477] = str->add("go_activeb4"); +strings[6475] = str->add(strings[6475]); +strings[6478] = str->add("go_activec4"); +str->del(strings[1932]); +str->del(strings[6474]); +str->del(strings[6475]); +str->del(strings[6476]); +str->del(strings[1932]); +str->del(strings[6477]); +str->del(strings[6475]); +str->del(strings[6478]); +str->del(strings[7]); +str->del(strings[2148]); +strings[7] = str->add(strings[7]); +strings[2150] = str->add(strings[2150]); +strings[6479] = str->add("e,action,mouse,move"); +strings[6480] = str->add("e"); +strings[6481] = str->add("e,action,mouse,down"); +strings[6480] = str->add(strings[6480]); +strings[167] = str->add(strings[167]); +strings[377] = str->add(strings[377]); +strings[6482] = str->add("Main"); +strings[66] = str->add(strings[66]); +strings[6483] = str->add("Favorite Applications"); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[2231] = str->add(strings[2231]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[2338] = str->add(strings[2338]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[6484] = str->add("Files"); +strings[469] = str->add(strings[469]); +strings[2693] = str->add(strings[2693]); +strings[6485] = str->add("Virtual"); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[6486] = str->add("Show/Hide All Windows"); +strings[1619] = str->add(strings[1619]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[2552] = str->add(strings[2552]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[1712] = str->add(strings[1712]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[6487] = str->add("About"); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[1713] = str->add(strings[1713]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[1714] = str->add(strings[1714]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[6488] = str->add("Configuration"); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[1721] = str->add(strings[1721]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[6489] = str->add("resize"); +str->del(strings[6489]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[6490] = str->add("load"); +strings[6482] = str->add(strings[6482]); +strings[6491] = str->add("e,action,show,title"); +strings[6480] = str->add(strings[6480]); +str->del(strings[6490]); +strings[6492] = str->add("program,start"); +strings[6493] = str->add("on"); +strings[1932] = str->add(strings[1932]); +strings[6493] = str->add(strings[6493]); +str->del(strings[6491]); +str->del(strings[6480]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[6482] = str->add(strings[6482]); +strings[6482] = str->add(strings[6482]); +strings[6482] = str->add(strings[6482]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2686] = str->add(strings[2686]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2871] = str->add(strings[2871]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add("resize"); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[6483] = str->add(strings[6483]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6483] = str->add(strings[6483]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2890] = str->add(strings[2890]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[2231] = str->add(strings[2231]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2691] = str->add(strings[2691]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2892] = str->add(strings[2892]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[2338] = str->add(strings[2338]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2338] = str->add(strings[2338]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2693] = str->add(strings[2693]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[4965] = str->add(strings[4965]); +strings[469] = str->add(strings[469]); +strings[4967] = str->add(strings[4967]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[6484] = str->add(strings[6484]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6484] = str->add(strings[6484]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2687] = str->add(strings[2687]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2894] = str->add(strings[2894]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[1619] = str->add(strings[1619]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[2552] = str->add(strings[2552]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[1712] = str->add(strings[1712]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[6488] = str->add(strings[6488]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6488] = str->add(strings[6488]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2634] = str->add(strings[2634]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2690] = str->add(strings[2690]); +strings[6494] = str->add(strings[6494]); +strings[469] = str->add(strings[469]); +strings[2904] = str->add(strings[2904]); +strings[1841] = str->add(strings[1841]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6494] = str->add(strings[6494]); +strings[1721] = str->add(strings[1721]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2586] = str->add(strings[2586]); +strings[6494] = str->add(strings[6494]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6495] = str->add(strings[6495]); +strings[6496] = str->add("e,state,focused"); +strings[6480] = str->add(strings[6480]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +strings[167] = str->add(strings[167]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6479]); +str->del(strings[6480]); +str->del(strings[6481]); +str->del(strings[6480]); +str->del(strings[167]); +str->del(strings[377]); +str->del(strings[6492]); +str->del(strings[6493]); +str->del(strings[1932]); +str->del(strings[6493]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6494]); +str->del(strings[1841]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +str->del(strings[6495]); +strings[6497] = str->add("program,start"); +strings[6498] = str->add("on"); +str->del(strings[6496]); +str->del(strings[6480]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[167]); +str->del(strings[1946]); +str->del(strings[6497]); +str->del(strings[6498]); +strings[6499] = str->add("e,action,mouse,move"); +strings[6500] = str->add("e"); +strings[6499] = str->add(strings[6499]); +strings[6500] = str->add(strings[6500]); +strings[169] = str->add(strings[169]); +strings[377] = str->add(strings[377]); +strings[159] = str->add(strings[159]); +strings[377] = str->add(strings[377]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[169] = str->add(strings[169]); +strings[1946] = str->add(strings[1946]); +strings[159] = str->add(strings[159]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[377] = str->add(strings[377]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +strings[1740] = str->add(strings[1740]); +strings[1946] = str->add(strings[1946]); +str->del(strings[6499]); +str->del(strings[6500]); +str->del(strings[6499]); +str->del(strings[6500]); +str->del(strings[169]); +str->del(strings[377]); +str->del(strings[159]); +str->del(strings[377]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[169]); +str->del(strings[1946]); +str->del(strings[159]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[377]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[1740]); +str->del(strings[1946]); +str->del(strings[6482]); +strings[6482] = str->add(strings[6482]); +str->del(strings[6482]); +strings[6482] = str->add(strings[6482]); +strings[6501] = str->add("resize"); +strings[6483] = str->add(strings[6483]); +strings[6483] = str->add(strings[6483]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6501] = str->add(strings[6501]); +strings[2231] = str->add(strings[2231]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6501] = str->add(strings[6501]); +strings[2338] = str->add(strings[2338]); +strings[2338] = str->add(strings[2338]); +strings[6501] = str->add(strings[6501]); +strings[6484] = str->add(strings[6484]); +strings[6484] = str->add(strings[6484]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6501] = str->add(strings[6501]); +strings[1619] = str->add(strings[1619]); +strings[1619] = str->add(strings[1619]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6501] = str->add(strings[6501]); +strings[2552] = str->add(strings[2552]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6501] = str->add(strings[6501]); +strings[1712] = str->add(strings[1712]); +strings[1712] = str->add(strings[1712]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6501] = str->add(strings[6501]); +strings[6488] = str->add(strings[6488]); +strings[6488] = str->add(strings[6488]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6501] = str->add(strings[6501]); +strings[1721] = str->add(strings[1721]); +strings[1721] = str->add(strings[1721]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6502] = str->add("font"); +strings[6503] = str->add("font_fallbacks"); +strings[6504] = str->add("font_size"); +strings[6505] = str->add("font_source"); +strings[6506] = str->add("color"); +strings[6507] = str->add("underline_color"); +strings[6508] = str->add("underline2_color"); +strings[6509] = str->add("outline_color"); +strings[6510] = str->add("shadow_color"); +strings[6511] = str->add("glow_color"); +strings[6512] = str->add("glow2_color"); +strings[6513] = str->add("backing_color"); +strings[6514] = str->add("strikethrough_color"); +strings[6515] = str->add("align"); +strings[6516] = str->add("valign"); +strings[6517] = str->add("wrap"); +strings[6518] = str->add("left_margin"); +strings[6519] = str->add("right_margin"); +strings[6520] = str->add("underline"); +strings[6521] = str->add("strikethrough"); +strings[6522] = str->add("backing"); +strings[6523] = str->add("style"); +strings[6524] = str->add("tabstops"); +strings[6515] = str->add(strings[6515]); +strings[6525] = str->add("center"); +str->del(strings[6515]); +str->del(strings[6525]); +strings[6506] = str->add(strings[6506]); +strings[6526] = str->add("#000"); +str->del(strings[6506]); +str->del(strings[6526]); +strings[6523] = str->add(strings[6523]); +strings[6527] = str->add("shadow"); +str->del(strings[6523]); +str->del(strings[6527]); +strings[6510] = str->add(strings[6510]); +strings[6528] = str->add("#ffffff80"); +str->del(strings[6510]); +str->del(strings[6528]); +strings[6517] = str->add(strings[6517]); +strings[6529] = str->add("word"); +str->del(strings[6517]); +str->del(strings[6529]); +strings[6505] = str->add(strings[6505]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6505]); +str->del(strings[469]); +strings[6504] = str->add(strings[6504]); +strings[6530] = str->add("10.000000"); +str->del(strings[6504]); +str->del(strings[6530]); +strings[6502] = str->add(strings[6502]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6502]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6523] = str->add(strings[6523]); +strings[6531] = str->add("glow"); +str->del(strings[6523]); +str->del(strings[6531]); +strings[6506] = str->add(strings[6506]); +strings[6532] = str->add("#fff"); +str->del(strings[6506]); +str->del(strings[6532]); +strings[6512] = str->add(strings[6512]); +strings[6533] = str->add("#fe87"); +str->del(strings[6512]); +str->del(strings[6533]); +strings[6511] = str->add(strings[6511]); +strings[6534] = str->add("#fa14"); +str->del(strings[6511]); +str->del(strings[6534]); +strings[6502] = str->add(strings[6502]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6502]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6523] = str->add(strings[6523]); +strings[6535] = str->add("glow"); +str->del(strings[6523]); +str->del(strings[6535]); +strings[6506] = str->add(strings[6506]); +strings[6536] = str->add("#fff"); +str->del(strings[6506]); +str->del(strings[6536]); +strings[6512] = str->add(strings[6512]); +strings[6537] = str->add("#fe87"); +str->del(strings[6512]); +str->del(strings[6537]); +strings[6511] = str->add(strings[6511]); +strings[6538] = str->add("#fa14"); +str->del(strings[6511]); +str->del(strings[6538]); +strings[6502] = str->add(strings[6502]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6502]); +str->del(strings[471]); +str->del(strings[6502]); +str->del(strings[6503]); +str->del(strings[6504]); +str->del(strings[6505]); +str->del(strings[6506]); +str->del(strings[6507]); +str->del(strings[6508]); +str->del(strings[6509]); +str->del(strings[6510]); +str->del(strings[6511]); +str->del(strings[6512]); +str->del(strings[6513]); +str->del(strings[6514]); +str->del(strings[6515]); +str->del(strings[6516]); +str->del(strings[6517]); +str->del(strings[6518]); +str->del(strings[6519]); +str->del(strings[6520]); +str->del(strings[6521]); +str->del(strings[6522]); +str->del(strings[6523]); +str->del(strings[6524]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[6539] = str->add("font"); +strings[6540] = str->add("font_fallbacks"); +strings[6541] = str->add("font_size"); +strings[6542] = str->add("font_source"); +strings[6543] = str->add("color"); +strings[6544] = str->add("underline_color"); +strings[6545] = str->add("underline2_color"); +strings[6546] = str->add("outline_color"); +strings[6547] = str->add("shadow_color"); +strings[6548] = str->add("glow_color"); +strings[6549] = str->add("glow2_color"); +strings[6550] = str->add("backing_color"); +strings[6551] = str->add("strikethrough_color"); +strings[6552] = str->add("align"); +strings[6553] = str->add("valign"); +strings[6554] = str->add("wrap"); +strings[6555] = str->add("left_margin"); +strings[6556] = str->add("right_margin"); +strings[6557] = str->add("underline"); +strings[6558] = str->add("strikethrough"); +strings[6559] = str->add("backing"); +strings[6560] = str->add("style"); +strings[6561] = str->add("tabstops"); +strings[6552] = str->add(strings[6552]); +strings[6562] = str->add("center"); +str->del(strings[6552]); +str->del(strings[6562]); +strings[6543] = str->add(strings[6543]); +strings[6563] = str->add("#000"); +str->del(strings[6543]); +str->del(strings[6563]); +strings[6560] = str->add(strings[6560]); +strings[6564] = str->add("shadow"); +str->del(strings[6560]); +str->del(strings[6564]); +strings[6547] = str->add(strings[6547]); +strings[6565] = str->add("#ffffff80"); +str->del(strings[6547]); +str->del(strings[6565]); +strings[6554] = str->add(strings[6554]); +strings[6566] = str->add("word"); +str->del(strings[6554]); +str->del(strings[6566]); +strings[6542] = str->add(strings[6542]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6542]); +str->del(strings[469]); +strings[6541] = str->add(strings[6541]); +strings[6567] = str->add("10.000000"); +str->del(strings[6541]); +str->del(strings[6567]); +strings[6539] = str->add(strings[6539]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6539]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6560] = str->add(strings[6560]); +strings[6568] = str->add("soft_shadow"); +str->del(strings[6560]); +str->del(strings[6568]); +strings[6543] = str->add(strings[6543]); +strings[6569] = str->add("#fff"); +str->del(strings[6543]); +str->del(strings[6569]); +strings[6547] = str->add(strings[6547]); +strings[6570] = str->add("#00000020"); +str->del(strings[6547]); +str->del(strings[6570]); +strings[6541] = str->add(strings[6541]); +strings[6571] = str->add("12.000000"); +str->del(strings[6541]); +str->del(strings[6571]); +strings[6539] = str->add(strings[6539]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6539]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[6539]); +str->del(strings[6540]); +str->del(strings[6541]); +str->del(strings[6542]); +str->del(strings[6543]); +str->del(strings[6544]); +str->del(strings[6545]); +str->del(strings[6546]); +str->del(strings[6547]); +str->del(strings[6548]); +str->del(strings[6549]); +str->del(strings[6550]); +str->del(strings[6551]); +str->del(strings[6552]); +str->del(strings[6553]); +str->del(strings[6554]); +str->del(strings[6555]); +str->del(strings[6556]); +str->del(strings[6557]); +str->del(strings[6558]); +str->del(strings[6559]); +str->del(strings[6560]); +str->del(strings[6561]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[6572] = str->add("go_activec23"); +strings[6573] = str->add("program,start"); +strings[6574] = str->add("go_activeb23"); +strings[1932] = str->add(strings[1932]); +strings[6575] = str->add("go_activec7"); +strings[6573] = str->add(strings[6573]); +strings[6576] = str->add("go_activeb7"); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[6501]); +str->del(strings[1932]); +str->del(strings[6572]); +str->del(strings[6573]); +str->del(strings[6574]); +str->del(strings[1932]); +str->del(strings[6575]); +str->del(strings[6573]); +str->del(strings[6576]); +strings[6577] = str->add("font"); +strings[6578] = str->add("font_fallbacks"); +strings[6579] = str->add("font_size"); +strings[6580] = str->add("font_source"); +strings[6581] = str->add("color"); +strings[6582] = str->add("underline_color"); +strings[6583] = str->add("underline2_color"); +strings[6584] = str->add("outline_color"); +strings[6585] = str->add("shadow_color"); +strings[6586] = str->add("glow_color"); +strings[6587] = str->add("glow2_color"); +strings[6588] = str->add("backing_color"); +strings[6589] = str->add("strikethrough_color"); +strings[6590] = str->add("align"); +strings[6591] = str->add("valign"); +strings[6592] = str->add("wrap"); +strings[6593] = str->add("left_margin"); +strings[6594] = str->add("right_margin"); +strings[6595] = str->add("underline"); +strings[6596] = str->add("strikethrough"); +strings[6597] = str->add("backing"); +strings[6598] = str->add("style"); +strings[6599] = str->add("tabstops"); +strings[6590] = str->add(strings[6590]); +strings[6600] = str->add("center"); +str->del(strings[6590]); +str->del(strings[6600]); +strings[6581] = str->add(strings[6581]); +strings[6601] = str->add("#000"); +str->del(strings[6581]); +str->del(strings[6601]); +strings[6598] = str->add(strings[6598]); +strings[6602] = str->add("shadow"); +str->del(strings[6598]); +str->del(strings[6602]); +strings[6585] = str->add(strings[6585]); +strings[6603] = str->add("#ffffff80"); +str->del(strings[6585]); +str->del(strings[6603]); +strings[6592] = str->add(strings[6592]); +strings[6604] = str->add("word"); +str->del(strings[6592]); +str->del(strings[6604]); +strings[6580] = str->add(strings[6580]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6580]); +str->del(strings[469]); +strings[6579] = str->add(strings[6579]); +strings[6605] = str->add("10.000000"); +str->del(strings[6579]); +str->del(strings[6605]); +strings[6577] = str->add(strings[6577]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6577]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6598] = str->add(strings[6598]); +strings[6606] = str->add("soft_shadow"); +str->del(strings[6598]); +str->del(strings[6606]); +strings[6581] = str->add(strings[6581]); +strings[6607] = str->add("#fff"); +str->del(strings[6581]); +str->del(strings[6607]); +strings[6585] = str->add(strings[6585]); +strings[6608] = str->add("#00000020"); +str->del(strings[6585]); +str->del(strings[6608]); +strings[6579] = str->add(strings[6579]); +strings[6609] = str->add("12.000000"); +str->del(strings[6579]); +str->del(strings[6609]); +strings[6577] = str->add(strings[6577]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6577]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[6577]); +str->del(strings[6578]); +str->del(strings[6579]); +str->del(strings[6580]); +str->del(strings[6581]); +str->del(strings[6582]); +str->del(strings[6583]); +str->del(strings[6584]); +str->del(strings[6585]); +str->del(strings[6586]); +str->del(strings[6587]); +str->del(strings[6588]); +str->del(strings[6589]); +str->del(strings[6590]); +str->del(strings[6591]); +str->del(strings[6592]); +str->del(strings[6593]); +str->del(strings[6594]); +str->del(strings[6595]); +str->del(strings[6596]); +str->del(strings[6597]); +str->del(strings[6598]); +str->del(strings[6599]); +str->del(strings[7]); +str->del(strings[2150]); +strings[7] = str->add(strings[7]); +strings[1966] = str->add(strings[1966]); +strings[6610] = str->add("e,action,mouse,move"); +strings[6611] = str->add("e"); +strings[6612] = str->add("e,action,mouse,up"); +strings[6611] = str->add(strings[6611]); +str->del(strings[6610]); +str->del(strings[6611]); +str->del(strings[6612]); +str->del(strings[6611]); +strings[6613] = str->add("e,action,mouse,move"); +strings[6614] = str->add("e"); +str->del(strings[6613]); +str->del(strings[6614]); +str->del(strings[7]); +str->del(strings[1966]); +strings[7] = str->add(strings[7]); +strings[1964] = str->add(strings[1964]); +strings[6615] = str->add("e,action,mouse,move"); +strings[6616] = str->add("e"); +strings[6615] = str->add(strings[6615]); +strings[6616] = str->add(strings[6616]); +str->del(strings[6615]); +str->del(strings[6616]); +str->del(strings[6615]); +str->del(strings[6616]); +strings[6617] = str->add("e,action,mouse,move"); +strings[6618] = str->add("e"); +str->del(strings[6617]); +str->del(strings[6618]); +str->del(strings[7]); +str->del(strings[1964]); +strings[7] = str->add(strings[7]); +strings[1968] = str->add(strings[1968]); +strings[6619] = str->add("e,action,mouse,move"); +strings[6620] = str->add("e"); +strings[6619] = str->add(strings[6619]); +strings[6620] = str->add(strings[6620]); +str->del(strings[6619]); +str->del(strings[6620]); +str->del(strings[6619]); +str->del(strings[6620]); +strings[6621] = str->add("e,action,mouse,move"); +strings[6622] = str->add("e"); +str->del(strings[6621]); +str->del(strings[6622]); +strings[6623] = str->add("e,action,mouse,move"); +strings[6624] = str->add("e"); +str->del(strings[6623]); +str->del(strings[6624]); +strings[6625] = str->add("e,action,mouse,move"); +strings[6626] = str->add("e"); +strings[6625] = str->add(strings[6625]); +strings[6626] = str->add(strings[6626]); +str->del(strings[6625]); +str->del(strings[6626]); +str->del(strings[6625]); +str->del(strings[6626]); +strings[6627] = str->add("e,action,mouse,move"); +strings[6628] = str->add("e"); +str->del(strings[6627]); +str->del(strings[6628]); +strings[6629] = str->add("e,action,mouse,move"); +strings[6630] = str->add("e"); +str->del(strings[6629]); +str->del(strings[6630]); +strings[1932] = str->add(strings[1932]); +strings[6631] = str->add("go_activeb25"); +strings[6632] = str->add("program,start"); +strings[6633] = str->add("go_activec25"); +strings[1932] = str->add(strings[1932]); +strings[6634] = str->add("go_activeb5"); +strings[6632] = str->add(strings[6632]); +strings[6635] = str->add("go_activec5"); +strings[1932] = str->add(strings[1932]); +strings[6636] = str->add("on"); +str->del(strings[1932]); +str->del(strings[6631]); +str->del(strings[6632]); +str->del(strings[6633]); +str->del(strings[1932]); +str->del(strings[6634]); +str->del(strings[6632]); +str->del(strings[6635]); +str->del(strings[1932]); +str->del(strings[6636]); +strings[6637] = str->add("e,action,mouse,move"); +strings[6638] = str->add("e"); +strings[6639] = str->add("e,state,selected"); +strings[6638] = str->add(strings[6638]); +strings[6639] = str->add(strings[6639]); +strings[6638] = str->add(strings[6638]); +strings[6639] = str->add(strings[6639]); +strings[6638] = str->add(strings[6638]); +strings[6639] = str->add(strings[6639]); +strings[6638] = str->add(strings[6638]); +strings[6639] = str->add(strings[6639]); +strings[6638] = str->add(strings[6638]); +strings[6639] = str->add(strings[6639]); +strings[6638] = str->add(strings[6638]); +strings[6640] = str->add("Lock Screen"); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[1726] = str->add(strings[1726]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[6641] = str->add("Hibernate"); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[1724] = str->add(strings[1724]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[1722] = str->add(strings[1722]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[6642] = str->add("Logout"); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +str->del(strings[6637]); +str->del(strings[6638]); +strings[6643] = str->add("program,start"); +strings[6644] = str->add("sel"); +str->del(strings[6639]); +str->del(strings[6638]); +str->del(strings[6639]); +str->del(strings[6638]); +strings[6643] = str->add(strings[6643]); +strings[6644] = str->add(strings[6644]); +str->del(strings[6639]); +str->del(strings[6638]); +strings[6643] = str->add(strings[6643]); +strings[6644] = str->add(strings[6644]); +strings[1932] = str->add(strings[1932]); +strings[6644] = str->add(strings[6644]); +str->del(strings[6639]); +str->del(strings[6638]); +str->del(strings[6639]); +str->del(strings[6638]); +str->del(strings[6639]); +str->del(strings[6638]); +str->del(strings[6643]); +str->del(strings[6644]); +str->del(strings[6643]); +str->del(strings[6644]); +str->del(strings[6643]); +str->del(strings[6644]); +str->del(strings[1932]); +str->del(strings[6644]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[6645] = str->add("resize"); +str->del(strings[6645]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2708] = str->add(strings[2708]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3008] = str->add(strings[3008]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add("resize"); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[6640] = str->add(strings[6640]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6640] = str->add(strings[6640]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2677] = str->add(strings[2677]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3011] = str->add(strings[3011]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[1726] = str->add(strings[1726]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1726] = str->add(strings[1726]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2678] = str->add(strings[2678]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3013] = str->add(strings[3013]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[6641] = str->add(strings[6641]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6641] = str->add(strings[6641]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2676] = str->add(strings[2676]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3015] = str->add(strings[3015]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[1724] = str->add(strings[1724]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1724] = str->add(strings[1724]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2675] = str->add(strings[2675]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3017] = str->add(strings[3017]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[1722] = str->add(strings[1722]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6646] = str->add(strings[6646]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2674] = str->add(strings[2674]); +strings[6646] = str->add(strings[6646]); +strings[469] = str->add(strings[469]); +strings[3019] = str->add(strings[3019]); +strings[1841] = str->add(strings[1841]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6646] = str->add(strings[6646]); +strings[6642] = str->add(strings[6642]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6642] = str->add(strings[6642]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +strings[6647] = str->add(strings[6647]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[6647] = str->add(strings[6647]); +strings[6640] = str->add(strings[6640]); +strings[6640] = str->add(strings[6640]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6647] = str->add(strings[6647]); +strings[1726] = str->add(strings[1726]); +strings[1726] = str->add(strings[1726]); +strings[6647] = str->add(strings[6647]); +strings[6641] = str->add(strings[6641]); +strings[6641] = str->add(strings[6641]); +strings[6647] = str->add(strings[6647]); +strings[1724] = str->add(strings[1724]); +strings[1724] = str->add(strings[1724]); +strings[6647] = str->add(strings[6647]); +strings[1722] = str->add(strings[1722]); +strings[1722] = str->add(strings[1722]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6647] = str->add(strings[6647]); +strings[6642] = str->add(strings[6642]); +strings[6642] = str->add(strings[6642]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[6648] = str->add("font"); +strings[6649] = str->add("font_fallbacks"); +strings[6650] = str->add("font_size"); +strings[6651] = str->add("font_source"); +strings[6652] = str->add("color"); +strings[6653] = str->add("underline_color"); +strings[6654] = str->add("underline2_color"); +strings[6655] = str->add("outline_color"); +strings[6656] = str->add("shadow_color"); +strings[6657] = str->add("glow_color"); +strings[6658] = str->add("glow2_color"); +strings[6659] = str->add("backing_color"); +strings[6660] = str->add("strikethrough_color"); +strings[6661] = str->add("align"); +strings[6662] = str->add("valign"); +strings[6663] = str->add("wrap"); +strings[6664] = str->add("left_margin"); +strings[6665] = str->add("right_margin"); +strings[6666] = str->add("underline"); +strings[6667] = str->add("strikethrough"); +strings[6668] = str->add("backing"); +strings[6669] = str->add("style"); +strings[6670] = str->add("tabstops"); +strings[6661] = str->add(strings[6661]); +strings[6671] = str->add("center"); +str->del(strings[6661]); +str->del(strings[6671]); +strings[6652] = str->add(strings[6652]); +strings[6672] = str->add("#000"); +str->del(strings[6652]); +str->del(strings[6672]); +strings[6669] = str->add(strings[6669]); +strings[6673] = str->add("shadow"); +str->del(strings[6669]); +str->del(strings[6673]); +strings[6656] = str->add(strings[6656]); +strings[6674] = str->add("#ffffff80"); +str->del(strings[6656]); +str->del(strings[6674]); +strings[6663] = str->add(strings[6663]); +strings[6675] = str->add("word"); +str->del(strings[6663]); +str->del(strings[6675]); +strings[6651] = str->add(strings[6651]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6651]); +str->del(strings[469]); +strings[6650] = str->add(strings[6650]); +strings[6676] = str->add("10.000000"); +str->del(strings[6650]); +str->del(strings[6676]); +strings[6648] = str->add(strings[6648]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6648]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6669] = str->add(strings[6669]); +strings[6677] = str->add("glow"); +str->del(strings[6669]); +str->del(strings[6677]); +strings[6652] = str->add(strings[6652]); +strings[6678] = str->add("#fff"); +str->del(strings[6652]); +str->del(strings[6678]); +strings[6658] = str->add(strings[6658]); +strings[6679] = str->add("#fe87"); +str->del(strings[6658]); +str->del(strings[6679]); +strings[6657] = str->add(strings[6657]); +strings[6680] = str->add("#fa14"); +str->del(strings[6657]); +str->del(strings[6680]); +strings[6648] = str->add(strings[6648]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6648]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6669] = str->add(strings[6669]); +strings[6681] = str->add("glow"); +str->del(strings[6669]); +str->del(strings[6681]); +strings[6652] = str->add(strings[6652]); +strings[6682] = str->add("#fff"); +str->del(strings[6652]); +str->del(strings[6682]); +strings[6658] = str->add(strings[6658]); +strings[6683] = str->add("#fe87"); +str->del(strings[6658]); +str->del(strings[6683]); +strings[6657] = str->add(strings[6657]); +strings[6684] = str->add("#fa14"); +str->del(strings[6657]); +str->del(strings[6684]); +strings[6648] = str->add(strings[6648]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6648]); +str->del(strings[471]); +str->del(strings[6648]); +str->del(strings[6649]); +str->del(strings[6650]); +str->del(strings[6651]); +str->del(strings[6652]); +str->del(strings[6653]); +str->del(strings[6654]); +str->del(strings[6655]); +str->del(strings[6656]); +str->del(strings[6657]); +str->del(strings[6658]); +str->del(strings[6659]); +str->del(strings[6660]); +str->del(strings[6661]); +str->del(strings[6662]); +str->del(strings[6663]); +str->del(strings[6664]); +str->del(strings[6665]); +str->del(strings[6666]); +str->del(strings[6667]); +str->del(strings[6668]); +str->del(strings[6669]); +str->del(strings[6670]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[6685] = str->add("font"); +strings[6686] = str->add("font_fallbacks"); +strings[6687] = str->add("font_size"); +strings[6688] = str->add("font_source"); +strings[6689] = str->add("color"); +strings[6690] = str->add("underline_color"); +strings[6691] = str->add("underline2_color"); +strings[6692] = str->add("outline_color"); +strings[6693] = str->add("shadow_color"); +strings[6694] = str->add("glow_color"); +strings[6695] = str->add("glow2_color"); +strings[6696] = str->add("backing_color"); +strings[6697] = str->add("strikethrough_color"); +strings[6698] = str->add("align"); +strings[6699] = str->add("valign"); +strings[6700] = str->add("wrap"); +strings[6701] = str->add("left_margin"); +strings[6702] = str->add("right_margin"); +strings[6703] = str->add("underline"); +strings[6704] = str->add("strikethrough"); +strings[6705] = str->add("backing"); +strings[6706] = str->add("style"); +strings[6707] = str->add("tabstops"); +strings[6698] = str->add(strings[6698]); +strings[6708] = str->add("center"); +str->del(strings[6698]); +str->del(strings[6708]); +strings[6689] = str->add(strings[6689]); +strings[6709] = str->add("#000"); +str->del(strings[6689]); +str->del(strings[6709]); +strings[6706] = str->add(strings[6706]); +strings[6710] = str->add("shadow"); +str->del(strings[6706]); +str->del(strings[6710]); +strings[6693] = str->add(strings[6693]); +strings[6711] = str->add("#ffffff80"); +str->del(strings[6693]); +str->del(strings[6711]); +strings[6700] = str->add(strings[6700]); +strings[6712] = str->add("word"); +str->del(strings[6700]); +str->del(strings[6712]); +strings[6688] = str->add(strings[6688]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6688]); +str->del(strings[469]); +strings[6687] = str->add(strings[6687]); +strings[6713] = str->add("10.000000"); +str->del(strings[6687]); +str->del(strings[6713]); +strings[6685] = str->add(strings[6685]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6685]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6706] = str->add(strings[6706]); +strings[6714] = str->add("soft_shadow"); +str->del(strings[6706]); +str->del(strings[6714]); +strings[6689] = str->add(strings[6689]); +strings[6715] = str->add("#fff"); +str->del(strings[6689]); +str->del(strings[6715]); +strings[6693] = str->add(strings[6693]); +strings[6716] = str->add("#00000020"); +str->del(strings[6693]); +str->del(strings[6716]); +strings[6687] = str->add(strings[6687]); +strings[6717] = str->add("12.000000"); +str->del(strings[6687]); +str->del(strings[6717]); +strings[6685] = str->add(strings[6685]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6685]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[6685]); +str->del(strings[6686]); +str->del(strings[6687]); +str->del(strings[6688]); +str->del(strings[6689]); +str->del(strings[6690]); +str->del(strings[6691]); +str->del(strings[6692]); +str->del(strings[6693]); +str->del(strings[6694]); +str->del(strings[6695]); +str->del(strings[6696]); +str->del(strings[6697]); +str->del(strings[6698]); +str->del(strings[6699]); +str->del(strings[6700]); +str->del(strings[6701]); +str->del(strings[6702]); +str->del(strings[6703]); +str->del(strings[6704]); +str->del(strings[6705]); +str->del(strings[6706]); +str->del(strings[6707]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[6718] = str->add("go_activec22"); +strings[6719] = str->add("program,start"); +strings[6720] = str->add("go_activeb22"); +strings[1932] = str->add(strings[1932]); +strings[6721] = str->add("go_activec8"); +strings[6719] = str->add(strings[6719]); +strings[6722] = str->add("go_activeb8"); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6646]); +str->del(strings[1841]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[6647]); +str->del(strings[1932]); +str->del(strings[6718]); +str->del(strings[6719]); +str->del(strings[6720]); +str->del(strings[1932]); +str->del(strings[6721]); +str->del(strings[6719]); +str->del(strings[6722]); +strings[6723] = str->add("e,action,mouse,move"); +strings[6724] = str->add("e"); +strings[6723] = str->add(strings[6723]); +strings[6724] = str->add(strings[6724]); +str->del(strings[6723]); +str->del(strings[6724]); +str->del(strings[6723]); +str->del(strings[6724]); +strings[6725] = str->add("font"); +strings[6726] = str->add("font_fallbacks"); +strings[6727] = str->add("font_size"); +strings[6728] = str->add("font_source"); +strings[6729] = str->add("color"); +strings[6730] = str->add("underline_color"); +strings[6731] = str->add("underline2_color"); +strings[6732] = str->add("outline_color"); +strings[6733] = str->add("shadow_color"); +strings[6734] = str->add("glow_color"); +strings[6735] = str->add("glow2_color"); +strings[6736] = str->add("backing_color"); +strings[6737] = str->add("strikethrough_color"); +strings[6738] = str->add("align"); +strings[6739] = str->add("valign"); +strings[6740] = str->add("wrap"); +strings[6741] = str->add("left_margin"); +strings[6742] = str->add("right_margin"); +strings[6743] = str->add("underline"); +strings[6744] = str->add("strikethrough"); +strings[6745] = str->add("backing"); +strings[6746] = str->add("style"); +strings[6747] = str->add("tabstops"); +strings[6738] = str->add(strings[6738]); +strings[6748] = str->add("center"); +str->del(strings[6738]); +str->del(strings[6748]); +strings[6729] = str->add(strings[6729]); +strings[6749] = str->add("#000"); +str->del(strings[6729]); +str->del(strings[6749]); +strings[6746] = str->add(strings[6746]); +strings[6750] = str->add("shadow"); +str->del(strings[6746]); +str->del(strings[6750]); +strings[6733] = str->add(strings[6733]); +strings[6751] = str->add("#ffffff80"); +str->del(strings[6733]); +str->del(strings[6751]); +strings[6740] = str->add(strings[6740]); +strings[6752] = str->add("word"); +str->del(strings[6740]); +str->del(strings[6752]); +strings[6728] = str->add(strings[6728]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6728]); +str->del(strings[469]); +strings[6727] = str->add(strings[6727]); +strings[6753] = str->add("10.000000"); +str->del(strings[6727]); +str->del(strings[6753]); +strings[6725] = str->add(strings[6725]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6725]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6746] = str->add(strings[6746]); +strings[6754] = str->add("soft_shadow"); +str->del(strings[6746]); +str->del(strings[6754]); +strings[6729] = str->add(strings[6729]); +strings[6755] = str->add("#fff"); +str->del(strings[6729]); +str->del(strings[6755]); +strings[6733] = str->add(strings[6733]); +strings[6756] = str->add("#00000020"); +str->del(strings[6733]); +str->del(strings[6756]); +strings[6727] = str->add(strings[6727]); +strings[6757] = str->add("12.000000"); +str->del(strings[6727]); +str->del(strings[6757]); +strings[6725] = str->add(strings[6725]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6725]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[6725]); +str->del(strings[6726]); +str->del(strings[6727]); +str->del(strings[6728]); +str->del(strings[6729]); +str->del(strings[6730]); +str->del(strings[6731]); +str->del(strings[6732]); +str->del(strings[6733]); +str->del(strings[6734]); +str->del(strings[6735]); +str->del(strings[6736]); +str->del(strings[6737]); +str->del(strings[6738]); +str->del(strings[6739]); +str->del(strings[6740]); +str->del(strings[6741]); +str->del(strings[6742]); +str->del(strings[6743]); +str->del(strings[6744]); +str->del(strings[6745]); +str->del(strings[6746]); +str->del(strings[6747]); +str->del(strings[7]); +str->del(strings[1968]); +strings[7] = str->add(strings[7]); +strings[2058] = str->add(strings[2058]); +strings[6758] = str->add("e,action,mouse,move"); +strings[6759] = str->add("e"); +strings[6758] = str->add(strings[6758]); +strings[6759] = str->add(strings[6759]); +str->del(strings[6758]); +str->del(strings[6759]); +str->del(strings[6758]); +str->del(strings[6759]); +strings[6760] = str->add("e,action,mouse,move"); +strings[6761] = str->add("e"); +str->del(strings[6760]); +str->del(strings[6761]); +strings[6762] = str->add("e,action,mouse,move"); +strings[6763] = str->add("e"); +str->del(strings[6762]); +str->del(strings[6763]); +str->del(strings[7]); +str->del(strings[2058]); +strings[7] = str->add(strings[7]); +strings[1970] = str->add(strings[1970]); +strings[6764] = str->add("e,action,mouse,move"); +strings[6765] = str->add("e"); +strings[6764] = str->add(strings[6764]); +strings[6765] = str->add(strings[6765]); +str->del(strings[6764]); +str->del(strings[6765]); +str->del(strings[6764]); +str->del(strings[6765]); +strings[6766] = str->add("e,action,mouse,move"); +strings[6767] = str->add("e"); +str->del(strings[6766]); +str->del(strings[6767]); +strings[6768] = str->add("e,action,mouse,move"); +strings[6769] = str->add("e"); +str->del(strings[6768]); +str->del(strings[6769]); +strings[6770] = str->add("e,action,mouse,move"); +strings[6771] = str->add("e"); +str->del(strings[6770]); +str->del(strings[6771]); +strings[6772] = str->add("e,action,mouse,move"); +strings[6773] = str->add("e"); +str->del(strings[6772]); +str->del(strings[6773]); +strings[6774] = str->add("e,action,mouse,move"); +strings[6775] = str->add("e"); +str->del(strings[6774]); +str->del(strings[6775]); +strings[6776] = str->add("e,action,mouse,move"); +strings[6777] = str->add("e"); +str->del(strings[6776]); +str->del(strings[6777]); +strings[6778] = str->add("e,action,mouse,move"); +strings[6779] = str->add("e"); +str->del(strings[6778]); +str->del(strings[6779]); +strings[6780] = str->add("e,action,mouse,move"); +strings[6781] = str->add("e"); +str->del(strings[6780]); +str->del(strings[6781]); +strings[1932] = str->add(strings[1932]); +strings[6782] = str->add("go_activeb24"); +strings[6783] = str->add("program,start"); +strings[6784] = str->add("go_activec24"); +strings[1932] = str->add(strings[1932]); +strings[6785] = str->add("go_activeb6"); +strings[6783] = str->add(strings[6783]); +strings[6786] = str->add("go_activec6"); +str->del(strings[1932]); +str->del(strings[6782]); +str->del(strings[6783]); +str->del(strings[6784]); +str->del(strings[1932]); +str->del(strings[6785]); +str->del(strings[6783]); +str->del(strings[6786]); +str->del(strings[7]); +str->del(strings[1970]); +strings[7] = str->add(strings[7]); +strings[1869] = str->add(strings[1869]); +strings[6787] = str->add("e,action,mouse,move"); +strings[6788] = str->add("e"); +strings[6787] = str->add(strings[6787]); +strings[6788] = str->add(strings[6788]); +str->del(strings[6787]); +str->del(strings[6788]); +str->del(strings[6787]); +str->del(strings[6788]); +strings[6789] = str->add("e,action,mouse,move"); +strings[6790] = str->add("e"); +strings[6791] = str->add("e,state,unselected"); +strings[6790] = str->add(strings[6790]); +strings[6791] = str->add(strings[6791]); +strings[6790] = str->add(strings[6790]); +strings[6791] = str->add(strings[6791]); +strings[6790] = str->add(strings[6790]); +strings[6791] = str->add(strings[6791]); +strings[6790] = str->add(strings[6790]); +strings[6791] = str->add(strings[6791]); +strings[6790] = str->add(strings[6790]); +strings[6791] = str->add(strings[6791]); +strings[6790] = str->add(strings[6790]); +str->del(strings[6789]); +str->del(strings[6790]); +strings[1932] = str->add(strings[1932]); +strings[6792] = str->add("sel"); +strings[6793] = str->add("program,start"); +strings[6794] = str->add("unsel"); +str->del(strings[6791]); +str->del(strings[6790]); +str->del(strings[6791]); +str->del(strings[6790]); +strings[1932] = str->add(strings[1932]); +strings[6792] = str->add(strings[6792]); +strings[6793] = str->add(strings[6793]); +strings[6794] = str->add(strings[6794]); +str->del(strings[6791]); +str->del(strings[6790]); +strings[6793] = str->add(strings[6793]); +strings[6794] = str->add(strings[6794]); +strings[1932] = str->add(strings[1932]); +strings[6794] = str->add(strings[6794]); +str->del(strings[6791]); +str->del(strings[6790]); +str->del(strings[6791]); +str->del(strings[6790]); +str->del(strings[6791]); +str->del(strings[6790]); +str->del(strings[1932]); +str->del(strings[6792]); +str->del(strings[6793]); +str->del(strings[6794]); +str->del(strings[1932]); +str->del(strings[6792]); +str->del(strings[6793]); +str->del(strings[6794]); +str->del(strings[6793]); +str->del(strings[6794]); +str->del(strings[1932]); +str->del(strings[6794]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6795] = str->add("e,action,mouse,move"); +strings[6796] = str->add("e"); +str->del(strings[6795]); +str->del(strings[6796]); +strings[1932] = str->add(strings[1932]); +strings[1840] = str->add(strings[1840]); +strings[6797] = str->add("program,start"); +strings[1844] = str->add(strings[1844]); +strings[1932] = str->add(strings[1932]); +strings[1844] = str->add(strings[1844]); +strings[6797] = str->add(strings[6797]); +strings[1840] = str->add(strings[1840]); +strings[1932] = str->add(strings[1932]); +strings[1851] = str->add(strings[1851]); +strings[6797] = str->add(strings[6797]); +strings[1851] = str->add(strings[1851]); +str->del(strings[1932]); +str->del(strings[1840]); +str->del(strings[6797]); +str->del(strings[1844]); +str->del(strings[1932]); +str->del(strings[1844]); +str->del(strings[6797]); +str->del(strings[1840]); +str->del(strings[1932]); +str->del(strings[1851]); +str->del(strings[6797]); +str->del(strings[1851]); +strings[6798] = str->add("e,action,mouse,move"); +strings[6799] = str->add("e"); +strings[6798] = str->add(strings[6798]); +strings[6799] = str->add(strings[6799]); +str->del(strings[6798]); +str->del(strings[6799]); +str->del(strings[6798]); +str->del(strings[6799]); +strings[6800] = str->add("e,action,mouse,move"); +strings[6801] = str->add("e"); +strings[6802] = str->add("e,state,selected"); +strings[6801] = str->add(strings[6801]); +strings[6802] = str->add(strings[6802]); +strings[6801] = str->add(strings[6801]); +strings[6802] = str->add(strings[6802]); +strings[6801] = str->add(strings[6801]); +strings[6802] = str->add(strings[6802]); +strings[6801] = str->add(strings[6801]); +strings[6802] = str->add(strings[6802]); +strings[6801] = str->add(strings[6801]); +strings[6802] = str->add(strings[6802]); +strings[6801] = str->add(strings[6801]); +str->del(strings[6800]); +str->del(strings[6801]); +strings[6803] = str->add("program,start"); +strings[6804] = str->add("sel"); +str->del(strings[6802]); +str->del(strings[6801]); +str->del(strings[6802]); +str->del(strings[6801]); +strings[6803] = str->add(strings[6803]); +strings[6804] = str->add(strings[6804]); +str->del(strings[6802]); +str->del(strings[6801]); +strings[6803] = str->add(strings[6803]); +strings[6804] = str->add(strings[6804]); +strings[1932] = str->add(strings[1932]); +strings[6804] = str->add(strings[6804]); +str->del(strings[6802]); +str->del(strings[6801]); +str->del(strings[6802]); +str->del(strings[6801]); +str->del(strings[6802]); +str->del(strings[6801]); +str->del(strings[6803]); +str->del(strings[6804]); +str->del(strings[6803]); +str->del(strings[6804]); +str->del(strings[6803]); +str->del(strings[6804]); +str->del(strings[1932]); +str->del(strings[6804]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[6805] = str->add("e,action,mouse,move"); +strings[6806] = str->add("e"); +str->del(strings[6805]); +str->del(strings[6806]); +strings[6807] = str->add("e,action,mouse,move"); +strings[6808] = str->add("e"); +str->del(strings[6807]); +str->del(strings[6808]); +strings[1932] = str->add(strings[1932]); +strings[6809] = str->add("go_activec21"); +strings[6810] = str->add("program,start"); +strings[6811] = str->add("go_activeb21"); +strings[1932] = str->add(strings[1932]); +strings[6812] = str->add("go_activec9"); +strings[6810] = str->add(strings[6810]); +strings[6813] = str->add("go_activeb9"); +str->del(strings[1932]); +str->del(strings[6809]); +str->del(strings[6810]); +str->del(strings[6811]); +str->del(strings[1932]); +str->del(strings[6812]); +str->del(strings[6810]); +str->del(strings[6813]); +strings[6814] = str->add("e,action,mouse,move"); +strings[6815] = str->add("e"); +strings[2224] = str->add(strings[2224]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[4] = str->add(strings[4]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[1925] = str->add(strings[1925]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[2494] = str->add(strings[2494]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[2514] = str->add(strings[2514]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[2536] = str->add(strings[2536]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[6814] = str->add(strings[6814]); +strings[6815] = str->add(strings[6815]); +str->del(strings[6814]); +str->del(strings[6815]); +str->del(strings[6814]); +str->del(strings[6815]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[6816] = str->add("resize"); +str->del(strings[6816]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[6817] = str->add(strings[6817]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add("resize"); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[2224] = str->add(strings[2224]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[6817] = str->add(strings[6817]); +strings[469] = str->add(strings[469]); +strings[3089] = str->add(strings[3089]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[4] = str->add(strings[4]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4] = str->add(strings[4]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[6817] = str->add(strings[6817]); +strings[1926] = str->add(strings[1926]); +strings[1552] = str->add(strings[1552]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[1925] = str->add(strings[1925]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1925] = str->add(strings[1925]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[6817] = str->add(strings[6817]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[6817] = str->add(strings[6817]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6817] = str->add(strings[6817]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[6817] = str->add(strings[6817]); +strings[469] = str->add(strings[469]); +strings[3096] = str->add(strings[3096]); +strings[1841] = str->add(strings[1841]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6817] = str->add(strings[6817]); +strings[2536] = str->add(strings[2536]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[6818] = str->add(strings[6818]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2708]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6640]); +str->del(strings[6640]); +str->del(strings[6640]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2677]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[1726]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2678]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6641]); +str->del(strings[6641]); +str->del(strings[6641]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2676]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[1724]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2675]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[1722]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2674]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6642]); +str->del(strings[6642]); +str->del(strings[6642]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3008]); +str->del(strings[6640]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3011]); +str->del(strings[1726]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3013]); +str->del(strings[6641]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3015]); +str->del(strings[1724]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3017]); +str->del(strings[1722]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3019]); +str->del(strings[6642]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[6818] = str->add(strings[6818]); +strings[2224] = str->add(strings[2224]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6818] = str->add(strings[6818]); +strings[4] = str->add(strings[4]); +strings[4] = str->add(strings[4]); +strings[6818] = str->add(strings[6818]); +strings[1925] = str->add(strings[1925]); +strings[1925] = str->add(strings[1925]); +strings[6818] = str->add(strings[6818]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[6818] = str->add(strings[6818]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[6818] = str->add(strings[6818]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +strings[6819] = str->add("font"); +strings[6820] = str->add("font_fallbacks"); +strings[6821] = str->add("font_size"); +strings[6822] = str->add("font_source"); +strings[6823] = str->add("color"); +strings[6824] = str->add("underline_color"); +strings[6825] = str->add("underline2_color"); +strings[6826] = str->add("outline_color"); +strings[6827] = str->add("shadow_color"); +strings[6828] = str->add("glow_color"); +strings[6829] = str->add("glow2_color"); +strings[6830] = str->add("backing_color"); +strings[6831] = str->add("strikethrough_color"); +strings[6832] = str->add("align"); +strings[6833] = str->add("valign"); +strings[6834] = str->add("wrap"); +strings[6835] = str->add("left_margin"); +strings[6836] = str->add("right_margin"); +strings[6837] = str->add("underline"); +strings[6838] = str->add("strikethrough"); +strings[6839] = str->add("backing"); +strings[6840] = str->add("style"); +strings[6841] = str->add("tabstops"); +strings[6832] = str->add(strings[6832]); +strings[6842] = str->add("center"); +str->del(strings[6832]); +str->del(strings[6842]); +strings[6823] = str->add(strings[6823]); +strings[6843] = str->add("#000"); +str->del(strings[6823]); +str->del(strings[6843]); +strings[6840] = str->add(strings[6840]); +strings[6844] = str->add("shadow"); +str->del(strings[6840]); +str->del(strings[6844]); +strings[6827] = str->add(strings[6827]); +strings[6845] = str->add("#ffffff80"); +str->del(strings[6827]); +str->del(strings[6845]); +strings[6834] = str->add(strings[6834]); +strings[6846] = str->add("word"); +str->del(strings[6834]); +str->del(strings[6846]); +strings[6822] = str->add(strings[6822]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6822]); +str->del(strings[469]); +strings[6821] = str->add(strings[6821]); +strings[6847] = str->add("10.000000"); +str->del(strings[6821]); +str->del(strings[6847]); +strings[6819] = str->add(strings[6819]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6819]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6840] = str->add(strings[6840]); +strings[6848] = str->add("glow"); +str->del(strings[6840]); +str->del(strings[6848]); +strings[6823] = str->add(strings[6823]); +strings[6849] = str->add("#fff"); +str->del(strings[6823]); +str->del(strings[6849]); +strings[6829] = str->add(strings[6829]); +strings[6850] = str->add("#fe87"); +str->del(strings[6829]); +str->del(strings[6850]); +strings[6828] = str->add(strings[6828]); +strings[6851] = str->add("#fa14"); +str->del(strings[6828]); +str->del(strings[6851]); +strings[6819] = str->add(strings[6819]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6819]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6840] = str->add(strings[6840]); +strings[6852] = str->add("glow"); +str->del(strings[6840]); +str->del(strings[6852]); +strings[6823] = str->add(strings[6823]); +strings[6853] = str->add("#fff"); +str->del(strings[6823]); +str->del(strings[6853]); +strings[6829] = str->add(strings[6829]); +strings[6854] = str->add("#fe87"); +str->del(strings[6829]); +str->del(strings[6854]); +strings[6828] = str->add(strings[6828]); +strings[6855] = str->add("#fa14"); +str->del(strings[6828]); +str->del(strings[6855]); +strings[6819] = str->add(strings[6819]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6819]); +str->del(strings[471]); +str->del(strings[6819]); +str->del(strings[6820]); +str->del(strings[6821]); +str->del(strings[6822]); +str->del(strings[6823]); +str->del(strings[6824]); +str->del(strings[6825]); +str->del(strings[6826]); +str->del(strings[6827]); +str->del(strings[6828]); +str->del(strings[6829]); +str->del(strings[6830]); +str->del(strings[6831]); +str->del(strings[6832]); +str->del(strings[6833]); +str->del(strings[6834]); +str->del(strings[6835]); +str->del(strings[6836]); +str->del(strings[6837]); +str->del(strings[6838]); +str->del(strings[6839]); +str->del(strings[6840]); +str->del(strings[6841]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[6856] = str->add("font"); +strings[6857] = str->add("font_fallbacks"); +strings[6858] = str->add("font_size"); +strings[6859] = str->add("font_source"); +strings[6860] = str->add("color"); +strings[6861] = str->add("underline_color"); +strings[6862] = str->add("underline2_color"); +strings[6863] = str->add("outline_color"); +strings[6864] = str->add("shadow_color"); +strings[6865] = str->add("glow_color"); +strings[6866] = str->add("glow2_color"); +strings[6867] = str->add("backing_color"); +strings[6868] = str->add("strikethrough_color"); +strings[6869] = str->add("align"); +strings[6870] = str->add("valign"); +strings[6871] = str->add("wrap"); +strings[6872] = str->add("left_margin"); +strings[6873] = str->add("right_margin"); +strings[6874] = str->add("underline"); +strings[6875] = str->add("strikethrough"); +strings[6876] = str->add("backing"); +strings[6877] = str->add("style"); +strings[6878] = str->add("tabstops"); +strings[6869] = str->add(strings[6869]); +strings[6879] = str->add("center"); +str->del(strings[6869]); +str->del(strings[6879]); +strings[6860] = str->add(strings[6860]); +strings[6880] = str->add("#000"); +str->del(strings[6860]); +str->del(strings[6880]); +strings[6877] = str->add(strings[6877]); +strings[6881] = str->add("shadow"); +str->del(strings[6877]); +str->del(strings[6881]); +strings[6864] = str->add(strings[6864]); +strings[6882] = str->add("#ffffff80"); +str->del(strings[6864]); +str->del(strings[6882]); +strings[6871] = str->add(strings[6871]); +strings[6883] = str->add("word"); +str->del(strings[6871]); +str->del(strings[6883]); +strings[6859] = str->add(strings[6859]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6859]); +str->del(strings[469]); +strings[6858] = str->add(strings[6858]); +strings[6884] = str->add("10.000000"); +str->del(strings[6858]); +str->del(strings[6884]); +strings[6856] = str->add(strings[6856]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6856]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6877] = str->add(strings[6877]); +strings[6885] = str->add("soft_shadow"); +str->del(strings[6877]); +str->del(strings[6885]); +strings[6860] = str->add(strings[6860]); +strings[6886] = str->add("#fff"); +str->del(strings[6860]); +str->del(strings[6886]); +strings[6864] = str->add(strings[6864]); +strings[6887] = str->add("#00000020"); +str->del(strings[6864]); +str->del(strings[6887]); +strings[6858] = str->add(strings[6858]); +strings[6888] = str->add("12.000000"); +str->del(strings[6858]); +str->del(strings[6888]); +strings[6856] = str->add(strings[6856]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6856]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[6856]); +str->del(strings[6857]); +str->del(strings[6858]); +str->del(strings[6859]); +str->del(strings[6860]); +str->del(strings[6861]); +str->del(strings[6862]); +str->del(strings[6863]); +str->del(strings[6864]); +str->del(strings[6865]); +str->del(strings[6866]); +str->del(strings[6867]); +str->del(strings[6868]); +str->del(strings[6869]); +str->del(strings[6870]); +str->del(strings[6871]); +str->del(strings[6872]); +str->del(strings[6873]); +str->del(strings[6874]); +str->del(strings[6875]); +str->del(strings[6876]); +str->del(strings[6877]); +str->del(strings[6878]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[1849] = str->add(strings[1849]); +strings[6889] = str->add("program,start"); +strings[1850] = str->add(strings[1850]); +strings[1932] = str->add(strings[1932]); +strings[1850] = str->add(strings[1850]); +strings[6889] = str->add(strings[6889]); +strings[1849] = str->add(strings[1849]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6817]); +str->del(strings[1841]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[6818]); +str->del(strings[1932]); +str->del(strings[1849]); +str->del(strings[6889]); +str->del(strings[1850]); +str->del(strings[1932]); +str->del(strings[1850]); +str->del(strings[6889]); +str->del(strings[1849]); +strings[6890] = str->add("e,action,mouse,move"); +strings[6891] = str->add("e"); +strings[6890] = str->add(strings[6890]); +strings[6891] = str->add(strings[6891]); +str->del(strings[6890]); +str->del(strings[6891]); +str->del(strings[6890]); +str->del(strings[6891]); +strings[6892] = str->add("font"); +strings[6893] = str->add("font_fallbacks"); +strings[6894] = str->add("font_size"); +strings[6895] = str->add("font_source"); +strings[6896] = str->add("color"); +strings[6897] = str->add("underline_color"); +strings[6898] = str->add("underline2_color"); +strings[6899] = str->add("outline_color"); +strings[6900] = str->add("shadow_color"); +strings[6901] = str->add("glow_color"); +strings[6902] = str->add("glow2_color"); +strings[6903] = str->add("backing_color"); +strings[6904] = str->add("strikethrough_color"); +strings[6905] = str->add("align"); +strings[6906] = str->add("valign"); +strings[6907] = str->add("wrap"); +strings[6908] = str->add("left_margin"); +strings[6909] = str->add("right_margin"); +strings[6910] = str->add("underline"); +strings[6911] = str->add("strikethrough"); +strings[6912] = str->add("backing"); +strings[6913] = str->add("style"); +strings[6914] = str->add("tabstops"); +strings[6905] = str->add(strings[6905]); +strings[6915] = str->add("center"); +str->del(strings[6905]); +str->del(strings[6915]); +strings[6896] = str->add(strings[6896]); +strings[6916] = str->add("#000"); +str->del(strings[6896]); +str->del(strings[6916]); +strings[6913] = str->add(strings[6913]); +strings[6917] = str->add("shadow"); +str->del(strings[6913]); +str->del(strings[6917]); +strings[6900] = str->add(strings[6900]); +strings[6918] = str->add("#ffffff80"); +str->del(strings[6900]); +str->del(strings[6918]); +strings[6907] = str->add(strings[6907]); +strings[6919] = str->add("word"); +str->del(strings[6907]); +str->del(strings[6919]); +strings[6895] = str->add(strings[6895]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6895]); +str->del(strings[469]); +strings[6894] = str->add(strings[6894]); +strings[6920] = str->add("10.000000"); +str->del(strings[6894]); +str->del(strings[6920]); +strings[6892] = str->add(strings[6892]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6892]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6913] = str->add(strings[6913]); +strings[6921] = str->add("soft_shadow"); +str->del(strings[6913]); +str->del(strings[6921]); +strings[6896] = str->add(strings[6896]); +strings[6922] = str->add("#fff"); +str->del(strings[6896]); +str->del(strings[6922]); +strings[6900] = str->add(strings[6900]); +strings[6923] = str->add("#00000020"); +str->del(strings[6900]); +str->del(strings[6923]); +strings[6894] = str->add(strings[6894]); +strings[6924] = str->add("12.000000"); +str->del(strings[6894]); +str->del(strings[6924]); +strings[6892] = str->add(strings[6892]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6892]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[6892]); +str->del(strings[6893]); +str->del(strings[6894]); +str->del(strings[6895]); +str->del(strings[6896]); +str->del(strings[6897]); +str->del(strings[6898]); +str->del(strings[6899]); +str->del(strings[6900]); +str->del(strings[6901]); +str->del(strings[6902]); +str->del(strings[6903]); +str->del(strings[6904]); +str->del(strings[6905]); +str->del(strings[6906]); +str->del(strings[6907]); +str->del(strings[6908]); +str->del(strings[6909]); +str->del(strings[6910]); +str->del(strings[6911]); +str->del(strings[6912]); +str->del(strings[6913]); +str->del(strings[6914]); +str->del(strings[7]); +str->del(strings[1869]); +strings[7] = str->add(strings[7]); +strings[3251] = str->add(strings[3251]); +strings[6925] = str->add("e,action,mouse,move"); +strings[6926] = str->add("e"); +strings[6925] = str->add(strings[6925]); +strings[6926] = str->add(strings[6926]); +str->del(strings[6925]); +str->del(strings[6926]); +str->del(strings[6925]); +str->del(strings[6926]); +strings[6927] = str->add("e,action,mouse,move"); +strings[6928] = str->add("e"); +str->del(strings[6927]); +str->del(strings[6928]); +strings[6929] = str->add("e,action,mouse,move"); +strings[6930] = str->add("e"); +str->del(strings[6929]); +str->del(strings[6930]); +strings[1932] = str->add(strings[1932]); +strings[6931] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[6931]); +strings[6932] = str->add("e,action,mouse,move"); +strings[6933] = str->add("e"); +str->del(strings[6932]); +str->del(strings[6933]); +strings[6934] = str->add("e,action,mouse,move"); +strings[6935] = str->add("e"); +str->del(strings[6934]); +str->del(strings[6935]); +strings[6936] = str->add("e,action,mouse,move"); +strings[6937] = str->add("e"); +str->del(strings[6936]); +str->del(strings[6937]); +strings[1932] = str->add(strings[1932]); +strings[6938] = str->add("go_activeb23"); +strings[6939] = str->add("program,start"); +strings[6940] = str->add("go_activec23"); +strings[1932] = str->add(strings[1932]); +strings[6941] = str->add("go_activeb7"); +strings[6939] = str->add(strings[6939]); +strings[6942] = str->add("go_activec7"); +str->del(strings[1932]); +str->del(strings[6938]); +str->del(strings[6939]); +str->del(strings[6940]); +str->del(strings[1932]); +str->del(strings[6941]); +str->del(strings[6939]); +str->del(strings[6942]); +str->del(strings[7]); +str->del(strings[3251]); +strings[7] = str->add(strings[7]); +strings[3254] = str->add(strings[3254]); +strings[6943] = str->add("e,action,mouse,move"); +strings[6944] = str->add("e"); +strings[6945] = str->add("e,state,unselected"); +strings[6944] = str->add(strings[6944]); +strings[6945] = str->add(strings[6945]); +strings[6944] = str->add(strings[6944]); +strings[6945] = str->add(strings[6945]); +strings[6944] = str->add(strings[6944]); +strings[6945] = str->add(strings[6945]); +strings[6944] = str->add(strings[6944]); +strings[6945] = str->add(strings[6945]); +strings[6944] = str->add(strings[6944]); +strings[6945] = str->add(strings[6945]); +strings[6944] = str->add(strings[6944]); +str->del(strings[6943]); +str->del(strings[6944]); +strings[1932] = str->add(strings[1932]); +strings[6946] = str->add("sel"); +strings[6947] = str->add("program,start"); +strings[6948] = str->add("unsel"); +str->del(strings[6945]); +str->del(strings[6944]); +str->del(strings[6945]); +str->del(strings[6944]); +strings[1932] = str->add(strings[1932]); +strings[6946] = str->add(strings[6946]); +strings[6947] = str->add(strings[6947]); +strings[6948] = str->add(strings[6948]); +str->del(strings[6945]); +str->del(strings[6944]); +strings[6947] = str->add(strings[6947]); +strings[6948] = str->add(strings[6948]); +strings[1932] = str->add(strings[1932]); +strings[6948] = str->add(strings[6948]); +str->del(strings[6945]); +str->del(strings[6944]); +str->del(strings[6945]); +str->del(strings[6944]); +str->del(strings[6945]); +str->del(strings[6944]); +str->del(strings[1932]); +str->del(strings[6946]); +str->del(strings[6947]); +str->del(strings[6948]); +str->del(strings[1932]); +str->del(strings[6946]); +str->del(strings[6947]); +str->del(strings[6948]); +str->del(strings[6947]); +str->del(strings[6948]); +str->del(strings[1932]); +str->del(strings[6948]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[6949] = str->add("e,action,mouse,move"); +strings[6950] = str->add("e"); +str->del(strings[6949]); +str->del(strings[6950]); +strings[1932] = str->add(strings[1932]); +strings[6951] = str->add("go_activec1"); +strings[6952] = str->add("program,start"); +strings[6953] = str->add("go_activeb1"); +strings[1932] = str->add(strings[1932]); +strings[6954] = str->add("go_activec29"); +strings[6952] = str->add(strings[6952]); +strings[6955] = str->add("go_activeb29"); +str->del(strings[1932]); +str->del(strings[6951]); +str->del(strings[6952]); +str->del(strings[6953]); +str->del(strings[1932]); +str->del(strings[6954]); +str->del(strings[6952]); +str->del(strings[6955]); +str->del(strings[7]); +str->del(strings[3254]); +strings[7] = str->add(strings[7]); +strings[2206] = str->add(strings[2206]); +strings[6956] = str->add("e,action,mouse,move"); +strings[6957] = str->add("e"); +strings[6956] = str->add(strings[6956]); +strings[6957] = str->add(strings[6957]); +strings[6956] = str->add(strings[6956]); +strings[6957] = str->add(strings[6957]); +str->del(strings[6956]); +str->del(strings[6957]); +str->del(strings[6956]); +str->del(strings[6957]); +str->del(strings[6956]); +str->del(strings[6957]); +strings[6958] = str->add("e,action,mouse,move"); +strings[6959] = str->add("e"); +str->del(strings[6958]); +str->del(strings[6959]); +strings[6960] = str->add("e,action,mouse,move"); +strings[6961] = str->add("e"); +str->del(strings[6960]); +str->del(strings[6961]); +strings[6962] = str->add("e,action,mouse,move"); +strings[6963] = str->add("e"); +str->del(strings[6962]); +str->del(strings[6963]); +strings[6964] = str->add("e,action,mouse,move"); +strings[6965] = str->add("e"); +str->del(strings[6964]); +str->del(strings[6965]); +strings[1932] = str->add(strings[1932]); +strings[6966] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[6966]); +str->del(strings[7]); +str->del(strings[2206]); +strings[7] = str->add(strings[7]); +strings[2213] = str->add(strings[2213]); +strings[6967] = str->add("e,action,mouse,move"); +strings[6968] = str->add("e"); +str->del(strings[6967]); +str->del(strings[6968]); +strings[6969] = str->add("e,action,mouse,move"); +strings[6970] = str->add("e"); +strings[6971] = str->add("e,state,selected"); +strings[6970] = str->add(strings[6970]); +strings[6971] = str->add(strings[6971]); +strings[6970] = str->add(strings[6970]); +strings[6971] = str->add(strings[6971]); +strings[6970] = str->add(strings[6970]); +strings[6971] = str->add(strings[6971]); +strings[6970] = str->add(strings[6970]); +strings[6971] = str->add(strings[6971]); +strings[6970] = str->add(strings[6970]); +strings[6971] = str->add(strings[6971]); +strings[6970] = str->add(strings[6970]); +str->del(strings[6969]); +str->del(strings[6970]); +strings[6972] = str->add("program,start"); +strings[6973] = str->add("sel"); +str->del(strings[6971]); +str->del(strings[6970]); +str->del(strings[6971]); +str->del(strings[6970]); +strings[6972] = str->add(strings[6972]); +strings[6973] = str->add(strings[6973]); +str->del(strings[6971]); +str->del(strings[6970]); +strings[6972] = str->add(strings[6972]); +strings[6973] = str->add(strings[6973]); +strings[1932] = str->add(strings[1932]); +strings[6973] = str->add(strings[6973]); +str->del(strings[6971]); +str->del(strings[6970]); +strings[6972] = str->add(strings[6972]); +strings[6974] = str->add("e_in"); +str->del(strings[6971]); +str->del(strings[6970]); +str->del(strings[6971]); +str->del(strings[6970]); +str->del(strings[6972]); +str->del(strings[6973]); +str->del(strings[6972]); +str->del(strings[6973]); +str->del(strings[6972]); +str->del(strings[6973]); +str->del(strings[1932]); +str->del(strings[6973]); +str->del(strings[6972]); +str->del(strings[6974]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[6975] = str->add("resize"); +str->del(strings[6975]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[6976] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2671] = str->add(strings[2671]); +strings[6976] = str->add(strings[6976]); +strings[469] = str->add(strings[469]); +strings[2898] = str->add(strings[2898]); +strings[469] = str->add(strings[469]); +strings[2900] = str->add(strings[2900]); +strings[1841] = str->add(strings[1841]); +strings[6977] = str->add("resize"); +strings[6977] = str->add(strings[6977]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6976] = str->add(strings[6976]); +strings[6487] = str->add(strings[6487]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[6487] = str->add(strings[6487]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[6976] = str->add(strings[6976]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6976] = str->add(strings[6976]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2672] = str->add(strings[2672]); +strings[6976] = str->add(strings[6976]); +strings[469] = str->add(strings[469]); +strings[3130] = str->add(strings[3130]); +strings[1841] = str->add(strings[1841]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6976] = str->add(strings[6976]); +strings[1713] = str->add(strings[1713]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1713] = str->add(strings[1713]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[6976] = str->add(strings[6976]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2673] = str->add(strings[2673]); +strings[6976] = str->add(strings[6976]); +strings[469] = str->add(strings[469]); +strings[3132] = str->add(strings[3132]); +strings[1841] = str->add(strings[1841]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[6976] = str->add(strings[6976]); +strings[1714] = str->add(strings[1714]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1714] = str->add(strings[1714]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[6977] = str->add(strings[6977]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2685]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1926]); +str->del(strings[3083]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2713]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[2224]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3089]); +str->del(strings[4]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1926]); +str->del(strings[1552]); +str->del(strings[1925]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3096]); +str->del(strings[2536]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +str->del(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[6977] = str->add(strings[6977]); +strings[6487] = str->add(strings[6487]); +strings[6487] = str->add(strings[6487]); +strings[6977] = str->add(strings[6977]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[6977] = str->add(strings[6977]); +strings[1713] = str->add(strings[1713]); +strings[1713] = str->add(strings[1713]); +strings[6977] = str->add(strings[6977]); +strings[1714] = str->add(strings[1714]); +strings[1714] = str->add(strings[1714]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[6978] = str->add("font"); +strings[6979] = str->add("font_fallbacks"); +strings[6980] = str->add("font_size"); +strings[6981] = str->add("font_source"); +strings[6982] = str->add("color"); +strings[6983] = str->add("underline_color"); +strings[6984] = str->add("underline2_color"); +strings[6985] = str->add("outline_color"); +strings[6986] = str->add("shadow_color"); +strings[6987] = str->add("glow_color"); +strings[6988] = str->add("glow2_color"); +strings[6989] = str->add("backing_color"); +strings[6990] = str->add("strikethrough_color"); +strings[6991] = str->add("align"); +strings[6992] = str->add("valign"); +strings[6993] = str->add("wrap"); +strings[6994] = str->add("left_margin"); +strings[6995] = str->add("right_margin"); +strings[6996] = str->add("underline"); +strings[6997] = str->add("strikethrough"); +strings[6998] = str->add("backing"); +strings[6999] = str->add("style"); +strings[7000] = str->add("tabstops"); +strings[6991] = str->add(strings[6991]); +strings[7001] = str->add("center"); +str->del(strings[6991]); +str->del(strings[7001]); +strings[6982] = str->add(strings[6982]); +strings[7002] = str->add("#000"); +str->del(strings[6982]); +str->del(strings[7002]); +strings[6999] = str->add(strings[6999]); +strings[7003] = str->add("shadow"); +str->del(strings[6999]); +str->del(strings[7003]); +strings[6986] = str->add(strings[6986]); +strings[7004] = str->add("#ffffff80"); +str->del(strings[6986]); +str->del(strings[7004]); +strings[6993] = str->add(strings[6993]); +strings[7005] = str->add("word"); +str->del(strings[6993]); +str->del(strings[7005]); +strings[6981] = str->add(strings[6981]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[6981]); +str->del(strings[469]); +strings[6980] = str->add(strings[6980]); +strings[7006] = str->add("10.000000"); +str->del(strings[6980]); +str->del(strings[7006]); +strings[6978] = str->add(strings[6978]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[6978]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6999] = str->add(strings[6999]); +strings[7007] = str->add("glow"); +str->del(strings[6999]); +str->del(strings[7007]); +strings[6982] = str->add(strings[6982]); +strings[7008] = str->add("#fff"); +str->del(strings[6982]); +str->del(strings[7008]); +strings[6988] = str->add(strings[6988]); +strings[7009] = str->add("#fe87"); +str->del(strings[6988]); +str->del(strings[7009]); +strings[6987] = str->add(strings[6987]); +strings[7010] = str->add("#fa14"); +str->del(strings[6987]); +str->del(strings[7010]); +strings[6978] = str->add(strings[6978]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6978]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[6999] = str->add(strings[6999]); +strings[7011] = str->add("glow"); +str->del(strings[6999]); +str->del(strings[7011]); +strings[6982] = str->add(strings[6982]); +strings[7012] = str->add("#fff"); +str->del(strings[6982]); +str->del(strings[7012]); +strings[6988] = str->add(strings[6988]); +strings[7013] = str->add("#fe87"); +str->del(strings[6988]); +str->del(strings[7013]); +strings[6987] = str->add(strings[6987]); +strings[7014] = str->add("#fa14"); +str->del(strings[6987]); +str->del(strings[7014]); +strings[6978] = str->add(strings[6978]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[6978]); +str->del(strings[471]); +str->del(strings[6978]); +str->del(strings[6979]); +str->del(strings[6980]); +str->del(strings[6981]); +str->del(strings[6982]); +str->del(strings[6983]); +str->del(strings[6984]); +str->del(strings[6985]); +str->del(strings[6986]); +str->del(strings[6987]); +str->del(strings[6988]); +str->del(strings[6989]); +str->del(strings[6990]); +str->del(strings[6991]); +str->del(strings[6992]); +str->del(strings[6993]); +str->del(strings[6994]); +str->del(strings[6995]); +str->del(strings[6996]); +str->del(strings[6997]); +str->del(strings[6998]); +str->del(strings[6999]); +str->del(strings[7000]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[7015] = str->add("font"); +strings[7016] = str->add("font_fallbacks"); +strings[7017] = str->add("font_size"); +strings[7018] = str->add("font_source"); +strings[7019] = str->add("color"); +strings[7020] = str->add("underline_color"); +strings[7021] = str->add("underline2_color"); +strings[7022] = str->add("outline_color"); +strings[7023] = str->add("shadow_color"); +strings[7024] = str->add("glow_color"); +strings[7025] = str->add("glow2_color"); +strings[7026] = str->add("backing_color"); +strings[7027] = str->add("strikethrough_color"); +strings[7028] = str->add("align"); +strings[7029] = str->add("valign"); +strings[7030] = str->add("wrap"); +strings[7031] = str->add("left_margin"); +strings[7032] = str->add("right_margin"); +strings[7033] = str->add("underline"); +strings[7034] = str->add("strikethrough"); +strings[7035] = str->add("backing"); +strings[7036] = str->add("style"); +strings[7037] = str->add("tabstops"); +strings[7028] = str->add(strings[7028]); +strings[7038] = str->add("center"); +str->del(strings[7028]); +str->del(strings[7038]); +strings[7019] = str->add(strings[7019]); +strings[7039] = str->add("#000"); +str->del(strings[7019]); +str->del(strings[7039]); +strings[7036] = str->add(strings[7036]); +strings[7040] = str->add("shadow"); +str->del(strings[7036]); +str->del(strings[7040]); +strings[7023] = str->add(strings[7023]); +strings[7041] = str->add("#ffffff80"); +str->del(strings[7023]); +str->del(strings[7041]); +strings[7030] = str->add(strings[7030]); +strings[7042] = str->add("word"); +str->del(strings[7030]); +str->del(strings[7042]); +strings[7018] = str->add(strings[7018]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7018]); +str->del(strings[469]); +strings[7017] = str->add(strings[7017]); +strings[7043] = str->add("10.000000"); +str->del(strings[7017]); +str->del(strings[7043]); +strings[7015] = str->add(strings[7015]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7015]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7036] = str->add(strings[7036]); +strings[7044] = str->add("soft_shadow"); +str->del(strings[7036]); +str->del(strings[7044]); +strings[7019] = str->add(strings[7019]); +strings[7045] = str->add("#fff"); +str->del(strings[7019]); +str->del(strings[7045]); +strings[7023] = str->add(strings[7023]); +strings[7046] = str->add("#00000020"); +str->del(strings[7023]); +str->del(strings[7046]); +strings[7017] = str->add(strings[7017]); +strings[7047] = str->add("12.000000"); +str->del(strings[7017]); +str->del(strings[7047]); +strings[7015] = str->add(strings[7015]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7015]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[7015]); +str->del(strings[7016]); +str->del(strings[7017]); +str->del(strings[7018]); +str->del(strings[7019]); +str->del(strings[7020]); +str->del(strings[7021]); +str->del(strings[7022]); +str->del(strings[7023]); +str->del(strings[7024]); +str->del(strings[7025]); +str->del(strings[7026]); +str->del(strings[7027]); +str->del(strings[7028]); +str->del(strings[7029]); +str->del(strings[7030]); +str->del(strings[7031]); +str->del(strings[7032]); +str->del(strings[7033]); +str->del(strings[7034]); +str->del(strings[7035]); +str->del(strings[7036]); +str->del(strings[7037]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[7048] = str->add("unsel"); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6976]); +str->del(strings[1841]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[6977]); +str->del(strings[1932]); +str->del(strings[7048]); +strings[7049] = str->add("e,action,mouse,move"); +strings[7050] = str->add("e"); +str->del(strings[7049]); +str->del(strings[7050]); +strings[7051] = str->add("font"); +strings[7052] = str->add("font_fallbacks"); +strings[7053] = str->add("font_size"); +strings[7054] = str->add("font_source"); +strings[7055] = str->add("color"); +strings[7056] = str->add("underline_color"); +strings[7057] = str->add("underline2_color"); +strings[7058] = str->add("outline_color"); +strings[7059] = str->add("shadow_color"); +strings[7060] = str->add("glow_color"); +strings[7061] = str->add("glow2_color"); +strings[7062] = str->add("backing_color"); +strings[7063] = str->add("strikethrough_color"); +strings[7064] = str->add("align"); +strings[7065] = str->add("valign"); +strings[7066] = str->add("wrap"); +strings[7067] = str->add("left_margin"); +strings[7068] = str->add("right_margin"); +strings[7069] = str->add("underline"); +strings[7070] = str->add("strikethrough"); +strings[7071] = str->add("backing"); +strings[7072] = str->add("style"); +strings[7073] = str->add("tabstops"); +strings[7064] = str->add(strings[7064]); +strings[7074] = str->add("center"); +str->del(strings[7064]); +str->del(strings[7074]); +strings[7055] = str->add(strings[7055]); +strings[7075] = str->add("#000"); +str->del(strings[7055]); +str->del(strings[7075]); +strings[7072] = str->add(strings[7072]); +strings[7076] = str->add("shadow"); +str->del(strings[7072]); +str->del(strings[7076]); +strings[7059] = str->add(strings[7059]); +strings[7077] = str->add("#ffffff80"); +str->del(strings[7059]); +str->del(strings[7077]); +strings[7066] = str->add(strings[7066]); +strings[7078] = str->add("word"); +str->del(strings[7066]); +str->del(strings[7078]); +strings[7054] = str->add(strings[7054]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7054]); +str->del(strings[469]); +strings[7053] = str->add(strings[7053]); +strings[7079] = str->add("10.000000"); +str->del(strings[7053]); +str->del(strings[7079]); +strings[7051] = str->add(strings[7051]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7051]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7072] = str->add(strings[7072]); +strings[7080] = str->add("soft_shadow"); +str->del(strings[7072]); +str->del(strings[7080]); +strings[7055] = str->add(strings[7055]); +strings[7081] = str->add("#fff"); +str->del(strings[7055]); +str->del(strings[7081]); +strings[7059] = str->add(strings[7059]); +strings[7082] = str->add("#00000020"); +str->del(strings[7059]); +str->del(strings[7082]); +strings[7053] = str->add(strings[7053]); +strings[7083] = str->add("12.000000"); +str->del(strings[7053]); +str->del(strings[7083]); +strings[7051] = str->add(strings[7051]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7051]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[7051]); +str->del(strings[7052]); +str->del(strings[7053]); +str->del(strings[7054]); +str->del(strings[7055]); +str->del(strings[7056]); +str->del(strings[7057]); +str->del(strings[7058]); +str->del(strings[7059]); +str->del(strings[7060]); +str->del(strings[7061]); +str->del(strings[7062]); +str->del(strings[7063]); +str->del(strings[7064]); +str->del(strings[7065]); +str->del(strings[7066]); +str->del(strings[7067]); +str->del(strings[7068]); +str->del(strings[7069]); +str->del(strings[7070]); +str->del(strings[7071]); +str->del(strings[7072]); +str->del(strings[7073]); +strings[7084] = str->add("e,action,mouse,move"); +strings[7085] = str->add("e"); +str->del(strings[7084]); +str->del(strings[7085]); +strings[7086] = str->add("e,action,mouse,move"); +strings[7087] = str->add("e"); +str->del(strings[7086]); +str->del(strings[7087]); +str->del(strings[7]); +str->del(strings[2213]); +strings[7] = str->add(strings[7]); +strings[2220] = str->add(strings[2220]); +strings[7088] = str->add("e,action,mouse,move"); +strings[7089] = str->add("e"); +str->del(strings[7088]); +str->del(strings[7089]); +strings[7090] = str->add("e,action,mouse,move"); +strings[7091] = str->add("e"); +str->del(strings[7090]); +str->del(strings[7091]); +strings[7092] = str->add("e,action,mouse,move"); +strings[7093] = str->add("e"); +str->del(strings[7092]); +str->del(strings[7093]); +strings[1932] = str->add(strings[1932]); +strings[7094] = str->add("go_activeb22"); +strings[7095] = str->add("program,start"); +strings[7096] = str->add("go_activec22"); +strings[1932] = str->add(strings[1932]); +strings[7097] = str->add("go_activeb8"); +strings[7095] = str->add(strings[7095]); +strings[7098] = str->add("go_activec8"); +str->del(strings[1932]); +str->del(strings[7094]); +str->del(strings[7095]); +str->del(strings[7096]); +str->del(strings[1932]); +str->del(strings[7097]); +str->del(strings[7095]); +str->del(strings[7098]); +strings[7099] = str->add("e,action,mouse,move"); +strings[7100] = str->add("e"); +strings[7099] = str->add(strings[7099]); +strings[7100] = str->add(strings[7100]); +str->del(strings[7099]); +str->del(strings[7100]); +str->del(strings[7099]); +str->del(strings[7100]); +strings[7101] = str->add("e,action,mouse,move"); +strings[7102] = str->add("e"); +str->del(strings[7101]); +str->del(strings[7102]); +strings[1932] = str->add(strings[1932]); +strings[7103] = str->add("go_activec28"); +strings[7104] = str->add("program,start"); +strings[7105] = str->add("go_activeb28"); +strings[1932] = str->add(strings[1932]); +strings[7106] = str->add("go_activec2"); +strings[7104] = str->add(strings[7104]); +strings[7107] = str->add("go_activeb2"); +str->del(strings[1932]); +str->del(strings[7103]); +str->del(strings[7104]); +str->del(strings[7105]); +str->del(strings[1932]); +str->del(strings[7106]); +str->del(strings[7104]); +str->del(strings[7107]); +str->del(strings[7]); +str->del(strings[2220]); +strings[7] = str->add(strings[7]); +strings[2226] = str->add(strings[2226]); +strings[7108] = str->add("e,action,mouse,move"); +strings[7109] = str->add("e"); +str->del(strings[7108]); +str->del(strings[7109]); +strings[7110] = str->add("e,action,mouse,move"); +strings[7111] = str->add("e"); +str->del(strings[7110]); +str->del(strings[7111]); +strings[7112] = str->add("e,action,mouse,move"); +strings[7113] = str->add("e"); +str->del(strings[7112]); +str->del(strings[7113]); +strings[7114] = str->add("e,action,mouse,move"); +strings[7115] = str->add("e"); +str->del(strings[7114]); +str->del(strings[7115]); +strings[7116] = str->add("e,action,mouse,move"); +strings[7117] = str->add("e"); +str->del(strings[7116]); +str->del(strings[7117]); +strings[7118] = str->add("e,action,mouse,move"); +strings[7119] = str->add("e"); +str->del(strings[7118]); +str->del(strings[7119]); +strings[1932] = str->add(strings[1932]); +strings[7120] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7120]); +str->del(strings[7]); +str->del(strings[2226]); +strings[7] = str->add(strings[7]); +strings[2257] = str->add(strings[2257]); +strings[7121] = str->add("e,action,mouse,move"); +strings[7122] = str->add("e"); +strings[7121] = str->add(strings[7121]); +strings[7122] = str->add(strings[7122]); +str->del(strings[7121]); +str->del(strings[7122]); +str->del(strings[7121]); +str->del(strings[7122]); +strings[7123] = str->add("e,action,mouse,move"); +strings[7124] = str->add("e"); +str->del(strings[7123]); +str->del(strings[7124]); +strings[7125] = str->add("e,action,mouse,move"); +strings[7126] = str->add("e"); +str->del(strings[7125]); +str->del(strings[7126]); +strings[1932] = str->add(strings[1932]); +strings[7127] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[7127] = str->add(strings[7127]); +str->del(strings[1932]); +str->del(strings[7127]); +str->del(strings[1932]); +str->del(strings[7127]); +strings[7128] = str->add("e,action,mouse,move"); +strings[7129] = str->add("e"); +strings[7128] = str->add(strings[7128]); +strings[7129] = str->add(strings[7129]); +str->del(strings[7128]); +str->del(strings[7129]); +str->del(strings[7128]); +str->del(strings[7129]); +strings[7130] = str->add("e,action,mouse,move"); +strings[7131] = str->add("e"); +str->del(strings[7130]); +str->del(strings[7131]); +strings[7132] = str->add("e,action,mouse,move"); +strings[7133] = str->add("e"); +str->del(strings[7132]); +str->del(strings[7133]); +str->del(strings[7]); +str->del(strings[2257]); +strings[7] = str->add(strings[7]); +strings[2270] = str->add(strings[2270]); +strings[7134] = str->add("e,action,mouse,move"); +strings[7135] = str->add("e"); +strings[7134] = str->add(strings[7134]); +strings[7135] = str->add(strings[7135]); +str->del(strings[7134]); +str->del(strings[7135]); +str->del(strings[7134]); +str->del(strings[7135]); +strings[7136] = str->add("e,action,mouse,move"); +strings[7137] = str->add("e"); +str->del(strings[7136]); +str->del(strings[7137]); +strings[7138] = str->add("e,action,mouse,move"); +strings[7139] = str->add("e"); +str->del(strings[7138]); +str->del(strings[7139]); +strings[1932] = str->add(strings[1932]); +strings[7140] = str->add("go_activeb21"); +strings[7141] = str->add("program,start"); +strings[7142] = str->add("go_activec21"); +strings[1932] = str->add(strings[1932]); +strings[7143] = str->add("go_activeb9"); +strings[7141] = str->add(strings[7141]); +strings[7144] = str->add("go_activec9"); +str->del(strings[1932]); +str->del(strings[7140]); +str->del(strings[7141]); +str->del(strings[7142]); +str->del(strings[1932]); +str->del(strings[7143]); +str->del(strings[7141]); +str->del(strings[7144]); +strings[7145] = str->add("e,action,mouse,move"); +strings[7146] = str->add("e"); +strings[7145] = str->add(strings[7145]); +strings[7146] = str->add(strings[7146]); +str->del(strings[7145]); +str->del(strings[7146]); +str->del(strings[7145]); +str->del(strings[7146]); +strings[7147] = str->add("e,action,mouse,move"); +strings[7148] = str->add("e"); +str->del(strings[7147]); +str->del(strings[7148]); +strings[7149] = str->add("e,action,mouse,move"); +strings[7150] = str->add("e"); +str->del(strings[7149]); +str->del(strings[7150]); +strings[1932] = str->add(strings[1932]); +strings[7151] = str->add("go_activec27"); +strings[7152] = str->add("program,start"); +strings[7153] = str->add("go_activeb27"); +strings[1932] = str->add(strings[1932]); +strings[7154] = str->add("go_activec3"); +strings[7152] = str->add(strings[7152]); +strings[7155] = str->add("go_activeb3"); +str->del(strings[1932]); +str->del(strings[7151]); +str->del(strings[7152]); +str->del(strings[7153]); +str->del(strings[1932]); +str->del(strings[7154]); +str->del(strings[7152]); +str->del(strings[7155]); +str->del(strings[7]); +str->del(strings[2270]); +strings[7] = str->add(strings[7]); +strings[2276] = str->add(strings[2276]); +strings[7156] = str->add("e,action,mouse,move"); +strings[7157] = str->add("e"); +strings[7156] = str->add(strings[7156]); +strings[7157] = str->add(strings[7157]); +str->del(strings[7156]); +str->del(strings[7157]); +str->del(strings[7156]); +str->del(strings[7157]); +strings[7158] = str->add("e,action,mouse,move"); +strings[7159] = str->add("e"); +str->del(strings[7158]); +str->del(strings[7159]); +strings[7160] = str->add("e,action,mouse,move"); +strings[7161] = str->add("e"); +str->del(strings[7160]); +str->del(strings[7161]); +strings[7162] = str->add("e,action,mouse,move"); +strings[7163] = str->add("e"); +str->del(strings[7162]); +str->del(strings[7163]); +strings[7164] = str->add("e,action,mouse,move"); +strings[7165] = str->add("e"); +str->del(strings[7164]); +str->del(strings[7165]); +strings[7166] = str->add("e,action,mouse,move"); +strings[7167] = str->add("e"); +str->del(strings[7166]); +str->del(strings[7167]); +strings[7168] = str->add("e,action,mouse,move"); +strings[7169] = str->add("e"); +str->del(strings[7168]); +str->del(strings[7169]); +strings[7170] = str->add("e,action,mouse,move"); +strings[7171] = str->add("e"); +str->del(strings[7170]); +str->del(strings[7171]); +strings[1932] = str->add(strings[1932]); +strings[7172] = str->add("go_activeb1"); +strings[7173] = str->add("program,start"); +strings[7174] = str->add("go_activec1"); +strings[1932] = str->add(strings[1932]); +strings[7175] = str->add("go_activeb29"); +strings[7173] = str->add(strings[7173]); +strings[7176] = str->add("go_activec29"); +str->del(strings[1932]); +str->del(strings[7172]); +str->del(strings[7173]); +str->del(strings[7174]); +str->del(strings[1932]); +str->del(strings[7175]); +str->del(strings[7173]); +str->del(strings[7176]); +str->del(strings[7]); +str->del(strings[2276]); +strings[7] = str->add(strings[7]); +strings[3259] = str->add(strings[3259]); +strings[7177] = str->add("e,action,mouse,move"); +strings[7178] = str->add("e"); +strings[7177] = str->add(strings[7177]); +strings[7178] = str->add(strings[7178]); +str->del(strings[7177]); +str->del(strings[7178]); +str->del(strings[7177]); +str->del(strings[7178]); +strings[7179] = str->add("e,action,mouse,move"); +strings[7180] = str->add("e"); +str->del(strings[7179]); +str->del(strings[7180]); +strings[7181] = str->add("e,action,mouse,move"); +strings[7182] = str->add("e"); +str->del(strings[7181]); +str->del(strings[7182]); +str->del(strings[7]); +str->del(strings[3259]); +strings[7] = str->add(strings[7]); +strings[2292] = str->add(strings[2292]); +strings[7183] = str->add("e,action,mouse,move"); +strings[7184] = str->add("e"); +str->del(strings[7183]); +str->del(strings[7184]); +strings[1932] = str->add(strings[1932]); +strings[7185] = str->add("go_activec26"); +strings[7186] = str->add("program,start"); +strings[7187] = str->add("go_activeb26"); +strings[1932] = str->add(strings[1932]); +strings[7188] = str->add("go_activec4"); +strings[7186] = str->add(strings[7186]); +strings[7189] = str->add("go_activeb4"); +strings[1932] = str->add(strings[1932]); +strings[7190] = str->add("e_in"); +str->del(strings[1932]); +str->del(strings[7185]); +str->del(strings[7186]); +str->del(strings[7187]); +str->del(strings[1932]); +str->del(strings[7188]); +str->del(strings[7186]); +str->del(strings[7189]); +str->del(strings[1932]); +str->del(strings[7190]); +str->del(strings[7]); +str->del(strings[2292]); +strings[7] = str->add(strings[7]); +strings[2310] = str->add(strings[2310]); +str->del(strings[7]); +str->del(strings[2310]); +strings[7] = str->add(strings[7]); +strings[3279] = str->add(strings[3279]); +strings[1932] = str->add(strings[1932]); +strings[7191] = str->add("go_activeb28"); +strings[7192] = str->add("program,start"); +strings[7193] = str->add("go_activec28"); +strings[1932] = str->add(strings[1932]); +strings[7194] = str->add("go_activeb2"); +strings[7192] = str->add(strings[7192]); +strings[7195] = str->add("go_activec2"); +str->del(strings[1932]); +str->del(strings[7191]); +str->del(strings[7192]); +str->del(strings[7193]); +str->del(strings[1932]); +str->del(strings[7194]); +str->del(strings[7192]); +str->del(strings[7195]); +strings[7196] = str->add("e,action,mouse,move"); +strings[7197] = str->add("e"); +strings[7196] = str->add(strings[7196]); +strings[7197] = str->add(strings[7197]); +str->del(strings[7196]); +str->del(strings[7197]); +str->del(strings[7196]); +str->del(strings[7197]); +strings[7198] = str->add("e,action,mouse,move"); +strings[7199] = str->add("e"); +str->del(strings[7198]); +str->del(strings[7199]); +strings[7200] = str->add("e,action,mouse,move"); +strings[7201] = str->add("e"); +str->del(strings[7200]); +str->del(strings[7201]); +str->del(strings[7]); +str->del(strings[3279]); +strings[7] = str->add(strings[7]); +strings[2320] = str->add(strings[2320]); +strings[7202] = str->add("e,action,mouse,move"); +strings[7203] = str->add("e"); +strings[7202] = str->add(strings[7202]); +strings[7203] = str->add(strings[7203]); +str->del(strings[7202]); +str->del(strings[7203]); +str->del(strings[7202]); +str->del(strings[7203]); +strings[7204] = str->add("e,action,mouse,move"); +strings[7205] = str->add("e"); +str->del(strings[7204]); +str->del(strings[7205]); +strings[7206] = str->add("e,action,mouse,move"); +strings[7207] = str->add("e"); +str->del(strings[7206]); +str->del(strings[7207]); +strings[7208] = str->add("e,action,mouse,move"); +strings[7209] = str->add("e"); +strings[7208] = str->add(strings[7208]); +strings[7209] = str->add(strings[7209]); +str->del(strings[7208]); +str->del(strings[7209]); +str->del(strings[7208]); +str->del(strings[7209]); +strings[7210] = str->add("e,action,mouse,move"); +strings[7211] = str->add("e"); +str->del(strings[7210]); +str->del(strings[7211]); +strings[7212] = str->add("e,action,mouse,move"); +strings[7213] = str->add("e"); +str->del(strings[7212]); +str->del(strings[7213]); +str->del(strings[7]); +str->del(strings[2320]); +strings[7] = str->add(strings[7]); +strings[2330] = str->add(strings[2330]); +strings[7214] = str->add("e,action,mouse,move"); +strings[7215] = str->add("e"); +str->del(strings[7214]); +str->del(strings[7215]); +strings[7216] = str->add("e,action,mouse,move"); +strings[7217] = str->add("e"); +str->del(strings[7216]); +str->del(strings[7217]); +strings[7218] = str->add("e,action,mouse,move"); +strings[7219] = str->add("e"); +str->del(strings[7218]); +str->del(strings[7219]); +strings[7220] = str->add("e,action,mouse,move"); +strings[7221] = str->add("e"); +str->del(strings[7220]); +str->del(strings[7221]); +strings[1932] = str->add(strings[1932]); +strings[7222] = str->add("go_activec25"); +strings[7223] = str->add("program,start"); +strings[7224] = str->add("go_activeb25"); +strings[1932] = str->add(strings[1932]); +strings[7225] = str->add("go_activec5"); +strings[7223] = str->add(strings[7223]); +strings[7226] = str->add("go_activeb5"); +str->del(strings[1932]); +str->del(strings[7222]); +str->del(strings[7223]); +str->del(strings[7224]); +str->del(strings[1932]); +str->del(strings[7225]); +str->del(strings[7223]); +str->del(strings[7226]); +strings[7227] = str->add("e,action,mouse,move"); +strings[7228] = str->add("e"); +str->del(strings[7227]); +str->del(strings[7228]); +strings[7229] = str->add("e,action,mouse,move"); +strings[7230] = str->add("e"); +strings[7231] = str->add("e,state,unselected"); +strings[7230] = str->add(strings[7230]); +strings[7231] = str->add(strings[7231]); +strings[7230] = str->add(strings[7230]); +strings[7231] = str->add(strings[7231]); +strings[7230] = str->add(strings[7230]); +strings[7231] = str->add(strings[7231]); +strings[7230] = str->add(strings[7230]); +strings[7231] = str->add(strings[7231]); +strings[7230] = str->add(strings[7230]); +strings[7231] = str->add(strings[7231]); +strings[7230] = str->add(strings[7230]); +str->del(strings[7229]); +str->del(strings[7230]); +strings[7232] = str->add("program,start"); +strings[7233] = str->add("unsel"); +str->del(strings[7231]); +str->del(strings[7230]); +str->del(strings[7231]); +str->del(strings[7230]); +strings[7232] = str->add(strings[7232]); +strings[7233] = str->add(strings[7233]); +str->del(strings[7231]); +str->del(strings[7230]); +strings[7232] = str->add(strings[7232]); +strings[7233] = str->add(strings[7233]); +strings[1932] = str->add(strings[1932]); +strings[7233] = str->add(strings[7233]); +str->del(strings[7231]); +str->del(strings[7230]); +strings[7232] = str->add(strings[7232]); +strings[7234] = str->add("e_out"); +str->del(strings[7231]); +str->del(strings[7230]); +str->del(strings[7231]); +str->del(strings[7230]); +str->del(strings[7232]); +str->del(strings[7233]); +str->del(strings[7232]); +str->del(strings[7233]); +str->del(strings[7232]); +str->del(strings[7233]); +str->del(strings[1932]); +str->del(strings[7233]); +str->del(strings[7232]); +str->del(strings[7234]); +strings[7235] = str->add("e,action,mouse,move"); +strings[7236] = str->add("e"); +str->del(strings[7235]); +str->del(strings[7236]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[7237] = str->add("e,action,mouse,move"); +strings[7238] = str->add("e"); +str->del(strings[7237]); +str->del(strings[7238]); +str->del(strings[7]); +str->del(strings[2330]); +strings[7] = str->add(strings[7]); +strings[2343] = str->add(strings[2343]); +strings[7239] = str->add("e,action,mouse,move"); +strings[7240] = str->add("e"); +strings[7239] = str->add(strings[7239]); +strings[7240] = str->add(strings[7240]); +str->del(strings[7239]); +str->del(strings[7240]); +str->del(strings[7239]); +str->del(strings[7240]); +strings[7241] = str->add("e,action,mouse,move"); +strings[7242] = str->add("e"); +str->del(strings[7241]); +str->del(strings[7242]); +strings[7243] = str->add("e,action,mouse,move"); +strings[7244] = str->add("e"); +strings[7245] = str->add("e,state,selected"); +strings[7244] = str->add(strings[7244]); +strings[7245] = str->add(strings[7245]); +strings[7244] = str->add(strings[7244]); +strings[7245] = str->add(strings[7245]); +strings[7244] = str->add(strings[7244]); +strings[7245] = str->add(strings[7245]); +strings[7244] = str->add(strings[7244]); +strings[7245] = str->add(strings[7245]); +strings[7244] = str->add(strings[7244]); +strings[7245] = str->add(strings[7245]); +strings[7244] = str->add(strings[7244]); +str->del(strings[7243]); +str->del(strings[7244]); +strings[7246] = str->add("program,start"); +strings[7247] = str->add("sel"); +str->del(strings[7245]); +str->del(strings[7244]); +str->del(strings[7245]); +str->del(strings[7244]); +strings[7246] = str->add(strings[7246]); +strings[7247] = str->add(strings[7247]); +str->del(strings[7245]); +str->del(strings[7244]); +strings[7246] = str->add(strings[7246]); +strings[7247] = str->add(strings[7247]); +strings[1932] = str->add(strings[1932]); +strings[7247] = str->add(strings[7247]); +str->del(strings[7245]); +str->del(strings[7244]); +str->del(strings[7245]); +str->del(strings[7244]); +str->del(strings[7245]); +str->del(strings[7244]); +str->del(strings[7246]); +str->del(strings[7247]); +str->del(strings[7246]); +str->del(strings[7247]); +str->del(strings[7246]); +str->del(strings[7247]); +str->del(strings[1932]); +str->del(strings[7247]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[7248] = str->add("resize"); +str->del(strings[7248]); +strings[64] = str->add(strings[64]); +strings[2581] = str->add(strings[2581]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[1949] = str->add(strings[1949]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[1842] = str->add(strings[1842]); +strings[1842] = str->add(strings[1842]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[7249] = str->add(strings[7249]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add("resize"); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[2224] = str->add(strings[2224]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2582] = str->add(strings[2582]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2685] = str->add(strings[2685]); +strings[7249] = str->add(strings[7249]); +strings[469] = str->add(strings[469]); +strings[3089] = str->add(strings[3089]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[4] = str->add(strings[4]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[4] = str->add(strings[4]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[1926] = str->add(strings[1926]); +strings[3083] = str->add(strings[3083]); +strings[7249] = str->add(strings[7249]); +strings[1926] = str->add(strings[1926]); +strings[1552] = str->add(strings[1552]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[1925] = str->add(strings[1925]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1925] = str->add(strings[1925]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2711] = str->add(strings[2711]); +strings[7249] = str->add(strings[7249]); +strings[469] = str->add(strings[469]); +strings[3092] = str->add(strings[3092]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[2494] = str->add(strings[2494]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2494] = str->add(strings[2494]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[7249] = str->add(strings[7249]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[2514] = str->add(strings[2514]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[64] = str->add(strings[64]); +strings[2583] = str->add(strings[2583]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[2584] = str->add(strings[2584]); +strings[7249] = str->add(strings[7249]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[7249] = str->add(strings[7249]); +strings[469] = str->add(strings[469]); +strings[3096] = str->add(strings[3096]); +strings[1841] = str->add(strings[1841]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[64] = str->add(strings[64]); +strings[2585] = str->add(strings[2585]); +strings[64] = str->add(strings[64]); +strings[7249] = str->add(strings[7249]); +strings[2536] = str->add(strings[2536]); +strings[1841] = str->add(strings[1841]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[2886] = str->add(strings[2886]); +strings[64] = str->add(strings[64]); +strings[2888] = str->add(strings[2888]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[7250] = str->add(strings[7250]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6487]); +str->del(strings[6487]); +str->del(strings[6487]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2672]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[1713]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2673]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[1714]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[6487]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3130]); +str->del(strings[1713]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3132]); +str->del(strings[1714]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[7250] = str->add(strings[7250]); +strings[2224] = str->add(strings[2224]); +strings[2224] = str->add(strings[2224]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[7250] = str->add(strings[7250]); +strings[4] = str->add(strings[4]); +strings[4] = str->add(strings[4]); +strings[7250] = str->add(strings[7250]); +strings[1925] = str->add(strings[1925]); +strings[1925] = str->add(strings[1925]); +strings[7250] = str->add(strings[7250]); +strings[2494] = str->add(strings[2494]); +strings[2494] = str->add(strings[2494]); +strings[7250] = str->add(strings[7250]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[7250] = str->add(strings[7250]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +str->del(strings[64]); +str->del(strings[2913]); +strings[64] = str->add(strings[64]); +strings[3021] = str->add(strings[3021]); +strings[7251] = str->add("font"); +strings[7252] = str->add("font_fallbacks"); +strings[7253] = str->add("font_size"); +strings[7254] = str->add("font_source"); +strings[7255] = str->add("color"); +strings[7256] = str->add("underline_color"); +strings[7257] = str->add("underline2_color"); +strings[7258] = str->add("outline_color"); +strings[7259] = str->add("shadow_color"); +strings[7260] = str->add("glow_color"); +strings[7261] = str->add("glow2_color"); +strings[7262] = str->add("backing_color"); +strings[7263] = str->add("strikethrough_color"); +strings[7264] = str->add("align"); +strings[7265] = str->add("valign"); +strings[7266] = str->add("wrap"); +strings[7267] = str->add("left_margin"); +strings[7268] = str->add("right_margin"); +strings[7269] = str->add("underline"); +strings[7270] = str->add("strikethrough"); +strings[7271] = str->add("backing"); +strings[7272] = str->add("style"); +strings[7273] = str->add("tabstops"); +strings[7264] = str->add(strings[7264]); +strings[7274] = str->add("center"); +str->del(strings[7264]); +str->del(strings[7274]); +strings[7255] = str->add(strings[7255]); +strings[7275] = str->add("#000"); +str->del(strings[7255]); +str->del(strings[7275]); +strings[7272] = str->add(strings[7272]); +strings[7276] = str->add("shadow"); +str->del(strings[7272]); +str->del(strings[7276]); +strings[7259] = str->add(strings[7259]); +strings[7277] = str->add("#ffffff80"); +str->del(strings[7259]); +str->del(strings[7277]); +strings[7266] = str->add(strings[7266]); +strings[7278] = str->add("word"); +str->del(strings[7266]); +str->del(strings[7278]); +strings[7254] = str->add(strings[7254]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7254]); +str->del(strings[469]); +strings[7253] = str->add(strings[7253]); +strings[7279] = str->add("10.000000"); +str->del(strings[7253]); +str->del(strings[7279]); +strings[7251] = str->add(strings[7251]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7251]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7272] = str->add(strings[7272]); +strings[7280] = str->add("glow"); +str->del(strings[7272]); +str->del(strings[7280]); +strings[7255] = str->add(strings[7255]); +strings[7281] = str->add("#fff"); +str->del(strings[7255]); +str->del(strings[7281]); +strings[7261] = str->add(strings[7261]); +strings[7282] = str->add("#fe87"); +str->del(strings[7261]); +str->del(strings[7282]); +strings[7260] = str->add(strings[7260]); +strings[7283] = str->add("#fa14"); +str->del(strings[7260]); +str->del(strings[7283]); +strings[7251] = str->add(strings[7251]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7251]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7272] = str->add(strings[7272]); +strings[7284] = str->add("glow"); +str->del(strings[7272]); +str->del(strings[7284]); +strings[7255] = str->add(strings[7255]); +strings[7285] = str->add("#fff"); +str->del(strings[7255]); +str->del(strings[7285]); +strings[7261] = str->add(strings[7261]); +strings[7286] = str->add("#fe87"); +str->del(strings[7261]); +str->del(strings[7286]); +strings[7260] = str->add(strings[7260]); +strings[7287] = str->add("#fa14"); +str->del(strings[7260]); +str->del(strings[7287]); +strings[7251] = str->add(strings[7251]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7251]); +str->del(strings[471]); +str->del(strings[7251]); +str->del(strings[7252]); +str->del(strings[7253]); +str->del(strings[7254]); +str->del(strings[7255]); +str->del(strings[7256]); +str->del(strings[7257]); +str->del(strings[7258]); +str->del(strings[7259]); +str->del(strings[7260]); +str->del(strings[7261]); +str->del(strings[7262]); +str->del(strings[7263]); +str->del(strings[7264]); +str->del(strings[7265]); +str->del(strings[7266]); +str->del(strings[7267]); +str->del(strings[7268]); +str->del(strings[7269]); +str->del(strings[7270]); +str->del(strings[7271]); +str->del(strings[7272]); +str->del(strings[7273]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[7288] = str->add("font"); +strings[7289] = str->add("font_fallbacks"); +strings[7290] = str->add("font_size"); +strings[7291] = str->add("font_source"); +strings[7292] = str->add("color"); +strings[7293] = str->add("underline_color"); +strings[7294] = str->add("underline2_color"); +strings[7295] = str->add("outline_color"); +strings[7296] = str->add("shadow_color"); +strings[7297] = str->add("glow_color"); +strings[7298] = str->add("glow2_color"); +strings[7299] = str->add("backing_color"); +strings[7300] = str->add("strikethrough_color"); +strings[7301] = str->add("align"); +strings[7302] = str->add("valign"); +strings[7303] = str->add("wrap"); +strings[7304] = str->add("left_margin"); +strings[7305] = str->add("right_margin"); +strings[7306] = str->add("underline"); +strings[7307] = str->add("strikethrough"); +strings[7308] = str->add("backing"); +strings[7309] = str->add("style"); +strings[7310] = str->add("tabstops"); +strings[7301] = str->add(strings[7301]); +strings[7311] = str->add("center"); +str->del(strings[7301]); +str->del(strings[7311]); +strings[7292] = str->add(strings[7292]); +strings[7312] = str->add("#000"); +str->del(strings[7292]); +str->del(strings[7312]); +strings[7309] = str->add(strings[7309]); +strings[7313] = str->add("shadow"); +str->del(strings[7309]); +str->del(strings[7313]); +strings[7296] = str->add(strings[7296]); +strings[7314] = str->add("#ffffff80"); +str->del(strings[7296]); +str->del(strings[7314]); +strings[7303] = str->add(strings[7303]); +strings[7315] = str->add("word"); +str->del(strings[7303]); +str->del(strings[7315]); +strings[7291] = str->add(strings[7291]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7291]); +str->del(strings[469]); +strings[7290] = str->add(strings[7290]); +strings[7316] = str->add("10.000000"); +str->del(strings[7290]); +str->del(strings[7316]); +strings[7288] = str->add(strings[7288]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7288]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7309] = str->add(strings[7309]); +strings[7317] = str->add("soft_shadow"); +str->del(strings[7309]); +str->del(strings[7317]); +strings[7292] = str->add(strings[7292]); +strings[7318] = str->add("#fff"); +str->del(strings[7292]); +str->del(strings[7318]); +strings[7296] = str->add(strings[7296]); +strings[7319] = str->add("#00000020"); +str->del(strings[7296]); +str->del(strings[7319]); +strings[7290] = str->add(strings[7290]); +strings[7320] = str->add("12.000000"); +str->del(strings[7290]); +str->del(strings[7320]); +strings[7288] = str->add(strings[7288]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7288]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[7288]); +str->del(strings[7289]); +str->del(strings[7290]); +str->del(strings[7291]); +str->del(strings[7292]); +str->del(strings[7293]); +str->del(strings[7294]); +str->del(strings[7295]); +str->del(strings[7296]); +str->del(strings[7297]); +str->del(strings[7298]); +str->del(strings[7299]); +str->del(strings[7300]); +str->del(strings[7301]); +str->del(strings[7302]); +str->del(strings[7303]); +str->del(strings[7304]); +str->del(strings[7305]); +str->del(strings[7306]); +str->del(strings[7307]); +str->del(strings[7308]); +str->del(strings[7309]); +str->del(strings[7310]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +strings[1932] = str->add(strings[1932]); +strings[7321] = str->add("go_activeb27"); +strings[7322] = str->add("program,start"); +strings[7323] = str->add("go_activec27"); +strings[1932] = str->add(strings[1932]); +strings[7324] = str->add("go_activeb3"); +strings[7322] = str->add(strings[7322]); +strings[7325] = str->add("go_activec3"); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7249]); +str->del(strings[1841]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[7250]); +str->del(strings[1932]); +str->del(strings[7321]); +str->del(strings[7322]); +str->del(strings[7323]); +str->del(strings[1932]); +str->del(strings[7324]); +str->del(strings[7322]); +str->del(strings[7325]); +strings[7326] = str->add("e,action,mouse,move"); +strings[7327] = str->add("e"); +strings[7326] = str->add(strings[7326]); +strings[7327] = str->add(strings[7327]); +str->del(strings[7326]); +str->del(strings[7327]); +str->del(strings[7326]); +str->del(strings[7327]); +strings[7328] = str->add("font"); +strings[7329] = str->add("font_fallbacks"); +strings[7330] = str->add("font_size"); +strings[7331] = str->add("font_source"); +strings[7332] = str->add("color"); +strings[7333] = str->add("underline_color"); +strings[7334] = str->add("underline2_color"); +strings[7335] = str->add("outline_color"); +strings[7336] = str->add("shadow_color"); +strings[7337] = str->add("glow_color"); +strings[7338] = str->add("glow2_color"); +strings[7339] = str->add("backing_color"); +strings[7340] = str->add("strikethrough_color"); +strings[7341] = str->add("align"); +strings[7342] = str->add("valign"); +strings[7343] = str->add("wrap"); +strings[7344] = str->add("left_margin"); +strings[7345] = str->add("right_margin"); +strings[7346] = str->add("underline"); +strings[7347] = str->add("strikethrough"); +strings[7348] = str->add("backing"); +strings[7349] = str->add("style"); +strings[7350] = str->add("tabstops"); +strings[7341] = str->add(strings[7341]); +strings[7351] = str->add("center"); +str->del(strings[7341]); +str->del(strings[7351]); +strings[7332] = str->add(strings[7332]); +strings[7352] = str->add("#000"); +str->del(strings[7332]); +str->del(strings[7352]); +strings[7349] = str->add(strings[7349]); +strings[7353] = str->add("shadow"); +str->del(strings[7349]); +str->del(strings[7353]); +strings[7336] = str->add(strings[7336]); +strings[7354] = str->add("#ffffff80"); +str->del(strings[7336]); +str->del(strings[7354]); +strings[7343] = str->add(strings[7343]); +strings[7355] = str->add("word"); +str->del(strings[7343]); +str->del(strings[7355]); +strings[7331] = str->add(strings[7331]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7331]); +str->del(strings[469]); +strings[7330] = str->add(strings[7330]); +strings[7356] = str->add("10.000000"); +str->del(strings[7330]); +str->del(strings[7356]); +strings[7328] = str->add(strings[7328]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7328]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7349] = str->add(strings[7349]); +strings[7357] = str->add("soft_shadow"); +str->del(strings[7349]); +str->del(strings[7357]); +strings[7332] = str->add(strings[7332]); +strings[7358] = str->add("#fff"); +str->del(strings[7332]); +str->del(strings[7358]); +strings[7336] = str->add(strings[7336]); +strings[7359] = str->add("#00000020"); +str->del(strings[7336]); +str->del(strings[7359]); +strings[7330] = str->add(strings[7330]); +strings[7360] = str->add("12.000000"); +str->del(strings[7330]); +str->del(strings[7360]); +strings[7328] = str->add(strings[7328]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7328]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[7328]); +str->del(strings[7329]); +str->del(strings[7330]); +str->del(strings[7331]); +str->del(strings[7332]); +str->del(strings[7333]); +str->del(strings[7334]); +str->del(strings[7335]); +str->del(strings[7336]); +str->del(strings[7337]); +str->del(strings[7338]); +str->del(strings[7339]); +str->del(strings[7340]); +str->del(strings[7341]); +str->del(strings[7342]); +str->del(strings[7343]); +str->del(strings[7344]); +str->del(strings[7345]); +str->del(strings[7346]); +str->del(strings[7347]); +str->del(strings[7348]); +str->del(strings[7349]); +str->del(strings[7350]); +str->del(strings[7]); +str->del(strings[2343]); +strings[7] = str->add(strings[7]); +strings[2353] = str->add(strings[2353]); +strings[7361] = str->add("e,action,mouse,move"); +strings[7362] = str->add("e"); +strings[7361] = str->add(strings[7361]); +strings[7362] = str->add(strings[7362]); +strings[7361] = str->add(strings[7361]); +strings[7362] = str->add(strings[7362]); +strings[7361] = str->add(strings[7361]); +strings[7362] = str->add(strings[7362]); +str->del(strings[7361]); +str->del(strings[7362]); +str->del(strings[7361]); +str->del(strings[7362]); +str->del(strings[7361]); +str->del(strings[7362]); +str->del(strings[7361]); +str->del(strings[7362]); +strings[7363] = str->add("e,action,mouse,move"); +strings[7364] = str->add("e"); +str->del(strings[7363]); +str->del(strings[7364]); +strings[1932] = str->add(strings[1932]); +strings[7365] = str->add("go_activec24"); +strings[7366] = str->add("program,start"); +strings[7367] = str->add("go_activeb24"); +strings[1932] = str->add(strings[1932]); +strings[7368] = str->add("go_activec6"); +strings[7366] = str->add(strings[7366]); +strings[7369] = str->add("go_activeb6"); +strings[1932] = str->add(strings[1932]); +strings[7370] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7365]); +str->del(strings[7366]); +str->del(strings[7367]); +str->del(strings[1932]); +str->del(strings[7368]); +str->del(strings[7366]); +str->del(strings[7369]); +str->del(strings[1932]); +str->del(strings[7370]); +strings[7371] = str->add("e,action,mouse,move"); +strings[7372] = str->add("e"); +strings[7371] = str->add(strings[7371]); +strings[7372] = str->add(strings[7372]); +str->del(strings[7371]); +str->del(strings[7372]); +str->del(strings[7371]); +str->del(strings[7372]); +strings[7373] = str->add("e,action,mouse,move"); +strings[7374] = str->add("e"); +str->del(strings[7373]); +str->del(strings[7374]); +strings[7375] = str->add("e,action,mouse,move"); +strings[7376] = str->add("e"); +str->del(strings[7375]); +str->del(strings[7376]); +str->del(strings[7]); +str->del(strings[2353]); +strings[7] = str->add(strings[7]); +strings[2363] = str->add(strings[2363]); +strings[7377] = str->add("e,action,mouse,move"); +strings[7378] = str->add("e"); +str->del(strings[7377]); +str->del(strings[7378]); +strings[1932] = str->add(strings[1932]); +strings[1847] = str->add(strings[1847]); +strings[7379] = str->add("program,start"); +strings[1848] = str->add(strings[1848]); +strings[1932] = str->add(strings[1932]); +strings[1848] = str->add(strings[1848]); +strings[7379] = str->add(strings[7379]); +strings[1847] = str->add(strings[1847]); +str->del(strings[1932]); +str->del(strings[1847]); +str->del(strings[7379]); +str->del(strings[1848]); +str->del(strings[1932]); +str->del(strings[1848]); +str->del(strings[7379]); +str->del(strings[1847]); +str->del(strings[7]); +str->del(strings[2363]); +strings[7] = str->add(strings[7]); +strings[2383] = str->add(strings[2383]); +strings[7380] = str->add("e,action,mouse,move"); +strings[7381] = str->add("e"); +str->del(strings[7380]); +str->del(strings[7381]); +strings[7382] = str->add("e,action,mouse,move"); +strings[7383] = str->add("e"); +str->del(strings[7382]); +str->del(strings[7383]); +strings[1932] = str->add(strings[1932]); +strings[7384] = str->add("sel"); +str->del(strings[1932]); +str->del(strings[7384]); +strings[7385] = str->add("e,action,mouse,move"); +strings[7386] = str->add("e"); +strings[7385] = str->add(strings[7385]); +strings[7386] = str->add(strings[7386]); +str->del(strings[7385]); +str->del(strings[7386]); +str->del(strings[7385]); +str->del(strings[7386]); +strings[7387] = str->add("e,action,mouse,move"); +strings[7388] = str->add("e"); +str->del(strings[7387]); +str->del(strings[7388]); +strings[7389] = str->add("e,action,mouse,move"); +strings[7390] = str->add("e"); +str->del(strings[7389]); +str->del(strings[7390]); +strings[1932] = str->add(strings[1932]); +strings[7391] = str->add("go_activec23"); +strings[7392] = str->add("program,start"); +strings[7393] = str->add("go_activeb23"); +strings[1932] = str->add(strings[1932]); +strings[7394] = str->add("go_activec7"); +strings[7392] = str->add(strings[7392]); +strings[7395] = str->add("go_activeb7"); +strings[1932] = str->add(strings[1932]); +strings[7396] = str->add("go_activeb26"); +strings[7392] = str->add(strings[7392]); +strings[7397] = str->add("go_activec26"); +strings[1932] = str->add(strings[1932]); +strings[7398] = str->add("go_activeb4"); +strings[7392] = str->add(strings[7392]); +strings[7399] = str->add("go_activec4"); +strings[1932] = str->add(strings[1932]); +strings[7400] = str->add("sel"); +str->del(strings[1932]); +str->del(strings[7391]); +str->del(strings[7392]); +str->del(strings[7393]); +str->del(strings[1932]); +str->del(strings[7394]); +str->del(strings[7392]); +str->del(strings[7395]); +str->del(strings[1932]); +str->del(strings[7396]); +str->del(strings[7392]); +str->del(strings[7397]); +str->del(strings[1932]); +str->del(strings[7398]); +str->del(strings[7392]); +str->del(strings[7399]); +str->del(strings[1932]); +str->del(strings[7400]); +str->del(strings[7]); +str->del(strings[2383]); +strings[7] = str->add(strings[7]); +strings[2404] = str->add(strings[2404]); +strings[7401] = str->add("e,action,mouse,move"); +strings[7402] = str->add("e"); +strings[7401] = str->add(strings[7401]); +strings[7402] = str->add(strings[7402]); +str->del(strings[7401]); +str->del(strings[7402]); +str->del(strings[7401]); +str->del(strings[7402]); +strings[7403] = str->add("e,action,mouse,move"); +strings[7404] = str->add("e"); +str->del(strings[7403]); +str->del(strings[7404]); +strings[7405] = str->add("e,action,mouse,move"); +strings[7406] = str->add("e"); +str->del(strings[7405]); +str->del(strings[7406]); +strings[1932] = str->add(strings[1932]); +strings[7407] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7407]); +strings[7408] = str->add("e,action,mouse,move"); +strings[7409] = str->add("e"); +strings[7408] = str->add(strings[7408]); +strings[7409] = str->add(strings[7409]); +str->del(strings[7408]); +str->del(strings[7409]); +str->del(strings[7408]); +str->del(strings[7409]); +strings[7410] = str->add("e,action,mouse,move"); +strings[7411] = str->add("e"); +str->del(strings[7410]); +str->del(strings[7411]); +strings[7412] = str->add("e,action,mouse,move"); +strings[7413] = str->add("e"); +str->del(strings[7412]); +str->del(strings[7413]); +str->del(strings[7]); +str->del(strings[2404]); +strings[7] = str->add(strings[7]); +strings[2416] = str->add(strings[2416]); +strings[7414] = str->add("e,action,mouse,move"); +strings[7415] = str->add("e"); +str->del(strings[7414]); +str->del(strings[7415]); +strings[7416] = str->add("e,action,mouse,move"); +strings[7417] = str->add("e"); +str->del(strings[7416]); +str->del(strings[7417]); +strings[7418] = str->add("e,action,mouse,move"); +strings[7419] = str->add("e"); +str->del(strings[7418]); +str->del(strings[7419]); +strings[7420] = str->add("e,action,mouse,move"); +strings[7421] = str->add("e"); +strings[7422] = str->add("e,state,unselected"); +strings[7421] = str->add(strings[7421]); +strings[7422] = str->add(strings[7422]); +strings[7421] = str->add(strings[7421]); +strings[7422] = str->add(strings[7422]); +strings[7421] = str->add(strings[7421]); +strings[7422] = str->add(strings[7422]); +strings[7421] = str->add(strings[7421]); +strings[7422] = str->add(strings[7422]); +strings[7421] = str->add(strings[7421]); +strings[7422] = str->add(strings[7422]); +strings[7421] = str->add(strings[7421]); +strings[7423] = str->add("e,state,selected"); +strings[7421] = str->add(strings[7421]); +strings[7423] = str->add(strings[7423]); +strings[7421] = str->add(strings[7421]); +strings[7423] = str->add(strings[7423]); +strings[7421] = str->add(strings[7421]); +strings[7423] = str->add(strings[7423]); +strings[7421] = str->add(strings[7421]); +strings[7423] = str->add(strings[7423]); +strings[7421] = str->add(strings[7421]); +strings[7420] = str->add(strings[7420]); +strings[7421] = str->add(strings[7421]); +str->del(strings[7420]); +str->del(strings[7421]); +strings[7424] = str->add("program,start"); +strings[7425] = str->add("unsel"); +str->del(strings[7422]); +str->del(strings[7421]); +str->del(strings[7422]); +str->del(strings[7421]); +strings[7424] = str->add(strings[7424]); +strings[7425] = str->add(strings[7425]); +str->del(strings[7422]); +str->del(strings[7421]); +strings[7424] = str->add(strings[7424]); +strings[7425] = str->add(strings[7425]); +strings[1932] = str->add(strings[1932]); +strings[7425] = str->add(strings[7425]); +str->del(strings[7422]); +str->del(strings[7421]); +str->del(strings[7422]); +str->del(strings[7421]); +str->del(strings[7422]); +str->del(strings[7421]); +strings[7424] = str->add(strings[7424]); +strings[7426] = str->add("sel"); +str->del(strings[7423]); +str->del(strings[7421]); +str->del(strings[7423]); +str->del(strings[7421]); +strings[7424] = str->add(strings[7424]); +strings[7426] = str->add(strings[7426]); +str->del(strings[7423]); +str->del(strings[7421]); +str->del(strings[7423]); +str->del(strings[7421]); +str->del(strings[7423]); +str->del(strings[7421]); +str->del(strings[7420]); +str->del(strings[7421]); +str->del(strings[7424]); +str->del(strings[7425]); +str->del(strings[7424]); +str->del(strings[7425]); +str->del(strings[7424]); +str->del(strings[7425]); +str->del(strings[1932]); +str->del(strings[7425]); +str->del(strings[7424]); +str->del(strings[7426]); +str->del(strings[7424]); +str->del(strings[7426]); +str->del(strings[64]); +str->del(strings[3021]); +strings[64] = str->add(strings[64]); +strings[2913] = str->add(strings[2913]); +strings[7427] = str->add("e,action,mouse,move"); +strings[7428] = str->add("e"); +str->del(strings[7427]); +str->del(strings[7428]); +strings[7429] = str->add("e,action,mouse,move"); +strings[7430] = str->add("e"); +str->del(strings[7429]); +str->del(strings[7430]); +str->del(strings[7]); +str->del(strings[2416]); +strings[7] = str->add(strings[7]); +strings[2426] = str->add(strings[2426]); +strings[7431] = str->add("e,action,mouse,move"); +strings[7432] = str->add("e"); +strings[7433] = str->add("e,state,unselected"); +strings[7432] = str->add(strings[7432]); +strings[7433] = str->add(strings[7433]); +strings[7432] = str->add(strings[7432]); +strings[7433] = str->add(strings[7433]); +strings[7432] = str->add(strings[7432]); +strings[7433] = str->add(strings[7433]); +strings[7432] = str->add(strings[7432]); +strings[7433] = str->add(strings[7433]); +strings[7432] = str->add(strings[7432]); +strings[7434] = str->add("e,state,selected"); +strings[7432] = str->add(strings[7432]); +strings[7434] = str->add(strings[7434]); +strings[7432] = str->add(strings[7432]); +strings[7434] = str->add(strings[7434]); +strings[7432] = str->add(strings[7432]); +strings[7434] = str->add(strings[7434]); +strings[7432] = str->add(strings[7432]); +strings[7434] = str->add(strings[7434]); +strings[7432] = str->add(strings[7432]); +strings[7431] = str->add(strings[7431]); +strings[7432] = str->add(strings[7432]); +str->del(strings[7431]); +str->del(strings[7432]); +strings[1932] = str->add(strings[1932]); +strings[7435] = str->add("sel"); +strings[7436] = str->add("program,start"); +strings[7437] = str->add("unsel"); +str->del(strings[7433]); +str->del(strings[7432]); +str->del(strings[7433]); +str->del(strings[7432]); +strings[1932] = str->add(strings[1932]); +strings[7435] = str->add(strings[7435]); +strings[7436] = str->add(strings[7436]); +strings[7437] = str->add(strings[7437]); +str->del(strings[7433]); +str->del(strings[7432]); +str->del(strings[7433]); +str->del(strings[7432]); +str->del(strings[7433]); +str->del(strings[7432]); +strings[7436] = str->add(strings[7436]); +strings[7435] = str->add(strings[7435]); +str->del(strings[7434]); +str->del(strings[7432]); +str->del(strings[7434]); +str->del(strings[7432]); +strings[7436] = str->add(strings[7436]); +strings[7435] = str->add(strings[7435]); +str->del(strings[7434]); +str->del(strings[7432]); +str->del(strings[7434]); +str->del(strings[7432]); +str->del(strings[7434]); +str->del(strings[7432]); +str->del(strings[7431]); +str->del(strings[7432]); +str->del(strings[1932]); +str->del(strings[7435]); +str->del(strings[7436]); +str->del(strings[7437]); +str->del(strings[1932]); +str->del(strings[7435]); +str->del(strings[7436]); +str->del(strings[7437]); +str->del(strings[7436]); +str->del(strings[7435]); +str->del(strings[7436]); +str->del(strings[7435]); +strings[7438] = str->add("e,action,mouse,move"); +strings[7439] = str->add("e"); +str->del(strings[7438]); +str->del(strings[7439]); +strings[7440] = str->add("e,action,mouse,move"); +strings[7441] = str->add("e"); +str->del(strings[7440]); +str->del(strings[7441]); +strings[7442] = str->add("e,action,mouse,move"); +strings[7443] = str->add("e"); +strings[7442] = str->add(strings[7442]); +strings[7443] = str->add(strings[7443]); +str->del(strings[7442]); +str->del(strings[7443]); +str->del(strings[7442]); +str->del(strings[7443]); +strings[7444] = str->add("e,action,mouse,move"); +strings[7445] = str->add("e"); +str->del(strings[7444]); +str->del(strings[7445]); +strings[7446] = str->add("e,action,mouse,move"); +strings[7447] = str->add("e"); +str->del(strings[7446]); +str->del(strings[7447]); +str->del(strings[7]); +str->del(strings[2426]); +strings[7] = str->add(strings[7]); +strings[2435] = str->add(strings[2435]); +strings[7448] = str->add("e,action,mouse,move"); +strings[7449] = str->add("e"); +strings[7450] = str->add("e,state,unselected"); +strings[7449] = str->add(strings[7449]); +strings[7450] = str->add(strings[7450]); +strings[7449] = str->add(strings[7449]); +strings[7450] = str->add(strings[7450]); +strings[7449] = str->add(strings[7449]); +strings[7450] = str->add(strings[7450]); +strings[7449] = str->add(strings[7449]); +strings[7450] = str->add(strings[7450]); +strings[7449] = str->add(strings[7449]); +strings[7451] = str->add("e,state,selected"); +strings[7449] = str->add(strings[7449]); +strings[7451] = str->add(strings[7451]); +strings[7449] = str->add(strings[7449]); +strings[7451] = str->add(strings[7451]); +strings[7449] = str->add(strings[7449]); +strings[7451] = str->add(strings[7451]); +strings[7449] = str->add(strings[7449]); +strings[7451] = str->add(strings[7451]); +strings[7449] = str->add(strings[7449]); +strings[7448] = str->add(strings[7448]); +strings[7449] = str->add(strings[7449]); +str->del(strings[7448]); +str->del(strings[7449]); +strings[1932] = str->add(strings[1932]); +strings[7452] = str->add("sel"); +strings[7453] = str->add("program,start"); +strings[7454] = str->add("unsel"); +str->del(strings[7450]); +str->del(strings[7449]); +str->del(strings[7450]); +str->del(strings[7449]); +strings[1932] = str->add(strings[1932]); +strings[7452] = str->add(strings[7452]); +strings[7453] = str->add(strings[7453]); +strings[7454] = str->add(strings[7454]); +str->del(strings[7450]); +str->del(strings[7449]); +str->del(strings[7450]); +str->del(strings[7449]); +str->del(strings[7450]); +str->del(strings[7449]); +strings[7453] = str->add(strings[7453]); +strings[7452] = str->add(strings[7452]); +str->del(strings[7451]); +str->del(strings[7449]); +str->del(strings[7451]); +str->del(strings[7449]); +strings[7453] = str->add(strings[7453]); +strings[7452] = str->add(strings[7452]); +str->del(strings[7451]); +str->del(strings[7449]); +str->del(strings[7451]); +str->del(strings[7449]); +str->del(strings[7451]); +str->del(strings[7449]); +str->del(strings[7448]); +str->del(strings[7449]); +str->del(strings[1932]); +str->del(strings[7452]); +str->del(strings[7453]); +str->del(strings[7454]); +str->del(strings[1932]); +str->del(strings[7452]); +str->del(strings[7453]); +str->del(strings[7454]); +str->del(strings[7453]); +str->del(strings[7452]); +str->del(strings[7453]); +str->del(strings[7452]); +strings[7455] = str->add("e,action,mouse,move"); +strings[7456] = str->add("e"); +str->del(strings[7455]); +str->del(strings[7456]); +strings[7457] = str->add("e,action,mouse,move"); +strings[7458] = str->add("e"); +strings[7459] = str->add("e,state,unselected"); +strings[7458] = str->add(strings[7458]); +strings[7459] = str->add(strings[7459]); +strings[7458] = str->add(strings[7458]); +strings[7459] = str->add(strings[7459]); +strings[7458] = str->add(strings[7458]); +strings[7459] = str->add(strings[7459]); +strings[7458] = str->add(strings[7458]); +strings[7459] = str->add(strings[7459]); +strings[7458] = str->add(strings[7458]); +strings[7460] = str->add("e,state,selected"); +strings[7458] = str->add(strings[7458]); +strings[7460] = str->add(strings[7460]); +strings[7458] = str->add(strings[7458]); +strings[7460] = str->add(strings[7460]); +strings[7458] = str->add(strings[7458]); +strings[7460] = str->add(strings[7460]); +strings[7458] = str->add(strings[7458]); +strings[7460] = str->add(strings[7460]); +strings[7458] = str->add(strings[7458]); +str->del(strings[7457]); +str->del(strings[7458]); +strings[1932] = str->add(strings[1932]); +strings[7461] = str->add("sel"); +strings[7462] = str->add("program,start"); +strings[7463] = str->add("unsel"); +str->del(strings[7459]); +str->del(strings[7458]); +str->del(strings[7459]); +str->del(strings[7458]); +strings[1932] = str->add(strings[1932]); +strings[7461] = str->add(strings[7461]); +strings[7462] = str->add(strings[7462]); +strings[7463] = str->add(strings[7463]); +str->del(strings[7459]); +str->del(strings[7458]); +str->del(strings[7459]); +str->del(strings[7458]); +str->del(strings[7459]); +str->del(strings[7458]); +strings[7462] = str->add(strings[7462]); +strings[7461] = str->add(strings[7461]); +str->del(strings[7460]); +str->del(strings[7458]); +str->del(strings[7460]); +str->del(strings[7458]); +strings[7462] = str->add(strings[7462]); +strings[7461] = str->add(strings[7461]); +str->del(strings[7460]); +str->del(strings[7458]); +str->del(strings[7460]); +str->del(strings[7458]); +str->del(strings[7460]); +str->del(strings[7458]); +str->del(strings[1932]); +str->del(strings[7461]); +str->del(strings[7462]); +str->del(strings[7463]); +str->del(strings[1932]); +str->del(strings[7461]); +str->del(strings[7462]); +str->del(strings[7463]); +str->del(strings[7462]); +str->del(strings[7461]); +str->del(strings[7462]); +str->del(strings[7461]); +strings[1932] = str->add(strings[1932]); +strings[7464] = str->add("go_activec22"); +strings[7465] = str->add("program,start"); +strings[7466] = str->add("go_activeb22"); +strings[1932] = str->add(strings[1932]); +strings[7467] = str->add("go_activec8"); +strings[7465] = str->add(strings[7465]); +strings[7468] = str->add("go_activeb8"); +strings[1932] = str->add(strings[1932]); +strings[7469] = str->add("go_activeb25"); +strings[7465] = str->add(strings[7465]); +strings[7470] = str->add("go_activec25"); +strings[1932] = str->add(strings[1932]); +strings[7471] = str->add("go_activeb5"); +strings[7465] = str->add(strings[7465]); +strings[7472] = str->add("go_activec5"); +strings[1932] = str->add(strings[1932]); +strings[7473] = str->add("e_out"); +strings[1932] = str->add(strings[1932]); +strings[7474] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7464]); +str->del(strings[7465]); +str->del(strings[7466]); +str->del(strings[1932]); +str->del(strings[7467]); +str->del(strings[7465]); +str->del(strings[7468]); +str->del(strings[1932]); +str->del(strings[7469]); +str->del(strings[7465]); +str->del(strings[7470]); +str->del(strings[1932]); +str->del(strings[7471]); +str->del(strings[7465]); +str->del(strings[7472]); +str->del(strings[1932]); +str->del(strings[7473]); +str->del(strings[1932]); +str->del(strings[7474]); +strings[7475] = str->add("e,action,mouse,move"); +strings[7476] = str->add("e"); +strings[7475] = str->add(strings[7475]); +strings[7476] = str->add(strings[7476]); +str->del(strings[7475]); +str->del(strings[7476]); +str->del(strings[7475]); +str->del(strings[7476]); +strings[7477] = str->add("e,action,mouse,move"); +strings[7478] = str->add("e"); +str->del(strings[7477]); +str->del(strings[7478]); +strings[7479] = str->add("e,action,mouse,move"); +strings[7480] = str->add("e"); +str->del(strings[7479]); +str->del(strings[7480]); +strings[1932] = str->add(strings[1932]); +strings[7481] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7481]); +str->del(strings[7]); +str->del(strings[2435]); +strings[7] = str->add(strings[7]); +strings[2448] = str->add(strings[2448]); +strings[7482] = str->add("e,action,mouse,move"); +strings[7483] = str->add("e"); +strings[7484] = str->add("e,state,unselected"); +strings[7483] = str->add(strings[7483]); +strings[7484] = str->add(strings[7484]); +strings[7483] = str->add(strings[7483]); +strings[7484] = str->add(strings[7484]); +strings[7483] = str->add(strings[7483]); +strings[7484] = str->add(strings[7484]); +strings[7483] = str->add(strings[7483]); +strings[7484] = str->add(strings[7484]); +strings[7483] = str->add(strings[7483]); +strings[7485] = str->add("e,state,selected"); +strings[7483] = str->add(strings[7483]); +strings[7485] = str->add(strings[7485]); +strings[7483] = str->add(strings[7483]); +strings[7485] = str->add(strings[7485]); +strings[7483] = str->add(strings[7483]); +strings[7485] = str->add(strings[7485]); +strings[7483] = str->add(strings[7483]); +strings[7485] = str->add(strings[7485]); +strings[7483] = str->add(strings[7483]); +strings[7482] = str->add(strings[7482]); +strings[7483] = str->add(strings[7483]); +str->del(strings[7482]); +str->del(strings[7483]); +strings[1932] = str->add(strings[1932]); +strings[7486] = str->add("sel"); +strings[7487] = str->add("program,start"); +strings[7488] = str->add("unsel"); +str->del(strings[7484]); +str->del(strings[7483]); +str->del(strings[7484]); +str->del(strings[7483]); +strings[1932] = str->add(strings[1932]); +strings[7486] = str->add(strings[7486]); +strings[7487] = str->add(strings[7487]); +strings[7488] = str->add(strings[7488]); +str->del(strings[7484]); +str->del(strings[7483]); +str->del(strings[7484]); +str->del(strings[7483]); +str->del(strings[7484]); +str->del(strings[7483]); +strings[7487] = str->add(strings[7487]); +strings[7486] = str->add(strings[7486]); +str->del(strings[7485]); +str->del(strings[7483]); +str->del(strings[7485]); +str->del(strings[7483]); +strings[7487] = str->add(strings[7487]); +strings[7486] = str->add(strings[7486]); +str->del(strings[7485]); +str->del(strings[7483]); +str->del(strings[7485]); +str->del(strings[7483]); +str->del(strings[7485]); +str->del(strings[7483]); +str->del(strings[7482]); +str->del(strings[7483]); +str->del(strings[1932]); +str->del(strings[7486]); +str->del(strings[7487]); +str->del(strings[7488]); +str->del(strings[1932]); +str->del(strings[7486]); +str->del(strings[7487]); +str->del(strings[7488]); +str->del(strings[7487]); +str->del(strings[7486]); +str->del(strings[7487]); +str->del(strings[7486]); +strings[7489] = str->add("e,action,mouse,move"); +strings[7490] = str->add("e"); +str->del(strings[7489]); +str->del(strings[7490]); +strings[7491] = str->add("e,action,mouse,move"); +strings[7492] = str->add("e"); +str->del(strings[7491]); +str->del(strings[7492]); +strings[7493] = str->add("e,action,mouse,move"); +strings[7494] = str->add("e"); +str->del(strings[7493]); +str->del(strings[7494]); +strings[7495] = str->add("e,action,mouse,move"); +strings[7496] = str->add("e"); +str->del(strings[7495]); +str->del(strings[7496]); +strings[7497] = str->add("e,action,mouse,move"); +strings[7498] = str->add("e"); +str->del(strings[7497]); +str->del(strings[7498]); +strings[7499] = str->add("e,action,mouse,move"); +strings[7500] = str->add("e"); +str->del(strings[7499]); +str->del(strings[7500]); +strings[7501] = str->add("e,action,mouse,move"); +strings[7502] = str->add("e"); +str->del(strings[7501]); +str->del(strings[7502]); +strings[1932] = str->add(strings[1932]); +strings[7503] = str->add("go_activeb24"); +strings[7504] = str->add("program,start"); +strings[7505] = str->add("go_activec24"); +strings[1932] = str->add(strings[1932]); +strings[7506] = str->add("go_activeb6"); +strings[7504] = str->add(strings[7504]); +strings[7507] = str->add("go_activec6"); +strings[1932] = str->add(strings[1932]); +strings[7508] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[7508] = str->add(strings[7508]); +str->del(strings[1932]); +str->del(strings[7503]); +str->del(strings[7504]); +str->del(strings[7505]); +str->del(strings[1932]); +str->del(strings[7506]); +str->del(strings[7504]); +str->del(strings[7507]); +str->del(strings[1932]); +str->del(strings[7508]); +str->del(strings[1932]); +str->del(strings[7508]); +str->del(strings[7]); +str->del(strings[2448]); +strings[7] = str->add(strings[7]); +strings[2466] = str->add(strings[2466]); +strings[7509] = str->add("e,action,mouse,move"); +strings[7510] = str->add("e"); +strings[7509] = str->add(strings[7509]); +strings[7510] = str->add(strings[7510]); +str->del(strings[7509]); +str->del(strings[7510]); +str->del(strings[7509]); +str->del(strings[7510]); +strings[7511] = str->add("e,action,mouse,move"); +strings[7512] = str->add("e"); +str->del(strings[7511]); +str->del(strings[7512]); +strings[7513] = str->add("e,action,mouse,move"); +strings[7514] = str->add("e"); +str->del(strings[7513]); +str->del(strings[7514]); +strings[7515] = str->add("e,action,mouse,move"); +strings[7516] = str->add("e"); +strings[7515] = str->add(strings[7515]); +strings[7516] = str->add(strings[7516]); +str->del(strings[7515]); +str->del(strings[7516]); +str->del(strings[7515]); +str->del(strings[7516]); +strings[7517] = str->add("e,action,mouse,move"); +strings[7518] = str->add("e"); +str->del(strings[7517]); +str->del(strings[7518]); +strings[7519] = str->add("e,action,mouse,move"); +strings[7520] = str->add("e"); +str->del(strings[7519]); +str->del(strings[7520]); +strings[1932] = str->add(strings[1932]); +strings[7521] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7521]); +str->del(strings[7]); +str->del(strings[2466]); +strings[7] = str->add(strings[7]); +strings[2479] = str->add(strings[2479]); +strings[7522] = str->add("e,action,mouse,move"); +strings[7523] = str->add("e"); +strings[7522] = str->add(strings[7522]); +strings[7523] = str->add(strings[7523]); +str->del(strings[7522]); +str->del(strings[7523]); +str->del(strings[7522]); +str->del(strings[7523]); +strings[7524] = str->add("e,action,mouse,move"); +strings[7525] = str->add("e"); +strings[7526] = str->add("e,state,unselected"); +strings[7525] = str->add(strings[7525]); +strings[7526] = str->add(strings[7526]); +strings[7525] = str->add(strings[7525]); +strings[7526] = str->add(strings[7526]); +strings[7525] = str->add(strings[7525]); +strings[7526] = str->add(strings[7526]); +strings[7525] = str->add(strings[7525]); +strings[7526] = str->add(strings[7526]); +strings[7525] = str->add(strings[7525]); +str->del(strings[7524]); +str->del(strings[7525]); +strings[1932] = str->add(strings[1932]); +strings[7527] = str->add("sel"); +strings[7528] = str->add("program,start"); +strings[7529] = str->add("unsel"); +str->del(strings[7526]); +str->del(strings[7525]); +str->del(strings[7526]); +str->del(strings[7525]); +strings[1932] = str->add(strings[1932]); +strings[7527] = str->add(strings[7527]); +strings[7528] = str->add(strings[7528]); +strings[7529] = str->add(strings[7529]); +str->del(strings[7526]); +str->del(strings[7525]); +str->del(strings[7526]); +str->del(strings[7525]); +str->del(strings[7526]); +str->del(strings[7525]); +str->del(strings[1932]); +str->del(strings[7527]); +str->del(strings[7528]); +str->del(strings[7529]); +str->del(strings[1932]); +str->del(strings[7527]); +str->del(strings[7528]); +str->del(strings[7529]); +strings[7530] = str->add("e,action,mouse,move"); +strings[7531] = str->add("e"); +str->del(strings[7530]); +str->del(strings[7531]); +strings[1932] = str->add(strings[1932]); +strings[7532] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7532]); +strings[7533] = str->add("e,action,mouse,move"); +strings[7534] = str->add("e"); +str->del(strings[7533]); +str->del(strings[7534]); +strings[7535] = str->add("e,action,mouse,move"); +strings[7536] = str->add("e"); +str->del(strings[7535]); +str->del(strings[7536]); +strings[7537] = str->add("e,action,mouse,move"); +strings[7538] = str->add("e"); +str->del(strings[7537]); +str->del(strings[7538]); +strings[1932] = str->add(strings[1932]); +strings[7539] = str->add("go_activec21"); +strings[7540] = str->add("program,start"); +strings[7541] = str->add("go_activeb21"); +strings[1932] = str->add(strings[1932]); +strings[7542] = str->add("go_activec9"); +strings[7540] = str->add(strings[7540]); +strings[7543] = str->add("go_activeb9"); +strings[1932] = str->add(strings[1932]); +strings[7544] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7539]); +str->del(strings[7540]); +str->del(strings[7541]); +str->del(strings[1932]); +str->del(strings[7542]); +str->del(strings[7540]); +str->del(strings[7543]); +str->del(strings[1932]); +str->del(strings[7544]); +str->del(strings[7]); +str->del(strings[2479]); +strings[7] = str->add(strings[7]); +strings[2489] = str->add(strings[2489]); +strings[7545] = str->add("e,action,mouse,move"); +strings[7546] = str->add("e"); +strings[7545] = str->add(strings[7545]); +strings[7546] = str->add(strings[7546]); +str->del(strings[7545]); +str->del(strings[7546]); +str->del(strings[7545]); +str->del(strings[7546]); +strings[7547] = str->add("e,action,mouse,move"); +strings[7548] = str->add("e"); +strings[7549] = str->add("e,state,selected"); +strings[7548] = str->add(strings[7548]); +strings[7549] = str->add(strings[7549]); +strings[7548] = str->add(strings[7548]); +strings[7549] = str->add(strings[7549]); +strings[7548] = str->add(strings[7548]); +strings[7549] = str->add(strings[7549]); +strings[7548] = str->add(strings[7548]); +strings[7549] = str->add(strings[7549]); +strings[7548] = str->add(strings[7548]); +str->del(strings[7547]); +str->del(strings[7548]); +strings[7550] = str->add("program,start"); +strings[7551] = str->add("sel"); +str->del(strings[7549]); +str->del(strings[7548]); +str->del(strings[7549]); +str->del(strings[7548]); +strings[7550] = str->add(strings[7550]); +strings[7551] = str->add(strings[7551]); +str->del(strings[7549]); +str->del(strings[7548]); +str->del(strings[7549]); +str->del(strings[7548]); +str->del(strings[7549]); +str->del(strings[7548]); +str->del(strings[7550]); +str->del(strings[7551]); +str->del(strings[7550]); +str->del(strings[7551]); +strings[1932] = str->add(strings[1932]); +strings[7552] = str->add("go_activeb23"); +strings[7553] = str->add("program,start"); +strings[7554] = str->add("go_activec23"); +strings[1932] = str->add(strings[1932]); +strings[7555] = str->add("go_activeb7"); +strings[7553] = str->add(strings[7553]); +strings[7556] = str->add("go_activec7"); +str->del(strings[1932]); +str->del(strings[7552]); +str->del(strings[7553]); +str->del(strings[7554]); +str->del(strings[1932]); +str->del(strings[7555]); +str->del(strings[7553]); +str->del(strings[7556]); +strings[1932] = str->add(strings[1932]); +strings[7557] = str->add("go_activec1"); +strings[7558] = str->add("program,start"); +strings[7559] = str->add("go_activeb1"); +strings[1932] = str->add(strings[1932]); +strings[7560] = str->add("go_activec29"); +strings[7558] = str->add(strings[7558]); +strings[7561] = str->add("go_activeb29"); +strings[1932] = str->add(strings[1932]); +strings[7562] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[7562] = str->add(strings[7562]); +strings[1932] = str->add(strings[1932]); +strings[7562] = str->add(strings[7562]); +str->del(strings[1932]); +str->del(strings[7557]); +str->del(strings[7558]); +str->del(strings[7559]); +str->del(strings[1932]); +str->del(strings[7560]); +str->del(strings[7558]); +str->del(strings[7561]); +str->del(strings[1932]); +str->del(strings[7562]); +str->del(strings[1932]); +str->del(strings[7562]); +str->del(strings[1932]); +str->del(strings[7562]); +str->del(strings[7]); +str->del(strings[2489]); +strings[7] = str->add(strings[7]); +strings[2508] = str->add(strings[2508]); +strings[1932] = str->add(strings[1932]); +strings[7563] = str->add("unsel"); +str->del(strings[1932]); +str->del(strings[7563]); +str->del(strings[7]); +str->del(strings[2508]); +strings[7] = str->add(strings[7]); +strings[2518] = str->add(strings[2518]); +strings[7564] = str->add("e,action,mouse,move"); +strings[7565] = str->add("e"); +str->del(strings[7564]); +str->del(strings[7565]); +strings[7566] = str->add("e,action,mouse,move"); +strings[7567] = str->add("e"); +str->del(strings[7566]); +str->del(strings[7567]); +strings[7568] = str->add("e,action,mouse,move"); +strings[7569] = str->add("e"); +str->del(strings[7568]); +str->del(strings[7569]); +str->del(strings[7]); +str->del(strings[2518]); +strings[7] = str->add(strings[7]); +strings[2531] = str->add(strings[2531]); +strings[7570] = str->add("e,action,mouse,move"); +strings[7571] = str->add("e"); +str->del(strings[7570]); +str->del(strings[7571]); +strings[7572] = str->add("e,action,mouse,move"); +strings[7573] = str->add("e"); +str->del(strings[7572]); +str->del(strings[7573]); +strings[7574] = str->add("e,action,mouse,move"); +strings[7575] = str->add("e"); +str->del(strings[7574]); +str->del(strings[7575]); +strings[7576] = str->add("e,action,mouse,move"); +strings[7577] = str->add("e"); +str->del(strings[7576]); +str->del(strings[7577]); +strings[7578] = str->add("e,action,mouse,move"); +strings[7579] = str->add("e"); +str->del(strings[7578]); +str->del(strings[7579]); +strings[1932] = str->add(strings[1932]); +strings[7580] = str->add("go_activeb22"); +strings[7581] = str->add("program,start"); +strings[7582] = str->add("go_activec22"); +strings[1932] = str->add(strings[1932]); +strings[7583] = str->add("go_activeb8"); +strings[7581] = str->add(strings[7581]); +strings[7584] = str->add("go_activec8"); +strings[1932] = str->add(strings[1932]); +strings[7585] = str->add("unsel"); +strings[1932] = str->add(strings[1932]); +strings[7586] = str->add("sel"); +strings[1932] = str->add(strings[1932]); +strings[7586] = str->add(strings[7586]); +str->del(strings[1932]); +str->del(strings[7580]); +str->del(strings[7581]); +str->del(strings[7582]); +str->del(strings[1932]); +str->del(strings[7583]); +str->del(strings[7581]); +str->del(strings[7584]); +str->del(strings[1932]); +str->del(strings[7585]); +str->del(strings[1932]); +str->del(strings[7586]); +str->del(strings[1932]); +str->del(strings[7586]); +str->del(strings[7]); +str->del(strings[2531]); +strings[7] = str->add(strings[7]); +strings[2544] = str->add(strings[2544]); +strings[1932] = str->add(strings[1932]); +strings[7587] = str->add("go_activec28"); +strings[7588] = str->add("program,start"); +strings[7589] = str->add("go_activeb28"); +strings[1932] = str->add(strings[1932]); +strings[7590] = str->add("go_activec2"); +strings[7588] = str->add(strings[7588]); +strings[7591] = str->add("go_activeb2"); +str->del(strings[1932]); +str->del(strings[7587]); +str->del(strings[7588]); +str->del(strings[7589]); +str->del(strings[1932]); +str->del(strings[7590]); +str->del(strings[7588]); +str->del(strings[7591]); +str->del(strings[7]); +str->del(strings[2544]); +strings[7] = str->add(strings[7]); +strings[2561] = str->add(strings[2561]); +strings[7592] = str->add("e,action,mouse,move"); +strings[7593] = str->add("e"); +strings[7594] = str->add("e,action,mouse,down"); +strings[7593] = str->add(strings[7593]); +str->del(strings[7592]); +str->del(strings[7593]); +str->del(strings[7594]); +str->del(strings[7593]); +str->del(strings[7]); +str->del(strings[2561]); +strings[7] = str->add(strings[7]); +strings[3580] = str->add(strings[3580]); +strings[7595] = str->add("e,action,mouse,move"); +strings[7596] = str->add("e"); +strings[7597] = str->add("e,action,mouse,up"); +strings[7596] = str->add(strings[7596]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[7598] = str->add("base/theme/configure"); +strings[64] = str->add(strings[64]); +strings[2602] = str->add(strings[2602]); +strings[2602] = str->add(strings[2602]); +strings[7599] = str->add("load"); +strings[64] = str->add(strings[64]); +strings[7600] = str->add("images/230"); +strings[7601] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/230"); +strings[64] = str->add(strings[64]); +strings[7600] = str->add(strings[7600]); +strings[64] = str->add(strings[64]); +strings[7602] = str->add("images/231"); +strings[7603] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/231"); +strings[64] = str->add(strings[64]); +strings[7602] = str->add(strings[7602]); +strings[64] = str->add(strings[64]); +strings[7604] = str->add("images/232"); +strings[7605] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/232"); +strings[64] = str->add(strings[64]); +strings[7604] = str->add(strings[7604]); +strings[64] = str->add(strings[64]); +strings[2915] = str->add(strings[2915]); +strings[64] = str->add(strings[64]); +strings[2630] = str->add(strings[2630]); +strings[2630] = str->add(strings[2630]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[7606] = str->add("Categories"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[7607] = str->add("images/262"); +strings[7608] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/262"); +strings[64] = str->add(strings[64]); +strings[7607] = str->add(strings[7607]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[7606] = str->add(strings[7606]); +strings[7606] = str->add(strings[7606]); +strings[7606] = str->add(strings[7606]); +strings[64] = str->add(strings[64]); +strings[7609] = str->add("images/261"); +strings[7610] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/261"); +strings[64] = str->add(strings[64]); +strings[7609] = str->add(strings[7609]); +strings[64] = str->add(strings[64]); +strings[2614] = str->add(strings[2614]); +strings[7599] = str->add(strings[7599]); +strings[2945] = str->add(strings[2945]); +strings[2946] = str->add(strings[2946]); +strings[2945] = str->add(strings[2945]); +strings[2947] = str->add(strings[2947]); +strings[1841] = str->add(strings[1841]); +strings[2948] = str->add(strings[2948]); +strings[2949] = str->add(strings[2949]); +strings[64] = str->add(strings[64]); +strings[2062] = str->add(strings[2062]); +strings[64] = str->add(strings[64]); +strings[7611] = str->add("images/253"); +strings[7612] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/253"); +strings[64] = str->add(strings[64]); +strings[7611] = str->add(strings[7611]); +strings[64] = str->add(strings[64]); +strings[2184] = str->add(strings[2184]); +strings[7613] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/249"); +strings[64] = str->add(strings[64]); +strings[2184] = str->add(strings[2184]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[7614] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/251"); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[7615] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/250"); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[64] = str->add(strings[64]); +strings[2202] = str->add(strings[2202]); +strings[7616] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/246"); +strings[64] = str->add(strings[64]); +strings[2202] = str->add(strings[2202]); +strings[64] = str->add(strings[64]); +strings[2194] = str->add(strings[2194]); +strings[7617] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/247"); +strings[64] = str->add(strings[64]); +strings[2194] = str->add(strings[2194]); +strings[64] = str->add(strings[64]); +strings[7618] = str->add("images/252"); +strings[7619] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/252"); +strings[64] = str->add(strings[64]); +strings[7618] = str->add(strings[7618]); +strings[64] = str->add(strings[64]); +strings[2184] = str->add(strings[2184]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[64] = str->add(strings[64]); +strings[7620] = str->add("images/244"); +strings[7621] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/244"); +strings[64] = str->add(strings[64]); +strings[7620] = str->add(strings[7620]); +strings[64] = str->add(strings[64]); +strings[2200] = str->add(strings[2200]); +strings[7622] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/245"); +strings[64] = str->add(strings[64]); +strings[2200] = str->add(strings[2200]); +strings[7623] = str->add("e,action,hide,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7599]); +str->del(strings[1841]); +strings[7624] = str->add("program,start"); +strings[7625] = str->add("sb_hbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7625] = str->add(strings[7625]); +str->del(strings[7623]); +str->del(strings[7596]); +strings[7626] = str->add("e,action,hide,vbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7624]); +str->del(strings[7625]); +str->del(strings[1932]); +str->del(strings[7625]); +strings[7627] = str->add("program,start"); +strings[7628] = str->add("sb_vbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7628] = str->add(strings[7628]); +str->del(strings[7626]); +str->del(strings[7596]); +strings[2942] = str->add(strings[2942]); +strings[7629] = str->add("resize"); +strings[1892] = str->add(strings[1892]); +strings[469] = str->add(strings[469]); +strings[2758] = str->add(strings[2758]); +strings[2758] = str->add(strings[2758]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[1892] = str->add(strings[1892]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[7630] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/254"); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add("images/255"); +strings[7632] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/255"); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add("images/248"); +strings[7634] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/248"); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1892] = str->add(strings[1892]); +strings[1892] = str->add(strings[1892]); +strings[1892] = str->add(strings[1892]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7635] = str->add("images/392"); +strings[7636] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/392"); +strings[469] = str->add(strings[469]); +strings[7635] = str->add(strings[7635]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7637] = str->add("appearance/wallpaper"); +strings[2536] = str->add(strings[2536]); +strings[1750] = str->add(strings[1750]); +strings[7638] = str->add("appearance/theme"); +strings[2514] = str->add(strings[2514]); +strings[376] = str->add(strings[376]); +strings[7639] = str->add("appearance/colors"); +strings[215] = str->add(strings[215]); +strings[2275] = str->add(strings[2275]); +strings[7640] = str->add("appearance/fonts"); +strings[2348] = str->add(strings[2348]); +strings[2349] = str->add(strings[2349]); +strings[7641] = str->add("appearance/borders"); +strings[2262] = str->add(strings[2262]); +strings[2250] = str->add(strings[2250]); +strings[7642] = str->add("appearance/icon_theme"); +strings[2358] = str->add(strings[2358]); +strings[2359] = str->add(strings[2359]); +strings[7643] = str->add("appearance/mouse_cursor"); +strings[2443] = str->add(strings[2443]); +strings[2444] = str->add(strings[2444]); +strings[7644] = str->add("appearance/transitions"); +strings[2526] = str->add(strings[2526]); +strings[2527] = str->add(strings[2527]); +strings[7645] = str->add("appearance/startup"); +strings[2502] = str->add(strings[2502]); +strings[2503] = str->add(strings[2503]); +strings[7646] = str->add("appearance/dropshadow"); +strings[1894] = str->add(strings[1894]); +strings[1895] = str->add(strings[1895]); +strings[2231] = str->add(strings[2231]); +strings[469] = str->add(strings[469]); +strings[2715] = str->add(strings[2715]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add("images/256"); +strings[7648] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/256"); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2231] = str->add(strings[2231]); +strings[2231] = str->add(strings[2231]); +strings[2231] = str->add(strings[2231]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[2890] = str->add(strings[2890]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7649] = str->add("applications/new_application"); +strings[2234] = str->add(strings[2234]); +strings[2235] = str->add(strings[2235]); +strings[7650] = str->add("applications/ibar_applications"); +strings[2237] = str->add(strings[2237]); +strings[2238] = str->add(strings[2238]); +strings[7651] = str->add("applications/restart_applications"); +strings[2240] = str->add(strings[2240]); +strings[2241] = str->add(strings[2241]); +strings[7652] = str->add("applications/startup_applications"); +strings[2243] = str->add(strings[2243]); +strings[2244] = str->add(strings[2244]); +strings[1670] = str->add(strings[1670]); +strings[469] = str->add(strings[469]); +strings[2679] = str->add(strings[2679]); +strings[2679] = str->add(strings[2679]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[1670] = str->add(strings[1670]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1670] = str->add(strings[1670]); +strings[1670] = str->add(strings[1670]); +strings[1670] = str->add(strings[1670]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7653] = str->add("images/389"); +strings[7654] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/389"); +strings[469] = str->add(strings[469]); +strings[7653] = str->add(strings[7653]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7655] = str->add("screen/virtual_desktops"); +strings[2297] = str->add(strings[2297]); +strings[2298] = str->add(strings[2298]); +strings[7656] = str->add("screen/screen_resolution"); +strings[2315] = str->add(strings[2315]); +strings[2316] = str->add(strings[2316]); +strings[7657] = str->add("screen/screen_lock"); +strings[2287] = str->add(strings[2287]); +strings[2288] = str->add(strings[2288]); +strings[7658] = str->add("screen/screen_saver"); +strings[2484] = str->add(strings[2484]); +strings[2485] = str->add(strings[2485]); +strings[7659] = str->add("screen/power_management"); +strings[2325] = str->add(strings[2325]); +strings[2326] = str->add(strings[2326]); +strings[2388] = str->add(strings[2388]); +strings[469] = str->add(strings[469]); +strings[2757] = str->add(strings[2757]); +strings[2757] = str->add(strings[2757]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2388] = str->add(strings[2388]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2388] = str->add(strings[2388]); +strings[2388] = str->add(strings[2388]); +strings[2388] = str->add(strings[2388]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7660] = str->add("images/391"); +strings[7661] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/391"); +strings[469] = str->add(strings[469]); +strings[7660] = str->add(strings[7660]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7662] = str->add("keyboard_and_mouse/key_bindings"); +strings[2391] = str->add(strings[2391]); +strings[2392] = str->add(strings[2392]); +strings[7663] = str->add("keyboard_and_mouse/mouse_bindings"); +strings[2431] = str->add(strings[2431]); +strings[2422] = str->add(strings[2422]); +strings[7664] = str->add("keyboard_and_mouse/mouse_acceleration"); +strings[2421] = str->add(strings[2421]); +strings[2422] = str->add(strings[2422]); +strings[2552] = str->add(strings[2552]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2552] = str->add(strings[2552]); +strings[2552] = str->add(strings[2552]); +strings[2552] = str->add(strings[2552]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7665] = str->add("windows/window_display"); +strings[2554] = str->add(strings[2554]); +strings[2250] = str->add(strings[2250]); +strings[7666] = str->add("windows/window_focus"); +strings[2566] = str->add(strings[2566]); +strings[2567] = str->add(strings[2567]); +strings[7667] = str->add("windows/window_manipulation"); +strings[197] = str->add(strings[197]); +strings[2921] = str->add(strings[2921]); +strings[7668] = str->add("windows/window_list"); +strings[2926] = str->add(strings[2926]); +strings[2269] = str->add(strings[2269]); +strings[2252] = str->add(strings[2252]); +strings[469] = str->add(strings[469]); +strings[2721] = str->add(strings[2721]); +strings[2721] = str->add(strings[2721]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2252] = str->add(strings[2252]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2252] = str->add(strings[2252]); +strings[2252] = str->add(strings[2252]); +strings[2252] = str->add(strings[2252]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7669] = str->add("images/341"); +strings[7670] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/341"); +strings[469] = str->add(strings[469]); +strings[7669] = str->add(strings[7669]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7671] = str->add("menus/favorites_menu"); +strings[2255] = str->add(strings[2255]); +strings[2256] = str->add(strings[2256]); +strings[7672] = str->add("menus/menu_settings"); +strings[2399] = str->add(strings[2399]); +strings[2400] = str->add(strings[2400]); +strings[7673] = str->add("menus/client_list_menu"); +strings[2268] = str->add(strings[2268]); +strings[2269] = str->add(strings[2269]); +strings[2368] = str->add(strings[2368]); +strings[469] = str->add(strings[469]); +strings[2689] = str->add(strings[2689]); +strings[2689] = str->add(strings[2689]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2368] = str->add(strings[2368]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2368] = str->add(strings[2368]); +strings[2368] = str->add(strings[2368]); +strings[2368] = str->add(strings[2368]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7674] = str->add("images/325"); +strings[7675] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/325"); +strings[469] = str->add(strings[469]); +strings[7674] = str->add(strings[7674]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7676] = str->add("language/language_settings"); +strings[2379] = str->add(strings[2379]); +strings[2369] = str->add(strings[2369]); +strings[7677] = str->add("language/input_method_settings"); +strings[2371] = str->add(strings[2371]); +strings[2372] = str->add(strings[2372]); +strings[1901] = str->add(strings[1901]); +strings[469] = str->add(strings[469]); +strings[2756] = str->add(strings[2756]); +strings[2756] = str->add(strings[2756]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[1901] = str->add(strings[1901]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1901] = str->add(strings[1901]); +strings[1901] = str->add(strings[1901]); +strings[1901] = str->add(strings[1901]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7678] = str->add("images/390"); +strings[7679] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/390"); +strings[469] = str->add(strings[469]); +strings[7678] = str->add(strings[7678]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7680] = str->add("advanced/dialogs"); +strings[2305] = str->add(strings[2305]); +strings[2306] = str->add(strings[2306]); +strings[7681] = str->add("advanced/interaction"); +strings[2997] = str->add(strings[2997]); +strings[2306] = str->add(strings[2306]); +strings[7682] = str->add("advanced/performance"); +strings[2461] = str->add(strings[2461]); +strings[2462] = str->add(strings[2462]); +strings[7683] = str->add("advanced/run_command"); +strings[2338] = str->add(strings[2338]); +strings[2339] = str->add(strings[2339]); +strings[7684] = str->add("advanced/search_directories"); +strings[2453] = str->add(strings[2453]); +strings[2454] = str->add(strings[2454]); +strings[7685] = str->add("advanced/profiles"); +strings[2474] = str->add(strings[2474]); +strings[2475] = str->add(strings[2475]); +strings[7686] = str->add("advanced/engine"); +strings[2931] = str->add(strings[2931]); +strings[2932] = str->add(strings[2932]); +strings[7687] = str->add("advanced/battery"); +strings[1903] = str->add(strings[1903]); +strings[1904] = str->add(strings[1904]); +strings[1] = str->add(strings[1]); +strings[469] = str->add(strings[469]); +strings[2759] = str->add(strings[2759]); +strings[2759] = str->add(strings[2759]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[1] = str->add(strings[1]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1] = str->add(strings[1]); +strings[1] = str->add(strings[1]); +strings[1] = str->add(strings[1]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7688] = str->add("images/393"); +strings[7689] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/393"); +strings[469] = str->add(strings[469]); +strings[7688] = str->add(strings[7688]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7690] = str->add("extensions/modules"); +strings[4] = str->add(strings[4]); +strings[5] = str->add(strings[5]); +strings[7691] = str->add("extensions/shelves"); +strings[2494] = str->add(strings[2494]); +strings[2495] = str->add(strings[2495]); +strings[7692] = str->add("extensions/pager"); +strings[1911] = str->add(strings[1911]); +strings[1912] = str->add(strings[1912]); +strings[7693] = str->add("extensions/gadman"); +strings[1925] = str->add(strings[1925]); +strings[1926] = str->add(strings[1926]); +strings[2408] = str->add(strings[2408]); +strings[469] = str->add(strings[469]); +strings[2693] = str->add(strings[2693]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2408] = str->add(strings[2408]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2408] = str->add(strings[2408]); +strings[2408] = str->add(strings[2408]); +strings[2408] = str->add(strings[2408]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[4965] = str->add(strings[4965]); +strings[469] = str->add(strings[469]); +strings[4967] = str->add(strings[4967]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7694] = str->add("fileman/fileman"); +strings[2408] = str->add(strings[2408]); +strings[2409] = str->add(strings[2409]); +strings[7695] = str->add("fileman/file_icons"); +strings[2411] = str->add(strings[2411]); +strings[2412] = str->add(strings[2412]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7696] = str->add("e,action,show,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7627]); +str->del(strings[7628]); +str->del(strings[1932]); +str->del(strings[7628]); +str->del(strings[7629]); +strings[7697] = str->add("program,start"); +strings[7698] = str->add("sb_hbar_show"); +strings[1932] = str->add(strings[1932]); +strings[7698] = str->add(strings[7698]); +str->del(strings[7696]); +str->del(strings[7596]); +strings[7699] = str->add("e,action,show,vbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7697]); +str->del(strings[7698]); +str->del(strings[1932]); +str->del(strings[7698]); +strings[7700] = str->add("program,start"); +strings[7701] = str->add("sb_vbar_show"); +strings[1932] = str->add(strings[1932]); +strings[7701] = str->add(strings[7701]); +str->del(strings[7699]); +str->del(strings[7596]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7702] = str->add("e,action,hide,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7700]); +str->del(strings[7701]); +str->del(strings[1932]); +str->del(strings[7701]); +str->del(strings[7629]); +str->del(strings[7629]); +strings[7703] = str->add("program,start"); +strings[7704] = str->add("sb_hbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7704] = str->add(strings[7704]); +str->del(strings[7702]); +str->del(strings[7596]); +strings[7629] = str->add(strings[7629]); +strings[64] = str->add(strings[64]); +strings[2630] = str->add(strings[2630]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[7705] = str->add("Items"); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[7607] = str->add(strings[7607]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[7705] = str->add(strings[7705]); +strings[7705] = str->add(strings[7705]); +strings[7705] = str->add(strings[7705]); +strings[64] = str->add(strings[64]); +strings[7609] = str->add(strings[7609]); +strings[64] = str->add(strings[64]); +strings[2614] = str->add(strings[2614]); +strings[7599] = str->add(strings[7599]); +strings[2945] = str->add(strings[2945]); +strings[2946] = str->add(strings[2946]); +strings[2945] = str->add(strings[2945]); +strings[2947] = str->add(strings[2947]); +strings[1841] = str->add(strings[1841]); +strings[2948] = str->add(strings[2948]); +strings[2949] = str->add(strings[2949]); +strings[64] = str->add(strings[64]); +strings[2062] = str->add(strings[2062]); +strings[64] = str->add(strings[64]); +strings[7611] = str->add(strings[7611]); +strings[64] = str->add(strings[64]); +strings[2184] = str->add(strings[2184]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[64] = str->add(strings[64]); +strings[2202] = str->add(strings[2202]); +strings[64] = str->add(strings[64]); +strings[2194] = str->add(strings[2194]); +strings[64] = str->add(strings[64]); +strings[7618] = str->add(strings[7618]); +strings[64] = str->add(strings[64]); +strings[2184] = str->add(strings[2184]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[64] = str->add(strings[64]); +strings[7620] = str->add(strings[7620]); +strings[64] = str->add(strings[64]); +strings[2200] = str->add(strings[2200]); +strings[7706] = str->add("e,action,hide,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7599]); +str->del(strings[1841]); +strings[7703] = str->add(strings[7703]); +strings[7704] = str->add(strings[7704]); +strings[1932] = str->add(strings[1932]); +strings[7704] = str->add(strings[7704]); +str->del(strings[7706]); +str->del(strings[7596]); +strings[7707] = str->add("e,action,hide,vbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7703]); +str->del(strings[7704]); +str->del(strings[1932]); +str->del(strings[7704]); +strings[7703] = str->add(strings[7703]); +strings[7708] = str->add("sb_vbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7708] = str->add(strings[7708]); +str->del(strings[7707]); +str->del(strings[7596]); +strings[2942] = str->add(strings[2942]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7709] = str->add("e,action,show,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7703]); +str->del(strings[7708]); +str->del(strings[1932]); +str->del(strings[7708]); +str->del(strings[7629]); +str->del(strings[7629]); +strings[7703] = str->add(strings[7703]); +strings[7710] = str->add("sb_hbar_show"); +strings[1932] = str->add(strings[1932]); +strings[7710] = str->add(strings[7710]); +str->del(strings[7709]); +str->del(strings[7596]); +strings[7711] = str->add("e,action,hide,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7703]); +str->del(strings[7710]); +str->del(strings[1932]); +str->del(strings[7710]); +strings[7703] = str->add(strings[7703]); +strings[7704] = str->add(strings[7704]); +strings[1932] = str->add(strings[1932]); +strings[7704] = str->add(strings[7704]); +str->del(strings[7711]); +str->del(strings[7596]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[64] = str->add(strings[64]); +strings[2613] = str->add(strings[2613]); +strings[2613] = str->add(strings[2613]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[7712] = str->add("e,action,click"); +strings[1591] = str->add(strings[1591]); +strings[1841] = str->add(strings[1841]); +strings[7713] = str->add("e,state,text"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7599]); +str->del(strings[1841]); +strings[7703] = str->add(strings[7703]); +strings[7714] = str->add("text_state"); +strings[1932] = str->add(strings[1932]); +strings[7714] = str->add(strings[7714]); +str->del(strings[7713]); +str->del(strings[7596]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1591] = str->add(strings[1591]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[361] = str->add(strings[361]); +strings[362] = str->add(strings[362]); +strings[361] = str->add(strings[361]); +str->del(strings[361]); +strings[362] = str->add(strings[362]); +str->del(strings[362]); +strings[2306] = str->add(strings[2306]); +strings[7715] = str->add("e,state,focused"); +strings[7596] = str->add(strings[7596]); +strings[7716] = str->add("e,state,selected"); +strings[7596] = str->add(strings[7596]); +strings[469] = str->add(strings[469]); +strings[2713] = str->add(strings[2713]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +strings[2536] = str->add(strings[2536]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[3096] = str->add(strings[3096]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2680] = str->add(strings[2680]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[2514] = str->add(strings[2514]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[3094] = str->add(strings[3094]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2681] = str->add(strings[2681]); +strings[2681] = str->add(strings[2681]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[215] = str->add(strings[215]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[215] = str->add(strings[215]); +strings[215] = str->add(strings[215]); +strings[215] = str->add(strings[215]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7717] = str->add("images/318"); +strings[7718] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/318"); +strings[469] = str->add(strings[469]); +strings[7717] = str->add(strings[7717]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2712] = str->add(strings[2712]); +strings[2712] = str->add(strings[2712]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2348] = str->add(strings[2348]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2348] = str->add(strings[2348]); +strings[2348] = str->add(strings[2348]); +strings[2348] = str->add(strings[2348]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7719] = str->add("images/329"); +strings[7720] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/329"); +strings[469] = str->add(strings[469]); +strings[7719] = str->add(strings[7719]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2682] = str->add(strings[2682]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2262] = str->add(strings[2262]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2262] = str->add(strings[2262]); +strings[2262] = str->add(strings[2262]); +strings[2262] = str->add(strings[2262]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[2896] = str->add(strings[2896]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2714] = str->add(strings[2714]); +strings[2714] = str->add(strings[2714]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2358] = str->add(strings[2358]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2358] = str->add(strings[2358]); +strings[2358] = str->add(strings[2358]); +strings[2358] = str->add(strings[2358]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7721] = str->add("images/316"); +strings[7722] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/316"); +strings[469] = str->add(strings[469]); +strings[7721] = str->add(strings[7721]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2699] = str->add(strings[2699]); +strings[2699] = str->add(strings[2699]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2443] = str->add(strings[2443]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2443] = str->add(strings[2443]); +strings[2443] = str->add(strings[2443]); +strings[2443] = str->add(strings[2443]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7723] = str->add("images/331"); +strings[7724] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/331"); +strings[469] = str->add(strings[469]); +strings[7723] = str->add(strings[7723]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2716] = str->add(strings[2716]); +strings[2716] = str->add(strings[2716]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2526] = str->add(strings[2526]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2526] = str->add(strings[2526]); +strings[2526] = str->add(strings[2526]); +strings[2526] = str->add(strings[2526]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7725] = str->add("images/332"); +strings[7726] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/332"); +strings[469] = str->add(strings[469]); +strings[7725] = str->add(strings[7725]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2718] = str->add(strings[2718]); +strings[2718] = str->add(strings[2718]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2615] = str->add(strings[2615]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[2502] = str->add(strings[2502]); +strings[64] = str->add(strings[64]); +strings[4296] = str->add(strings[4296]); +strings[64] = str->add(strings[64]); +strings[7631] = str->add(strings[7631]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[2502] = str->add(strings[2502]); +strings[2502] = str->add(strings[2502]); +strings[2502] = str->add(strings[2502]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[469] = str->add(strings[469]); +strings[7727] = str->add("images/337"); +strings[7728] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/337"); +strings[469] = str->add(strings[469]); +strings[7727] = str->add(strings[7727]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[1895] = str->add(strings[1895]); +strings[3083] = str->add(strings[3083]); +strings[1770] = str->add(strings[1770]); +strings[7729] = str->add("icon.png"); +strings[3083] = str->add(strings[3083]); +strings[1895] = str->add(strings[1895]); +strings[7730] = str->add("image"); +strings[61] = str->add(strings[61]); +strings[3083] = str->add(strings[3083]); +strings[7599] = str->add(strings[7599]); +strings[64] = str->add(strings[64]); +strings[2616] = str->add(strings[2616]); +strings[64] = str->add(strings[64]); +strings[7599] = str->add(strings[7599]); +strings[1894] = str->add(strings[1894]); +strings[64] = str->add(strings[64]); +strings[7647] = str->add(strings[7647]); +strings[64] = str->add(strings[64]); +strings[7633] = str->add(strings[7633]); +str->del(strings[64]); +strings[385] = str->add(strings[385]); +strings[1894] = str->add(strings[1894]); +strings[1894] = str->add(strings[1894]); +strings[1894] = str->add(strings[1894]); +strings[64] = str->add(strings[64]); +strings[2986] = str->add(strings[2986]); +strings[64] = str->add(strings[64]); +strings[2186] = str->add(strings[2186]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[1841] = str->add(strings[1841]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7629] = str->add(strings[7629]); +strings[7731] = str->add("e,action,show,hbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7703]); +str->del(strings[7704]); +str->del(strings[1932]); +str->del(strings[7704]); +str->del(strings[7629]); +strings[7703] = str->add(strings[7703]); +strings[7732] = str->add("sb_hbar_show"); +strings[1932] = str->add(strings[1932]); +strings[7732] = str->add(strings[7732]); +str->del(strings[7731]); +str->del(strings[7596]); +strings[7733] = str->add("e,action,show,vbar"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7703]); +str->del(strings[7732]); +str->del(strings[1932]); +str->del(strings[7732]); +strings[7703] = str->add(strings[7703]); +strings[7734] = str->add("sb_vbar_show"); +strings[1932] = str->add(strings[1932]); +strings[7734] = str->add(strings[7734]); +str->del(strings[7733]); +str->del(strings[7596]); +strings[7735] = str->add("e,state,unfocused"); +strings[7596] = str->add(strings[7596]); +str->del(strings[7595]); +str->del(strings[7596]); +str->del(strings[7597]); +str->del(strings[7596]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7703]); +str->del(strings[7704]); +str->del(strings[1932]); +str->del(strings[7704]); +str->del(strings[7629]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7703]); +str->del(strings[7714]); +str->del(strings[1932]); +str->del(strings[7714]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7715]); +str->del(strings[7596]); +strings[7703] = str->add(strings[7703]); +strings[7736] = str->add("go_active"); +str->del(strings[7716]); +str->del(strings[7596]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7599]); +str->del(strings[7599]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[1841]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7629]); +str->del(strings[7703]); +str->del(strings[7734]); +str->del(strings[1932]); +str->del(strings[7734]); +strings[7703] = str->add(strings[7703]); +strings[7737] = str->add("off"); +str->del(strings[7735]); +str->del(strings[7596]); +str->del(strings[7703]); +str->del(strings[7736]); +str->del(strings[7703]); +str->del(strings[7737]); +strings[7738] = str->add("e,action,mouse,move"); +strings[7739] = str->add("e"); +strings[7738] = str->add(strings[7738]); +strings[7739] = str->add(strings[7739]); +str->del(strings[7738]); +str->del(strings[7739]); +str->del(strings[7738]); +str->del(strings[7739]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2686]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6483]); +str->del(strings[6483]); +str->del(strings[6483]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2715]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[2231]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2691]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[2338]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2693]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6484]); +str->del(strings[6484]); +str->del(strings[6484]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2687]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[1619]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2682]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[2552]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2671]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[1712]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6488]); +str->del(strings[6488]); +str->del(strings[6488]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2634]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2690]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[1721]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2586]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[6482]); +str->del(strings[6482]); +str->del(strings[6482]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2871]); +str->del(strings[6483]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2890]); +str->del(strings[2231]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2892]); +str->del(strings[2338]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[4965]); +str->del(strings[469]); +str->del(strings[4967]); +str->del(strings[6484]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2894]); +str->del(strings[1619]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2896]); +str->del(strings[2552]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2898]); +str->del(strings[469]); +str->del(strings[2900]); +str->del(strings[1712]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[6488]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2904]); +str->del(strings[1721]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2913]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[6482]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[2224]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2582]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2685]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[4]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1926]); +str->del(strings[3083]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[1925]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2711]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[2494]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2680]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[2514]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2583]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[64]); +str->del(strings[2584]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2713]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[2536]); +str->del(strings[64]); +str->del(strings[2585]); +strings[1933] = str->add(strings[1933]); +str->del(strings[1933]); +str->del(strings[1842]); +str->del(strings[1842]); +str->del(strings[64]); +str->del(strings[2581]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[2902]); +str->del(strings[2224]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2915]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3089]); +str->del(strings[4]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[1926]); +str->del(strings[1552]); +str->del(strings[1925]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3092]); +str->del(strings[2494]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3094]); +str->del(strings[2514]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[2886]); +str->del(strings[64]); +str->del(strings[2888]); +str->del(strings[469]); +str->del(strings[3096]); +str->del(strings[2536]); +str->del(strings[385]); +str->del(strings[64]); +str->del(strings[1949]); +str->del(strings[64]); +str->del(strings[1880]); +str->del(strings[64]); +str->del(strings[1876]); +str->del(strings[379]); +str->del(strings[64]); +str->del(strings[1874]); +str->del(strings[361]); +str->del(strings[362]); +str->del(strings[469]); +str->del(strings[2686]); +str->del(strings[6483]); +str->del(strings[469]); +str->del(strings[2715]); +str->del(strings[2231]); +str->del(strings[469]); +str->del(strings[2691]); +str->del(strings[2338]); +str->del(strings[469]); +str->del(strings[2693]); +str->del(strings[6484]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[6485]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[6486]); +str->del(strings[469]); +str->del(strings[2687]); +str->del(strings[1619]); +str->del(strings[469]); +str->del(strings[2682]); +str->del(strings[2552]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[6487]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2672]); +str->del(strings[1713]); +str->del(strings[469]); +str->del(strings[2673]); +str->del(strings[1714]); +str->del(strings[469]); +str->del(strings[2671]); +str->del(strings[1712]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[6488]); +str->del(strings[469]); +str->del(strings[2708]); +str->del(strings[6640]); +str->del(strings[469]); +str->del(strings[2677]); +str->del(strings[1726]); +str->del(strings[469]); +str->del(strings[2678]); +str->del(strings[6641]); +str->del(strings[469]); +str->del(strings[2676]); +str->del(strings[1724]); +str->del(strings[469]); +str->del(strings[2675]); +str->del(strings[1722]); +str->del(strings[469]); +str->del(strings[2674]); +str->del(strings[6642]); +str->del(strings[469]); +str->del(strings[2690]); +str->del(strings[1721]); +str->del(strings[6482]); +str->del(strings[469]); +str->del(strings[2688]); +str->del(strings[2224]); +str->del(strings[469]); +str->del(strings[2685]); +str->del(strings[4]); +str->del(strings[1926]); +str->del(strings[3083]); +str->del(strings[1925]); +str->del(strings[469]); +str->del(strings[2711]); +str->del(strings[2494]); +str->del(strings[469]); +str->del(strings[2680]); +str->del(strings[2514]); +str->del(strings[469]); +str->del(strings[2713]); +str->del(strings[2536]); +strings[862] = str->add(strings[862]); +strings[64] = str->add(strings[64]); +strings[2577] = str->add(strings[2577]); +strings[2577] = str->add(strings[2577]); +strings[64] = str->add(strings[64]); +strings[64] = str->add(strings[64]); +strings[7740] = str->add("load"); +strings[306] = str->add(strings[306]); +strings[7741] = str->add("resize"); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[306] = str->add(strings[306]); +strings[306] = str->add(strings[306]); +strings[1842] = str->add(strings[1842]); +str->del(strings[306]); +strings[64] = str->add(strings[64]); +strings[1865] = str->add(strings[1865]); +strings[64] = str->add(strings[64]); +strings[1872] = str->add(strings[1872]); +strings[7742] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/4"); +strings[64] = str->add(strings[64]); +strings[1872] = str->add(strings[1872]); +strings[306] = str->add(strings[306]); +str->del(strings[306]); +strings[64] = str->add(strings[64]); +strings[2276] = str->add(strings[2276]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[2292] = str->add(strings[2292]); +strings[306] = str->add(strings[306]); +str->del(strings[306]); +strings[306] = str->add(strings[306]); +str->del(strings[1842]); +strings[306] = str->add(strings[306]); +strings[64] = str->add(strings[64]); +strings[1880] = str->add(strings[1880]); +strings[64] = str->add(strings[64]); +strings[3279] = str->add(strings[3279]); +strings[64] = str->add(strings[64]); +strings[2310] = str->add(strings[2310]); +strings[64] = str->add(strings[64]); +strings[1876] = str->add(strings[1876]); +str->del(strings[64]); +strings[379] = str->add(strings[379]); +strings[306] = str->add(strings[306]); +strings[306] = str->add(strings[306]); +strings[306] = str->add(strings[306]); +strings[64] = str->add(strings[64]); +strings[1874] = str->add(strings[1874]); +strings[64] = str->add(strings[64]); +strings[1878] = str->add(strings[1878]); +strings[7743] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/7"); +strings[64] = str->add(strings[64]); +strings[1878] = str->add(strings[1878]); +strings[2085] = str->add(strings[2085]); +strings[2085] = str->add(strings[2085]); +strings[7741] = str->add(strings[7741]); +strings[1841] = str->add(strings[1841]); +strings[7741] = str->add(strings[7741]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[7740] = str->add(strings[7740]); +strings[1841] = str->add(strings[1841]); +str->del(strings[306]); +strings[306] = str->add(strings[306]); +str->del(strings[306]); +strings[306] = str->add(strings[306]); +str->del(strings[306]); +strings[306] = str->add(strings[306]); +str->del(strings[306]); +strings[306] = str->add(strings[306]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[7741] = str->add(strings[7741]); +str->del(strings[190]); +str->del(strings[305]); +str->del(strings[306]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[305] = str->add(strings[305]); +strings[306] = str->add(strings[306]); +strings[193] = str->add(strings[193]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7744] = str->add("e,action,hide,vbar"); +strings[7745] = str->add("e"); +str->del(strings[7741]); +strings[7746] = str->add("program,start"); +strings[7747] = str->add("sb_vbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7747] = str->add(strings[7747]); +str->del(strings[7744]); +str->del(strings[7745]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +str->del(strings[1892]); +strings[1892] = str->add(strings[1892]); +str->del(strings[1892]); +strings[1892] = str->add(strings[1892]); +str->del(strings[2231]); +strings[2231] = str->add(strings[2231]); +str->del(strings[2231]); +strings[2231] = str->add(strings[2231]); +str->del(strings[1670]); +strings[1670] = str->add(strings[1670]); +str->del(strings[1670]); +strings[1670] = str->add(strings[1670]); +str->del(strings[2388]); +strings[2388] = str->add(strings[2388]); +str->del(strings[2388]); +strings[2388] = str->add(strings[2388]); +str->del(strings[2552]); +strings[2552] = str->add(strings[2552]); +str->del(strings[2552]); +strings[2552] = str->add(strings[2552]); +str->del(strings[2252]); +strings[2252] = str->add(strings[2252]); +str->del(strings[2252]); +strings[2252] = str->add(strings[2252]); +str->del(strings[2368]); +strings[2368] = str->add(strings[2368]); +str->del(strings[2368]); +strings[2368] = str->add(strings[2368]); +str->del(strings[1901]); +strings[1901] = str->add(strings[1901]); +str->del(strings[1901]); +strings[1901] = str->add(strings[1901]); +str->del(strings[1]); +strings[1] = str->add(strings[1]); +str->del(strings[1]); +strings[1] = str->add(strings[1]); +str->del(strings[2408]); +strings[2408] = str->add(strings[2408]); +str->del(strings[2408]); +strings[2408] = str->add(strings[2408]); +strings[7741] = str->add(strings[7741]); +strings[7748] = str->add("e,action,hide,hbar"); +strings[7749] = str->add("e"); +str->del(strings[7741]); +strings[7746] = str->add(strings[7746]); +strings[7750] = str->add("sb_hbar_hide"); +strings[1932] = str->add(strings[1932]); +strings[7750] = str->add(strings[7750]); +str->del(strings[7748]); +str->del(strings[7749]); +strings[7751] = str->add("e,action,hide,vbar"); +strings[7752] = str->add("e"); +str->del(strings[7746]); +str->del(strings[7750]); +str->del(strings[1932]); +str->del(strings[7750]); +strings[7746] = str->add(strings[7746]); +strings[7747] = str->add(strings[7747]); +strings[1932] = str->add(strings[1932]); +strings[7747] = str->add(strings[7747]); +str->del(strings[7751]); +str->del(strings[7752]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[7741] = str->add(strings[7741]); +strings[64] = str->add(strings[64]); +strings[2198] = str->add(strings[2198]); +strings[7753] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/239"); +strings[64] = str->add(strings[64]); +strings[2198] = str->add(strings[2198]); +strings[1591] = str->add(strings[1591]); +strings[1591] = str->add(strings[1591]); +strings[64] = str->add(strings[64]); +strings[2190] = str->add(strings[2190]); +strings[7754] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/240"); +strings[64] = str->add(strings[64]); +strings[2190] = str->add(strings[2190]); +strings[64] = str->add(strings[64]); +strings[2192] = str->add(strings[2192]); +strings[7755] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/241"); +strings[64] = str->add(strings[64]); +strings[2192] = str->add(strings[2192]); +str->del(strings[2536]); +strings[2536] = str->add(strings[2536]); +str->del(strings[2536]); +strings[2536] = str->add(strings[2536]); +str->del(strings[2514]); +strings[2514] = str->add(strings[2514]); +str->del(strings[2514]); +strings[2514] = str->add(strings[2514]); +str->del(strings[215]); +strings[215] = str->add(strings[215]); +str->del(strings[215]); +strings[215] = str->add(strings[215]); +str->del(strings[2348]); +strings[2348] = str->add(strings[2348]); +str->del(strings[2348]); +strings[2348] = str->add(strings[2348]); +str->del(strings[2262]); +strings[2262] = str->add(strings[2262]); +str->del(strings[2262]); +strings[2262] = str->add(strings[2262]); +str->del(strings[2358]); +strings[2358] = str->add(strings[2358]); +str->del(strings[2358]); +strings[2358] = str->add(strings[2358]); +str->del(strings[2443]); +strings[2443] = str->add(strings[2443]); +str->del(strings[2443]); +strings[2443] = str->add(strings[2443]); +str->del(strings[2526]); +strings[2526] = str->add(strings[2526]); +str->del(strings[2526]); +strings[2526] = str->add(strings[2526]); +str->del(strings[2502]); +strings[2502] = str->add(strings[2502]); +str->del(strings[2502]); +strings[2502] = str->add(strings[2502]); +strings[1895] = str->add(strings[1895]); +strings[1552] = str->add(strings[1552]); +strings[7756] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/e-module-dropshadow.edj//://images/0"); +strings[1895] = str->add(strings[1895]); +strings[1552] = str->add(strings[1552]); +str->del(strings[1894]); +strings[1894] = str->add(strings[1894]); +str->del(strings[1894]); +strings[1894] = str->add(strings[1894]); +strings[7757] = str->add("font"); +strings[7758] = str->add("font_fallbacks"); +strings[7759] = str->add("font_size"); +strings[7760] = str->add("font_source"); +strings[7761] = str->add("color"); +strings[7762] = str->add("underline_color"); +strings[7763] = str->add("underline2_color"); +strings[7764] = str->add("outline_color"); +strings[7765] = str->add("shadow_color"); +strings[7766] = str->add("glow_color"); +strings[7767] = str->add("glow2_color"); +strings[7768] = str->add("backing_color"); +strings[7769] = str->add("strikethrough_color"); +strings[7770] = str->add("align"); +strings[7771] = str->add("valign"); +strings[7772] = str->add("wrap"); +strings[7773] = str->add("left_margin"); +strings[7774] = str->add("right_margin"); +strings[7775] = str->add("underline"); +strings[7776] = str->add("strikethrough"); +strings[7777] = str->add("backing"); +strings[7778] = str->add("style"); +strings[7779] = str->add("tabstops"); +strings[7770] = str->add(strings[7770]); +strings[7780] = str->add("center"); +str->del(strings[7770]); +str->del(strings[7780]); +strings[7761] = str->add(strings[7761]); +strings[7781] = str->add("#000"); +str->del(strings[7761]); +str->del(strings[7781]); +strings[7778] = str->add(strings[7778]); +strings[7782] = str->add("shadow"); +str->del(strings[7778]); +str->del(strings[7782]); +strings[7765] = str->add(strings[7765]); +strings[7783] = str->add("#ffffff80"); +str->del(strings[7765]); +str->del(strings[7783]); +strings[7772] = str->add(strings[7772]); +strings[7784] = str->add("word"); +str->del(strings[7772]); +str->del(strings[7784]); +strings[7760] = str->add(strings[7760]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7760]); +str->del(strings[469]); +strings[7759] = str->add(strings[7759]); +strings[7785] = str->add("10.000000"); +str->del(strings[7759]); +str->del(strings[7785]); +strings[7757] = str->add(strings[7757]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7757]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7778] = str->add(strings[7778]); +strings[7786] = str->add("glow"); +str->del(strings[7778]); +str->del(strings[7786]); +strings[7761] = str->add(strings[7761]); +strings[7787] = str->add("#fff"); +str->del(strings[7761]); +str->del(strings[7787]); +strings[7767] = str->add(strings[7767]); +strings[7788] = str->add("#fe87"); +str->del(strings[7767]); +str->del(strings[7788]); +strings[7766] = str->add(strings[7766]); +strings[7789] = str->add("#fa14"); +str->del(strings[7766]); +str->del(strings[7789]); +strings[7757] = str->add(strings[7757]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7757]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7778] = str->add(strings[7778]); +strings[7790] = str->add("glow"); +str->del(strings[7778]); +str->del(strings[7790]); +strings[7761] = str->add(strings[7761]); +strings[7791] = str->add("#fff"); +str->del(strings[7761]); +str->del(strings[7791]); +strings[7767] = str->add(strings[7767]); +strings[7792] = str->add("#fe87"); +str->del(strings[7767]); +str->del(strings[7792]); +strings[7766] = str->add(strings[7766]); +strings[7793] = str->add("#fa14"); +str->del(strings[7766]); +str->del(strings[7793]); +strings[7757] = str->add(strings[7757]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7757]); +str->del(strings[471]); +str->del(strings[7757]); +str->del(strings[7758]); +str->del(strings[7759]); +str->del(strings[7760]); +str->del(strings[7761]); +str->del(strings[7762]); +str->del(strings[7763]); +str->del(strings[7764]); +str->del(strings[7765]); +str->del(strings[7766]); +str->del(strings[7767]); +str->del(strings[7768]); +str->del(strings[7769]); +str->del(strings[7770]); +str->del(strings[7771]); +str->del(strings[7772]); +str->del(strings[7773]); +str->del(strings[7774]); +str->del(strings[7775]); +str->del(strings[7776]); +str->del(strings[7777]); +str->del(strings[7778]); +str->del(strings[7779]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[7794] = str->add("font"); +strings[7795] = str->add("font_fallbacks"); +strings[7796] = str->add("font_size"); +strings[7797] = str->add("font_source"); +strings[7798] = str->add("color"); +strings[7799] = str->add("underline_color"); +strings[7800] = str->add("underline2_color"); +strings[7801] = str->add("outline_color"); +strings[7802] = str->add("shadow_color"); +strings[7803] = str->add("glow_color"); +strings[7804] = str->add("glow2_color"); +strings[7805] = str->add("backing_color"); +strings[7806] = str->add("strikethrough_color"); +strings[7807] = str->add("align"); +strings[7808] = str->add("valign"); +strings[7809] = str->add("wrap"); +strings[7810] = str->add("left_margin"); +strings[7811] = str->add("right_margin"); +strings[7812] = str->add("underline"); +strings[7813] = str->add("strikethrough"); +strings[7814] = str->add("backing"); +strings[7815] = str->add("style"); +strings[7816] = str->add("tabstops"); +strings[7807] = str->add(strings[7807]); +strings[7817] = str->add("center"); +str->del(strings[7807]); +str->del(strings[7817]); +strings[7798] = str->add(strings[7798]); +strings[7818] = str->add("#000"); +str->del(strings[7798]); +str->del(strings[7818]); +strings[7815] = str->add(strings[7815]); +strings[7819] = str->add("shadow"); +str->del(strings[7815]); +str->del(strings[7819]); +strings[7802] = str->add(strings[7802]); +strings[7820] = str->add("#ffffff80"); +str->del(strings[7802]); +str->del(strings[7820]); +strings[7809] = str->add(strings[7809]); +strings[7821] = str->add("word"); +str->del(strings[7809]); +str->del(strings[7821]); +strings[7797] = str->add(strings[7797]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7797]); +str->del(strings[469]); +strings[7796] = str->add(strings[7796]); +strings[7822] = str->add("10.000000"); +str->del(strings[7796]); +str->del(strings[7822]); +strings[7794] = str->add(strings[7794]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7794]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7815] = str->add(strings[7815]); +strings[7823] = str->add("soft_shadow"); +str->del(strings[7815]); +str->del(strings[7823]); +strings[7798] = str->add(strings[7798]); +strings[7824] = str->add("#fff"); +str->del(strings[7798]); +str->del(strings[7824]); +strings[7802] = str->add(strings[7802]); +strings[7825] = str->add("#00000020"); +str->del(strings[7802]); +str->del(strings[7825]); +strings[7796] = str->add(strings[7796]); +strings[7826] = str->add("12.000000"); +str->del(strings[7796]); +str->del(strings[7826]); +strings[7794] = str->add(strings[7794]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7794]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[7794]); +str->del(strings[7795]); +str->del(strings[7796]); +str->del(strings[7797]); +str->del(strings[7798]); +str->del(strings[7799]); +str->del(strings[7800]); +str->del(strings[7801]); +str->del(strings[7802]); +str->del(strings[7803]); +str->del(strings[7804]); +str->del(strings[7805]); +str->del(strings[7806]); +str->del(strings[7807]); +str->del(strings[7808]); +str->del(strings[7809]); +str->del(strings[7810]); +str->del(strings[7811]); +str->del(strings[7812]); +str->del(strings[7813]); +str->del(strings[7814]); +str->del(strings[7815]); +str->del(strings[7816]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[7740]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[1841]); +str->del(strings[7741]); +str->del(strings[7740]); +str->del(strings[1841]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7746]); +str->del(strings[7747]); +str->del(strings[1932]); +str->del(strings[7747]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7746]); +str->del(strings[7747]); +str->del(strings[1932]); +str->del(strings[7747]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +str->del(strings[7741]); +strings[64] = str->add(strings[64]); +strings[2595] = str->add(strings[2595]); +strings[7827] = str->add("load"); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[7827] = str->add(strings[7827]); +strings[1841] = str->add(strings[1841]); +strings[64] = str->add(strings[64]); +strings[4503] = str->add(strings[4503]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[64] = str->add(strings[64]); +strings[3259] = str->add(strings[3259]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[7828] = str->add("resize"); +strings[1933] = str->add(strings[1933]); +str->del(strings[7827]); +str->del(strings[1841]); +str->del(strings[1933]); +str->del(strings[469]); +str->del(strings[2688]); +strings[469] = str->add(strings[469]); +strings[2688] = str->add(strings[2688]); +strings[7827] = str->add(strings[7827]); +strings[1841] = str->add(strings[1841]); +strings[469] = str->add(strings[469]); +strings[2902] = str->add(strings[2902]); +strings[7828] = str->add(strings[7828]); +strings[7829] = str->add("e,action,mouse,move"); +strings[7830] = str->add("e"); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[1737] = str->add(strings[1737]); +strings[1853] = str->add(strings[1853]); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[7831] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +strings[7829] = str->add(strings[7829]); +strings[7830] = str->add(strings[7830]); +strings[7831] = str->add(strings[7831]); +strings[1853] = str->add(strings[1853]); +str->del(strings[7827]); +str->del(strings[1841]); +str->del(strings[7828]); +str->del(strings[7827]); +str->del(strings[1841]); +str->del(strings[7828]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[1737]); +str->del(strings[1853]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7831]); +str->del(strings[1853]); +str->del(strings[7829]); +str->del(strings[7830]); +str->del(strings[7831]); +str->del(strings[1853]); +strings[7832] = str->add("e,action,mouse,move"); +strings[7833] = str->add("e"); +strings[7834] = str->add("mouse,move"); +strings[1853] = str->add(strings[1853]); +str->del(strings[7832]); +str->del(strings[7833]); +str->del(strings[7834]); +str->del(strings[1853]); +str->del(strings[190]); +str->del(strings[305]); +str->del(strings[306]); +str->del(strings[193]); +strings[190] = str->add(strings[190]); +strings[305] = str->add(strings[305]); +strings[306] = str->add(strings[306]); +strings[193] = str->add(strings[193]); +strings[7835] = str->add("font"); +strings[7836] = str->add("font_fallbacks"); +strings[7837] = str->add("font_size"); +strings[7838] = str->add("font_source"); +strings[7839] = str->add("color"); +strings[7840] = str->add("underline_color"); +strings[7841] = str->add("underline2_color"); +strings[7842] = str->add("outline_color"); +strings[7843] = str->add("shadow_color"); +strings[7844] = str->add("glow_color"); +strings[7845] = str->add("glow2_color"); +strings[7846] = str->add("backing_color"); +strings[7847] = str->add("strikethrough_color"); +strings[7848] = str->add("align"); +strings[7849] = str->add("valign"); +strings[7850] = str->add("wrap"); +strings[7851] = str->add("left_margin"); +strings[7852] = str->add("right_margin"); +strings[7853] = str->add("underline"); +strings[7854] = str->add("strikethrough"); +strings[7855] = str->add("backing"); +strings[7856] = str->add("style"); +strings[7857] = str->add("tabstops"); +strings[7848] = str->add(strings[7848]); +strings[7858] = str->add("center"); +str->del(strings[7848]); +str->del(strings[7858]); +strings[7839] = str->add(strings[7839]); +strings[7859] = str->add("#000"); +str->del(strings[7839]); +str->del(strings[7859]); +strings[7856] = str->add(strings[7856]); +strings[7860] = str->add("shadow"); +str->del(strings[7856]); +str->del(strings[7860]); +strings[7843] = str->add(strings[7843]); +strings[7861] = str->add("#ffffff80"); +str->del(strings[7843]); +str->del(strings[7861]); +strings[7850] = str->add(strings[7850]); +strings[7862] = str->add("word"); +str->del(strings[7850]); +str->del(strings[7862]); +strings[7838] = str->add(strings[7838]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7838]); +str->del(strings[469]); +strings[7837] = str->add(strings[7837]); +strings[7863] = str->add("10.000000"); +str->del(strings[7837]); +str->del(strings[7863]); +strings[7835] = str->add(strings[7835]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7835]); +str->del(strings[470]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7856] = str->add(strings[7856]); +strings[7864] = str->add("glow"); +str->del(strings[7856]); +str->del(strings[7864]); +strings[7839] = str->add(strings[7839]); +strings[7865] = str->add("#fff"); +str->del(strings[7839]); +str->del(strings[7865]); +strings[7845] = str->add(strings[7845]); +strings[7866] = str->add("#fe87"); +str->del(strings[7845]); +str->del(strings[7866]); +strings[7844] = str->add(strings[7844]); +strings[7867] = str->add("#fa14"); +str->del(strings[7844]); +str->del(strings[7867]); +strings[7835] = str->add(strings[7835]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7835]); +str->del(strings[471]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7856] = str->add(strings[7856]); +strings[7868] = str->add("glow"); +str->del(strings[7856]); +str->del(strings[7868]); +strings[7839] = str->add(strings[7839]); +strings[7869] = str->add("#fff"); +str->del(strings[7839]); +str->del(strings[7869]); +strings[7845] = str->add(strings[7845]); +strings[7870] = str->add("#fe87"); +str->del(strings[7845]); +str->del(strings[7870]); +strings[7844] = str->add(strings[7844]); +strings[7871] = str->add("#fa14"); +str->del(strings[7844]); +str->del(strings[7871]); +strings[7835] = str->add(strings[7835]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7835]); +str->del(strings[471]); +str->del(strings[7835]); +str->del(strings[7836]); +str->del(strings[7837]); +str->del(strings[7838]); +str->del(strings[7839]); +str->del(strings[7840]); +str->del(strings[7841]); +str->del(strings[7842]); +str->del(strings[7843]); +str->del(strings[7844]); +str->del(strings[7845]); +str->del(strings[7846]); +str->del(strings[7847]); +str->del(strings[7848]); +str->del(strings[7849]); +str->del(strings[7850]); +str->del(strings[7851]); +str->del(strings[7852]); +str->del(strings[7853]); +str->del(strings[7854]); +str->del(strings[7855]); +str->del(strings[7856]); +str->del(strings[7857]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[471]); +str->del(strings[469]); +strings[7872] = str->add("font"); +strings[7873] = str->add("font_fallbacks"); +strings[7874] = str->add("font_size"); +strings[7875] = str->add("font_source"); +strings[7876] = str->add("color"); +strings[7877] = str->add("underline_color"); +strings[7878] = str->add("underline2_color"); +strings[7879] = str->add("outline_color"); +strings[7880] = str->add("shadow_color"); +strings[7881] = str->add("glow_color"); +strings[7882] = str->add("glow2_color"); +strings[7883] = str->add("backing_color"); +strings[7884] = str->add("strikethrough_color"); +strings[7885] = str->add("align"); +strings[7886] = str->add("valign"); +strings[7887] = str->add("wrap"); +strings[7888] = str->add("left_margin"); +strings[7889] = str->add("right_margin"); +strings[7890] = str->add("underline"); +strings[7891] = str->add("strikethrough"); +strings[7892] = str->add("backing"); +strings[7893] = str->add("style"); +strings[7894] = str->add("tabstops"); +strings[7885] = str->add(strings[7885]); +strings[7895] = str->add("center"); +str->del(strings[7885]); +str->del(strings[7895]); +strings[7876] = str->add(strings[7876]); +strings[7896] = str->add("#000"); +str->del(strings[7876]); +str->del(strings[7896]); +strings[7893] = str->add(strings[7893]); +strings[7897] = str->add("shadow"); +str->del(strings[7893]); +str->del(strings[7897]); +strings[7880] = str->add(strings[7880]); +strings[7898] = str->add("#ffffff80"); +str->del(strings[7880]); +str->del(strings[7898]); +strings[7887] = str->add(strings[7887]); +strings[7899] = str->add("word"); +str->del(strings[7887]); +str->del(strings[7899]); +strings[7875] = str->add(strings[7875]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7875]); +str->del(strings[469]); +strings[7874] = str->add(strings[7874]); +strings[7900] = str->add("10.000000"); +str->del(strings[7874]); +str->del(strings[7900]); +strings[7872] = str->add(strings[7872]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7872]); +str->del(strings[470]); +strings[470] = str->add(strings[470]); +strings[469] = str->add(strings[469]); +strings[7893] = str->add(strings[7893]); +strings[7901] = str->add("soft_shadow"); +str->del(strings[7893]); +str->del(strings[7901]); +strings[7876] = str->add(strings[7876]); +strings[7902] = str->add("#fff"); +str->del(strings[7876]); +str->del(strings[7902]); +strings[7880] = str->add(strings[7880]); +strings[7903] = str->add("#00000020"); +str->del(strings[7880]); +str->del(strings[7903]); +strings[7874] = str->add(strings[7874]); +strings[7904] = str->add("12.000000"); +str->del(strings[7874]); +str->del(strings[7904]); +strings[7872] = str->add(strings[7872]); +strings[471] = str->add(strings[471]); +str->del(strings[470]); +strings[471] = str->add(strings[471]); +str->del(strings[7872]); +str->del(strings[471]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +strings[382] = str->add(strings[382]); +str->del(strings[471]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[382]); +str->del(strings[470]); +str->del(strings[469]); +str->del(strings[382]); +str->del(strings[7872]); +str->del(strings[7873]); +str->del(strings[7874]); +str->del(strings[7875]); +str->del(strings[7876]); +str->del(strings[7877]); +str->del(strings[7878]); +str->del(strings[7879]); +str->del(strings[7880]); +str->del(strings[7881]); +str->del(strings[7882]); +str->del(strings[7883]); +str->del(strings[7884]); +str->del(strings[7885]); +str->del(strings[7886]); +str->del(strings[7887]); +str->del(strings[7888]); +str->del(strings[7889]); +str->del(strings[7890]); +str->del(strings[7891]); +str->del(strings[7892]); +str->del(strings[7893]); +str->del(strings[7894]); +strings[7905] = str->add("font"); +strings[7906] = str->add("font_fallbacks"); +strings[7907] = str->add("font_size"); +strings[7908] = str->add("font_source"); +strings[7909] = str->add("color"); +strings[7910] = str->add("underline_color"); +strings[7911] = str->add("underline2_color"); +strings[7912] = str->add("outline_color"); +strings[7913] = str->add("shadow_color"); +strings[7914] = str->add("glow_color"); +strings[7915] = str->add("glow2_color"); +strings[7916] = str->add("backing_color"); +strings[7917] = str->add("strikethrough_color"); +strings[7918] = str->add("align"); +strings[7919] = str->add("valign"); +strings[7920] = str->add("wrap"); +strings[7921] = str->add("left_margin"); +strings[7922] = str->add("right_margin"); +strings[7923] = str->add("underline"); +strings[7924] = str->add("strikethrough"); +strings[7925] = str->add("backing"); +strings[7926] = str->add("style"); +strings[7927] = str->add("tabstops"); +strings[7918] = str->add(strings[7918]); +strings[7928] = str->add("center"); +str->del(strings[7918]); +str->del(strings[7928]); +strings[7909] = str->add(strings[7909]); +strings[7929] = str->add("#000"); +str->del(strings[7909]); +str->del(strings[7929]); +strings[7926] = str->add(strings[7926]); +strings[7930] = str->add("shadow"); +str->del(strings[7926]); +str->del(strings[7930]); +strings[7913] = str->add(strings[7913]); +strings[7931] = str->add("#ffffff80"); +str->del(strings[7913]); +str->del(strings[7931]); +strings[7920] = str->add(strings[7920]); +strings[7932] = str->add("word"); +str->del(strings[7920]); +str->del(strings[7932]); +strings[7908] = str->add(strings[7908]); +strings[469] = str->add(strings[469]); +strings[469] = str->add(strings[469]); +str->del(strings[7908]); +str->del(strings[469]); +strings[7907] = str->add(strings[7907]); +strings[7933] = str->add("10.000000"); +str->del(strings[7907]); +str->del(strings[7933]); +strings[7905] = str->add(strings[7905]); +strings[470] = str->add(strings[470]); +strings[470] = str->add(strings[470]); +str->del(strings[7905]); -- cgit v1.1